公众号每日8篇拆解不够看?星球无上限更AI领域论文、资讯、招聘、招博、开源代码,一站式干货,每日2分钟刷完即赚! 👇扫码加入「龙哥读论文」知识星球,前沿干货、实用资源一站式拿捏~

龙哥推荐理由:
继2026年6月聊过AI智能体安全评估之后,这次新加坡国立大学团队带来更猛的干货:不是让LLM当黑盒猎头,而是让它把“觉得安全”的判断写成可执行的断言,再用模糊测试来挑战这些断言。结果?在DARPA的AIxCC基准上比顶尖智能体多发现34%-63%的漏洞,还挖出了22个真实世界的0-day!这才是AI安全审计该有的样子。
原论文信息如下:
当AI侦探学会“写假条”:CODE-AUGUR如何用安全规范让LLM漏洞检测告别“黑箱”
现在的AI智能体做安全审计,跟人类专家犯的毛病一模一样:它们会“感觉”某段代码安全,然后就不管了。可它们到底凭什么觉得安全?这个推理过程完全藏在LLM的黑盒里,不可解释、不可复用,更可怕的是——根本没人验证过它的判断对不对。
新加坡国立大学团队最近放了个大招,提出了CODE-AUGUR,一个全新的智能体漏洞检测系统。核心思路简单到让人拍大腿:让LLM把“我觉得安全”这个判断,写成可执行的断言(assertion),就像学生写假条一样白纸黑字写下来,然后再用模糊测试(fuzzing)去挑战这些断言——你说是安全的?好,那我随机生成海量输入,看能不能把你的断言搞崩。这一套组合拳下来,效果炸裂:在DARPA的AIxCC基准测试上,比顶尖智能体多发现34%到370%的漏洞,更是在真实开源项目里挖出了22个之前没人发现的0-day漏洞,其中16个已经被开发者确认或修复。
三大痛点:隐式推理、不可验证、难以复用
第一个痛点是隐式推理。当一个LLM智能体分析完一段代码,说“这段代码是安全的”,它的推理过程是一长串自然语言轨迹——比如“这里有个校验函数IsProperColorSpace,它比较了颜色空间和像素格式,所以是匹配的”。听起来挺合理对吧?但问题在于,这个推理完全是语义模糊的,你无法精确知道它到底依赖了哪些程序状态。在论文的Figure 1例子中,Little CMS库有一个漏洞:颜色空间校验函数IsProperColorSpace对特殊值PT_ANY直接返回真,绕过了通道数比较。智能体沿着“正确路径”推理,以为校验已经覆盖了所有情况,完全没发现这个特例分支。而实际上,通道数不一致会导致后续解包时发生越界读。
第二个痛点更致命——不可验证。现有方案(比如Claude Code)的工作流程是:智能体先静态分析,标记出“可疑”的地方,然后通过动态执行去验证这些可疑点。但注意——只有被标记为“可疑”的地方才会被验证!那些被智能体判定为“安全”的区域呢?根本没人去碰(见Figure 2)。这就好比一个医生只看他认为有病的人,而对其他人大手一挥说“你们没事”,但完全不做任何检查。论文里指出,这种模式下,智能体的“安全判断”本身就是一个未经检验的隐式安全规范,而错误的安全判断恰恰是漏报的根源。
第三个痛点是难以复用。审计过程中积累的对代码库的理解——比如“像素格式和颜色空间的通道数必须一致”——这种知识本该是非常宝贵的,但传统审计只输出一个CVE漏洞报告,知识随报告一起搁置。下次审计同样的代码库,又得从头理解。更夸张的是,论文提到Linux内核中的Copy-Fail漏洞被修复后,很快又发生了类似的Dirty-Frag漏洞,根本原因就是没有被正确识别的安全约束模式再次被绕过。
方法破局:把“我觉得安全”变成可执行的断言
第一步,构建威胁模型。CODE-AUGUR先通读整个代码库、文档和构建配置,提炼出一个结构化的威胁模型,记录安全边界、攻击者控制范围、安全相关状态变量等。比如在Little CMS例子中,威胁模型会明确指出“像素格式的通道数与颜色空间的通道数必须相等”这一全局安全约束。
第二步,不变式分析(Invariant Analysis)。这是最巧妙的地方——当CODE-AUGUR的静态推理器认为某个代码点是安全的,它不会就这么算了,而是把支撑这个判断的局部不变式(local invariant)写成一个可执行的断言(assertion),直接插入到源代码中。比如在Figure 1的CreateTransform函数里,如果智能体认为校验通过了,它会插入断言:
assert(fmt.channels == cs.channels)。但注意,如果智能体觉得某个地方真有问题,它会直接标记为候选漏洞,走快速通道。第三步,不变式伪造(Invariant Falsification)。插入断言之后,CODE-AUGUR不是靠LLM自己来验证——因为LLM有一样的盲点——而是把任务交给一个灰盒模糊测试器。这个模糊测试器的目标很明确:去生成输入,让程序执行到断言处并把断言搞崩。如果搞崩了,就说明智能体的判断有误,要么真的发现了漏洞,要么说明智能体对代码的理解有偏差,需要修正断言。如果不管怎么跑都崩不了,那这个安全判断就经受住了考验,可以被采信。
这个“推理-伪造-修正”的循环(Reason-Falsify-Refine Loop)不断对齐智能体对程序的理解与程序的实际行为。论文用了一个非常形象的比喻:传统的智能体审计就像在黑暗里摸象,摸到一条腿就说这是柱子;而CODE-AUGUR要求智能体把“我觉得这是柱子”的理由写下来,然后拿光照一照——原来是大象。
闭环验证:智能体与模糊测试的“对手戏”
论文给出了两个算法伪代码(Algorithm 1和Algorithm 2)。

算法1描述的是不变式分析的主循环。给定程序P和威胁模型T,它循环执行三个LLM驱动的步骤:GENERATEHYPOTHESIS(生成假设)、EVALUATEHYPOTHESIS(评估假设)、REFINEINVARIANT(修正不变式)。对每个代码点,如果评估确认不可达或不存在漏洞,就产生一个不变式ϕ插入到程序P中,生成插桩后的程序P'。然后异步调用FALSIFY子程序去模糊测试这个不变式。
算法2详细说明了伪造过程。

首先进行模糊测试准备:把插桩后的P'编译成可模糊测试的目标,并准备好种子语料库。然后,一个规范指导的模糊测试器(Specification Guided Fuzzer)开始搜索,目标是找到能触发断言违例的输入i¬ϕ。这里的关键创新是:模糊测试器的反馈信号不仅仅基于代码覆盖率,还专门针对“距离断言越来越近”的程度进行奖励。也就是说,它不像传统模糊测试那样漫无目的地瞎跑,而是有方向地朝着断言所指定的程序点探索。
一旦找到违例输入,进入违例分类(Violation Triage)阶段。这里要判断:这个违例到底是真的漏洞,还是智能体断言写得太强(即程序行为其实是对的,是断言错了)?如果是后者,就反馈给智能体,修正断言。这样不仅发现了真漏洞,还让智能体对程序的理解更准了——相当于一个自学习的审计循环。
你可能会问:为什么不用LLM自己来生成测试用例验证?论文专门解释了:LLM生成测试用例和做审计判断有相同的盲点,容易重复犯错。而模糊测试通过随机变异和覆盖率引导,能够探索LLM完全没考虑到的角落。把这两种范式的优势结合,正是CODE-AUGUR的精妙之处。
实战证明:不仅在基准测试中碾压SOTA,更挖出22个真实世界的0-day漏洞
在AIxCC基准上,结果如下表:

可以看到,CODE-AUGUR在使用Sonnet作为底层模型时发现了131个漏洞,远超Claude Code(98个)和ATLANTIS(27个),提升幅度达到34%到370%。即使使用DeepSeek模型,CODE-AUGUR仍然比Claude Code多出43%的漏洞。更厉害的是,论文专门拆分了漏洞发现的路径:有相当一部分漏洞是直接通过“不变式伪造”路径发现的,而不是传统的静态推理路径。

在OSV基准上(表2),CODE-AUGUR同样全面领先,而且只有它能覆盖所有8个开源项目,而Claude Code在libaom上直接运行失败了。

然后是最炸裂的部分——真实世界漏洞发现。CODE-AUGUR在广泛使用的开源项目中挖出了22个之前未知的漏洞,涉及gpsd(全球定位系统守护进程)、Little CMS(颜色管理库)、TinyGLTF(GLTF文件解析库)等。其中16个已经被开发者确认或修复,好几个还获得了漏洞赏金。比如在gpsd中,CODE-AUGUR发现了一个漏洞家族(satellites_visible),直接导致了连续四个月的修复过程(见Table 4)。

深远意义:可复用的安全规范,是AI审计超越“找Bug”的关键一步
这些不变式有什么价值?论文给出了一个精彩的案例。在gpsd项目中,CODE-AUGUR发现了一个关于satellites_visible的漏洞家族,并推断出了一个关键的不变式ϕ。结果这个项目的开发者花了4个月时间、分3轮才彻底修复这个漏洞家族(Table 4下面的修复历史)。第一轮只是简单地钳制了一个崩溃点,算是不完整修复;第二轮才终于找到了根本原因,在多个输入源处限定了值范围,强制执行了ϕ;第三轮又扩大了容量,才算完全修复。整个过程中,每个修复步骤本质上都是在重新恢复CODE-AUGUR一次推断出的那个不变式。如果开发者一开始就拥有这个不变式,修复速度会快得多。
更进一步,这些不变式可以跨版本复用、跨入口点复用。比如Little CMS的不变式不仅适用于TestHarness的路径,还能用于其他调用路径,甚至能检测未来代码修改中是否重新引入同样的漏洞。这就是把安全知识从“一次性”变成了“可积累资产”。
论文还特别指出,CODE-AUGUR构建在广泛可用的LLM(如Sonnet、DeepSeek)之上,不需要专门训练的模型(比如Claude Mythos那种定制模型)。这意味着任何团队都可以基于现有的LLM,加上模糊测试集成,复现这套方案——虽然论文没有开源代码,但方法论已经非常清晰。
龙迷三问
这篇论文解决什么问题?现有的AI智能体做漏洞检测时,它们的安全判断(“这段代码是安全的”)是隐式的、不可解释的,而且从未被验证。这导致大量漏洞被漏掉。CODE-AUGUR提出把智能体的安全判断显式化为可执行的断言,然后用模糊测试去挑战这些断言,从而发现智能体推理中的盲点,找到更多漏洞。
什么是“不变式”(Invariant)?和传统的“断言”有什么区别?在CODE-AUGUR中,不变式是一个局部不变量,即智能体认为在程序某一点上必须永远成立的条件,比如“fmt.channels == cs.channels”。它被直接写成源代码中的assert语句。和普通断言的区别在于:普通断言是开发者手动写的,而CODE-AUGUR的断言是智能体自动推断的,并且专门设计用来捕捉安全相关假设;另外,这些断言会被模糊测试系统地挑战。
CODE-AUGUR能直接落地产品吗?有什么限制?论文的方法论已经非常工程化,基于现有LLM(Sonnet/DeepSeek)和灰盒模糊测试器(如AFL、libFuzzer),理论上可以集成到CI/CD流水线中。但限制也很明显:首先,模糊测试需要构建可执行目标,对某些无法编译或模拟的项目不适用;其次,每次审计的计算成本较高(LLM推理+几个小时模糊测试);最后,论文没有开源代码,复现需要自行实现。不过对于大厂的安全团队来说,这是非常有前景的方向。
龙哥点评
论文创新性分数:★★★★★
将LLM隐式推理显式化为可伪造断言,并用模糊测试验证,这个思路在AI安全审计领域确实开创了新范式。不是简单堆叠工具,而是结合两种范式的根本优势。实验合理度:★★★★★
在两个基准(AIxCC、OSV)上对比了多个SOTA方法,且使用了两种不同LLM(Sonnet、DeepSeek),结果稳健。还专门拆分了发现路径,排除归因混淆。唯一的遗憾是未开源,但实验设计本身很清晰。学术研究价值:★★★★★
提出“安全规范优先”的研究方向,不仅提升了漏洞检测效果,更引发了如何验证AI审计可信度的深刻思考。对后续智能体安全、可解释AI、软件工程方法都有启发。稳定性:★★★★☆
核心依赖LLM的推理质量和模糊测试的覆盖率。LLM可能在某些边缘情况下给出不合理的断言,但因为有模糊测试兜底,整体稳定性较好。不过对于无法构建可执行目标的库(如纯解释型语言或固件),稳定性会下降。适应性以及泛化能力:★★★★☆
方法设计上适用于任何有可执行目标的语言(C/C++、Go、JVM等),对不同项目类型(库、命令行工具、网络服务)都有实验验证。但对那些没有明确输入格式或难以自动生成测试用例的程序,泛化能力受限。硬件需求及成本:★★★☆☆
需要LLM推理(调用API或本地部署)+ 数小时的模糊测试,计算成本较高。但相比手动审计或定制模型训练,已经算省钱了。对于企业安全团队,投入产出比非常合理。复现难度:★★★☆☆
论文没有开源代码,但方法论描述足够详细,实现的关键是集成一个LLM Agent + 模糊测试器(如AFL)。难点在于威胁模型的自动构建和断言分类逻辑。对于有经验的安全研究团队,3-6个月可以复现。产品化成熟度:★★★★☆
已在实际开源项目中发现漏洞并获确认,证明技术路线可行。要产品化还需要解决:自动化测试环境的搭建、对各类语言/框架的适配、以及输出报告的可视化。目前看最接近生产的场景是集成到GitHub Actions等CI流水线中。可能的问题:
依赖LLM生成断言的准确性——如果LLM生成的断言本身就非常弱(比如永远为真),模糊测试永远无法伪造,完全失去意义。虽然论文提到了这一步,但对断言质量的评估不够深入。另外,对多线程和时间相关漏洞,断言可能难以覆盖。主要参考文献
*本文仅代表个人理解及观点,不构成任何论文审核或者项目落地推荐意见,具体以相关组织评审结果为准。欢迎就论文内容交流探讨,理性发言哦~ 想了解更多原文细节的小伙伴,可以点击"阅读原文",查看更多原论文细节哦!
欢迎加入龙哥读论文粉丝群,扫描下方二维码或者添加龙哥助手微信号加群:kangjinlonghelper。一定要备注:研究方向+地点+学校/公司+昵称(如 大模型安全+北京+国大+龙哥),根据格式备注,可更快被通过且邀请进群。
『龙哥读论文』微信群目前包含:图像处理、大模型及智能体、自动驾驶及机器人、AI医疗及AI金融5个群