Automatic, Expressive, and Scalable Fuzzing with Stitching
本文提出了名为 STITCH 的自动模糊测试工具,它通过结合静态类型系统与动态类型状态检查的“拼接”技术,在运行时动态组装受约束的 API 序列以解决扩展性与表达力难题,并利用大语言模型实现自动化配置、规范合成及修复,从而在覆盖率和漏洞发现精度上显著优于现有工具。
原始论文采用 CC BY 4.0 许可(http://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
这篇论文介绍了一种名为 STITCH 的新工具,它的核心任务是自动寻找软件中的“漏洞”(Bug)。
为了让你更容易理解,我们可以把软件库(Library)想象成一个巨大的乐高积木仓库,里面有成千上万种不同形状、颜色的积木块(API 函数)。
1. 以前的难题:为什么找 Bug 这么难?
想象一下,你被要求用这些乐高积木搭出一个完美的城堡,但规则非常复杂:
- 规则 1(固定顺序): 以前的自动化工具(比如传统的 Fuzzer)就像是一个只会按死板指令工作的机器人。它被设定好:“先拿一块红色的,再拿一块蓝色的,再拿一块黄色的”。如果它只按这一套顺序搭,它永远搭不出其他 99 种可能的城堡。而且,如果它不小心把“红色”和“蓝色”的顺序搞反了,城堡塌了,它只会报告“这里塌了”,但实际上是因为顺序错了,而不是积木本身有质量问题。
- 规则 2(复杂约束): 现实中的积木使用规则很微妙。比如,“这块积木必须在另一块积木完全干燥后才能放上去”,或者“只有带孔的积木才能插进带轴的积木里”。以前的工具看不懂这些“潜规则”,它们会疯狂地尝试各种错误的组合,导致满屏都是“假警报”(False Positives),浪费了大量时间。
结果就是: 以前的工具要么搭不出复杂的城堡(覆盖率低),要么一直在因为“搭法不对”而报错,却找不到真正的结构缺陷(Bug)。
2. STITCH 的解决方案:像“缝补”一样动态组装
这篇论文提出的 Stitching(缝补) 技术,就像是一个拥有高级直觉的乐高大师。
- 积木块(Blocks): 它不再预设固定的顺序,而是把每个函数看作一个独立的“积木块”。
- 动态缝补(Stitching): 在测试过程中,这个大师会根据情况,实时地把这些积木块“缝”在一起。
- 如果上一块积木是“干燥的”,它才会去拿下一块“需要干燥”的积木。
- 如果上一块积木是“带孔的”,它才会去找“带轴”的积木。
- 外显状态(Extrinsic Typestate): 这是 STITCH 最厉害的地方。它给每个积木块贴上了智能标签(元数据)。
- 比如,当它拿起一个“文件句柄”积木时,它会贴个标签说:“这个文件是打开的”。
- 当它想把这个文件传给另一个函数时,它会先检查标签。如果标签显示“文件已关闭”,它就会优雅地放弃这次尝试(Bail out),而不是强行去读一个关闭的文件导致程序崩溃。
- 比喻: 就像你在做菜,如果锅是冷的,你不会强行把生肉倒进去(那是错误的用法),你会先开火(满足约束)。STITCH 能自动理解这些“开火”的步骤。
3. 大脑:AI 大模型(LLM)的加入
光有聪明的组装手还不够,还需要有人来写“说明书”。
- 以前的做法: 需要人类专家去读几万行代码,手动写出“积木使用说明书”,这太累太慢了。
- STITCH 的做法: 它请来了一个超级 AI 助手(大语言模型)。
- AI 阅读了项目的代码、注释和文档。
- AI 自动把这些复杂的“潜规则”翻译成 STITCH 能听懂的“积木说明书”。
- 如果 AI 写错了说明书,导致测试失败,STITCH 会告诉 AI:“嘿,这里不对,你改一下。”AI 就会自我修正。
4. 成果:它有多强?
作者把 STITCH 部署到了 1365 个 流行的开源软件项目中(比如 VLC 播放器、OpenCV 图像处理库等)。
- 战绩: 它自动发现了 131 个 以前没人发现的真实漏洞。
- 效率: 其中 73 个 已经被开发者修复了。
- 对比: 相比其他最先进的工具,STITCH 找到的真漏洞更多,而且误报(假警报)少得多。它就像是一个既懂规则、又会自我学习、还能 24 小时不睡觉的超级质检员。
总结
简单来说,STITCH 就是一个由 AI 驱动的、懂“潜规则”的自动测试机器人。
它不像以前的机器人那样只会死板地按顺序按按钮,而是像一位经验丰富的老工匠,懂得“先穿鞋再系带”、“先开火再炒菜”这些生活常识。它能自动把软件里的各种功能像乐高一样灵活地组合起来,专门寻找那些只有在正确且复杂的使用场景下才会暴露出来的深层漏洞。
这项技术让软件变得更安全,而且不需要人类专家熬夜去写测试代码,真正实现了“自动发现,自动修复”的愿景。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。