20年AppSec工具范式从「检测+人工修复」转向「AI自动修复」,重新定义开发流程和安全工作。
二十年来我们在制造更好的烟雾报警器。现在我们终于在制造消防员。
我们在发现问题方面已经变得非常出色。
你的 IDE 在你打完一个漏洞之前就给它划了下划线。你的 CI 流水线因为深处三层的传递依赖存在一个 2019 年的 CVE 而失败。每周二你的收件箱都会收到一个 Dependabot PR,你会客气地忽视它直到周四。GitHub Advanced Security、Snyk、Semgrep、Wiz、Orca、Lacework,这堆安全工具的字母汤把安全问题变成了一张燃烧建筑物的超高分辨率照片。
我们准确知道火在哪里。我们有热力图。我们有严重程度评分。我们有没人读的 CVSS 向量。
我们就是灭不了火。
这是我们正在离开的奇异时代。
过去十年的 AppSec 建立在一个心照不宣的协议上:工具发现,人类修复。当发现问题很困难时,这是一种明智的分工。你需要抽象语法树、污点分析、符号执行,以及一个博士学位来解释为什么你的 Python 字符串连接实际上是远程代码执行。
所以我们围绕检测建立了整个经济。计算漏洞数量的仪表板。为不够快地分诊的团队而设的排行榜。询问你是否知道你的漏洞的合规框架,而不是你是否修复了它们。成功的指标变成了平均发现时间,而不是平均修复时间。
结果是可以预见的。平均企业有大约 50 到 100 天的未修复严重漏洞,不是因为工程师很懒,而是因为流程在根本上是坏的。你可以用一次扫描生成一万个发现。你不能用一个工程师生成一万个修复。
发现可以随计算扩展。修复只能随人力扩展。而人力无法扩展。
任何维护过开源项目的人都深深地知道这种痛苦。你收到一份漂亮、详细的问题报告,附带概念验证、CVSS 评分和一条客气的说明,说你正在危害互联网。你收不到的是一个通过你的测试、尊重你的架构、不破坏你唯一知道的三个奇怪边界情况的补丁。
我们庆祝发现者。我们烧倒了修复者。
可能会觉得修复只是发现加一步。其实不是。这完全是一个不同的认知任务。
发现是一个模式匹配问题。这段代码看起来像我以前见过的那些坏代码吗?用户输入是否在没有净化的情况下流向了敏感的数据汇?一个 LLM 在这方面惊人地出色,因为它见过数百万个好代码和坏代码的例子。
修复是一个计划和上下文问题。要正确修复一个漏洞,你需要理解意图,而不仅仅是语法。你需要知道原作者想做什么,代码库的其他部分依赖什么不变量,测试套件实际覆盖了什么与它声称覆盖了什么,以及如何做出最小的改动来堵上这个洞而不打开两个新的洞。
一个坏的修复比没有修复更糟糕。一个坏的修复让你产生虚假的信心,和一个不同名字的新 CVE。
这就是为什么早期的自动修复尝试感觉像是安全方面的 Clippy。"看起来你有一个 SQL 注入,我可以帮你添加一个 ORM 吗?"不,谢谢。
改变的不是模型在写代码方面变得更好,虽然确实变好了。改变的是它们在操作工具方面变得更好了。新一代不是一个写 diff 的聊天机器人。它是一个能够复现漏洞、写一个因漏洞而失败的测试、编辑源代码、运行相关测试、观察失败、再试一次、迭代直到绿色复选标记出现的 Agent。
换句话说,它能做人类工程师修复东西时实际做的无聊、有条不紊、不起眼的循环。它只是在凌晨 2 点不会累。
看看边界上发生了什么。
在开源领域,你现在有 Agent 监视你的依赖中的新 CVE,检查你是否实际易受攻击,生成最小的升级或补丁,运行你的 CI,并用合适的解释打开一个 PR。不是版本升级。而是修复。
在企业安全领域,紫队正在使用 Agent 持续地利用他们自己的应用,然后立即写出会阻止它的护栏。曾经花费几个季度的反馈循环现在只需要几分钟。
在实验室中,研究人员正在构建自我修复的代码库。每晚一个 Agent 拉取最新的漏洞源、克隆你的仓库、尝试入侵、如果成功就自我修补、自我测试、留下一条比你大多数实习生更彻底的提交信息的系统。这不再是科幻小说。它只是比采用稍微领先一点的工程。
这是隐喻上的深刻转变。我们正在从把安全看作相机转向把安全看作免疫系统。相机记录入侵者。免疫系统中和它、记住它、下次变得更好。
免疫系统模型还理解相机模型从未理解过的东西:你不能修复一切。你必须按可利用性、按影响范围、按这个服务是否实际暴露在互联网还是埋在你发誓存在的三层认证后面来优先排序。Agentic fixer 在这个分诊中很擅长,因为分诊是推理,而不仅仅是排名。
当然,有一个陷阱。陷阱就是信任。
你会让一个 AI 把代码推送到 main 吗?
大多数团队会说不,这是对的。早期采用者会有护栏。人类在循环中的审批。受限的文件路径。没有对认证逻辑的改动没有人类审查。完整的测试运行加上临时预览环境加上语义 diff 检查。
但是那个界限会移动。我们已经让 Dependabot 在测试通过的情况下自动合并补丁更新。我们已经让 Copilot 写了我们 40% 的代码。在某个时刻,风险计算就会反转。什么更危险:让一个 Agent 修补一个在一个测试良好的实用函数中的明确理解的路径遍历,还是在你等待一个人找一个空闲的下午时让那个路径遍历打开 87 天?
我们会学会信任修复者,就像我们学会信任编译器一样。起初,人们检查汇编输出。后来他们停止了,因为编译器犯的错误比他们少。我们还没有为安全补丁到达那个点,但我们在走那条路。
赢的团队将是那些把验证建设得比生成更好的团队。修复已经不是难的部分了。证明修复正确、安全、最小,这才是产品。
想想 Agent 与补丁一起生成的基于属性的测试。想想小的关键函数的形式化验证。想想第二个 Agent 模型,其唯一工作就是尝试破坏第一个 Agent 的补丁。一个看起来很像免疫系统的对抗性系统:攻击者和防御者在你的 CI 内共同进化。
如果 AI 从发现漏洞转向修复漏洞,人类做什么?
我们做我们本应一直在做的工作。我们停止充当非常昂贵的 linter,开始充当架构师。
人类会制定政策:什么可以自动修复,什么需要审查,我们对不同系统有什么风险容限。人类会设计更容易修复、影响范围更小、测试更好、对不变量更明确的系统。人类会做 Agent 仍然不擅长的奇怪的、跨系统的推理,比如意识到修复服务 A 中的这个漏洞会破坏服务 B 中的未记录的假设,而金融部门在每个季度末都依赖它。
也许最重要的是,人类将被解放去做主动安全而不是反应性的工单关闭。威胁建模。安全设计。实际上删除代码而不是无止尽地修补它。
梦想从来不是有一个零发现的仪表板。梦想是有不需要仪表板来保持安全的系统。
我们花了二十年大声喊叫着火。接下来的十年将是关于不会燃烧的建筑。
我为这个确切的未来构建小的、实用的工具,专注于防御、弹性和自我修复的系统。
如果你想尝试这篇文章中的想法:
The $20 SOC: Build a Tiny Defensive Network Monitor 是我如何为家庭实验室和小团队考虑经济实惠的检测的想法。
Build the Blackbox: An Offline AI Field Terminal That Works When Nothing Else Does 是我构建完全断开连接工作的 AI 系统的指南,当你在敌对环境中修补时这很重要。
Synthetic Corporation Defense: Purple-Team Your HR Before 500 Fake Employees Do 涵盖了硬币的另一面,当攻击者也是 AI 生成的时候。
And Self-Healing Legion: AI That Finds and Patches Its Own CVEs While You Sleep 是我在这里描述的内容的完整实现,一个在自动驾驶时寻找和修复自己的漏洞的 Agent 军团。
关于进一步的操作,你可以考虑屏蔽此人和/或报告滥用