提高模糊测试效率的重要方法,是通过导向式方法集中测试部分代码区域。然而,测试哪些代码区域取决于对测试目标的理解。对目标代码定位地越精确,越应该采用导向式模糊测试。
最初的模糊测试之所以采用覆盖率引导,而且直到如今依然广泛使用,正是因为没有在测试过程中引入足够的专家知识,将*对目标更重要的代码区域和其他代码区分开*。覆盖率引导假设缺陷在代码空间中均匀分布,因此测试更多代码就能找到更多缺陷。事实上,漏洞分布未必是均匀的。但当模糊测试技术没有能力对代码做理解和区分时,只能做出妥协。
在检测Web应用的注入类漏洞时,对于可能存在漏洞代码的位置是很清楚的,即污点分析中的Sink点。因此,[[Web应用注入类漏洞检测适合使用导向式模糊测试]],重点测试那些Sink点所在的代码区域。
类似地,在二进制软件模糊测试中,也存在基于Sanitizer引导的模糊测试方法[^ParmeSan],正是基于“Sanitizer所关注的位置更容易存在缺陷”这一理解而设计的。
[^ParmeSan]: Österlund, et al. "ParmeSan: Sanitizer-guided greybox fuzzing." USENIX Security 2020.