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

CodeQL を使用したテスト スコープ の微調整

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

前回のガイドで取り上げた構築手順の追加に加え、ディレクトリの除外や実行するクエリの変更などは、ユーザーが最も一般的に行う構成変更です。クエリの変更は、通常、テスト実行のスコープを拡張したり狭めたりするために行われます。一般には、少しのアクションで修正できる外部コードを含むディレクトリを、組織が除外しているということがあります。再び、KPMG から話を聞きましょう。


このガイドの学習内容

  • CodeQL スキャンからファイルやフォルダーを除外する方法

  • CodeQL スキャンの一部として実行するクエリを変更する方法

  • CodeQL に含まれる 3 つのデフォルトのクエリ スイートの違い


1. スキャンからディレクトリを除外する。

まず、Web Goat リポジトリのテスト ファイルを CodeQL スキャンから除外します。

codeql.yml ワークフロー ファイルを Web Goat リポジトリの /.github/ ディレクトリから開きます。 

次のラベルの付いたセクションを見つけます: # Initializes the CodeQL tools for scanning.

languages: ${{ matrix.language }} の下に以下を追加します:

        config: |
          paths-ignore:
            - '**/*.test.js'

除外するフォルダーの数は最小限に抑えることをお勧めします。問題に十分に対処できないため、サードパーティのコードを含むフォルダーを除外したくなることもあります。しかし、結局のところ、たとえ直接修正できなくても、潜在的な脆弱性について把握しておくほうがよいでしょう。このような観点から、可能な限りスキャンを実行すべきです。

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

2. クエリ スイートを変更する。

CodeQL はクエリを実行して、潜在的なセキュリティ リスクや品質の問題を明らかにします。以下は、10 個を超えるパラメーターを持つ関数を見つける単純な JavaScript CodeQL クエリの例です。

import javascript



from Function f
where f.getNumParameter() > 10
select f

CodeQL クエリ スイートは、メタデータ (ディスク上/CodeQL パック内のファイル名や場所) に基づいてクエリを選択する方法を提供します。CodeQL パックは、CodeQL クエリとライブラリの作成、共有、実行に使用されるコンパイル済みクエリのコレクションです。クエリ スイートは、CodeQL パックの一部として実行されるクエリを定義します。たとえば、クエリ自体は変更せずに、実行されるクエリを変更する場合は、スイートを使用します。カスタム クエリやデータ拡張機能などがある場合は、パックを使用します。 

ここではデフォルトのスイートを使用しましょう。CodeQL には、さまざまなクエリ パックを実行する次の 3 つのクエリ スイートが組み込まれています: code-scanning (default), security-extendedsecurity-and-quality.

最も高精度の結果と最も重大度の高い脆弱性のみが必要な場合は、標準のコード スキャン スイートを使用します。精度を多少犠牲にしても、より多くの脆弱性 (重大度の低い多くの問題を含む) を検出したい場合は、次を使用します: security-extended security-and-quality は、security-extended の全てのクエリに加えて、構造と保守性に重点を置いた品質クエリも実行したい場合に使用します。

ここで、security-and-quality を有効にしてみましょう。先ほど追加した行の下に、次を追加します:

          queries:
            - uses: security-and-quality

他のクエリ、クエリ パック、クエリ スイートも同様に指定できます。

ファイルのセクション全体は次のようになります。

    - name: Initialize CodeQL
      uses: github/codeql-action/init@v2
      with:
        languages: ${{ matrix.language }}
        config: |
          paths-ignore:
            - '**/*.test.js'
          queries:
            - uses: security-and-quality

3. 結果を確認する。

CodeQL ジョブが完了したら、リポジトリの [セキュリティ] タブに移動し、左側のメニューの [コード スキャン] セクションを選択します。さらに多くの結果が表示されるはずです。同様に、ジョブが失敗した場合は、YAML ファイル内のスペースとインデントを再確認してください。

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

ここまで、CodeQL で行う最も一般的な構成変更について説明しました。ドキュメントには、さらに多くの構成オプションが用意されています。上級モジュールでは、セキュリティ チームが保守できる外部構成ファイルを使用します。しかしここでは、次のガイドに進みましょう。 

これまで、コード スキャンを使用して CodeQL の結果のみを表示してきましたが、コード スキャンはサードパーティ ツールの結果も表示できるため、単一のインターフェイスで幅広いセキュリティ ツールを操作できます。