Skip to main content

Copilotシークレットスキャンを使用したジェネリックシークレットの責任ある検出

Copilot シークレット スキャン が責任を持って AI を使用し、パスワードなどの非構造化シークレットをスキャンしてアラートを作成する方法について説明します。

この機能を使用できるユーザーについて

Copilot シークレット スキャンは、次のリポジトリで使用できます。

  • GitHub Advanced Security が有効な GitHub Enterprise Cloud を使用している組織のパブリック、プライベート、および内部リポジトリ

Copilot シークレット スキャン を使用した ジェネリックシークレットの検出 について

Copilot シークレット スキャンのジェネリックシークレットの検出は、AI の搭載により、ソース コード内の非構造化シークレット (パスワード) を識別してアラートを生成する、secret scanning の拡張です。

GitHub Advanced Security ユーザーは、パートナーまたは顧客のパターンのソース コードで見つかった シークレット スキャンニング アラート を受け取ることは既にできていますが、非構造化シークレットは簡単には検出できません。 Copilot シークレット スキャン は、大きな言語モデル (LLM) を使用してこの種類のシークレットを識別します。

パスワードが検出されると、secret scanning アラートの「実験的」一覧 (リポジトリ、組織、またはエンタープライズの [セキュリティ] タブの下) にアラートが表示されるため、メンテナンス担当者とセキュリティ マネージャーはアラートを確認し、必要に応じて資格情報を削除するか、修正プログラムを実装できます。

ジェネリックシークレットの検出を使用するには、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 は、機能の有効性と安全性を経時的に監視し続けます。

参考資料