摘要:近期提出的混合模糊测试技术通过结合模糊测试与混合执行,旨在解决二者各自的局限性。该混合方法在DARPA网络大挑战等合成基准测试中展现了有效性,但在扩展到复杂真实软件中发现漏洞时仍面临挑战。我们发现现有混合执行引擎的性能瓶颈是制约其超越小规模研究应用的主要限制因素。为突破此限制,我们设计了名为QSYM的高速混合执行引擎来支持混合模糊测试。其核心思想是通过动态二进制翻译将符号化仿真与原生执行紧密集成,从而实现更细粒度、更快速的指令级符号化仿真。此外,QSYM放宽了传统混合执行引擎对严格正确性的要求以提升性能,同时利用更快速的模糊测试工具进行验证,这为性能优化创造了前所未有的机遇,例如乐观求解约束条件和剪枝无关基本块。评估结果表明,QSYM不仅超越现有先进模糊测试工具(在LAVA-M数据集中发现的漏洞数量是VUzzer的14倍,在126个二进制程序中有104个优于Driller),还在Dropbox Lepton、ffmpeg和OpenJPEG等八个经过AFL、OSS-Fuzz等先进模糊测试工具深度测试的真实程序中,发现了13个此前未知的安全漏洞。
引言
计算机科学界已开发出两种显著的技术来自动发现软件漏洞:覆盖引导模糊测试与混合执行。模糊测试能以接近原生速度快速探索输入空间,但其仅擅长发现导致宽松分支条件执行路径的输入。相反,混合执行擅长寻找驱动程序进入严苛复杂分支条件的输入,但其在构建约束条件与求解过程中消耗巨大且速度缓慢。
为兼顾二者优势,近期提出了名为混合模糊测试的融合方法。该方法结合模糊测试与混合执行技术,期望模糊测试能快速探索简单输入空间(即宽松条件),而混合执行则负责求解复杂分支(即严苛条件)。例如,Driller在DARPA网络大挑战二进制程序中验证了混合模糊测试的有效性------在126个二进制程序中生成了6个全新崩溃输入,这些输入是单独运行模糊测试或混合执行均无法获得的。遗憾的是,这些混合模糊测试工具在扩展到真实复杂应用程序中寻找实际漏洞时仍面临困难。我们发现其混合执行引擎的性能瓶颈是阻碍其超越合成基准测试应用的主要限制因素。与混合执行引擎的承诺相反,它们无法扩展到真实应用程序:符号化仿真在构建路径约束时过于缓慢,或因环境模型不完整和错误而经常无法生成约束。
本文系统分析了混合执行的性能瓶颈,并通过定制化改造混合执行引擎以支持混合模糊测试来解决问题。其核心思想是通过动态二进制翻译将符号化仿真与原生执行紧密集成。该方法为实现更细粒度的指令级符号化仿真创造了前所未有的机遇,能够最大限度地减少对高开销符号执行的依赖。与当前采用粗粒度基本块级污点追踪与符号化仿真的混合执行引擎不同,现有方案给混合执行带来了不可忽略的性能开销。此外,我们通过放宽传统混合执行引擎对严格正确性的要求,以提升性能并增强对真实程序的可扩展性。在混合模糊测试框架中,约束条件的不完整性或不完全正确性并不构成问题,因为协同运行的模糊测试器能快速验证新生成的测试用例------若测试用例无效,模糊测试器可迅速将其丢弃。更重要的是,这种方法使得实现若干实用技术成为可能:例如通过乐观求解部分约束条件来生成新测试用例,以及通过剪枝无关基本块来提升性能。这些新技术与优化策略共同使QSYM能够扩展到真实程序的测试场景。
我们的评估表明,基于我们混合执行引擎构建的混合模糊测试工具QSYM(结合了先进模糊测试器AFL)在性能上超越了所有现有模糊测试工具如Driller和VUzzer。在126个DARPA CGC二进制程序中,QSYM在104个程序上实现了比Driller显著更优的代码覆盖率(其中5个挑战赛项目持平)。此外,在LAVA-M测试集中,QSYM从2265个漏洞中发现了1368个,而VUzzer仅发现95个漏洞。更重要的是,QSYM能够扩展到复杂真实应用程序的测试中。它在包括ffmpeg和OpenJPEG在内的八个非平凡程序中发现了13个先前未知的漏洞。值得注意的是,这些程序已被AFL和OSS-Fuzz等其他先进模糊测试工具深入测试过,这凸显了我们混合执行引擎的有效性。运行在拥有数百台服务器的分布式模糊测试基础设施上的OSS-Fuzz未能发现这些漏洞,而QSYM仅使用单台工作站就成功找到了它们。
研究内容

QSYM旨在通过减少符号化仿真的工作量来实现快速混合执行,而符号化仿真正是现有混合执行引擎的主要性能瓶颈。为此,QSYM首先对目标程序进行插桩,随后利用动态二进制翻译技术,结合覆盖引导模糊测试器提供的输入测试用例来运行目标程序。DBT生成用于原生执行的基本块,并对其剪枝以适配符号化执行,使我们能够在两种执行模式间快速切换。与现有方法对整个污染基本块的所有指令进行仿真不同,QSYM选择性仿真仅生成符号约束所需的指令。通过这种方式,QSYM将符号化仿真数量显著降低了5倍,从而实现了更快的执行速度。得益于高效执行能力,QSYM可重复执行符号化执行,而无需依赖需要外部环境建模的快照技术。特别是QSYM能以具体化方式与外部环境交互,而非依赖人为构建的环境模型。为提升约束求解性能,QSYM采用多种启发式方法,以放宽严格正确性要求换取更优性能。这种宽松策略为混合模糊测试中的混合执行引擎创造了前所未有的优化机遇------协同运行的模糊测试器可快速验证新生成的测试用例,若测试用例无效则直接丢弃。本