コード スキャン
GitHub Advanced Security for Azure DevOps のコード スキャンを使用すると、Azure DevOps リポジトリ内のコードを分析して、セキュリティの脆弱性やコーディング エラーを見つけることができます。 分析によって特定された問題は、アラートとして発生します。 コード スキャンでは、CodeQL を使用して脆弱性を特定します。
CodeQL は、セキュリティ チェックを自動化するために GitHub によって開発されたコード分析エンジンです。 CodeQL を使用してコードを分析し、結果をコード スキャン アラートとして表示できます。 CodeQL に関するより具体的なドキュメントについては、「GitHub の CodeQL ドキュメント」を参照してください。
GitHub Advanced Security for Azure DevOps は、Azure Repos と連携して動作します。 GitHub リポジトリで GitHub Advanced Security を使用する場合は、「GitHub Advanced Security」を参照してください。
コード スキャンの追加構成
言語およびクエリのサポート
GitHub の専門家、セキュリティ研究者、コミュニティの共同作成者が、コード スキャンに使用される既定の CodeQL クエリを作成し、維持しています。 クエリは、分析を改善し、誤検知の結果を減らすために定期的に更新されます。 クエリはオープンソースであるため、github/codeql リポジトリ内のクエリを表示したり投稿したりできます。
CodeQL は、次の言語識別子をサポートし、使用します。
言語 | 識別子 | オプションの代替識別子 (存在する場合) |
---|---|---|
C/C++ | c-cpp |
c または cpp |
C# | csharp |
|
Go | go |
|
Java/Kotlin | java-kotlin |
|
JavaScript/TypeScript | javascript |
|
Python | python |
|
Ruby | ruby |
|
Swift | swift |
ヒント
- C、C++、またはその両方で記述されたコードを分析するには
c-cpp
を使用します。 - Java、Kotlin、またはその両方で記述されたコードを分析するには
java-kotlin
を使用します。 - JavaScript、TypeScript、またはその両方で記述されたコードを分析するには
javascript
を使用します。
詳細については、「サポートされている言語とフレームワーク」を参照してください。
CodeQL によって実行された特定のクエリとタスクの詳細をビルド ログで表示できます。
コード スキャン ビルド モードのカスタマイズ
コード スキャンでは、スキャン用のパイプラインを設定するときに、次の 2 つのビルド モードがサポートされます。
none
- CodeQL データベースは、コードベースを構築せずにコードベースから直接作成されます (解釈されるすべての言語でサポートされ、C# と Java でもサポートされます)。manual
- ワークフロー内のコードベースに使用するビルド ステップを定義します (すべてのコンパイル型言語でサポートされています)。
各ビルド モードの利点の比較など、さまざまなビルド モードの詳細については、「コンパイルされた言語に対する CodeQL コード スキャン」を参照してください。
GitHub Advanced Security for Azure DevOps 経由でコード スキャン分析を実行する場合、autobuild
ビルド モードは別のビルド タスクではなく、AdvancedSecurity-CodeQL-Autobuild@1
になります。
ヒント
ビルド モード none
は、他の解釈された言語 (JavaScript、Python、Ruby など) と組み合わせて使用できます。
ビルド モード none
が、ビルド モード none
をサポートしていない他のコンパイル済み言語と共に C# または Java に指定されている場合、パイプライン タスクは失敗します。
複数の言語と none
ビルド モードを使用した有効な構成の例を次に示します。
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# and Java, and JavaScript is an interpreted language
# and build mode `none` has no impact on JavaScript analysis
languages: 'csharp, java, javascript'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
複数の言語と none
ビルド モードを使用した無効な構成例を示します。
trigger: none
pool:
vmImage: windows-latest
steps:
- task: AdvancedSecurity-Codeql-Init@1
displayName: Initialize CodeQL
inputs:
# build mode `none` is supported for C# but build mode `none` is NOT supported for Swift
# so this pipeline definition will result in a failed run
languages: 'csharp, swift'
buildtype: 'none'
- task: AdvancedSecurity-Codeql-Analyze@1
displayName: Perform CodeQL Analysis
コード スキャンのアラート
GitHub Advanced Security for Azure DevOps コード スキャン アラートには、コード レベルのアプリケーションの脆弱性を警告するリポジトリ別のコード スキャン フラグが含まれています。
コード スキャンを使用するには、まず GitHub Advanced Security for Azure DevOps を構成する必要があります。
Azure DevOps の [Repos] の下にある [Advanced Security] タブは、コード スキャン アラートを表示するためのハブです。 [コード スキャン] タブを選択して、スキャン アラートを表示します。 ブランチ、状態、パイプライン、ルールの種類、重大度ごとにフィルター処理できます。 現時点では、アラート ハブには、PR ブランチで完了したスキャンに関するアラートは表示されません。
パイプラインまたはブランチの名前が変更されても、結果に影響はありません。新しい名前が表示されるまでに最大 24 時間かかる場合があります。
カスタム CodeQL クエリを実行する場合、既定では、異なるクエリ パックから生成されたアラートに対して個別のフィルターはありません。 ルールでフィルター処理でき、これはクエリごとに異なります。
リポジトリの Advanced Security をオフにすると、[高度なセキュリティ] タブ内の結果と、[タスクの構築] にアクセスできなくなります。 ビルド タスクは失敗しませんが、Advanced Security が無効になっている間、ビルドの結果はタスクと共に実行され、非表示になり、保持されません。
[アラートの詳細]
アラートを選択すると、修復ガイダンスなどの詳細を確認できます。 各アラートには、場所、説明、例、重大度が含まれます。
セクション | 説明 |
---|---|
Location | [場所] セクションには、CodeQL が脆弱性を検出した特定のインスタンスについての詳しい説明があります。 同じルールに違反しているコードのインスタンスが複数ある場合は、異なる場所ごとに新しいアラートが生成されます。 [場所] カードには、影響を受けるコード スニペットへの直接リンクが含まれているため、スニペットを選択して Azure DevOps Web UI に移動して編集することができます。 |
説明 | この説明は、問題に基づいて CodeQL ツールによって提供されます。 |
推奨 | 推奨事項は、特定のコード スキャン アラートに対して推奨される修正プログラムです。 |
例 | 例のセクションでは、コード内で特定された弱点の簡略化された例を示します。 |
重大度 | 重大度レベルは、低、中、高、クリティカルのいずれかになります。 重大度スコアは、特定の共通脆弱性タイプ一覧 (CWE) に与えられた共通脆弱性評価システム (CVSS) スコアに基づいています。 重大度のスコア付け方法の詳細については、こちらの GitHub ブログ記事を参照してください。 |
リポジトリのアラートの表示
リポジトリの共同作成者アクセス許可を持つすべてのユーザーは、[Repos] の下の [Advanced Security] タブで、リポジトリのすべてのアラートの概要を表示できます。 [コード スキャン] タブを選択して、すべてのシークレット スキャン アラートを表示します。
結果を表示するには、コード スキャン タスクを最初に実行する必要があります。 最初のスキャンが完了すると、検出されたすべての脆弱性が [Advanced Security] タブに表示されます。
既定では、アラート ページには、リポジトリの既定のブランチの依存関係スキャン結果が表示されます。
特定のアラートの状態には、他のブランチとパイプラインにアラートが存在する場合でも、既定のブランチと最新の実行パイプラインの状態が反映されます。
コード スキャン アラートの無視
アラートを無視するには、適切なアクセス許可が必要です。 既定では、プロジェクト管理者のみが Advanced Security のアラートを無視できます。
アラートを無視するには:
- クローズするアラートに移動し、アラートを選択します。
- [アラートを閉じる] ドロップダウンを選択します。
- クローズする理由として [リスクの許容] または [誤検知] を選択します (まだ選択していない場合)。
- [コメント] テキスト ボックスに、任意でコメントを追加します。
- [閉じる] を選択してアラートを送信して閉じます。
- アラートの状態が [オープン] から [クローズ] に変わり、無視の理由が表示されます。
このアクションにより、選択したブランチのアラートのみが無視されます。 同じ脆弱性を含む他のブランチは、無視されるまでアクティブなままです。 以前に無視されたアラートを手動で再オープンできます。
プル要求でコード スキャン アラートを管理する
プル要求の新しいコード変更に対してアラートが作成された場合、アラートは pull request の [概要] タブのコメント セクションの注釈として、および [Advanced Security repository] タブのアラートとして報告されます。pull request ブランチ用の新しいブランチ ピッカー エントリがあります。
影響を受けるコード行を確認し、結果の概要を確認し、[概要] セクションで注釈を解決できます。
プル要求アラートを無視するには、[アラート詳細] ビューに移動して、両方のアラートを閉じて注釈を解決する必要があります。 それ以外の場合は、コメントの状態 (1) を変更するだけで注釈は解決されますが、基になるアラートを閉じたり修正したりすることはありません。
プル要求ブランチの全体的な結果を確認するには、[リポジトリ]>[高度なセキュリティ] の順に選択し、プル要求ブランチを選択します。 注釈 [詳細の表示 (2) を選択すると、[セキュリティの詳細設定] タブのアラートの詳細ビューが表示されます。
ヒント
注釈は、影響を受けるコード行が pull request のターゲット ブランチと比較してプル要求の違いに完全に一意である場合にのみ作成されます。