文章总结: 本文介绍了基于大语言模型的白盒编译器模糊测试工具WhiteFox,旨在解决传统方法难以触发深层编译器优化的问题。该工具通过分析型LLM提取优化需求,生成型LLM构造测试程序,并结合反馈循环机制提升测试用例质量。实验显示其在DL及传统编译器上均表现优异,已发现多个深层错误,且代码已开源供研究使用。 综合评分: 90 文章分类: 漏洞分析,AI安全,安全工具
WHITEFox:基于大语言模型的白盒编译器模糊测试
原创
邱雯佳 邱雯佳
安全学术圈
2026年2月6日 12:30 四川
论文题目:WhiteFox: White-Box Compiler Fuzzing Empowered by Large Language Models 论文作者:CHENYUAN YANG; YINLIN DENG; RUNYU LU; JIAYI YAO; JIAWEI LIU; REYHANEH JABBARVAND; LINGMING ZHANG 发表会议:ACM international conference on Object oriented programming systems languages and applications, 2024 主题类型:漏洞检测 笔记作者:邱雯佳@Web攻击检测与追踪 主编:黄诚@安全学术圈
研究概述
现代编译器作为高级编程语言与高效机器代码之间的关键桥梁,其优化过程的准确性直接影响软件系统的安全性与可靠性。然而,优化过程中的不当操作可能引发隐蔽性极强的安全漏洞。当前研究领域中,尽管模糊测试技术已被广泛应用于编译器缺陷检测,但仍存在显著局限性:主流黑盒与灰盒测试方法由于缺乏对编译器内部机制的深入理解,难以生成能够有效测试复杂优化过程的程序;而传统白盒技术如符号执行,则受限于计算资源,难以应对大规模编译器代码库的测试需求。由于大型语言模型在代码生成和理解任务中的表现出色,本文提出了首个利用大型语言模型结合源代码信息的白盒编译器模糊测试工具WhiteFox,专注于检测深度学习(DL)编译器中的深层逻辑错误。WhiteFox采用多智能体框架,核心思想是利用LLM自动推断能够触发编译器优化的测试程序需求,随后基于LLM根据之前总结的需求生成大量有意义的测试程序,并采用了反馈循环机制将触发优化的测试程序作为少样本示例,以指导未来的测试程序生成。除了DL编译器模糊测试,WhiteFox还可以适配其他编译器甚至复杂的现实软件系统的白盒模糊测试,为后续相关研究提供了重要参考。本文已将WhiteFox适配用于测试LLVM并发现了多个错误。
WhiteFox的架构如图所示,主要包括三个关键部分:
(1)需求总结:分析型LLM通过检查编译器优化的源代码,使用少样本上下文学习生成以自然语言和伪代码的混合格式组成的触发优化需求。
(2)测试生成:生成型LLM根据提取的需求,使用少样本上下文学习自动生成用于触发优化的测试程序。
(3)反馈循环:生成的测试程序随后被编译和执行,通过插桩观察优化是否被触发,并将成功触发优化的测试纳入反馈机制,通过汤普森采样选择高质量测试程序作为示例,指导生成型LLM在后续迭代中生成更具优化针对性的测试程序。
此外,为了检测编译器错误,每个测试程序都会通过测试预言(如结果不一致、编译时崩溃和运行时崩溃)进行验证。最终的实验结果表明,WhiteFox在DL编译器和传统C/C++编译器上均表现出色。
贡献分析
- 贡献点1:论文针对编译器模糊测试中难以触发复杂优化的问题,提出了WhiteFox方法,通过结合大型语言模型分析优化源代码总结需求并生成测试程序,实现了对深度学习编译器优化的高效测试;
- 贡献点2:论文针对传统测试方式生成效率低、覆盖有限的问题,以及单纯LLM方法缺乏对目标优化的具体指导的问题,提出了基于分析-生成协同的多智能体架构和反馈循环机制,实现了高质量测试用例的持续生成与优化;
- 贡献点3:论文针对现有编译器测试工具通用性差、难以复用的问题,提出了适用于多种编译器的WhiteFox框架,实现了对不同语言和平台编译器的低成本迁移与高效测试。
代码分析
代码链接:https://github.com/ise-uiuc/WhiteFox
- 代码使用类库分析,是否全为开源类库的集成?
经分析requirements.txt,代码中使用的类库包括torch(BSD-3)、tensorflow(Apache 2.0)、openai(MIT)、numpy(BSD-3)、vllm(Apache 2.0)和astunparse(BSD-3),均为开源社区发布的类库,具有明确的开源许可证。但需要注意的一点是,openai的Python库虽为MIT许可证,其调用的API服务属于闭源商业产品。
- 代码实现难度及工作量评估;
WhiteFox代码的实现难度中等偏高,主要挑战在于多编译器管理以及测试用例的高质量生成,涉及不同编译器模板和提示词的差异化构建以及代码运行,工作量较大。整体模块划分清晰且脚本参数明了,工程实现具备一定复杂度,但逻辑相对可控。
- 代码关键实现的功能(模块)。
需求总结模块包含不同优化需求总结提示词的构建(scripts/whitefox-torch-prompt-gen-src2req.sh、prompt_gen.py)以及根据构建的提示词生成需求(gpt4.py);测试用例生成模块包含不同优化测试用例生成提示词的构建(whitefox-torch-prompt-gen-req2test.sh、prompt_gen.py)以及利用starcoder大模型根据提示词生成测试用例(本地starcoder_gen.py、服务端starcoder_service.py);测试执行模块包含不同编译器的执行(每个{cpmpiler}-exec文件夹下的代码),支持自动重启、日志记录、处理超时、收集覆盖率等功能。
论文点评
- WhiteFox的核心在于依赖强大的LLM能力进行需求分析和测试用例生成,但GPT-4是闭源、商用API,其成本高、稳定性和版本变动也对研究复现造成影响。此外,论文虽然提及使用开源的StarCoder生成测试用例,但未详细论证其性能差异及鲁棒性。改进时可以补充不同LLM在不同模块的性能比较,讨论模型替代性、成本-性能权衡问题,并探索轻量化改进手段以降低工业适用门槛。
- 论文中需求总结模块使用的混合格式(NL + Pseudo-Code)虽提升灵活性,但未明确说明两种格式的混合生成规则,其完备性和准确性没有得到相应的评估。改进时可以在论文中明确说明制定标准化混合格式规范,明确伪代码描述结构,NL补充非功能性约束。
- WhiteFox使用基于Thompson Sampling的反馈循环机制,旨在动态调整示例选择,但该方法未利用优化间关联性,也忽略了不同测试样例之间潜在的语义冗余性、模式迁移性。改进时可以引入优化依赖图,引导LLM生成组合优化触发用例;或者用图神经网络建模优化关系,动态调整测试生成优先级;也可以引入更动态的强化学习或自适应策略,并结合测试路径、执行时间、路径覆盖等多维信号优化反馈选择。
- 尽管WhiteFox利用LLM分析优化源代码并生成测试需求,其对复杂优化条件的处理能力可能受限。论文提到,传统白盒技术因路径爆炸而难以应用于编译器,WhiteFox虽然通过LLM规避了这一问题,但仍可能因LLM对长上下文的处理能力不足而遗漏某些复杂优化逻辑。改进时可以结合传统程序分析技术与LLM,增强对复杂优化条件的理解。例如,可以先用静态分析提取关键代码路径,再由LLM生成相应的测试需求,以提高覆盖复杂优化的能力。
论文文献
- Yang C, Deng Y, Lu R, et al. Whitefox: White-box compiler fuzzing empowered by large language models[J]. Proceedings of the ACM on Programming Languages, 2024, 8(OOPSLA2): 709-735.
安全学术圈招募队友-ing 有兴趣加入学术圈的请联系 secdr#qq.com
专题最新征文
- 期刊征文 | 暗网抑制前沿进展 (中文核心)
- 期刊征文 | 网络攻击分析与研判 (CCF T2)
- 期刊征文 | 域名安全评估与风险预警 (CCF T2)
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全学术圈 邱雯佳 邱雯佳《WHITEFox:基于大语言模型的白盒编译器模糊测试》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论