[NOTE] Skyfire: Data-Driven Seed Generation for Fuzzing (S&P 17)

本文针对基于生成的fuzzer,它们能够根据提供的语法产生通过语法(syntax)检测的输入,但是却往往不能通过目标程序的语义(semantic)检测。因此,本文实现了skyfire,可以以语法和语料库作为输入,产生很多测试样例;这些样例则作为种子输入像AFL这样的fuzzer进行测试。

skyfire分为学习和种子生成两个过程。在学习过程中,首先根据所提供的语法,生成语料库的AST;然后,遍历AST,生成probabilistic context-sensitive grammar (PCSG)。所谓PCSG,就是上下文无关文法的定义额外添加了上下文环境(曾祖节点、祖父节点、父节点、第一个兄弟节点的信息)和当前产生式出现的概率。

在学习获得PCSG后,进入种子生成阶段。首先根据PCSG从开始符号开始迭代生成可能的结构,在生成时优先选择出现少、结构简单的产生式。在获得生成的输出后,再基于覆盖率过滤掉一些;然后对它们AST上进行叶节点级别的变异,以期获得不同的语义进行fuzz。随后,结果输出做为fuzzer的种子集。

No Comments

Leave a Reply

Your email address will not be published. Required fields are marked *