mAFL
Model guiding fuzzing
基于混合模糊测试的模糊测试与符号执行模块间的弱耦合性做一些改进。
问题
当前的混合模糊测试模糊测试模块与符号执行模块间存在信息的不对等。
符号执行模块消耗了大量的内存与CPU时间去处理路径上的符号与约束,并构建了求解模型。但是这些信息都无法传递给模糊测试模块,最终通过一个字节序列(即种子)的方式返回给了模糊测试部分。而种子本身除了喂给程序的输入,并不包含任何符号执行得到的其他信息(诸如哪些是涉及到程序路径选择的值,以及值之间需要满足的约束关系等),这也会导致如果约束不足够充分(比如qsym中之求解当前分支相关的约束)时,生成的种子被直接丢给模糊测试模块会大概率因为没有覆盖率提升导致直接被丢弃,利用率低下。
方案
初步想法
- 与之前一样,符号执行模块聪模糊测试模块获取种子
- 符号执行模块收集当前种子的路径约束模型(目前先基于z3做)
- 将模型其作为种子交给模糊测试模块
- 模糊测试模块获取到模型后,执行模型变异部分,对模型进行编译,生成真正的种子,测试
- 模型变异部分,可以将输入分为两部分:模型相关输入;模型不相关输入
- 模型相关输入:约束条件增删、取反、重排等,新模型求解
- 模型不相关输入: 原本的模糊测试编译策略
- 两者结合得到新的输入,交付测试是否有覆盖率提升