← 最新论文
🤖 machine learning

ANVIL: Anomaly-based Vulnerability Identification without Labelled Training Data

该论文介绍了 ANVIL,这是一个利用大语言模型通过掩码重构和混合评分机制来识别代码异常的无监督漏洞检测框架,证明了其性能优于监督式检测器,并且在与模糊测试工具结合使用时,成功发现了此前未知的漏洞。

原作者: Weizhou Wang, Eric Liu, Xiangyu Guo, Xiao Hu, Ilya Grishchenko, David Lie

发布于 2026-06-30
📖 1 分钟阅读☕ 轻松阅读

原作者: Weizhou Wang, Eric Liu, Xiangyu Guo, Xiao Hu, Ilya Grishchenko, David Lie

原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明

想象一下,你正试图在一面由数百万块完美砖块组成的巨大墙壁中,寻找一块唯一的、略有破损的砖头。

问题所在:“抛硬币”困境
通常情况下,要找到这些破损的砖块,你需要一个专家团队,他们研究过成千上万个破损案例,并准确掌握了它们看起来是什么样子的。这就是目前大多数计算机程序的工作方式:它们是“监督学习者”。但这里有一个巨大的问题:我们并没有足够的“破损代码”样本来让它们进行充分学习。

最近,我们拥有这些超级智能的 AI 模型(称为大语言模型,或 LLM),它们几乎读过了有史以来写过的每一段代码。你可能会想:“太棒了!既然它们见多识广,一定能识别出破损的地方。”但令人惊讶的是,当你仅仅问它们:“这行代码是不是坏了?”它们的表现并不比抛硬币好多少。它们擅长编写代码,却不擅长评判代码,因为它们被训练去模仿模式,而不是去发现错误。

解决方案:ANVIL(“找不同”游戏)
这项研究背后的研究人员开发了 ANVIL,他们决定反其道而行之。他们不再试图教 AI “坏代码”长什么样,而是问道:“AI 认为一行‘正常’的代码应该长什么样?”

以下是 ANVIL 的工作原理,使用了一个简单的类比:

  1. 遮盖游戏: 想象你从一个故事中取出一行,用黑笔将其涂掉。然后你要求 AI 根据前后的句子来猜猜被遮盖的那一行原本是什么。
  2. 预期: 如果被遮盖的是一行正常、标准的代码,AI 很可能会猜对(或者非常接近),因为它已经见过这种模式数百万次了。
  3. 异常: 如果被遮盖的是一行“存在漏洞”(损坏)的代码,它很可能与其余训练数据相比显得怪异或不同寻常。AI 会难以猜出它。它可能会猜出一个完全不同的内容,或者表现得非常犹豫不决。
  4. 评分: ANVIL 衡量 AI 的猜测与原始代码行之间的差异程度。如果猜测偏差很大,或者 AI 显得很困惑,ANVIL 就会将该行标记为“异常”(可疑)。

“混合型”侦探
研究人员意识到,仅仅测量差异是不够的。有时一个微小的差异(比如将 > 改为 >=)是一个巨大的错误,但 AI 可能并不认为这是个大问题。因此,他们创建了一个“混合评分”(Hybrid Score),就像一个配备了四种工具的侦探:

  • 精确匹配: AI 是否做到了 100% 正确?如果不是,这就是一个红旗信号。
  • 困惑度计: AI 有多不确定?如果 AI 在模棱两可,那么代码可能很奇怪。
  • 复杂度检查: 这行代码是否过于复杂?复杂的代码往往是错误隐藏的地方。
  • “损失”得分: 一个衡量 AI 对原始行感到多么“惊讶”的数学指标。

结果:大海捞针
团队在海量的真实代码数据集上测试了 ANVIL。

  • 击败专家: 他们将 ANVIL 与现有的、确实需要训练数据的最佳工具进行了对比。尽管 ANVIL 没有使用任何训练数据,但它发现漏洞的准确率是其他工具的两倍。
  • 上下文技巧: 他们发现,给 AI 阅读整个文件的上下文反而会造成困扰(就像试图通过观察整个谷仓来寻找一根针)。相反,ANVL 使用了一种“智能上下文”方法:它只关注可疑行周围的具体代码块(函数)。这使得它更快、更准确。
  • 现实世界中的成功: 为了证明其在现实世界中的有效性,他们将 ANVIL 连接到一个“模糊测试器”(fuzzer,一种通过投喂随机数据来尝试破坏软件的工具)。ANVIL 帮助该模糊测试器发现了两个全新的、此前未知的漏洞,其中一个漏洞非常严重,甚至获得了官方的安全 ID(CVE)。

核心结论
ANVIL 证明了你不需要教 AI “坏代码”长什么样也能找到它。你只需要问 AI “正常代码”长什么样。当代码不符合“正常”模式时,它很可能就是坏的。这是一种更聪明、更快且更通用的方法,可以在不需要庞大的过去错误库进行学习的情况下,找到安全漏洞。

您所在领域的论文太多了?

获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。

试用 Digest →