Anthropic Defending Code Reference Harness
Anthropic 发布了 defending-code-reference-harness,这是一个开源的参考实现,旨在利用 Claude 实现软件漏洞的自动化发现与修复。该框架提供了一个结构化的流水线,用于侦察、漏洞发现、验证、报告和补丁制作,专门针对 C/C++ 内存漏洞进行了优化,但设计上可以移植到其他语言和漏洞类别。
The Autonomous Vulnerability Discovery Pipeline
该参考工具集实现了一个七阶段的自主循环,从初始的代码库分析一直到经过验证的补丁。这一过程旨在通过要求对每个发现进行基于执行的验证来减少误报。
- Build: 目标代码被编译成一个 Docker 镜像,通常使用 AddressSanitizer (ASAN) 来检测 C/C++ 的内存错误。
- Recon: 一个轻量级代理(agent)分析源代码,以建议输入解析子系统的划分,确保并行代理能够探索不同的攻击面,而不是重复劳动。
- Find: 多个代理并行运行,每个代理负责构造畸形输入并执行二进制文件,直到一致地复现崩溃(例如,3 次中复现 3 次)。
- Verify: 一个独立的评分代理(grader agent)在全新的、隔离的容器中使用仅由 find 代理提供的概念验证 (PoC) 来复现崩溃。
- Dedupe: 一个判断代理(judge agent)将经过验证的崩溃与之前报告过的漏洞进行比较,以确定该发现是唯一的还是重复的。
- Report: 一个报告代理生成结构化的可利用性分析,详细说明原始类型、可达性以及严重程度。
- Patch: 一个补丁代理提出修复方案,随后由评分代理进行验证,以确保代码可以编译、原始 PoC 不再导致崩溃,并且现有的测试套件仍然通过。
Implementation and Security Sandboxing
由于自主流水线需要执行目标代码以验证漏洞,Anthropic 强调了严格的隔离。除非明确覆盖设置,否则该工具集拒绝在 gVisor sandbox 之外运行。该沙箱提供了容器级隔离,并配有出口白名单,限制代理只能与 Claude API 进行通信。
对于交互式使用,该框架提供了“Claude Code skills”(例如 /threat-model、/vuln-scan 和 /triage)这些仅具有文件读写权限的功能。只要用户审查并批准每次工具调用,这些交互式技能就可以在非沙箱环境下运行。
Customizing the Harness for Different Stacks
虽然默认实现针对的是 C/C++ 内存漏洞,但该框架被设计为通用形状。将该工具集移植到其他语言或漏洞类别需要定义三个主要组件:
- Finding Signals: 定义什么是漏洞(例如,将 ASAN 崩溃特征替换为异常日志或 DNS 回调)。
- Proof of Concept: 定义证据的格式(例如,将导致崩溃的输入文件替换为 HTTP 请求序列)。
- Build/Run Environment: 提供一个
Dockerfile,用于在容器中编译并运行目标程序。
Deployment Strategy: The "Ramp Up" Model
Anthropic 建议采用分阶段的方法,将 AI 驱动的漏洞发现集成到安全工作流中:
- Day 1: 使用交互式技能构建威胁模型并运行静态扫描和分诊(triage)。
- Day 2: 在已知存在漏洞的库上运行参考流水线,以理解自主循环。
- Days 3-5: 为特定的内部目标定制化流水线。
- Week 2: 扩展到跨多次运行的自主扫描、分诊和补丁制作。
Community Insights and Technical Considerations
行业从业者和社区成员就此类框架的效用和成本提出了几个关键点:
The "Shop Jig" Philosophy
一些开发者认为,参考实现应该是蓝图,而不是开箱即用的产品。一位社区成员指出,最有效的方法是使用参考实现获取思路,然后构建一个针对特定工作风格和告警系统的定制化工具集。
Cost and Resource Intensity
大规模运行自主代理(agent)可能会非常昂贵。据估计,每个代理每分钟可能消耗约 10K 个未缓存的输入 token 和 2K 个输出 token。根据所使用的模型(例如 Opus 或 Mythos),这可能导致每次运行的成本在数百到数千美元之间。
The Limits of AI Auditing
安全审计员警告不要进行“氛围审计”(vibe auditing),即工具产生大量误报从而使开发者过载。有效的 AI 漏洞发现需要高质量的工具集和对寻找复杂漏洞(如加密漏洞)的持续技术改进,因为这些漏洞可能对通用代理来说是不可见的。