GitHubは、汎用シークレット検出の精度を高め、誤検知を減らすために、認証情報分類器を新たに訓練しました。新しいパイプラインは、従来の大規模言語モデル(LLM)ベースのパイプラインと比べて、プッシュ後スキャンの実行時間(中央値)を86%短縮し、モデルの運用コストを98%以上削減しました。
GitHubのシークレットスキャンは、開発の2つの段階をカバーしています。プッシュ保護は、プッシュが受け付けられる前に変更内容を検査し、開発者が認証情報の漏えいを防ぐのを支援します。プッシュ後スキャンは、リポジトリの内容を調べ、調査と対処が必要なシークレットの可能性があるものについてアラートを作成します。分類器の高速性により、GitHubは汎用シークレット検出をプッシュ保護にも拡大できるようになりました。

出典:GitHub
スキャナーがシークレット候補を評価する仕組み
構造化された認証情報には、識別しやすいプレフィックスや長さ、文字セット、チェックサムが備わっていることが多くあります。一方、汎用シークレットは、ビルド識別子やアセットのハッシュ、サンプル値など、機密性のない文字列と見分けがつきにくい場合があります。認証情報かどうかは、ファイル内での使われ方が判断の手がかりになります。
Batu Ozturkler氏とShengyu Fu氏は、次のように説明しています。「これらはハードネガティブ、つまり認証情報のパターンには一致するものの、実際には使えない文字列です。ルールを追加すれば一部は抑制できますが、例外を設けるたびに本物のシークレットを見逃すリスクが生じます。学習済みの分類器であれば、ファイルパス、シークレットの種類、変数名、周辺のコードやテキストといったシグナルを活用できます」
パイプランはまず、パスワードやアクセストークンなど認証情報に似た文字列を、正規表現で抽出します。次に、ファインチューニングしたModernBERTモデルが、ファイルパス、認証情報の種類、変数名、周辺のコードやテキストを使って各候補を評価します。
分類器は、候補が本物のシークレットである可能性を示すスコアを割り当てます。スキャナーのしきい値を満たした候補は、プッシュ後スキャンではアラートの、プッシュ保護ではブロックの対象となります。誤検知と判断されたものは除外されます。
この2段階の仕組みは、パターンマッチングと文脈分析を組み合わせたものです。ModernBERTはコードやテキストの短い断片に対する分類を担い、GitHubの規模でのスキャンに必要なスループットと応答時間を支えています。
モデルの訓練と検証
GitHubは、訓練用と評価用のデータセットを、製品へのフィードバック、正規表現スキャンで特定したリポジトリの事例、そしてデータが限られるケースや判別が難しいケースを補う合成データから構築しました。
データセットには本物のシークレットと誤検知の両方が含まれ、ラベル付けでは人間による検証とアノテーションが支えとなっています。合成データには、ドキュメント内のシークレット、テスト用フィクスチャ、公開鍵、チェックサム、認証情報に似た文字列が含まれます。これらの事例は、決定論的な検証とモデルによる品質レビューを経て採用されました。
データを分割する前に、チームは同じリポジトリ、候補値、事例を共有する行をグループ化しました。ほぼ重複するデータが訓練用と評価用の両方に紛れ込むのを防ぐためです。
チームはオフライン評価で分類のしきい値を選定し、展開前に本番利用に近いトラフィックで性能を検証しました。目標は、検出範囲を維持または向上させつつ、誤検知と運用コストを減らすことでした。
訓練済みのモデルは、推論を高速化するため、8ビット量子化を施したONNX形式にエクスポートされました。
評価結果と今後の方針
同一の公開トラフィックを用いたプッシュ後スキャンのオフライン評価では、新しいパイプラインは従来のLLMパイプラインより適合率が13%、再現率が19%高い結果となりました。これらの指標は、検出結果のうち本物のシークレットが占める割合と、実在するシークレットのうち検出できた割合をそれぞれ示します。
顧客を対象としたA/Bテストでは、リポジトリオーナー加重のアラート受け入れ率が11.5%上昇しました。GitHubは、大量のアラートを一括で解決する顧客の影響を抑えるため、受け入れ率をリポジトリオーナーで加重しています。
Ozturkler氏とFu氏は「適合率が高ければ、邪魔なアラートが減ります。再現率が高ければ、より多くの本物のシークレットを捕捉できます」と付け加えています。
GitHubは、本番環境からのフィードバックを使って見逃したシークレットや誤検知を特定し、その結果を訓練・評価データに反映させる計画です。あわせて、パイプラインを簡素化するため、シークレットの検出と抽出を1ステップで行えるアーキテクチャも検討しています。
翻訳元: https://www.helpnetsecurity.com/2026/10/14/github-secret-detection-model/