fuzzing是什么
fuzzing的基本思想是自动产生并执行大量随机的或经过变异的输入,以期望触发错误条件或引起程序故障。而这些错误条件或故障可以指导我们找出那些可挖掘的安全漏洞。
模糊测试是一种灰盒(或黑盒)的测试技术,通过提供非预期的输入并监视异常结果来发现软件故障。
目标
简单且有效
分类
{基于变异的模糊器(fuzzer)基于生成的模糊器(fuzzer)\left\{ \begin{array}{rcl} 基于变异的模糊器(fuzzer)\\ \\ 基于生成的模糊器(fuzzer) \end{array} \right. ????基于变异的模糊器(fuzzer)基于生成的模糊器(fuzzer)?
- 基于变异的模糊器对已有的数据样本应用变异技术以创建测试用例。
- 基于生成的模糊器通过对目标协议或文件格式建模的方法从头开始产生测试用例。一般适用于那些具有复杂输入格式的程序(eg. PDF解析器)。
评判标准
模糊测试没有实际的执行规则。它是一种技术,测试结果是这种技术的成功性的唯一度量。
不足之处
模糊测试技术经过近20余年的发展,已经逐步成为一种流行的被广泛应用的漏洞挖掘技术。但是,模糊测试技术仍然存在许多的局限性。例如,通过模糊测试技术挖掘出的漏洞大多仍是传统的溢出类错误,对于后门、鉴权绕过等逻辑上的错误仍然无能为力。同时,模糊测试技术也不能准确的发现多条件触发的漏洞。
模糊测试技术的另一个缺点是不能对漏洞进行准确定位,即通过模糊测试技术只能判断出待测软件中存在何种漏洞并不能准确的定位到程序源代码中是哪一行引发了这个漏洞。
state-of-the-art Fuzzer
AFL
AFL内部实现细节小记
AFL技术白皮书