Snyk VulnBench JS 1.0: Can LLMs Find the Same Bugs Twice?
本文表明,尽管代理型大语言模型(agentic LLMs)在复现已知漏洞时表现出极高的稳定性,但其发现新问题的能力却具有高度的不一致性,这表明基于大语言模型的安全审查应当作为确定性静态应用安全测试(SAST)的补充而非替代。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你雇佣了一名非常严谨、恪守规则的安全警卫(我们称之为 SAST)和一位才华横溢、富有创造力但有时会分心的侦探(我们称之为 LLM)。他们都被雇佣来检查同一栋小型 JavaScript 建筑中隐藏的陷阱(漏洞)。
论文《Snyk VulnBench JS 1.0》提出了一个简单但至关重要的问题:如果你连续五次派他们去检查完全相同的建筑,他们每次给出的报告会完全一样吗?
以下是他们的发现,通过日常概念进行了拆解:
1. 严谨的警卫 vs. 富有创造力的侦探
- 严谨的警卫 (SAST): 这个工具就像一个带着清单的机器人。如果代码没有变化,这个机器人每次给出的报告都完全一样。它从不疲倦,从不分心,也从不会两次错过同一个东西。在这项研究中,它的表现是 100% 一致的。
- 富有创造力的侦探 (LLM): 这是一个可以进行“思考”和推理的 AI。它擅长发现那些机器人可能会错过的棘手且奇特的陷阱。然而,它就像人类一样:有时很敏锐,有时很疲惫,有时甚至会看到并不存在的东西。
2. “五次”测试
研究人员连续五次派这位 AI 侦探去检查代码。结果如下:
- 当 AI 发现“已知”陷阱时: 如果 AI 发现了一个严谨的警卫已经识别出的陷阱,它的表现非常可靠。它在几乎所有的运行中都能发现同一个陷阱(85% 的时间)。当它与规则一致时,它是稳定的。
- 当 AI 发现“新”陷阱时: 这就是混乱开始的地方。AI 开始报告一些严谨的警卫没看到的全新、独特的陷阱。
- 问题在于: 近 一半 的这些“新”报告都是“一次性”的。它们仅在五次运行中的 一次 出现,然后就消失了。
- 类比: 想象一下,侦探在周一说:“我看到走廊里有个幽灵!”到了周二,她说:“不,没幽灵。”到了周三,她说:“其实那只是个衣架。”周四,她又说:“幽尸!”如果你是建筑业主,你不知道该感到害怕,还是觉得她只是在凭空想象。
3. “噪音”因素
研究发现,AI 的“额外”报告充满了噪音。
- “一次性”报告: 约 50% 的独特报告只发生了一次。如果你运行五次扫描,你会得到完全不同的“额外”警告列表,具体取决于你捕捉到了哪一次运行。
- “稳定”的报告: AI 和严谨的警卫达成共识的部分是稳定的。它们不会改变。
4. 规模并不代表更好
研究人员尝试了不同版本的 AI,包括一个“超昂贵”且“超聪明”的版本。
- 结果: 最昂贵、最强大的 AI 并没有表现得最好。事实上,它更贵,消耗更多的计算资源,而且比一个更便宜、更小的版本更缺乏一致性。
- 教训: 仅仅因为你支付了更多费用请来了最“聪明”的侦探,并不意味着他们会给你提供更可靠的报告。有时候,更简单、更专注的侦探反而更一致。
5. 各有优势,也各有盲点
论文得出结论,你不应该在两者之间做选择;你需要 两者兼顾。
- 严谨的警卫 非常擅长系统地检查每一根管道和电线是否有泄漏(比如检查重复的数据流)。它绝不会两次错过同一个泄漏点。
- 富有创造力的侦探 擅长发现复杂的、奇怪的模式,这些模式看起来像陷阱,但可能并不在清单上(比如发现一个严谨的警卫错过的、看起来可疑的 SQL 注入)。
- 症结在于: 侦探有时会错过那些显而易见的、重复的泄漏,而这些正是警卫能捕捉到的;同时,侦探有时也会被虚假的陷阱搞糊涂。
总结
如果你 仅 依赖 AI 侦探,你每次检查时可能会得到一份完全不同的安全报告,并且你必须花费大量时间去分辨哪些是真实的“幽灵”,哪些只是“衣架”。
如果你 仅 依赖严谨的警卫,你可能会错过那些棘手的、具有创造性的陷阱。
最佳策略: 利用严谨的警卫来捕捉那些显而易见的、重复的泄漏(因为它从不改变主意),并利用富有创造力的侦探来寻找那些棘手的、不寻常的东西,但要做好双重检查其“额外”发现的准备,因为它们可能是偶然现象。它们最好的用法是互相配合,而不是试图取代彼此。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。