code scanning からのアラートについて
code scanning を構成して、既定の CodeQL 解析、サードパーティーの解析、または複数の種類の解析を使ってリポジトリのコードをチェックできます。 解析が完了すると、解析によるアラートがリポジトリのセキュリティビューに隣り合わせで表示されます。 サードパーティツールまたはカスタムクエリの結果には、GitHub のデフォルト CodeQL 解析により検出されたアラートで表示されるプロパティの一部が含まれていない場合があります。 詳細については、「リポジトリの code scanning の構成」を参照してください。
デフォルトでは、code scanning はプルリクエスト中にデフォルトブランチのコードを定期的に解析します。 pull request でのアラートの管理については、「pull request で code scanning アラートをトリアージする」を参照してください。
アラートの詳細について
各アラートはコードの問題と、それを特定したツールの名前を表示します。 アラートをトリガーしたコード行と、アラートのプロパティ (アラートの重要度、セキュリティの重要度、問題の性質など) を確認できます。 アラートは、問題が最初に発生したときにも通知します。 CodeQL 解析で特定されたアラートについては、問題を解説する方法についての情報も表示されます。
[アラート] ページのステータスと詳細は、他のブランチにアラートが存在する場合であっても、リポジトリの既定のブランチに対するアラートのステータスを反映するのみです。 既定以外のブランチのアラートの状態は、[アラート] ページの右側にある [影響を受けるブランチ] セクションで確認できます。 既定のブランチにアラートが存在しない場合、アラートの状態は、[in pull request] または [in branch] として、グレー表示されます。
CodeQL を使って code scanning を構成した場合、コード中のデータフローの問題も見つけることができます。 データフロー解析は、データを安全でない方法で利用する、関数に危険な引数を渡す、機密情報を漏洩するなど、コードにおける潜在的なセキュリティ問題を検出します。
code scanning がデータフローアラートを報告すると、GitHub はデータがコードを通してどのように移動するかを示します。 を使用すると、機密情報を漏洩し、悪意のあるユーザによる攻撃の入り口になる可能性があるコードの領域を特定できます。
重要度について
アラートの重要度レベルは、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 分析を使用して生成されたアラートと、外部で生成され、コード スキャン API を介してアップロードされたアラートは、分析元が異なります。
複数の構成を使用してファイルを分析した場合、同じクエリによって検出された問題が、複数の分析元があるアラートとして報告されます。 アラートの分析元が複数ある場合、アラート ページの右側にある [影響を受けるブランチ] セクションで、該当するブランチの横に アイコンが表示されます。 アイコンの上にカーソルを合わせると、各分析元の名前とその分析元のアラートの状態を確認できます。 また、各分析元でいつアラートが発生したかの履歴を、アラート ページのタイムラインに表示することもできます。 アラートに分析元が 1 つしかない場合、アラート ページに分析の発生元に関する情報は表示されません。
メモ: 場合によっては、コード スキャン アラートが 1 つの分析元について修正済みとして表示されていても、2 つ目の分析元についてはまだ未解決であることがあります。 これを解決するには、2 番目のコード スキャン構成を再実行して、その分析元のアラートの状態を更新します。
アプリケーションコード中には見つからないアラートのラベルについて
GitHubは、アプリケーションコード中に見つからないアラートに対し、カテゴリラベルを割り当てます。 ラベルは、アラートの場所に関連づけられます。
- [生成済み] : ビルド プロセスによって生成されたコード
- [テスト] : テスト コード
- [ライブラリ] : ライブラリまたはサードパーティのコード
- [ドキュメント] : ドキュメント
は、ファイルをファイルパスによって分類します。 手動でソースファイルを分類することはできません。
以下は、ライブラリコード内で生じているとマークされたアラートのcode scanningアラートリストの例です。
アラート ページでは、ファイルパスがライブラリ コードとしてマークされている (Library
ラベル) ことがわかります。
実験的なアラートについて
注: 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
詳細については、「code scanning のカスタマイズ」を参照してください。
試験的なアラートを無効にする
機械学習を使用して試験的なアラートを生成するクエリを無効にする最も簡単な方法は、security-extended
または security-and-quality
クエリ スイートの実行を停止することです。 上記の例では、queries
行をコメントアウトします。 security-extended
または security-and-quality
スイートを引き続き実行する必要があり、機械学習クエリで問題が発生している場合は、以下の詳細を使用して GitHub サポートにチケットを開くことができます。
- チケットのタイトル: "code scanning: 実験的なアラート ベータからの削除"
- 影響を受けているリポジトリまたは組織の詳細を明示する
- エンジニアリングへのエスカレーションを依頼する