GitHubのセキュリティコードスキャン:オープンソースの依存関係を保護
2021年5月4日
0 分で読めますGitHubのセキュリティコードスキャンでSnyk Open Sourceを利用できるようになりました。オープンソースの依存関係にあるセキュリティ脆弱性やライセンス上の問題を自動的にスキャンし、結果をGitHubのSecurityタブで直接確認できます。
Snykの開発者ファーストのアプローチを支える重要な要素は、開発者が利用するまさにそのプロセスにSnykのセキュリティデータを組み込むことです。開発者のIDEでも、Gitベースのワークフローでも同様です。
2020年10月、GitHubでホストされているコンテナイメージ、Kubernetesの構成ファイル、Terraformコードをスキャンし、結果をGitHubのSecurityタブで確認する機能を発表しました。現在はSnyk Container、Snyk IaC、そしてSnyk Open Sourceにも対応しています。この機能ではSnykのGitHub Actionsを使用して、SnykをGitHubのセキュリティコードスキャンにネイティブに統合します。

すでにSnykのGitHub Actionsを使用している場合は、GitHubのセキュリティコードスキャンで結果をすぐに確認できます。まだ利用していない方、またはSnykを初めて使う方は、以下の手順で始めましょう。
SnykのGitHub Actions
GitHub Actionsは、継続的インテグレーションを中心とするワークフローの自動化を支援するため、GitHubによって導入されました。SnykのGitHub Actionsを使えば、Snykをこうしたワークフローに簡単に統合し、GitHubプロジェクトのセキュリティ脆弱性やライセンス上の問題をテストできます。自動化されたCI/CDワークフローの一環として、GitHub内からネイティブに実行できます。
Snykは、使用する言語やビルドツールに応じたアクションを提供しています。以下は一部の例です(利用可能なアクションの一覧は、GitHubのドキュメントをご覧ください)。
それでは、実際に試してみましょう。
注:以下の手順は、パブリックリポジトリのスキャンに自由にご利用いただけます。ただし、プライベートレジストリをスキャンするには、GitHub Advanced Securityの有料プランをご利用いただく必要があります。
Snykの認証を設定する
Snyk Actionでは、SNYK_TOKENという環境変数を使用します。これはSnyk APIトークンです。GitHub Actionを設定する前に取得しておきましょう。
まだアカウントをお持ちでない場合は、Snykアカウントを作成してください。トークンは次のいずれかの方法で取得できます。

トークンを取得したら、リポジトリの設定のSettings | Secretsでシークレットとして登録します。

Snyk GitHub Actionを設定する
これでSnyk Actionを設定する準備ができました。GitHubリポジトリでActionsタブを開き、左上にあるNew workflowボタンをクリックします。
GitHubでは、リポジトリのプログラミング言語に応じたテンプレートアクションがいくつか表示されます。Snyk GitHub Actionを設定するには、ページ上部のset up a workflow yourselfをクリックします。

サンプルコードを次のコードに置き換えます。

この例では、リポジトリに新しいコードがプッシュされるたびにワークフローが実行されるよう、Snyk Actionを設定しています。ワークフローではsnyk testを使ってオープンソースの依存関係にあるセキュリティ脆弱性とライセンス上の問題をスキャンし、結果を含むSARIFファイルをGitHubのセキュリティコードスキャンにアップロードします。
continue-on-errorフラグはtrueに設定されていますが、問題が検出されたときにビルドを失敗させるよう変更できます。
Start commitをクリックしてワークフローファイルをリポジトリにコミットし、最初のSnyk自動アクションを実行します。GitHub CIワークフローを始めるには、リポジトリのルートにGitHub Actionファイル.github/workflows/main.ymlを作成します。
アクションは数秒で実行されます。進行状況を確認できます。
完了したら、GitHubのSecurityタブを開きます。Snykのスキャン結果は、Code scanning alertsに表示されます。

以降、GitHubリポジトリに新しいコミットをプッシュするたびに、リポジトリのActionsタブに新しいジョブが追加され、リポジトリをスキャンして問題を検出します。
Code Scanningでスキャン結果を確認する
Snyk Open Sourceは、リポジトリ内の直接依存関係と推移的依存関係の両方をスキャンし、セキュリティ脆弱性やライセンス上の問題を検出します。検出された問題は、迅速な修正に役立つ詳細なコンテキストとともに表示されます。脆弱性に関する情報が充実しているほど、修正の優先順位を付けやすくなります。
この例では、Snyk Open Sourceがプロジェクトのマニフェストファイル(package.json)をSnyk Intelの脆弱性データベースと照合し、281件の脆弱性を検出しました。
検出された脆弱性の1つを詳しく見てみましょう。qs依存関係にある、深刻度が高いPrototype Override Protection Bypassの脆弱性です。
脆弱性のヘッダーには、深刻度、CVE、CWEが表示されます。深刻度は次のように対応付けられています。
CVSS | SARIF |
|---|---|
低 | 注記 |
中 | 警告 |
高/重大 | エラー |

さらにSnykは、脆弱性の詳細な説明、混入した経緯、悪用の例、開示までのタイムライン、そして何より重要な修正方法も提供します。

GitHubにネイティブなセキュリティへの投資
開発者ファーストのセキュリティツールは、開発ワークフローにできる限り簡単に統合できる必要があります。これにより、セキュリティ統合に伴いがちな摩擦が大幅に軽減され、開発者がセキュリティにより主体的に取り組めるようになります。
世界中で220万人を超える開発者が、アプリケーションの保護にSnykを利用しています。その多くがSnykとGitHubのインテグレーションを活用しているため、私たちはこの統合の改善に継続的に取り組んでいます。SnykのGitHub Actionsと、GitHubのセキュリティコードスキャンに対応したSnyk Open Sourceをぜひお試しいただき、感想をお聞かせください。
CTFを始めよう
オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。

