0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【DevSecOps対策】0から始めるSnyk活用

Posted at

Snykとは?

Snykとは、オープンソースソフトウェアや依存関係、コンテナ、インフラストラクチャコードのセキュリティ脆弱性を検出し、修正するための開発者向けのセキュリティプラットフォームです。Snykは、開発の初期段階からセキュリティを統合することで、セキュリティリスクを低減し、迅速な修正を可能にします。

Snyk製のツールには以下の種類があります:

  • Snyk Code: カスタムコードの脆弱性をリアルタイムで検知して修正
  • Snyk Open Source: オープンソースとその依存関係にある脆弱性の検知と修正
  • Snyk Container: コンテナや Kubernetes アプリケーションの脆弱性の検出と修正
  • Snyk IaC: クラウドの設定ミスを修正
  • Snyk AppRisk: ビジネス全体のリスクを軽減

アカウント作成&初期設定セットアップ

  • SnykのURLに飛んでアカウント作成をします

  • 現時点では、Github, BitBucket, Google, AzureAD, Docker IDに対応しています。今回はGithubでログインします。

  • Where is the code you want to scan? と聞かれるので、どのソースリポジトリを対象にするかを選択することができます。
    snyk-01-(0).png

  • Github かBitbucket CloudかSynk CLIしか連携できないように見えますが、View all Integrationsをクリックすれば、GitlabやAzureReposなど色々な選択肢が出てきます。
    ※現時点ではCodecommitは対応していないようです。

  • Snykのスキャン対象に、PublicリポジトリのみかPrivateリポジトリも含めるかを選択できます。

  • 各機能を有効化することができます。どの機能も便利なので、とりあえず、すべて有効のままにしておくでOKです。

    • Pull Request Checks: プルリクエストに新しい問題や脆弱性がないかテストする
    • New Fix Pull Requests: 新しく発見されたオープンソースの問題や脆弱性に対するプルリクエストを自動的に作成します。
    • Dependency Upgrade Pull Requests: 自動依存性アップグレードのプルリクエストでパッケージを最新の状態に保つ
    • Snyk Code: ソースコードの問題や脆弱性を分析する
  • GithubからSynkを信用するか聞かれるので、Authorize snykボタンをクリックします

  • Githubのどのリポジトリを含めるか聞かれるため、Snykスキャンを対象にするリポジトリを選択し、Import and scanをクリックします

その他の連携

左ペインの Integrations から、連携したいサービスを選び設定します

snyk-01- (19).png

  • 基本的にはどのサービスも進む上で、手順が記載されているので、従うだけで迷わずに連携することが可能だと思います。
  • 一部 Upgrade plan to enableと記載されていますが、Snykの有料プランじゃないと使えないっぽいです。
  • リモートリポジトリだけではなく、コンテナイメージのリポジトリや、CI/CDサービス、IDE、Slack等の通知サービスにも対応しています。

各Snykの機能の有効化

WEB UIの左ペインのSettingsから、各機能を有効化されていない場合有効化にチェックを入れます
snyk-01- (18).png

  • Snyk Open Source: Languageペインから有効化し、よく利用するプログラミング言語の設定に飛び、利用するパッケージマネジャーにチェックを入れます
  • Snyk Code:Snyk Codeペインから有効化します
  • Snyk IaC:Snyk IaCペインから有効化します。利用しているIaCのTypeにそれぞれチェックを入れます。Terraform, Cloudformation, ARM, Kubernetesにのみ対応していますので、AWS CDKを使用している場合はcdk synthコマンドを使用してCloudformationテンプレートに変換して使いましょう。
  • Snyk Previewは実験的な機能のため、面白そうなもののみ有効化すればいいと思いますが、予告なく機能が削除される可能性があることに注意です

Slack連携

  • 連携方法は2種類あり、Incoming Webhook機能を使用しても連携できますが、現在はドキュメントからだと「Slack App」での連携が推奨のようです。
  • Qiita上ではIncoming Webhookの方のやり方しか記載がなかったので、SnykのSlackのアプリを使用した方法をご紹介します。

snyk-01- (17).png

  • Slackでアプリを追加するからSnykを検索し、 Snyk for Slackのアプリを追加します

Untitled.png

  • SlackのChannel IDは、Snykからの通知を受けたいチャンネルを右クリックして、チャンネル詳細を表示するから、下にスクロールすると表示されます。
    snyk-01- (16).png

  • Channel IDをコピーし、SnykのSlack App設定画面にSlackのChannel IDを入力して、Saveします。

snyk-01- (15).png

  • Severity levelで設定した深刻度レベル以上の問題が発見した際にSlackに通知されるようになります。
  • Snykからの通知を受けたいチャンネルに移動し、@Snyk for Slackとメッセージを打って、Snyk for slackアプリをチャンネルに追加します。

IDEにSynkをインストール

ここではVS Codeで行いますが、他のIDEでも同様の手順でインストールできます。
VS Codeの拡張機能で、Snyk Securityの拡張機能を探し、インストールします

snyk-01- (14).png

Synkの拡張機能がインストールされたら、Snykの拡張機能に遷移し、Connect &Trust Workspaceをクリックします

snyk-01- (13).png

  • WEB画面に遷移し、認証ます。
    snyk-01- (12).png

認証されると、Folder配下のCodeがすべてスキャンされ、脆弱性があるようなコードが浮き彫りになります。

snyk-01- (11).png

Synk CLI

CLIのインストールは以下のドキュメントを参照し、各OSやお使いのパッケージマネージャーに合わせてインストールします。

Nodeを使用している場合は、以下のコマンドでインストールできます。

npm install snyk -g

CLIを使用するためには、SnykのAPI TOKENが必要になります。
以下のページにアクセスし、Auth TokenのKey部分でclick to showのボタンを押すと、表示されます。

API TOKENを使って認証してSynk CLIをつかえるようにしましょう。

snyk auth <API_TOKEN> 

以下のメッセージが出力されれば、連携完了です。
Your account has been authenticated. Snyk is now ready to be used.

WEB UI上で連携したGithubのProjectのディレクトリにし、Snykの各機能のテストコマンドを実行すると、ディレクトリにあるファイルをリアルタイムにスキャンが脆弱性のあるコードを特定してくれます。

# 自分のリポジトリに移動
cd <自分の管理リポジトリフォルダ>
# Snyk Open Sourceの機能でスキャンし、npmやpip等のOSSのライブラリの脆弱性を特定します。
snyk test 
# Snyk IaCの機能でTerraformやKubernetes等のコードをスキャンし、権限が広いなどの安全でない構成を特定します。 
snyk iac test 
# Snyk containerの機能でスキャンし、コンテナイメージとKubernetesアプリケーションの脆弱性を特定します。
snyk container test
# Snyk Codeの機能でスキャンし、アプリケーションコードの脆弱性を特定します。
snyk code test

事前にWebUI上で、Projectを登録していない場合は、以下のようなエラーで怒られるみたいです。

Could not detect supported target files in /path/to/your/current-directory/
Please see our documentation for supported languages and target files: https://snyk.co/udVgQ and make sure you are in the right directory.

SnykのCLIに関しての本領はCI/CDのCIの機能として効果を発揮します。

デプロイ前のセキュリティテストに取り入れてみると良いかもしれません。

以下はAWS Codebuildのbuildspec.ymlの書き方の例になります。

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 18
    commands:
      - npm install -g snyk
  pre_build:
    commands:
      - snyk auth $SNYK_TOKEN  # Snykの認証 Codebuildの環境変数にSNYK_TOKENの値を設定
  build:
    commands:
      - snyk iac test  # Snyk iac テストの実行
artifacts:
  files:
    - '**/*'

Codecommitは現状Snyk側で対応してません。
プロジェクトのリポジトリを定期的にスキャンしたい場合もあると思います。
Codecommitでリポジトリを管理している場合は、そんなときに、上記のようなセキュリティスキャン用のCodebuild プロジェクトを作成しておいて、定期的にEventBridgeでCodebuildのプロジェクトを走らせてソースコードをスキャンしてあげると良いかと思います

Synk CLIの使い方については以下に情報がまとまっております。

SnykからGithubへ自動PRを飛ばす

  • Githubのプロジェクトを連携し、PRの設定をすると、なんと定期的に自動でSnykからPRが飛んでくるようになります。
    snyk-01- (10).png

一つ内容を見てみると既にpackage.jsonのアップデートだけではなく、依存関係であるpackage-lock.jsonの中身まで変更してくれているようです。

あとは、内容的に問題なければ、マージするだけという、なんともありがたやな機能です。
snyk-01- (9).png

連携するには、GithubのPersonal Accessトークンが必要になります。

以下にアクセスし、Fine-grained tokensに切り替え、「Generate new token」ボタンをクリックして、アクセストークンを作成します。

Token name(トークンの名前):任意
Expiration(トークンの有効期間):30日
Repository access (トークンを使用したアクセスの権限): Only select repositoriesを選択し、ご自身のリポジトリを選択します。

snyk-01- (8).png

WEB UIの左ペインのSettings > IntegrationsGitHubからOpen Snyk automatic PRs from a fixed GitHub account.の入力部分にGithubで作成したTokenを入力し、Saveをクリックします

snyk-01- (7).png

Automatic fix PRsNew vulnerabilitesKnown vulnerabilities (backlog) にチェックを入れてSaveしましょう。これでPRが自動に飛んでくるようになります。

その他、Dockerfilesの項目の、Detect DockerfilesUpdate Dockerfile base imagesにチェックすることでリポジトリ内のDockerfileもスキャンしてくれるようになるので、お勧めです

WEB UIの使いこなし方

リモートリポジトリのソースコードの健康状態を監視に役立ちます。
定期的に確認することで、セキュリティ対策の勉強をすることができる。
SnykのWeb UIの左メニューのProjectsから、リモートリポジトリのプロジェクトを選択すると、リモートリポジトリ内のファイルの一覧が表示され、脆弱性(Issues)があるものはレベル別に、Critical, High, Medium, Lowの4段階で表示されます。

snyk-01- (6).png

各ファイルをクリックすると、そのファイルの脆弱性の詳細が表示されます。
ignoreボタンをクリックすると、その脆弱性を無視して、スキャン対象から外すことができます。
Full detailsボタンをクリックすると、ソースコードのどの部分に脆弱性があるのかが表示されます。

snyk-01- (5).png

Full detailsボタンをクリックすると、この場合はリソースの権限が広すぎることがわかります。

snyk-01- (4).png

ignoreボタンをクリックすると、この脆弱性をいつまで無視するかの設定を細かく設定することができます。

snyk-01- (3).png

ものによっては以下のように、[Fix this vulnerability]と記載されているものがあり、このボタンを押すと、直接リモートリポジトリに対してPRを投げることができるそうです。

snyk-01- (2).png

ですが、私は無料プランで利用しているため、このボタンを押すと、エラーになります。
自動コード修正 PR機能は、無料版では機能が一部制限がされているようです。

snyk-01- (1).png

感想としては、AWSのSecutiry HubやInspector等で引っかからなかった部分も検知してくれるので非常にありがたいと思っております。

IDEの拡張機能について

正直なところ、こちらが一番便利です。

IDEでコードを書いていると、その場で脆弱性を検知してくれるので、開発者がコードを書いている段階で、セキュリティを意識することができます。

snyk-01- (11).png

また上記のCODE QUALITYの項目には、コードの品質を向上させるための機能もあります。
いくつかコードの記載に対してセキュリティ的にもっとこうした書き方が良いような提案をしてくれます。
提案も複数提案してくれるので、どれが一番良いかを選択することができます。
SQL Ingectionとかの対策になるので、とても参考になります。

Screenshot 2024-08-01 095327.png

まとめ

いかがでしたでしょうか? Snykの各ツールの設定自体もどれもそこまで難しくなく利用できるかと思います。
Snykを活用して、開発のタイミングからセキュアなコーディングを行い、スピーディーに開発していきましょう!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?