メモ
AI スキャンは現在 パブリック プレビュー 中であり、変更される可能性があります。
AI スキャンは、プル要求で実行され、 CodeQLを補完する AI ベースのスキャン エンジンを使用して、追加のセキュリティ結果を生成します。 CodeQLアラートとは異なり、AI スキャンの結果はプル要求でのみ使用でき、リポジトリのセキュリティ ビューではバックログ アラートとして表示されません。
CodeQLでは、サポートされている特定の言語とクエリのセットに対して高精度の静的分析が提供されますが、多くのリポジトリでは、CodeQLがカバーしていない言語とフレームワークが使用されます。 AI スキャンは、 code scanning の対象範囲をこれらの領域に拡大し、新しいツールや構成を追加することなく脆弱性を見つけるのに役立ちます。
パブリック プレビュー中、AI スキャンにはGitHub Advanced Security ライセンスとGitHub Copilot ライセンスが必要です。
使用するとAI creditsが消費されます。 「組織と企業の使用量ベースの課金」を参照してください。
AI スキャンのしくみ
リポジトリに対して code scanning が有効になっており、リポジトリの実効的な AI Scan 設定が有効で、対象となるプル リクエストに CodeQL でカバーされていない、サポート対象の言語またはフレームワークでの条件を満たす変更が含まれている場合、AI Scan は自動的に実行されます。 これらの条件によって、AI スキャンの使用が開始されるタイミングも決まります。 スキャンは、プル要求の作成時と、新しいコミットのたびに、 CodeQLと同じようにトリガーされます。
AI スキャンでは、既定 CodeQL セットアップは必要なく、 CodeQL 分析の状態に依存しません。 CodeQL分析が失敗した場合、または待機状態の場合でも、AI スキャンは実行されます。
AI スキャンの結果はアドバイザリであり、プル要求のマージをブロックしません。 これらは、ワークフローを中断することなくコード セキュリティを改善できる場所に関するシグナルを提供します。
AI スキャン エンジンは、プル要求内のコードと直接連携し、ビルド システムを必要としません。 コード検索などのツールを使用して、問題にフラグを設定するかどうかを決定するときに、リポジトリから追加のコンテキストを収集します。 独自の特殊なプロンプトを使用し、 /.github/copilot-instructions.md や /CLAUDE.mdなどのカスタム命令ファイルは使用しません。
結果は、検出されると pull request にポストされます。 CodeQL スキャンの完了に時間がかかる場合は、結果が表示される前に AI スキャンの結果CodeQL表示される場合があります。その逆も同様です。
プル要求での AI スキャンの結果の表示方法
AI スキャンの結果は、プル要求の [会話] タブと [ファイル] 変更タブにCodeQLアラートと共に表示されます。 各結果には "AI" インジケーターのラベルが付いているため、 CodeQL アラートと区別できます。
各結果には、セキュリティの問題の説明とリスクの説明が含まれます。 ほとんどの結果には推奨される修復も含まれますが、すべての結果に解決策が含まれているわけではありません。 推奨される修復が利用可能な場合は、 Copilot Autofix が含まれており、 CodeQL アラートの場合と同じように、問題を修正するための推奨されるコード変更が提供されます。 結果には、時間の経過に伴う検出品質の向上に役立つサムアップ/ダウン フィードバック メカニズムも含まれます。
Limitations
- AI スキャンでは、プル要求のみが分析されます。 完全なリポジトリ スキャンはサポートされていません。
- AI スキャンの結果は、マージ要件を適用するためにルールセットではまだ使用できません。
- AI スキャンは、フォークからのプル要求や、 Dependabotによって作成されたプル要求では実行されません。
- 検出カテゴリとサポートされている言語は、機能の進化に伴って変更される可能性があります。
- AI ベースのツールと同様に、AI スキャンの結果には誤検知が含まれる場合があります。 フィードバック メカニズムを使用して、不正確な結果を報告します。
サポートされている言語
AI スキャンは、現在 CodeQLでサポートされていない言語とフレームワークに対応するように設計されています。 これには、PHP、シェル/Bash、Terraform 構成 (HCL)、Dockerfile などの言語のほか、Javaの JSP や C# 用 Blazor などのフレームワーク カバレッジギャップが含まれますが、これらに限定されません。
CodeQLでサポートされている言語の完全な一覧については、CodeQL を使用したコード スキャン を参照してください。
検出カテゴリ
AI スキャンでは現在、次のカテゴリが対象です。 これらのカテゴリでは、結果の分類方法について説明します。 スキャン エンジンは、モデルの改善に伴って時間の経過と同時に進化する可能性があります。
- 文字列挿入 — エスケープまたはサニタイズが不足しているか正しくない、安全でない文字列で構築された SQL、HTML、シェル、JSON、または YAML。
- 弱い暗号化 - 弱いアルゴリズム、小さなキー、安全でないランダム性、暗号化の欠落、または脆弱なパスワード ハッシュ。
- アクセス制御の中断 - パス トラバーサル、CSRF ギャップ、またはユーザー主導のオープン リダイレクト。
- 機密データの公開 — シークレット、トークン、パスワード、またはスタック トレースは、適切な保護なしで保存、ログ記録、または送信されます。
- セキュリティ構成の誤り — セキュリティ コントロールの無効化やデバッグ機能の有効化など、危険な既定値または設定。
- 認証エラー - TLS または検証、安全でない認証フロー、またはレート制限の欠落。
- データ整合性エラー — 安全でない逆シリアル化、機密性の高いアクションの HTTP、プロトタイプの汚染、または信頼されていないコンテンツの実行。
- サーバー側要求フォージェリ (SSRF) - サーバーは、攻撃者が制御する URL、ホスト、またはプロトコルをフェッチします。
- サプライ チェーンのリスク - 固定されていないサード パーティのアクション、パッケージ、イメージ、または整合性チェックなしのダウンロード。
AI スキャンの有効化
AI スキャンは、既定ではエンタープライズ レベルでは許可されず、組織レベルとリポジトリ レベルでは無効になっています。 エンタープライズ所有者は、組織の管理者が AI スキャンを有効にする前に、AI スキャンを許可する必要があります。 組織の AI スキャンを有効にすると、 code scanning が有効になっている適格なリポジトリに適用されます。 リポジトリ管理者は、個々のリポジトリをオプトアウトできます。 個人アカウントが所有する対象のパブリック リポジトリの場合、リポジトリ管理者はリポジトリに対して直接 AI スキャンを有効にする必要があります。
AI スキャンを有効にするためにモデルを選択する必要はありません。
- エンタープライズ: [コード セキュリティ] の下の AI スキャン ポリシーは、組織が機能を有効にできるかどうかを制御します。 「エンタープライズのコード セキュリティと分析のためのポリシーの適用」を参照してください。
- 組織: [コード スキャン] の下の [AI スキャン ] 設定では、 code scanning が有効になっている組織内の適格なリポジトリに対して AI スキャンが有効になります。 「組織のグローバル セキュリティ設定の構成」を参照してください。
- リポジトリ: 組織所有のリポジトリの場合、[コード スキャン] の下の [AI スキャン ] トグルを使用すると、組織で AI スキャンが有効になっているときにリポジトリ管理者がオプトアウトできます。 個人アカウントが所有する対象のパブリック リポジトリの場合、トグルは AI スキャンを直接有効または無効にします。
REST API を使用して、組織またはリポジトリの ai-scan 設定を管理できます。 「コード スキャン用の REST API エンドポイント」を参照してください。