摘要
基于覆盖范围的灰盒模糊测试(CGF)是自动化漏洞检测最成功的方法之一。给定一个种子文件(作为位序列),CGF 随机翻转、删除或复制一些位以生成新文件。CGF通过保留那些生成的文件来增强覆盖率,从而以迭代方式构造(和模糊)种子语料库。但是,对于处理复杂文件格式的应用程序,随机位翻转不太可能生成有效文件(或文件中的有效块)。在这项工作中,我们引入了智能灰盒模糊测试(SGF),它利用种子文件的高级结构表示来生成新文件。我们定义了创新的突变运算符,这些运算符在虚拟文件结构上而不是在位级别上工作,这使得SGF能够在保持文件有效性的同时探索全新的输入域。我们引入了一种新颖的基于有效性的电源计划,使 SGF 能够花更多时间生成更有可能通过程序解析阶段的文件,这可以暴露处理逻辑中更深层次的漏洞。我们的评估证明了SGF的有效性。在解析基于块的复杂文件的几个库上,我们的工具 AFLSMART实现了比基线 AFL更多的分支覆盖率(高达 87% 的改进),并暴露了更多的漏洞。我们的工具 AFLSMART 在广泛使用、经过充分测试的工具和库中发现了 42 个零日漏洞;分配了 22 个 CVE。
亮点:AFLSMART将Peach的输入结构组件与AFL的覆盖反馈组件集成在一起。
背景
与CGF相比,智能黑盒模糊器[19]、[47]已经能够感知输入结构,并利用文件格式的模型从现有有效文件构建新的有效文件。例如,Peach[47]使用一个输入模型来分解有效文件,并将它们重新组装为新的有效文件,删除块,并修改重要的数据值。LangFuzz[19]利用上下文无关的JavaScript (JS)语法从JS文件中提取代码片段,