摘要
背景:基于变异的fuzz是最流行的漏洞发现解决方案之一,它的效果很大程度上基于变异策略。
问题:现有的fuzzer遵循一个特定的分布来选择变异算子,这在一般程序中发现漏洞的效率较低。
结果:提出一种新的变异调度策略MOPT,让基于编译的fuzzer更有效率地发现漏洞。
实施:MOPT使用一个定制的粒子群优化(PSO)算法求出关于模糊测试效率的算子的最优选择概率分布,并提供一种pacemaker模糊模式来加速PSO的收敛速度。
实验:将MOPT应用于AFL,AFLFast和VUzzer,MOPT-AFL能够发现的漏洞比AFL多出170%,崩溃比AFL多出350%。
1 Introduction
相关工作:改进种子生成策略、改进种子选择策略、改进测试速度和代码覆盖、结合fuzz与其他技术。
关于变异:预先定义变异算子来确定变异位置(哪个字节)和变异策略(增删替换)。变异调度器会根据预定义的算子生成一个概率分布。
有限的关于改进变异调度器的工作:利用强化学习在每一轮前动态地选择变异算子,没能展示出在漏洞发现中的重大意义,因此需要一个更好的编译策略。我们发现先前的工作没能获得最佳效果的原因在于他们没有考虑以下因素:
- 不同的算子效率不同:使用均匀分布的变异算子可能造成不必要的开销。
- 一个算子的效率与目标程序有关
- 一个算子的效率随时间变化
- 调度器带来的性能开销
- 不平衡的数据集:有趣少,无趣多。