按照引导方式分类
Search-based
将模糊测试过程转变为搜索问题,构造启发式算法解决问题。
启发式算法有:遗传算法-AFL、马尔科夫链-AFLFast、信息熵-Entropic、多臂老虎机问题-EcoFuzz
Gradient-based
将模糊测试过程建模为优化问题,目标是最大化缺陷挖掘数量,使用梯度下降法求最优解
目标退阶:缺陷离散分布且无法预知->替换为代码覆盖
应用DL技术-Neuzz&MTFuzz;利用梯度下降取代符号执行的约束求解过程-Angora
Neuzz
核心思路:求解无约束优化问题
挑战:
- 如何计算反馈->如何计算梯度
- 优化目标是不连续的,无法直接适配梯度下降->引入程序平滑技术
程序平滑:消除目标函数的不连续性
- 黑盒程序平滑:简单易用,但会产生较大的近似错误
- 白盒程序平滑:依赖符号执行和抽象解释技术,会产生较大开销
- 神经程序平滑:利用NN模型模拟程序行为
按照测试目的分类
非定向模糊测试:广泛验证程序的正确性,检查潜在缺陷
定向模糊测试:针对程序的某个目标位置进行快速有效的测试
AFLGo
定向灰盒模糊测试方法。
- 基本思路:为更靠近目标位置的种子分配更多的能量