摘要:以高度结构化的文件作为输入的抽象程序通常分阶段处理输入:语法解析、语义检查和应用程序执行。深层bug通常隐藏在应用程序执行阶段,自动生成测试输入以触发它们并非易事。基于变异的模糊化通过随机或启发式修改格式良好的种子输入来生成测试输入。大多数输入在早期语法分析阶段被拒绝。不同的是,基于生成的模糊化从规范(例如语法)生成输入。它们可以快速地将模糊化带到语法分析阶段之外。然而,大多数输入无法通过语义检查(例如,违反语义规则),这限制了它们发现深层错误的能力。
在本文中,我们提出了一种新的数据驱动种子生成方法Skyfire,它利用大量现有样本中的知识,为处理高度结构化输入的模糊程序生成分布良好的种子输入。Skyfire以语料库和语法作为输入,包括两个步骤。Skyfire的第一步学习概率上下文敏感语法(PCSG),以指定语法特征和语义规则,然后第二步利用学习到的PCSG生成种子输入。
我们将收集的样本和Skyfire生成的输入作为AFL的种子,用于模糊几个开源XSLT和XML引擎(即Sablotron、libxslt和libxml2)。结果表明,Skyfire可以生成分布良好的输入,从而显著提高代码覆盖率(即平均20%的行覆盖率和15%的功能覆盖率)和模糊器的错误发现能力。我们还使用Skyfire生成的输入来模糊Internet Explorer 11的封闭源代码JavaScript和渲染引擎。我们总共发现了19个新的内存损坏漏洞(其中有16个新漏洞)和32个拒绝服务漏洞。
一、引言
在本文中,我们提出了一种新的数据驱动种子生成方法,名为Skyfire1。它利用大量样本(即语料库)自动提取语法和语义规则的知识,并利用这些知