威胁建模、扫描、分类、修补的技能,外加一个可自行/customize的自主扫描工具集
一个基于我们与多个组织的安全团队合作的经验,使用 Claude 进行自主漏洞发现与修复的参考实现。关于这些经验及最佳实践的详细说明,请参阅随附博客文章(也可在 blog-post.md 中找到)。如需仅使用 SDK 的轻量级相同 recon → find → triage → report → patch 循环指南,请参阅配套食谱。
本仓库不被维护且不接受贡献。
🔒 需要托管方案? Anthropic 提供 Claude Security,一个托管产品, 可在多个项目中查找并修复源代码中的漏洞。Claude Security 扫描您的仓库以发现漏洞, 应用多阶段验证流程以减少误报,并允许您管理发现的整个生命周期:分类、修复验证 和快速修复生成。
本仓库是一个基于使用 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秒入门 + 在 canary 目标上引导首次运行
> /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 对源代码的静态审查(未构建或运行任何内容),因此在对非 canary 目标时预期会有更多误报。在步骤 2 中,您将产生经执行验证的发现。
注意: 在 canary 目标上,
/triage可能会将扫描结果视为误报而丢弃。entry.c声明自己是故意存在漏洞的演示代码,/triage正确排除了测试/固定代码中的错误。要查看完整的确认/去重/误报流程,请在精心策划的固定数据上运行它(/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会生成自主代理。 管道在 gVisor 容器内运行每个代理,出站流量仅限于 Claude API。除非显式覆盖,否则生成代理的子命令拒绝在容器外启动。更多信息请参阅 docs/security.md 和 docs/agent-sandbox.md。
在底层,管道经历七个阶段:
Dockerfile 自动构建此镜像。--auto-focus 标志,管道将使用目标 config.yaml 中的 focus_areas 列表。更多详情请参见 docs/pipeline.md。
在第 3-5 天,您将为自己的目标自定义框架。首先,将步骤 1 的技能指向您的代码,然后使用 /customize 将管道移植到您的技术栈。到本周末,您将拥有一个管道可以运行的 targets/<your-service>/ 目录,通过一次管道烟雾测试验证,并准备好在步骤 4 中扩展。
虽然参考管道设计用于查找 C 和 C++ 代码中的内存漏洞,但其结构是通用的。将其移植到新的漏洞类别或语言只需为您的目标技术栈回答以下问题:
| 问题 | C/C++ 参考 | 您的目标(示例) |
|---|---|---|
| 什么信号表示发现了漏洞? | ASAN 崩溃签名 | 异常 / 金丝雀文件 / DNS 回调 |
| 概念验证是什么样的? | 导致崩溃的输入文件 | HTTP 请求序列 / tx 列表 / 测试框架 |
| 目标如何构建和运行? | Dockerfile(使用 clang + ASAN) | 您的语言在容器中的构建方式 |
在自定义之前,先将步骤 1 的技能指向您自己的代码。提醒一下,它们是只读和只写操作,因此可以无沙箱运行。
claude
> /quickstart how do I customize this for ~/code/my-service?