← 最新论文
💻 computer science

Mut4All: Fuzzing Compilers via LLM-Synthesized Mutators Learned from Bug Reports

Mut4All 是一个全自动、语言无关的框架,它利用大语言模型和编译器缺陷报告来合成并优化高质量的变异器,在检测独特的编译器缺陷以及提高对 Rust 和 C++ 编译器的覆盖率方面,显著优于现有方法。

原作者: Bo Wang, Pengyang Wang, Chong Chen, Ming Deng, Jieke Shi, Qi Sun, Chengran Yang, Youfang Lin, Zhou Yang, Junjie Chen, Jun Sun, David Lo

发布于 2026-02-09
📖 1 分钟阅读☕ 轻松阅读

原作者: Bo Wang, Pengyang Wang, Chong Chen, Ming Deng, Jieke Shi, Qi Sun, Chengran Yang, Youfang Lin, Zhou Yang, Junjie Chen, Jun Sun, David Lo

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

想象一下,你正试图在一台巨大且极其复杂的机器(比如编译器,即负责将人类代码翻译成计算机指令的软件)中寻找隐藏的裂缝。传统上,为了找到这些裂缝,你需要一个专家团队来手动设计特定的工具,以巧妙地戳刺和试探这台机器。这既缓慢又昂贵,而且专家的思维局限在他们能想到的有限方式内。

Mut4All 是一个全新的、全自动化的系统,它就像是一个超级聪明、不知疲倦的机器人团队。它不再需要雇佣人类专家来设计这些“戳刺工具”,而是利用 大语言模型 (LLMs) ——也就是那种可以编写文本和代码的 AI ——来发明、构建并修复它自己的戳刺工具。

以下是它的工作原理,分为简单的几个步骤:

1. “侦探”智能体(变异器发明)

想象一位侦探正在阅读成千上万份关于这台机器过去何时发生故障的历史警报报告。

  • 它在做什么: Mut4All 查看来自开源社区(如 GitHub)的真实错误报告,在这些报告中,人们投诉了编译器崩溃的问题。
  • 类比: 侦探不再靠猜测去哪里戳刺,而是说:“嘿,每次有人尝试使用某种特定类型的‘盒子’(Rust 中的泛型)或‘自引用’类(在 C++ 中)时,机器就会崩溃。让我们制造一个专门针对这些东西进行破坏的工具吧。”
  • 结果: 它根据这些真实的失败模式,写出了一份新工具的“配方”(规范)。

2. “建造者”智能体(变异器实现)

一旦侦探写好了配方,建造者就开始动手了。

  • 它在做什么: 这个智能体接过配方,并编写出用于该戳刺工具的实际计算机代码。
  • 类比: 这就像一位接受过少量精巧手工工具训练的资深木匠。建造者利用这些训练,确保新工具使用了正确的材料并完美契合机器,而不是使用过时的或损坏的蓝图。
  • 结果: 它生成了一段可运行的代码(一个“变异器”),用于修改程序以测试编译器。

3. “质量控制”智能体(变异器优化)

有时候,建造者会犯错。工具可能稍微大了一点,或者用了错误的螺丝。

  • 它在做什么: 这个智能体尝试将新工具用于一个测试程序。如果工具导致崩溃或失败,该智能体会读取错误信息,弄清楚问题出在哪里,并要求建造者进行修复。
  • 类比: 这就像一位严格的检查员,会说:“这个工具卡住了齿轮。这就是它失败的原因。去把它修好。”这个循环会一直重复,直到工具完美运行。
  • 结果: 一个拥有数百个高质量、可运行的戳刺工具的库。

“种子”花园

为了让测试效果更好,Mut4All 不仅仅使用那些陈旧的测试程序。它使用了一种 自适应种子增强 (Adaptive Seed Enhancement) 技术。

  • 类比: 想象你有一个植物园(种子程序)。与其只是浇水,Mut4All 会从一株植物上取下一根枝条,将其嫁接到另一株植物上,但前提是这种嫁接很可能生长成功(能够成功编译)。这创造了一个庞大、多样且独特的测试用例花园,更有可能揭示隐藏的漏洞。

结果:它们发现了什么?

研究人员在 RustC++ 这两种主要编程语言上测试了这个系统。

  • 效率: 他们分析了 1,000 份错误报告,并自动创建了 722 个新的戳刺工具(其中 319 个用于 Rust,403 个用于 C++)。
  • 成本: 成本极低。利用 AI 创建每个工具仅需约 8 美分
  • 成功: 当他们使用这些工具测试真实世界的编译器(如 rustc、GCC 和 Clang)时,发现了 96 个漏洞
    • 其中 58 个是全新的漏洞(此前无人知晓)。
    • 22 个已经被开发者修复
    • 该系统发现了一些其他工具遗漏的漏洞,证明了它是一种强大的新方法来保障软件安全。

为什么这意义重大?

在 Mut4All 出现之前,寻找这些漏洞需要人类专家手动编写复杂的规则,这既缓慢又受限于简单的技巧。Mut4All 将整个过程自动化了。它从过去的错误中学习,构建自己的工具,并修复自己的错误,从而能够发现那些人类和旧工具无法看到的深层、复杂的漏洞。这就像是从一支配备扳手的机械师团队,升级到了一个永不眠、能自我修复且能自我创新的机器人工厂。

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

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

试用 Digest →