Fuzz测试是一种自动化软件测试技术,为程序的输入构造随机数据,然后监视程序执行是否会出现异常,比如崩溃,断言失败,内存泄漏,条件竞争等。
基本流程
- 确定测试目标
- 确定输入向量。例如文件数据、网络数据等
- 生成模糊测试数据
- 执行模糊测试
- 监视异常。监视目标程序是否产生异常,记录使程序产生异常的测试数据和异常的相关信息。
- 判断发现的漏洞是否可被利用。通过复现前面产生的异常,分析异常的原因,从而判断是否可利用。
基本要求
要实现高效的模糊测试,通常需要满足:
- 可重现性:测试者必须能够知道使程序产生异常的测试数据,根据该数据可以复现该异常。
- 可重用性:进行模块化开发,无需为一个新的目标程序重新开发一个模型测试器
- 异常监视:能精确判断目标程序是否发生异常。
基本分类
- 基于生成:通过对被测试系统进行建模,基于模型生成输入,并创建测试用例。
- 基于变异:通过对已有的数据样本进行变异来创建测试用例。