The Hitchhiker's Guide to Program Analysis, Part III: Mostly Harmless LLMs
本文提出了 Evident,这是一个漏洞分析系统,它仅利用大语言模型(LLM)来构建特定于执行的分析测试框架(analysis harnesses),同时依赖形式化后端验证来严谨地判定报告的错误是否可达,从而在不遗漏已确认漏洞的前提下,实现对误报的高精度消除。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
想象一下,你是一名建筑检查员,试图在一座巨大的、古老的摩天大楼(计算机代码)中寻找结构缺陷。你有一个机器人助手(LLM),它非常擅长阅读蓝图并猜测哪里可能存在问题。然而,这个机器人有时会过于自信,即使它并没有实际测试墙体的强度,也会基于匆匆一瞥说:“我觉得这面墙没问题。”
论文 《程序分析指南,第三部分:基本无害的 LLM》 介绍了一种名为 Evident 的新系统来解决这个问题。以下是其工作原理的简单解释:
问题所在:“听起来很有道理但其实是错的”机器人
静态分析工具(原始检查员)非常擅长发现潜在的漏洞,但它们经常在并没有火灾发生时也大喊“着火啦!”这些被称为“误报”(False Alarms)。
最近,人们开始使用大语言模型(LLM)来帮助消除这些误报。想法是:“让我们请机器人观察代码,然后告诉我们这是一个真实的漏洞,还是仅仅是一个误报。”
症结在于: 机器人非常擅长编造一个关于“为什么墙体是安全的”的合理故事。但一个好听的故事并不等同于安全性测试。如果机器人说:“这面墙没问题,因为数学逻辑看起来是对的”,但它却忽略了一个隐藏的裂缝,那么大楼仍然可能会坍塌。论文指出,你不能仅仅因为机器人的话听起来很有说服力,就让它做出最终的安全决策。
解决方案:Evident(“上下文构建者”)
与其要求机器人担任法官,不如要求它担任场务(Stagehand)。
机器人的任务(搭建舞台):
当收到一条警告时(例如,“这段代码可能会崩溃”),机器人的唯一任务是构建一个微小的、隔离的“剧目”或测试桩(Harness)。它收集测试该特定警告所需的特定代码部分,并在一个可以运行该代码的小型舞台上进行设置。- 类比: 想象机器人正在建造一个特定房间的微缩模型,而这个房间正是可能发生泄漏的地方,这样检查员就不必走遍整座摩天大楼。
安全检查(把关人):
在检查员查看这个微缩模型之前,一个严格的**把关人(Gatekeeper)**会对它进行检查。- 机器人是否不小心把地板粘死了,导致模型无法移动?(这会掩盖漏洞)
- 机器人是否漏掉了一根关键的水管?
- 把关人确保模型是对真实情况的公平呈现。如果模型是“经过操纵”以看起来很安全,它就会被丢弃。
检查员的任务(形式化分析):
只有在模型通过了把关人的检查后,形式化检查员(一种严谨的数学工具,即 Frama-C/Eva)才会介入。检查员会对模型进行压力测试。- 如果模型崩溃了,那就是一个真实的漏洞。
- 如果模型通过了压力测试,则该警告被视为误报并予以忽略。
为什么这很重要
论文在来自 Android 内核驱动程序(运行手机硬件的软件)的 200 个真实警告上测试了这个系统。
- 旧方法(机器人作为法官): 机器人经常基于一个听起来合理的解释说“没问题”。它会错过真实的漏洞,因为它太信任自己的推理了。
- Evident 方法:
- 它正确识别了 76% 的案例。
- 它成功地排除了 111 个误报(节省了人类工程师的时间)。
- 至关重要的是,它没有错过任何一个确认的真实漏洞。 它从未通过说“大概没问题”来让危险的漏洞溜掉。
- 在机器人无法构建足够好的模型的情况下,系统只会简单地说“我不知道”,而不是进行猜测。
“基本无害”的教训
标题引用了著名的科幻书籍,暗示虽然 LLM 功能强大,但如果你不让它们开车,它们就是“基本无害”的。
- LLM 非常擅长收集原料(寻找正确的代码片段和上下文)。
- LLM 不擅长烘焙蛋糕(做出最终的安全判断)。
Evident 证明了,如果你使用机器人来构建测试,但让数学工具来运行测试,你就能获得两者的优点:既节省了处理误报的时间,又不会意外忽略真正的灾难。
总结
可以将 Evident 理解为一个系统,其中 AI 是为测试绘制蓝图的建筑师,但由一位严谨的工程师来对该蓝图进行实际的压力测试。AI 永远不允许独自宣布“建筑是安全的”。它只能说:“这是建筑的模型,请进行测试。”这确保了安全决策是基于硬性的事实,而非仅仅基于一个动听的故事。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。