仕組み
repoのリンクから検証済みの検出結果まで
このパイプラインは、AnthropicがOSS Scannerについて説明したものを踏襲しています。脅威モデル、監査、再確認、根本原因、パッチという流れを、公開APIから利用できる最先端のClaudeモデル上に構築しています。
- 1
安全なクローン
HTTPS経由で、指定されたブランチを浅くクローンし、blobフィルターを適用して取得します。Gitフックは無効化され、シンボリックリンクは通常のファイルとしてチェックアウトされます。また、HTTPS以外のすべての通信方式を拒否します。プライベートネットワークアドレスはブロックされるため、スキャナーを内部ホストに向けることはできません。
repo内のものが実行されることはありません。ビルド、パッケージのインストール、テストは行いません。チェックアウトはスキャン終了時に削除されます。
- 2
インベントリ作成とリスク順位付け
すべてのテキストソースファイルについて、言語とサイズを一覧にします。ベンダーコード、生成ファイル、圧縮済みバンドル、ロックファイルは対象外です。各ファイルにはリスクスコアが付与されます。スコアは、危険なシンク(メモリコピー、シェル実行、デシリアライズ、SQL構築、テンプレート描画、パス結合、暗号処理、認証コード)と、パーサー、プロトコルハンドラー、リクエストルーティングなどの重要な処理経路に基づいて算出されます。
- 3
脅威モデル
repoに.oss-scanner/threat_model.md(Anthropicのスキャナーが読み込むものと同じファイル)、SECURITY.md、または登録時に提供された脅威モデルがある場合、スキャナーはそれに従います。いずれもない場合は、モデルがREADME、ディレクトリ構成、最もリスクの高いファイルを読み、脅威モデルの草案を作成します。プロジェクトの概要、信頼できない入力が入る箇所、対象外となる範囲を記述します。
脅威モデルでは重点的に調べるファイルも選定するため、監査のリソースを攻撃者が実際に到達できるコードに集中できます。
- 4
監査
最もリスクの高いファイルを行番号付きの大きなバッチにまとめ、脅威モデルを添えて推論モデルに送信します。慎重な人間の監査担当者が報告するような問題を探します。
- メモリ安全性:バッファオーバーフロー、use-after-free、整数の切り詰め
- インジェクション:SQL、コマンド、テンプレート、パストラバーサル、SSRF
- 認証、認可、セッションのロジック
- 安全でないデシリアライズとパーサーの誤認
- 暗号の誤用とシークレットの取り扱い
クイックスキャンでは、適度な予算でClaude Haikuを使用します。登録済みプロジェクトのディープスキャンではClaude Sonnetを使用し、最大4倍のコードを読み取ります。
- 5
独立した検証
検出候補はすべて、新しいコンテキストを持つ別の検証エージェントに送られます。その役割は、検出候補が誤りであることを示すことです。データフローを追跡し、別の箇所で検証されていないかを調べ、脅威モデルに照らして入力が本当に攻撃者によって制御可能かを確認します。検証済み、または可能性が高いと評価されたものだけが残り、それ以外は却下として集計されます。
残った検出結果について、検証エージェントは根本原因、再現用入力、統合diff形式の最小限のパッチ案を作成します。
- 6
導入コミットとレポート
根本原因が共通する重複は統合されます。脆弱な行に対してgit blameを実行し、その行に最後に変更を加えたコミットを特定します。通常は、そのコミットがバグを持ち込んだものです。これにより、Fixes:タグを追加し、影響を受けるリリースを特定できます。
レポートはランダムで推測困難なIDの下に保存されます。アドバイザリ用のMarkdown、ツール用のJSON、またはGitHub code scanning用のSARIF 2.1.0としてエクスポートできます。
スキャナーが行わないこと
- コードの実行、ビルド、依存関係の取得は行いません。
- 検出結果の公開、issueの作成、登録済みのメンテナー以外への連絡は行いません。
- スキャン後にソースコードのコピーを保持しません。レポートには、影響を受ける行の短い抜粋が含まれます。
- 結果を保証するものではありません。モデルはバグを見逃すことも、誤った問題を報告することもあります。問題が見つからなかったレポートは、セキュリティ認証ではありません。
再現用入力を非公開にする理由
メンテナーでない人を含め、誰でも公開repoのリンクを貼り付けられます。根本原因とパッチは防御側に役立ちますが、動作する概念実証は主に攻撃者の助けになります。そのため、誰かがrepoにトークンファイルをコミットするまで、再現用入力は非公開のままです。これは、修正をリリースできることの証明になります。AIが発見したバグの再現用入力は、メンテナーから求められた場合に共有すべきだとするLinuxカーネルのガイダンスに沿った方針です。
AnthropicのOSS Scannerとの違い
Anthropicは、Dockerfileからプロジェクトをビルドしたうえで、オフラインのサンドボックス内でスキャナーを実行します。これにより、エージェントはコードをコンパイル、実行して、バグを動的に確認できます。また、一般には利用できないClaude Mythosを含む、最も高性能なモデルを使用します。私たちは、一般公開されているClaudeモデルを使ってコードを静的に読み取ります。その代わり、申し込みもDockerfileも必要なく、誰でも数分でossscanner.orgを利用できます。