Cartoon rock climber using proper security techniques while climbing a rock wall

GitHub のコード スキャンを使用してサードパーティ ツールによるテストを拡張する

Nicholas Liffen
Nicholas Liffen // Director, GitHub Advanced Security // GitHub

GitHub は、ワークフローはすべて違った特色を持つことを理解しています。私たちはユーザーをサポートするため、17,000 種を超えるアプリケーション インテグレーションの広範なエコシステムを含み伸張性のあるプラットフォームと、ソフトウェア開発ライフサイクル全体で事前構築された GitHub Actions テンプレートを用意しています。これは、オープン ソースと商用セキュリティ アプリケーションのセキュリティ ツール向けとして、動的分析、コンプライアンス、コンテナ スキャンなどのカテゴリを網羅した 70 種をこえるアクションを含んでおり、GitHub Advanced Security のネイティブ ソリューションを超えたテストの拡張に使用できます。セキュリティ問題が発生した場合、ワークフロー内でこのインテグレーションを介し即座に通知が行われ、GitHub で結果を配信するのと同じ形式で修復のためのインサイトが提供されるので、生産性を犠牲にするコンテキスト切り替えを回避することができます。

このガイドでは、インテグレーション例の設定手順について説明し、KPMG にいくつかのインサイトを再度紹介してもらいます。

KPMG では、クラウド インフラストラクチャ設定用の Checkov、コンテナー用の Trivy、コード品質用の ESLint など、さまざまな静的分析ツールを使用しています。パイプラインに複数のツールを追加しても、その結果をチェックしないというのは、よくある話です。しかし、全てをひとつの場所に集めれば、コード スキャンによって、使用する全てのツールをより簡単に活用できるようになります。 結果を見過ごすことがなくなります。GHAS のこの機能はかなり過小評価されています。

Phil Wright-Christie
Phil Wright-Christie // Lead DevOps Engineer // KPMG

GitHub Actions を使用して、サードパーティのアプリケーション セキュリティ ツールを自動的に実行し、結果をアップロードしてコード スキャンで表示する方法を見てみましょう。


このガイドの学習内容

  • サードパーティ ツールが GitHub コード スキャンに役立つ理由

  • GitHub Actions を使用してサードパーティ ツールをコード スキャンに統合する方法

  • サードパーティのコード スキャン ツールの結果をコード スキャンで表示する方法


1.コンテナー スキャンを設定する。

まずは、組織がコンテナーをスキャンできるようにする包括的なセキュリティ機能である Trivy から始めましょう。このセクション内のロジックは全て、他のタイプのアプリケーション セキュリティや品質ツールにも適用できます。 

次のファイルを .github/workflows ディレクトリにドロップします。このファイルには好きな名前を付けることができますが、次のような適切な名前を付けることをお勧めします: trivy.yml

name: "trivy"
on:
    workflow_dispatch:
    push:
    pull_request:

jobs:
    trivy:
        runs-on: ubuntu-latest
        steps:
            -   uses: actions/checkout@v3
            
            -   name: Set up JDK 17
                uses: actions/setup-java@v3
                with:
                    distribution: 'temurin'
                    java-version: 17
                    architecture: x64
                    
            -   name: Cache Maven packages
                uses: actions/cache@v3.3.1
                with:
                    path: ~/.m2
                    key: ${{ runner.os }}-m2-${{ hashFiles('**/pom.xml') }}
                    restore-keys: ${{ runner.os }}-m2-
                    
            -   name: Build with Maven
                run: mvn --no-transfer-progress verify
                
            -   name: "Set up QEMU"
                if: runner.os == 'Linux'
                uses: docker/setup-qemu-action@v2.2.0
                
            -   name: "Set up Docker Buildx"
                if: runner.os == 'Linux'
                uses: docker/setup-buildx-action@v2
                
            -   name: "Verify Docker WebGoat build"
                if: runner.os == 'Linux'
                uses: docker/build-push-action@v4.1.1
                with:
                    tags: localbuild/testimage:latest
                    push: false
                    load: true
                    context: ./
                    file: ./Dockerfile
                    build-args: |
                        webgoat_version=${{ env.WEBGOAT_MAVEN_VERSION }}
            - name: Run Trivy vulnerability scanner
              uses: aquasecurity/trivy-action@master
              with:
                image-ref: 'localbuild/testimage:latest'
                format: 'sarif'
                output: 'trivy-results.sarif'
                timeout: 20m0s
      
            - name: Upload Trivy scan results to GitHub Security tab
              uses: github/codeql-action/upload-sarif@v2
              if: always()
              with:
                sarif_file: 'trivy-results.sarif'

このワークフローでは次のことを実行します。

  • Maven をインストールして Maven プロジェクトを構築する

  • Docker を設定し、アクション ワークフローでローカルに Docker ビルドを実行する

  • Trivy コンテナー スキャンを実行する

  • 結果を GitHub コード スキャンにアップロードする 

上記のファイルを ディレクトリにコミットしたら、[GitHub Actions] タブを選択します。Trivy ジョブが実行されています。

2. SARIF の結果を表示する。

Web Goat リポジトリで [セキュリティ] タブを選択します。

サイドバーから [コード スキャン] を選択します。 

ツール フィルターをクリックし、[Trivy] を選択します。

Screenshot of Trivy code scanning results

Trivy の結果が表示されます。

次の項目: シークレット スキャンのスコープをカスタマイズする

Trivy は、コード スキャンで使用できる数多くのアプリケーション セキュリティ ツールの 1 つにすぎません。GitHub Marketplace を確認して、使用している全てのツールから SARIF ファイルを自動的にアップロードするのに役立つアクションを見つけてください。また、GitHub Actions の詳細については、自動化ラーニング パスを確認してください。 

その前に、シークレット スキャンについてと、スキャンのスコープを調整する方法について説明しましょう。