脅威モデリング、スキャン、トリアージ、パッチ適用のスキルに加え、カスタマイズ可能な自律型スキャンハーネス
Claude Mythos Preview のリリース以降、複数の組織のセキュリティチームとの協業から得た知見に基づく、Claude を用いた自律的な脆弱性発見と修正のためのリファレンス実装です。これらの知見とベストプラクティスについては、付随するブログ記事(blog-post.md でも入手可能)を参照してください。同じ recon → find → triage → report → patch ループの軽量な SDK のみのウォークスルーについては、コンパニオンクックブックを参照してください。
このリポジトリはメンテナンスされておらず、コントリビューションを受け付けていません。
🔒 マネージドオプションをご希望ですか? Anthropic は Claude Security を提供しています。これはホスト型製品であり、 複数のプロジェクトにわたってソースコード内の脆弱性を発見・修正します。Claude Security はリポジトリの脆弱性をスキャンし、 マルチステージの検証パイプラインを適用して false positive を削減し、 トリアージ、修正検証、迅速な修正生成といったライフサイクルを通じて発見結果を管理できます。
このリポジトリは、Claude を使用して脆弱性を発見するための一般的なベストプラクティスに基づくオープンソースのリファレンス実装です。 独自の脆弱性発見パイプラインを構築したり、ロジックをカスタマイズしたりするために使用でき、 Claude API へのアクセス方法(Bedrock、Vertex、Azure を含む)に関わらず利用できます。
/quickstart、/threat-model、/vuln-scan、
、、:インタラクティブなスコープ設定、スキャン、トリアージ、
およびパッチ適用。このリポジトリを Claude Code で開き、 を実行して概要を把握してください。/triage/patch/customize/quickstartharness/:自律的なリファレンスパイプライン(recon → find → verify
→ report → patch)で、Docker と ASAN を使用して C/C++ のメモリ脆弱性を発見するように構成されています。
このハーネスは 製品ではなくリファレンス です。
全体的な構造、プロンプト、サンドボックス化は再利用可能ですが、
ハーネスがそのまま全てのコードベースで動作するわけではありません。/customize を実行して、使用する言語、
検出器、脆弱性クラスに移植してください。⚠️ セキュリティ:
/quickstart、/threat-model、/vuln-scan、/triageはファイルの読み書きのみを行います。静的発見結果(TRIAGE.jsonまたはVULN-FINDINGS.json)に対する/patchの実行も同様に読み取り専用および書き込み専用です。/customizeは ハーネスコードを編集し、検証コマンドを実行します。これらのスキルは、Claude Code で各ツールの使用を確認・承認する限り、 サンドボックスなしで実行しても安全です。 自律的なリファレンスパイプライン(パイプライン結果に対する/patchを含む)は ターゲットコードを実行する ため、 明示的に上書きしない限り、gVisor サンドボックス外では実行を拒否します。 セットアップするには、scripts/setup_sandbox.shを一度実行し、その後bin/vp-sandboxedを介してパイプラインを起動します。 詳細については、docs/security.md および docs/agent-sandbox.md を参照してください。
git clone https://github.com/anthropics/defending-code-reference-harness
cd defending-code-reference-harness
claude
# 30秒のイントロ + カナリアターゲットでのガイド付き初回実行
> /quickstart
> /quickstart how do I port the pipeline to Java?
> /quickstart how do I triage all these bugs?
私たちが協業したセキュリティチームの中で最も成功しているのは、できるだけ早く実践に移ったチームです。 完璧なパイプラインを設計するのに何ヶ月も費やしたくなる気持ちは理解できますが、初日は小さく始めて、 学びを得ながら構築していくことをお勧めします。以下の手順はそのパターンに従い、私たちが見てきたものに基づいた 野心的でありながらも妥当なペースを設定しています。
1日目は、ループ全体をエンドツーエンドで確認することに焦点を当てます。インタラクティブなスキルのみを使用して、 脅威モデルを構築し、それに基づいてスコープ設定された静的スキャンを実行し、返ってきた結果をトリアージし、 修正候補をドラフトします。一日の終わりには、脅威モデル、ランク付けされた静的発見結果、および修正候補が完成します。
関連するスキルは、リポジトリ内のファイルの 読み取りと書き込みのみ を行います。Claude Code を インタラクティブに実行し、各ツールの使用を承認する限り、サンドボックスは必要ありません。
# すべてのサブエージェントを使用したいモデルに固定
export CLAUDE_CODE_SUBAGENT_MODEL=<model-id>
claude
# 0. イントロ + ガイド付き初回実行
> /quickstart
# 1. 脅威モデルを構築(撃つ前に狙いを定める)
> /threat-model bootstrap targets/canary
# 2. 脅威モデルに基づいてスコープ設定された静的スキャンを実行
> /vuln-scan targets/canary
# 3. 返ってきた結果を検証、重複排除、ランク付け
> /triage targets/canary/VULN-FINDINGS.json
# 4. 検証済み発見結果に対する修正候補を生成
> /patch ./TRIAGE.json --repo targets/canary
このフローにより、THREAT_MODEL.md、VULN-FINDINGS.{json,md}、
TRIAGE.{json,md}、および PATCHES/ が生成されます。
ステップ 1 で生成される脆弱性候補は、Claude によるソースの静的レビューに基づいており(何もビルドや実行は行われません)、 そのためカナリア以外のターゲットではより多くの false positive が予想されます。ステップ 2 では、実行検証済み の発見結果を生成します。
注: カナリアターゲットでは、
/triageがスキャンの発見結果を false positive として棄却することがあります。entry.cは意図的に脆弱なデモコードであることを宣言しており、/triageはテスト/フィクスチャコードのバグを 正しく除外します。完全な確認/重複排除/false positive フローを確認するには、代わりにキュレーションされた フィクスチャで実行するか(/triage .claude/skills/triage/fixtures/canary-findings.json --repo targets/canary)、 ステップ 1 のスキルを自分のコードに向けてください。
2日目は、インタラクティブなスキルから、リファレンスパイプラインを使用した最初の自律実行に移行します。 既知の脆弱性があるオープンソースライブラリに対して、自身の環境で完全な recon → find → verify → report ループを実行し、 発見されたものに対する修正候補を生成します。一日の終わりには、再現可能なクラッシュ、悪用可能性レポート、 修正候補のセットとともに、パイプラインの動作感覚が身につきます。
パイプラインの実行は簡単です:
# 一度だけのセットアップ
python3 -m venv .venv && .venv/bin/pip install -e .
./scripts/setup_sandbox.sh # gVisor をインストール、エージェントイメージをビルド、分離を検証;注意:Docker が必要
export ANTHROPIC_API_KEY=sk-ant-... # または CLAUDE_CODE_OAUTH_TOKEN、Bedrock — docs/agent-sandbox.md を参照
# recon → find → verify → report ループを実行
bin/vp-sandboxed run drlibs --model <model-id> --runs 3 --parallel --stream --auto-focus
# 各発見結果に対する修正候補を生成
bin/vp-sandboxed patch results/drlibs/<timestamp>/ --model <model-id>
# または、Claude Code にパイプラインを起動させ、実行を監視させる
claude
> run the pipeline on drlibs and explain findings as they come
ループの結果は results/drlibs/<timestamp>/ ディレクトリに保存されます。
--stream フラグを使用すると、最初のレポートが数分以内に reports/bug_NN/ の下に表示されます。
⚠️
runは自律エージェントを起動します。 パイプラインは各エージェントを egress が Claude API に制限された gVisor コンテナ内で実行します。 エージェントを起動するサブコマンドは、明示的に上書きされない限り、その外での起動を拒否します。 詳細については、docs/security.md および docs/agent-sandbox.md を参照してください。
内部的には、パイプラインは 7 つのステージを経ます:
Dockerfile を使用してこのイメージを自動的にビルドします。--auto-focus フラグがない場合、パイプラインはターゲットの config.yaml の focus_areas リストを使用します。詳細については、docs/pipeline.md を参照してください。
3~5日目では、ハーネスを自身のターゲットに合わせてカスタマイズします。まず、ステップ 1 のスキルを自身のコードに向け、次に /customize を使用してパイプラインを自身のスタックに移植します。週末までに、パイプラインが実行可能な targets/<your-service>/ ディレクトリが作成され、パイプラインの単一のスモーク実行で検証され、ステップ 4 でスケールアップする準備が整います。
リファレンスパイプラインは C および C++ コードのメモリ脆弱性の発見向けに設計されていますが、その構造は汎用的です。新しい脆弱性クラスや言語に移植するには、ターゲットスタックに対して次の質問に答えるだけです:
| 質問 | C/C++ リファレンス | ターゲット(例) |
|---|---|---|
| 何が発見のシグナルか? | ASAN クラッシュシグネチャ | 例外 / カナリアファイル / DNS コールバック |
| proof of concept はどのような形か? | クラッシュさせる入力ファイル | HTTP リクエストシーケンス / tx リスト / テストハーネス |
| ターゲットはどのようにビルド・実行されるか? | Dockerfile(clang + ASAN を使用) | コンテナ内の使用言語のビルド |
カスタマイズする前に、ステップ 1 のスキルを自身のコードに向けてください。繰り返しになりますが、これらのスキルは読み取り専用および書き込み専用であるため、サンドボックスなしで実行できます。
claude
> /quickstart how do I customize this for ~/code/my-service?
> /threat-model bootstrap-then-interview ~/code/my-service
> /vuln-scan ~/code/my-service
> /triage ~/code/my-service/VULN-FINDINGS.json --repo ~/code/my-service
次に、それらのスキルによって生成されたアーティファクトを /customize スキルで使用します。このスキルはハーネスをコードベース用に変更します。
> /customize use ~/code/my-service/{THREAT_MODEL.md,VULN-FINDINGS.json} and ./TRIAGE.md
/customize が完了すると、targets/my-service/ ディレクトリがセットアップされます。スケールアップする前に、パイプラインのスモーク実行で検証してください。
bin/vp-sandboxed run my-service --model <model-id> --runs 1
詳細については、docs/customizing.md を参照してください。
第 2 週では、ステップ 3 でカスタマイズしたパイプラインを自身のターゲットに対して使用し、内部パイプラインループに 外側 のループを追加します。つまり、複数のパイプラインスキャンを実行し、それらの実行全体から発見結果をトリアージし、優先順位に基づいてパッチを適用し、繰り返します。
# スキャン - ターゲットに対して並列実行の波を実行
bin/vp-sandboxed run my-service --model <model-id> --runs 5 --parallel --stream --auto-focus
# トリアージ - すべての波にわたるすべての発見結果を重複排除しランク付け(脅威モデルを使用)
> /triage results/my-service/ --repo ~/code/my-service --auto --votes 5
# パッチ - トリアージで最も高くランク付けされたものから、修正を生成・検証
> /patch results/my-service/<timestamp>/ --model <model-id>
⚠️ ステップ 2 と同じサンドボックス化ガイドラインに従ってください。
特定のパイプライン実行は、すでに自身の発見結果を検証および重複排除します。
/triage は複数のパイプライン実行にわたって機能します。results/ ディレクトリを指定すると、すべての実行(および存在する場合は /vuln-scan からの静的発見結果も)にわたって重複を統合し、脅威モデルに照らして深刻度評価を再調整し、すべての発見結果をコンポーネント所有者にルーティングしようとします。
可能な限り、発見結果に迅速にパッチを適用することは、外側のループを可能な限り生産的に保つのに役立ちます。発見結果が修正されると、モデルはそれらを再発見することができなくなり、代わりに正味の新しい、通常はより深い問題を表面化します。パイプラインの波をさらに実行するにつれて、発見結果の数はおそらく減少しますが、複雑さはおそらく増加します。迅速なパッチ適用が不可能な場合でも、ターゲットの known_bugs に以前の発見結果を記録するだけでも、将来の実行を新しいバグに向けるのに役立ちます。
自律的なトリアージとパッチ適用は依然として未解決の問題であり、このリファレンスハーネスはそれらを完全に解決するものではありません。/patch の検証戦略はハードルを上げるのに役立ちますが、深刻度と優先順位付けは最終的には環境に関する判断であり、検証済みパッチが常にアップストリームに送信できるとは限りません。多くのパートナーがこれらのステップを現在のボトルネックとして報告しており、それらに実際のエンジニアリング時間を割り当てるべきです。
詳細については、docs/triage.md および docs/patching.md を参照してください。
最初の立ち上げ後、私たちが協力してきたチームは、いくつかの方向性に投資する傾向がありました。