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

CodeQL 詳細設定

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

CodeQL を有効にするときに、「既定」の設定か「詳細」設定のいずれかを選択できます。可能な限り既定の設定を使用することをお勧めしますが、詳細設定の使用が必要なユース ケースがあります。よくあるケースとしては、クエリを追加または削除したり、スキャンからディレクトリを除外したりするような、カスタム ビルド プロセスを指定する必要がある可能性があります。以下は、KPMG で詳細設定を使用することにした理由です。

ビルドに外部依存関係が必要なことに加えて、CodeQL を使用することがセキュリティだけでなく、コード品質にも役立つと考えたため、当社は KPMG で詳細設定を行いました。プルリクエスト レビューは素晴らしいものですが、限界があることも確かです。当社ではいくつかの自動化された構文チェック ツールとコード品質ツールを使用していますが、いずれのツールにも取りこぼしがありました。GitHub のセキュリティと品質クエリ パックは、他のツールでは見逃してしまうものも見つけることができます。さらに、当社独自の標準やスタイルを推進するためのカスタム クエリを作成しました。このクエリでは、開発者がコードをコミットしたときにアラートが送信されるため、後で時間のあるときに変更をするように開発者依頼する必要はありません。当社では、すでにコードの品質が大幅に向上しています。

Leonid Stolyarov
Leonid Stolyarov // Engineering Director // KPMG

GitHub は CodeQL スキャンの一部としてアプリケーションを自動的に構築しようとしますが、自動ビルダー アクションで全てのアプリケーションを正常にビルドできるとは限りません。たとえば、Web Goat は Maven を呼び出すためのカスタム ビルドが必要です。 

このガイドでは、まず Web Goat のカスタム構築手順を追加し、次のステップで CodeQL クエリの変更とディレクトリの除外に進みます。


このガイドの学習内容

  • デフォルト設定の代わりに CodeQL 詳細設定を使用する場合

  • CodeQL 構成ファイルを編集する方法

  • CodeQL のカスタム構築手順を設定する方法


1. 詳細設定を使用して CodeQL にカスタム構築手順を追加する。

CodeQL は通常、CodeQL アクションを使用してGitHub Actions から実行および管理されます。他のアクションと同様に、CodeQL 詳細設定は YAML で記述されたワークフロー ファイルで呼び出され、管理されます。デフォルト設定を使用する場合、この YAML ファイルは表示されず、バックグラウンドで管理されます。詳細設定の場合は、独自のワークフロー ファイルを作成する必要があります。

まだ GitHub Advanced Security を有効にしていない場合は、これを有効にして Web Goat リポジトリを組織にフォークします。リポジトリに対してまだ GitHub Actions を有効にしていない場合は、リポジトリ名の下にある [設定] をクリックします。[GitHub Actions] タブが表示されない場合は、[...] ドロップダウン メニューを選択し、[GitHub Actions] をクリックします。[ワークフローについて理解したので、ワークフローを有効にします] というボタンをクリックします。

Web Goat リポジトリの [設定] タブに移動します。

サイドバーの [設定] で [コードのセキュリティと分析] を選択します。 

まだ CodeQL を有効にしていない場合は、[コード スキャン] 見出しを見つけて [設定] ドロップダウンを選択します。[デフォルト] または [詳細設定] の選択肢が表示されます。[詳細設定] を選択します。

Screenshot of "Switch to advanced" CodeQL configuration dialog

デフォルト設定ですでに CodeQL が有効になっている場合は、[...] というラベルの付いたメニューを選択し、[詳細設定に切り替える] を選択します。プロンプトが表示されたら、[CodeQL を無効にする] を選択します。詳細設定プロセスが完了したら再度有効にするので、ご安心ください。

詳細設定を選択するか、詳細設定に切り替えると、codeql.ymlという名前の GitHub Actions ワークフロー ファイルが表示されます。これは、Web Goat リポジトリの /.github/workflows ディレクトリで作成される全てのファイルのコピーも含まれます。このファイルは、CodeQL の実行と構成に使用されます。

次の行は codeql.yml ファイルの末尾にあり、自動ビルダーを実行します。

    # Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
    # If this step fails, then you should remove it and run the build manually (see below)
    - name: Autobuild
      uses: github/codeql-action/autobuild@v2

これを削除し、次の行に置き換えます。

    - if: matrix.language == 'java'  
      name: Set up java 17
      uses: actions/setup-java@v3
      with:
          distribution: 'temurin'
          java-version: 17
          architecture: x64
                 
    - if: matrix.language == 'java' 
      name: Build with Maven
      run: mvn -B package --file pom.xml

このシンプルなワークフローは、自動ビルダーではなく Maven を使用してアプリケーションを構築しようとするものです。

これをメイン ブランチにコミットします。

2. 結果を確認する。

次に、リポジトリの [GitHub Actions] タブを開きます。Java 用と JavaScript 用の 2 つの CodeQL 分析ジョブが実行されています。今回はどちらも動作するはずです。

ジョブが完了したら、リポジトリの [セキュリティ] タブに移動し、左側のメニューの [コード スキャン] セクションを選択します。

このページの上部には、CodeQL が動作していることを知らせるステータス通知が表示されます。

前回表示された JavaScript の脆弱性に加えて Java の脆弱性も表示されるため、前回よりも多くの結果が表示されます。[ツールのステータス] を選択すると、詳細情報が表示されます。Java ジョブが失敗した場合は、インデントとスペースを再確認してください。

次の項目: CodeQL でテストのスコープを微調整する 

詳細設定を行うことができたので、次に、実行するクエリの変更とディレクトリの除外という、2 つの最も一般的な CodeQL 詳細設定タスクに取り組みましょう。