Skip to main content

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のセキュリティコードスキャンにネイティブに統合します。

コードスキャンのアラートと重大度の高い脆弱性の一覧が表示された、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アカウントを作成してください。トークンは次のいずれかの方法で取得できます。

  1. Snyk CLIを使っている場合は、次のコマンドを実行して取得します:snyk config get api

  2. UIでSnykアカウントの設定ページに移動し、APIトークンを取得します。

「Revoke & Regenerate」ボタンと優先する組織の設定が表示された、APIトークンを含むSnykアカウント設定ページ。

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

SNYK_TOKENという名前、ぼかされた値のフィールド、「Add secret」ボタンが表示されたGitHub Actionsのシークレットフォーム。

Snyk GitHub Actionを設定する

これでSnyk Actionを設定する準備ができました。GitHubリポジトリでActionsタブを開き、左上にあるNew workflowボタンをクリックします。

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

「ワークフローを自分で設定する」リンクが強調表示された、JavaScriptリポジトリのGitHub Actionsワークフローテンプレートページ。

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

name: "Upload package.json SARIF"
# Run workflow each time code is pushed to your repository.
on: push
jobs: 
  build:   
    runs-on: ubuntu-latest   
    steps:     
      - uses: actions/checkout@v2     
      - uses: snyk/actions/setup@master     
      - name: Snyk Test       
      run: snyk test --sarif-file-output=snyk-sarif.json       
      continue-on-error: true              
      env:          
        SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}         
      - name: Upload SARIF file       
      uses: github/codeql-action/upload-sarif@v1       
      with:         
        sarif_file: snyk-sarif.json +++ CODE_WP_BLOCK_END +++

Snykのセキュリティテストを実行し、SARIFレポートをアップロードするYAMLファイルを表示したGitHubのワークフローエディター。

この例では、リポジトリに新しいコードがプッシュされるたびにワークフローが実行されるよう、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に表示されます。

goofリポジトリで未解決の重大度の高いセキュリティ脆弱性の一覧を表示したGitHub Code scanningページ

以降、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

低

注記

中

警告

高/重大

エラー

qs@2.2.4の脆弱性一覧。重大度「高」のPrototype Override Protection Bypassがオープンとして表示され、CVE-2017-1000048、npm、securityのタグが付いています。

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

npmのqsパッケージのSnyk Open Source脆弱性レポート。プロトタイプ上書きの詳細、公開までのタイムライン、修正方法、参考情報を表示。

GitHubにネイティブなセキュリティへの投資

開発者ファーストのセキュリティツールは、開発ワークフローにできる限り簡単に統合できる必要があります。これにより、セキュリティ統合に伴いがちな摩擦が大幅に軽減され、開発者がセキュリティにより主体的に取り組めるようになります。

世界中で220万人を超える開発者が、アプリケーションの保護にSnykを利用しています。その多くがSnykとGitHubのインテグレーションを活用しているため、私たちはこの統合の改善に継続的に取り組んでいます。SnykのGitHub Actionsと、GitHubのセキュリティコードスキャンに対応したSnyk Open Sourceをぜひお試しいただき、感想をお聞かせください。

CTFを始めよう

オンデマンドのバーチャル入門ワークショップを視聴して、CTFの課題の解き方を学びましょう。

続きを読む

feature insights context
Blog

自律型攻撃はすでに始まっている。防御もそのスピードに追いつかなければならない。

自律型攻撃者によって、防御に使える時間は短くなっています。継続的な検出、修復、検証、予防で、セキュリティチームが攻撃に歩調を合わせる方法をご紹介します。

feature insights context
Blog

予防は、本質的に解決済みの問題なのでしょうか?

エージェントが生成するコードの予防策はアーキテクチャ上解決されていますが、開発を遅らせることなくセキュリティを守る制御を選ぶことが、依然として課題です。

Live Stream

修正エージェントをわかりやすく解説:見つけるより直すことが重要な理由

SnykのRemediation Agentが、セキュリティインテリジェンス、破壊可能性分析、検証を活用して、脆弱性をマージ可能なプルリクエストに変える仕組みをご覧ください。