code scanning からのアラートについて
code scanning を構成して、既定の CodeQL 解析、サードパーティーの解析、または複数の種類の解析を使ってリポジトリのコードをチェックできます。 解析が完了すると、解析によるアラートがリポジトリのセキュリティビューに隣り合わせで表示されます。 サードパーティツールまたはカスタムクエリの結果には、GitHub のデフォルト CodeQL 解析により検出されたアラートで表示されるプロパティの一部が含まれていない場合があります。 詳しくは、「コード スキャンの既定セットアップの構成」と「コード スキャンの詳細設定の構成」をご覧ください。
デフォルトでは、code scanning はプルリクエスト中にデフォルトブランチのコードを定期的に解析します。 pull request のアラートの管理については「Pull RequestでCode scanningアラートをトリアージする」を参照してください。
GitHub ツールを使用して、code scanning アラートに応答して実行されたアクションを監査できます。 詳しくは、「セキュリティ アラートの監査」を参照してください。
アラートの詳細について
各アラートはコードの問題と、それを特定したツールの名前を表示します。 アラートをトリガーしたコード行と、アラートのプロパティ (アラートの重要度、セキュリティの重要度、問題の性質など) を確認できます。 アラートは、問題が最初に発生したときにも通知します。 CodeQL 解析で特定されたアラートについては、問題を解説する方法についての情報も表示されます。
[アラート] ページのステータスと詳細は、他のブランチにアラートが存在する場合であっても、リポジトリの既定のブランチに対するアラートのステータスを反映するのみです。 既定以外のブランチのアラートの状態は、[アラート] ページの右側にある [影響を受けるブランチ] セクションで確認できます。 既定のブランチにアラートが存在しない場合、アラートの状態は、[in pull request] または [in branch] として、グレー表示されます。
code scanning がデータフローアラートを報告すると、GitHub はデータがコードを通してどのように移動するかを示します。 Code scanning を使うと、機密情報を漏洩し、悪意のあるユーザーによる攻撃の入り口になる可能性があるコードの領域を特定できます。
重要度について
アラートの重要度レベルは、Error
、Warning
、または Note
です。
pull request のチェックとしてcode scanningが有効化されている場合、重要度が error
の結果が検出されると、チェックは失敗します。 チェック エラーの原因となる code scanning アラートの重要度レベルを指定できます。 詳しくは、「をカスタマイズして、コード スキャンの詳細設定を行う」を参照してください。
セキュリティ重要度について
Code scanning は、セキュリティ クエリによって生成されたアラートのセキュリティ重大度レベルを表示します。 セキュリティ重大度レベルは、Critical
、High
、Medium
、Low
のいずれかになります。
アラートのセキュリティ重要度の計算には、共通脆弱性評価システム(CVSS)のデータを使用しています。 CVSSはソフトウェアの脆弱性の性格と重要度を伝えるためのオープンフレームワークで、アラートのスコアリングのために他のセキュリティ製品で広く使われています。 重要度レベルの計算方法の詳細については、こちらのブログ記事を参照してください。
既定では、セキュリティ重要度が Critical
または High
の code scanning の結果があれば、チェックは失敗します。 code scanningの結果でチェックの失敗を引き起こすセキュリティ重要度は指定できます。 詳しくは、「をカスタマイズして、コード スキャンの詳細設定を行う」を参照してください。
複数の構成からのアラートについて
リポジトリでコード分析の複数の構成を実行し、さまざまなツールを使用して、異なる複数の言語またはコード領域をターゲットにすることができます。 code scanning の各構成では、アラートの一意のセットが生成されます。 たとえば、GitHub Actions で既定の CodeQL 分析を使用して生成されたアラートは、外部で生成されて、code scanning API を介してアップロードされたアラートとは異なる構成によるものです。
複数の構成を使用してファイルを分析した場合、同じクエリによって検出された問題が、複数の構成によって生成されたアラートとして報告されます。 複数の構成にアラートが存在する場合、構成の数は、アラート ページの右側にある [影響を受けるブランチ] セクションのブランチ名の横に表示されます。 アラートの構成を表示するには、[影響を受けるブランチ] セクションでブランチをクリックします。 そのブランチのアラートを生成する各構成の名前が表示されている [構成の分析] モーダルが表示されます。 各構成の下に、その構成のアラートが最後に更新された日時が表示されます。
アラートには、さまざまな構成のさまざまな状態が表示される場合があります。 アラートの状態を更新するには、使われていない構成を再び実行します。 または、ブランチから古い構成を削除して、使われていないアラートを削除することもできます。 古い構成とアラートの削除について詳しくは、「リポジトリのコード スキャンのアラートを管理する」を参照してください。
アプリケーションコード中には見つからないアラートのラベルについて
GitHubは、アプリケーションコード中に見つからないアラートに対し、カテゴリラベルを割り当てます。 ラベルは、アラートの場所に関連づけられます。
- [生成済み] : ビルド プロセスによって生成されたコード
- [テスト] : テスト コード
- [ライブラリ] : ライブラリまたはサードパーティのコード
- [ドキュメント] : ドキュメント
Code scanning は、ファイルをファイル パスによって分類します。 手動でソースファイルを分類することはできません。
この例のアラートは、code scanning アラート リストで "テスト" コードとしてマークされています。
クリックしてアラートの詳細を表示すると、ファイル パスが "テスト" コードとしてマークされていることがわかります。
実験的なアラートについて
注: code scanning の試験的なアラートは、CodeQL アクションの実験テクノロジを使用して作成されます。 この機能は現在、JavaScript コードのベータ版リリースとして利用でき、変更される可能性があります。
CodeQLアクションを使ってcode scanningを実行するリポジトリでは、実験的としてマークされたアラートを見ることがあるかもしれません。 それらは、既存のCodeQLクエリの機能を拡張するための機械学習モデルを使って見つけられたアラートです。
クエリを拡張するために機械学習モデルを使う利点
機械学習モデルを使うクエリは、オリジナルのクエリ作成者が含めなかったフレームワークやライブラリを使って書かれたコードの脆弱性を見つけることができます。
CodeQLの各セキュリティクエリは、特定の種類の攻撃に対して脆弱なコードを特定します。 セキュリティの研究者はクエリを書き、最も一般的なフレームワークやライブラリを含めます。 そのため、既存のそれぞれのクエリは、一般的なフレームワークやライブラリの脆弱な使用を見つけます。 しかし、開発者は様々な多くのフレームワークやライブラリを使い、手作業でメンテナンスされるクエリにそれらをすべて含めることはできません。 したがって、手作業でメンテナンスされるクエリは、すべてのフレームワークやライブラリを網羅することはできません。
CodeQLは機械学習モデルを使い、幅広いフレームワークやライブラリをカバーするよう既存のセキュリティクエリを拡張します。 この機械学習モデルは、それまで見たことがないコードに潜む問題を検出するようトレーニングされています。 このモデルを使用するクエリは、元々のクエリには記述されていないフレームワークやライブラリの結果を見つけます。
機械学習を使って特定されたアラート
機械学習モデルを使って検出されたアラートは、テクノロジが現在開発中であることを示す [実験的アラート] というバナー付きで表示されます。 これらのアラートは、基になるクエリよりも誤検知の結果の割合が高くなります。 機械学習モデルは、不適切な結果を誤検知としてマークしたり、適切な結果を修正したりするなどのユーザー アクションに基づいて改善されます。
試験的なアラートを有効にする
既定の CodeQL クエリ スイートには、機械学習を使用して試験的なアラートを生成するクエリは含まれません。 code scanning 中に機械学習クエリを実行するには、次のいずれかのクエリ スイートに含まれる追加のクエリを実行する必要があります。
クエリ スイート | 説明 |
---|---|
security-extended | 既定のスイートからのクエリ、および重要度と精度の低いクエリ |
security-and-quality | security-extended からのクエリに加え、保守性および信頼性のクエリ。 |
追加のクエリ スイートを実行するようにワークフローを更新すると、分析時間が長くなります。
- uses: github/codeql-action/init@v2
with:
# Run extended queries including queries using machine learning
queries: security-extended
詳しくは、「をカスタマイズして、コード スキャンの詳細設定を行う」を参照してください。
試験的なアラートを無効にする
機械学習を使用して試験的なアラートを生成するクエリを無効にする最も簡単な方法は、security-extended
または security-and-quality
クエリ スイートの実行を停止することです。 上記の例では、queries
行をコメントアウトします。 security-extended
または security-and-quality
スイートを引き続き実行する必要があり、機械学習クエリで問題が発生している場合は、以下の詳細を使用して GitHub サポートにチケットを開くことができます。
- チケットのタイトル: "code scanning: 実験的なアラート ベータからの削除"
- 影響を受けているリポジトリまたは組織の詳細を明示する
- エンジニアリングへのエスカレーションを依頼する