Copilot シークレット スキャン を使用した ジェネリックシークレットの検出 について
Copilot シークレット スキャンのジェネリックシークレットの検出は、AI の搭載により、ソース コード内の非構造化シークレット (パスワード) を識別してアラートを生成する、secret scanning の拡張です。
メモ
Copilot シークレット スキャン の ジェネリックシークレットの検出 を使用するには、GitHub Copilot のサブスクリプションは必要ありません。 Copilot シークレット スキャン 機能は、GitHub Secret Protection のライセンスを持つ organization と Enterprise が所有するリポジトリで使用できます。
GitHub Secret Protection ユーザーは、ソース コード内で見つかったパートナーまたはカスタム パターンの シークレット スキャンニング アラート を既に受信できますが、非構造化シークレットは簡単に検出できません。 Copilot シークレット スキャン は、大きな言語モデル (LLM) を使用してこの種類のシークレットを識別します。
パスワードが検出されると、secret scanning アラートの "汎用" 一覧 (リポジトリ、organization、または Enterprise の [Security] タブの下) にアラートが表示されます。メンテナとセキュリティ マネージャーはここでアラートをレビューし、必要に応じて資格情報を削除したり、修正を実装したりすることができます。
GitHub Enterprise Cloud を使うユーザーの場合、Enterprise 所有者は、まず organization 内のリポジトリに対して ジェネリックシークレットの検出 を有効または無効にできるかどうかを制御するポリシーを Enterprise レベルで設定する必要があります。 既定では、このポリシーは "許可" に設定されています。その後、リポジトリと組織に対して、この機能を有効にする必要があります。
入力処理
入力は、ユーザーがリポジトリにチェックインしたテキスト (通常はコード) に制限されます。 システムはこのテキストを LLM に��供し、さらにメタプロンプトを提供して、入力のスコープにおいてパスワードの検索を要求します。 ユーザーが直接 LLM と対話することはありません。
LLM を使用してシステムがパスワードをスキャンします。 既存の secret scanning 機能によって既に収集されているデータ以外に、システムが追加でデータを収集することはありません。
出力と表示
LLM はパスワードに似ている文字列をスキャンし、結果として見つかった文字列が、入力に実際に存在するかどうかを確認します。
こうして検出された文字列は、secret scanning アラート ページにアラートとして表示されますが、通常の シークレット スキャンニング アラート とは別の追加リストに表示されます。 別のリストにしておくことで、検出結果の妥当性がより精密に確認され、トリアージされることを意図しています。 各アラートは、AI を使用して検出されたことを示しています。 汎用シークレットのアラートを表示する方法については、「シークレット スキャンからのアラートの表示とフィルター処理」を参照してください。
ジェネリックシークレットの検出 のパフォーマンスの向上
ジェネリックシークレットの検出 のパフォーマンスを向上させるには、誤検知アラートを適切に閉じることをお勧めします。
アラートの精度を確認し、必要に応じてクローズする
Copilot シークレット スキャン の ジェネリックシークレットの検出 は、パートナー パターンの既存の secret scanning 機能よりも多くの誤検知を生成する可能性があるため、これらのアラートの精度を確認することが重要です。 アラートが誤検知だと確認した場合は、必ずアラートをクローズし、GitHub UI で理由を 「誤検知」 としてマークしてください。 GitHub 開発チームは、誤検知のボリュームと検出の場所に関する情報を使用してモデルを改善します。 GitHub は、シークレット リテラル自体にはアクセスできません。
ジェネリックシークレットの検出 の制限事項
Copilot シークレット スキャン の ジェネリックシークレットの検出 を使用する場合は、次の制限事項を考慮する必要があります。
制限付きのスコープ
ジェネリックシークレットの検出は、現在は、Git コンテンツのパスワードインスタンスを検索するだけです。 この機能では、他の種類のジェネリックシークレットは検索されず、GitHub Issues などの非 Git コンテンツ内のシークレットも検索されません。
誤検知のアラートである可能性
ジェネリックシークレットの検出は、既存の secret scanning 機能 (パートナー パターンを検出し、誤検知率が非常に低い) と比較すると、より多くの誤検知アラートが生成される可能性があります。 アラートはパートナー パターンのアラートとは別のリストにグループ化され、この過剰なノイズが軽減されます。セキュリティ マネージャーとメンテナンス担当者はそれぞれのアラートをトリアージして、精度を確認する必要があります。
不完全なレポートである可能性
ジェネリックシークレットの検出 は、リポジトリにチェックインされた資格情報のインスタンスを見逃す可能性があります。 時間の経過とともに、LLM は改善されます。 コードのセキュリティを確保するのは、最終的にはご自分の責任であり続けます。
設計上の制限事項
ジェネリックシークレットの検出 には、設計上、次の制限があります。
- Copilot シークレット スキャン は、明らかに偽のパスワードやテスト パスワード、または低エントロピのパスワードであるシークレットを検出しません。
- Copilot シークレット スキャン は、プッシュあたり最大 100 個のパスワードしか検出しません。
- 1 つのファイル内で検出された 5 つ以上のシークレットが誤検知としてマークされている場合、Copilot シークレット スキャン は、そのファイルの新しいアラートの生成を停止します。
- Copilot シークレット スキャン は、生成されたファイルまたはベンダー化されたファイル内のシークレットを検出しません。
- Copilot シークレット スキャン は、暗号化されたファイル内のシークレットを検出しません。
- Copilot シークレット スキャン は、ファイルの種類 (SVG、PNG、JPEG、CSV、TXT、SQLまたは ITEM) のシークレットを検出しません。
- Copilot シークレット スキャン は、テスト コードのシークレットを検出しません。 次の両方の条件を満たしている場合、Copilot シークレット スキャン は検出をスキップします。
- ファイル パスに、"test"、"mock"、または "spec" が含まれている、かつ
- ファイル拡張子が
.cs、.go、.java、.js、.kt、.php、.py、.rb、.scala、.swiftまたは.tsである。
ジェネリックシークレットの検出 の評価
ジェネリックシークレットの検出 は、責任ある AI レッド チーミングの対象であり、GitHub は、機能の有効性と安全性を経時的に監視し続けます。