Cloudflare 开源 security-audit-skill:让 AI 编码 agent 变成对抗性安全审计员

大多数 AI 安全工具的设计思路是"让 AI 更聪明地发现问题"。Cloudflare 这个 skill 的思路恰好相反——让 AI 更难确认问题。

Cloudflare 开源 security-audit-skill:让 AI 编码 agent 变成对抗性安全审计员

研究对象:cloudflare/security-audit-skill
抓取日期:2026-09-16 | 当日 stars:1249
许可证:MIT | 语言:JavaScript

一个反直觉的设计

大多数 AI 安全工具的设计思路是"让 AI 更聪明地发现问题"。Cloudflare 这个 skill 的思路恰好相反——让 AI 更难确认问题

听起来像是在拖后腿,但仔细想想:安全审计最大的敌人不是"没发现",而是"发现了假阳性,然后团队花三天去验证一个根本不存在的漏洞"。假阳性比假阴性更消耗人力,因为它会触发昂贵的验证流程。

security-audit-skill 的核心设计原则只有一句话:"The agent that checks a finding is never the agent that found it."(检查发现的 agent 永远不是发现它的 agent。)

这是美国宪法的三权分立原则——立法、司法、行政互相制衡——被搬到了 AI 安全审计里。发现者不能自证,验证者不能发现。

六阶段流水线

skill 把一次安全审计拆成六个阶段,每个阶段由独立的 agent 执行:

1. Reconnaissance(侦察):绘制架构图、信任边界、输入面,写入 architecture.mdcoverage-ledger.json。这一步不找漏洞,只画地图。 2. Coverage-led hunting(覆盖驱动狩猎):从 ledger 中分配独立的 hunter,每个 hunter 只负责一个攻击面单元。hunter 记录自己检查了什么,coverage critic 检查有没有遗漏。 3. Candidate validation(候选验证):每个候选漏洞交给一个全新的 verifier agent,verifier 的任务是试图推翻它。不是"验证它对不对",而是"试着证明它错了"。 4. Structured output(结构化输出):结果写入 findings.json,分为 confirmedneeds_validationrejected 三类,用 report-schema.json 校验。 5. Independent record verification(独立记录验证):最终结果再交给一组全新的 agent 验证源码引用。如果材料被替换,再做一次独立验证。 6. Target-neutral reporting(目标中性报告):报告不依赖目标系统的运行时状态,只依赖源码静态事实。

关键在于每一步的 agent 都是独立的。hunter 不知道 verifier 会怎么检查,verifier 不知道 hunter 是怎么发现的。这种信息隔离防止了"确认偏差"——hunter 倾向于相信自己发现了真漏洞,如果让同一个 agent 去验证,它几乎一定会确认自己的发现。

"多次运行提升覆盖率"

README 里有一句不起眼但很重要的话:

In our test runs, a single run found roughly half of the vulnerabilities that repeated runs found in total.

单次运行只能找到总漏洞数的大约一半。这不是说 skill 不好用——这是所有基于 LLM 的安全审计的固有特性。LLM 的采样是随机的,每次运行走不同的路径,覆盖不同的代码区域。

这和渗透测试的经验一致:两个不同的渗透测试团队对同一个系统做审计,结果交集往往只有 40-60%。安全审计本质上是一个覆盖率问题,不是一个"正确率"问题。

security-audit-skill 的设计者把这个特性变成了优势:多次运行不是 bug,是 feature。每次运行都会补充新的 coverage-ledger,逐步逼近完整覆盖。这比"一次跑完就信"的幻觉更诚实。

"防御纵深不是漏洞"

这个 skill 有一个反直觉的设计原则:

Defense-in-depth gaps are not vulnerabilities. If Layer A prevents the attack, the absence of Layer B is a hardening note.

翻译过来:如果 A 层已经挡住了攻击,B 层的缺失只是"加固建议",不是漏洞。

这和很多安全扫描器的逻辑相反。大多数扫描器会把"缺少输入校验"标记为漏洞,即使参数化查询已经挡住了 SQL 注入。结果是安全报告里充斥着"理论上有风险"的条目,团队疲于处理。

Cloudflare 的原则是:严重性需要影响,不是偏离 checklist。Likelihood × Impact,不是"不符合规范"。

沙箱要求

skill 对运行环境有严格要求:

An OS-enforced sandbox for target-controlled builds, tests, processes, browsers, emulators, fuzzers, and fixtures. It must disable external networking, use a sanitized allowlisted environment, enforce resource limits, and allow writes only to assigned scratch paths.

没有沙箱,skill 会把所有发现标记为 needs_validation 而不是 confirmed——因为它不信任自己的执行环境。这又是一个"对抗自己"的设计:如果你不能保证环境安全,那就不要相信结果

这是什么的种子?

README 最后提到:

This is the skill that seeded Cloudflare's vulnerability discovery harness, described in Build your own vulnerability harness. The harness grew into a multi-stage, fleet-wide system; this skill is the single-repo starting point it evolved from.

这个 skill 是 Cloudflare 内部漏洞发现系统的单仓库起点。内部系统已经扩展成多阶段、全机群的规模,但开源的是它最初的样子——一个可以独立运行的种子。

这种"开源种子 + 内部森林"的模式很有意思。它不是"开源一个阉割版",而是"开源那个能长成森林的种子"。任何人都可以从同一个种子开始,长出自己的系统。

和其他 AI 安全方法的区别

方法核心思路问题
静态分析(SAST)规则匹配假阳性高,不理解语义
LLM 单次审计让 AI 一次跑完覆盖率低,确认偏差
LLM + 自验证让 AI 自己检查自己确认偏差仍在
security-audit-skill独立 agent 对抗性验证需要多 agent 编排能力
关键区别在第三行和第四行之间。"自验证"听起来很合理——让发现问题的 agent 再检查一遍——但这正是确认偏差的温床。agent 倾向于相信自己的判断,尤其是当它已经花了 token 去推理一个漏洞时。

security-audit-skill 的解法是信息隔离:verifier 不知道 hunter 的推理过程,只拿到候选结论,从零开始独立验证。这就像学术论文的盲审——审稿人不知道作者是谁,所以不会因为作者的名气而放松标准。

一个更大的模式

这个 skill 背后有一个更大的模式:AI 系统的可靠性来自结构设计,不是模型能力

一个普通 LLM 直接做安全审计,效果不会好。但把同一个 LLM 放进一个精心设计的多 agent 结构里——hunter / verifier / critic 各司其职,信息互相隔离——效果会好得多。

这和 AlphaGo 的道理一样:单纯的策略网络不够强,但策略网络 + 价值网络 + MCTS 组合起来就够强了。结构 > 模型

security-audit-skill 把这个思路用在了安全审计上。它不依赖一个"更聪明的模型",而是依赖一个"更聪明的结构"。模型可以换——GPT-4、Claude、Gemini 都行——但结构不变。

这也是为什么 Cloudflare 敢把它开源:核心竞争力不在 skill 本身,而在"如何设计多 agent 结构"这个 know-how 里。skill 是种子,森林在内部。


项目地址:https://github.com/cloudflare/security-audit-skill 博客原文:https://blog.cloudflare.com/build-your-own-vulnerability-harness 许可证:MIT

暂无表态

想参与讨论或点赞?登录后使用完整功能

讨论回复(0)

暂无回复,登录后可参与讨论
合作

智谱 GLM-5 已上线

在智谱开放平台 BigModel.cn 打造 AI 应用。新一代旗舰模型 GLM-5 在推理、代码、智能体综合能力达到开源模型 SOTA。

领取 2000万 Tokens