脅威モデリング、スキャン、トリアージ、パッチ適用のスキルに加え、カスタマイズ可能な自律型スキャンハーネス
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、
/triage、/patch、/customize:インタラクティブなスコープ設定、スキャン、トリアージ、
およびパッチ適用。このリポジトリを Claude Code で開き、/quickstart を実行して概要を把握してください。harness/:自律的なリファレンスパイプライン(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 | 1日目 | 脅威モデルを構築し、最初の静的スキャン + トリアージを実行 |
| ステップ 2 | 2日目 | C/C++ ライブラリでリファレンスパイプラインを実行 |
| ステップ 3 | 3~5日目 | ターゲット向けにパイプラインをカスタマイズ |
| ステップ 4 | 第2週 | 自律スキャン、トリアージ、パッチ適用を開始 |
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 つのステージを経ます: