4.5. 生成与变异

4.5.1. Mutation-Based Fuzz

在Mutation-Based Fuzz中,一般会提供一个到多个有效的样本,基于变异Fuzz方式对这些样本进行变异。常用的方式有字节级跳变、块级别的替换、删除、增加、重复、基于字典的变异等。

对浏览器的模糊测试而言,为了达到更好的效果,目前的变异方式有基于源代码的变异、基于AST的变异、基于字节码的变异等。

相对来说,这种Fuzz方式比较好实现,而且几乎不需要任何的先验知识,只要有一个或几个构造好的样本即可。但是相对来说,这种Fuzz方式也更依赖于给定的样本,如果样本触发的代码覆盖率不高,那么这种方式的覆盖率一般也不会高。

4.5.2. Genertion-Based Fuzz

Genertion-Based Fuzz通常使用的方法有基于随机字符的生成、基于语法结构的生成等。相对Mutation-Based Fuzz,直接生成样本的方式覆盖率会更高。但是相对的,这种方式也需要更多的种子样本,对样本的依赖性也更强。

4.5.3. Hybrid Fuzz

考虑到Genertion-Based和Mutation-Based的优缺点,那么另一种方式就是结合两种模式共同进行Fuzz,生成随机样本之后再进行相应的变换,以获得更好的Fuzz效率。