本文へ移動

AI Buildersのための最新のニュース、知見、事例を毎日お届け

運営会社
企業のセキュリティ対策GitHub

「秘密情報らしい文字列」を文脈で見分ける GitHubが検出をLLMから小型モデルに替えた

GitHubが公表した秘密情報の検出モデルの数字を、測り方と資料に書いていない事と並べて示す。プッシュ保護でAIの検査を有効にするかを決める時の材料にする。

米GitHubは10月14日(米国時間13日)、リポジトリに紛れた秘密情報を見つける仕組みを、LLMから微調整した小さな分類モデルに替えた経緯を公表した。正規表現で候補を拾い、モデルが周りのコードを読んで本物かを決める。持ち主ごとに重みを付けた警告の受け入れの割合は11.5%上がり、コミットの後の検査の時間の中央値は86%、費用は98%余り減った。数字は自社の測定で、元の値は書いていない。

記事の内容を自社でどう進めるか、内容が固まっていない段階でも相談できます。仕事の相談

毎週 1 回、その週の記事から 5 本と実践の 1 本を選んでメールで届けます。ニュースレターを購読する(無料)

青い盾にチェックの印が入った透明な箱を中心に、青と緑の立方体が斜めに連なる様子を描いたイラスト
画像: GitHub

米GitHubは10月14日(米国時間13日)、技術ブログで、リポジトリに紛れた秘密情報の検出を、LLMから小さな分類モデルに替えた経緯を公表した。正規表現で候補を拾い、ModernBERTが周りのコードから本物かを判定する。前のLLMの仕組みと比べ、持ち主ごとに重み付けした警告の受け入れ率は11.5%上がり、コミットの後の検査の時間の中央値は86%、費用は98%余り減った。

書いたのは米Microsoftの研究者2人だ。対象は、トークンの形が決まっていない「汎用の秘密情報」で、パスワードや接続文字列がこれに当たる。同じ形の文字列が、本物の資格情報のこともあれば、ドキュメントの例のこともある。

正規表現で拾いモデルで絞る

資料の図は4段の流れを示す。リポジトリの中身やコミット、プルリクエストを読み、正規表現で資格情報らしい文字列を広く拾う。次にModernBERTが、候補の値とファイルのパス、変数の名前、周りのコードを合わせて読み、本物である確率を出す。確率の高い物だけを警告にし、プレースホルダーやテストの固定値、チェックサムは開発者に届く前に落とす。

GitHubは、モデルが正規表現を置き換えるのではないと強調する。候補を速く漏れなく拾うのは正規表現の役目で、モデルは「秘密情報に見える」と「本物らしい」を分ける所だけを受け持つ。周りに「example」や「dummy」「replace-me」がある候補は危険が低く、デプロイのファイルで環境変数に入れた候補は高い。こうした違いを、規則を足すのでなく、ラベルを付けた例から学ばせた。

モデルは文章を生成しない分類器で、ONNX形式に書き出して8ビットに量子化した。LLMを呼ぶより軽く速いので、コミットの後の検査だけでなく、プッシュの前の検査にも広げられたという。

3つの数字の出どころと測り方

数字は2段で測った。まずオフラインで、同じ公開のトラフィックに前のLLMの仕組みと新しい仕組みを掛けた。コミットの後の検査で、適合率は13%、再現率は19%高かった。

次に顧客を2群に分けるA/Bテストを行い、警告を受け入れた割合が11.5%上がった。リポジトリの持ち主ごとに重みを付けたのは、大量の警告を一度に片付ける顧客が、単純な平均をゆがめないようにするためだ。検査の時間の中央値の86%減は本番の検査で、費用の98%余り減は、小さなモデルとLLMの呼び出しの費用の比較だ。

学習のデータは3つから作った。GitHubの製品で得た利用者の反応と人の確認、正規表現の候補に付けたラベル、まれで難しい例を補う合成のデータだ。合成のデータは、決まった検査とモデルの確認を通した物だけを入れた。同じリポジトリや同じ値の行をまとめてから学習用と評価用に分け、近い重複が両方に入らないようにした。

資料に書いていない事

数字はGitHubが自社の製品を自ら測った結果で、第三者の検証は示していない。比べた相手は前のLLMの仕組みで、他社の検出ツールではない。

11.5%と13%、19%が、率の差なのか、元の値に対する増え方なのかは資料に記載がない。元の適合率と再現率、A/Bテストの期間と規模、学習のデータの件数、警告にする確率の線の値も書いていない。資料は、その線をオフラインの評価で選び、本番に近いトラフィックで確かめてから広げたと書くにとどまる。資料はモデルとデータを公開するとは書いておらず、外から再現する手段も示していない。資料は次の課題として、利用者の反応を学習に戻す仕組みと、検出と値の取り出しを1段で行う形を挙げており、どちらもまだ結果は無い。

自分の仕事で試すなら

GitHubの組織で使うなら、まず料金の線を確かめる。10月7日の変更履歴によると、コミットの後の検査でAIが見つけた秘密情報の警告は、GitHub Secret ProtectionかGitHub Advanced Securityの契約に含まれ、追加の料金は無い。一方、プッシュ保護でのAIの検査と、近く始める予定のCopilotの/security-reviewでの検査はAIクレジットを使う。

プッシュ保護でのAIの検査は、10月28日に公開プレビューになった。デフォルトでは無効で、AIの秘密情報の検出とプッシュ保護の両方を有効にしたリポジトリで、「Block AI-detected secrets」を有効にする。初期の結果では、プッシュ保護が秘密情報を止めたプッシュの数が2倍を超えたという。検査はプッシュを止めなくてもクレジットを使い、費用は原則としてリポジトリを持つ組織に付く。GitHub Enterprise Serverでは、3.23でAIが見つけた秘密情報の警告が公開プレビューになる。まず一部のリポジトリで有効にし、止まった件数と誤り、クレジットの消費を数えてから広げる。

自前の検出を作るなら、資料の結論も使える。範囲の狭い判定で、正解を測れて、速さと費用が重い時は、微調整した小さな分類器がLLMより向くという。正規表現の候補を残したまま後段だけを替える形なので、今の仕組みに足して試しやすい。

編集部の見方

この資料の一番の中身は、検出の精度よりも「プッシュの前に置ける速さと費用」だと編集部は見る。11.5%の改善は元の値が分からず、大きさを測りにくい。一方で検査の時間と費用が大きく減ったことで、LLMでは重すぎたプッシュの前の検査が成り立った。秘密情報は、履歴に入る前に止めるのが一番安い。有効にするかは、止まった件数と誤りを自分たちのリポジトリで数えて決める。

この記事をシェア

この記事は役に立ちましたか