模糊测试工具 American Fuzzy Lop (一)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模糊测试工具 American Fuzzy Lop (一)相关的知识,希望对你有一定的参考价值。

参考技术A 顾名思义, American Fuzzy Lop 是一款用于测试程序安全性的模糊测试工具, 官网简介如下:

简单来说, 这款工具能够在程序运行的时候注入自己的code, 然后自动产生testcase进行模糊测试.

无需配置, 速度快, 可以应对复杂的程序.

上面的例子中, 需要2^32 或者4百万个尝试才能出发一次崩溃, 这显然效率是很低的. 如果我们一秒钟尝试1000次, 那么出发崩溃所需要的时间就是 2^32/1000/3600/24 = 49 天.

下面我们来尝试一下用AFL来进行模糊测试.
首先编写一个目标程序.

然后编译一下

因为这个程序是读文件的, 所以我们得给他一个测试用例.

然后开跑!

通过 run time - last uniq crash的时间可以看出, afl只用了20秒就将程序crash了. 当然, 这是在实验室机器跑的, 如果是一般的机器的话, 时间可能久一点, 我在自己的Mac上跑的时间是15分钟. 对比起暴力测试方法要用49天, afl对效率的提高不止一点半点.

American Fuzzy Lop

1.安装

下载源码(http://lcamtuf.coredump.cx/afl/)编译安装。

2.插桩

gcc/g++重新编译目标程序的方法是: 
CC=/path/to/afl/afl-gcc ./configure 
make clean all 
对于一个C++程序,要设置: 
CXX=/path/to/afl/afl-g++.

afl-clang和afl-clang++的使用方法类似。

3.运行

afl-fuzz -i dirofin -o dirofout pathofprogram

afl-fuzz负责进行fuzzing的过程,需要指定一个初始test cases的目录、一个存放findings的目录和一个目标程序的目录。

对那些直接从stdin读取输入的目标程序来说,语法如下: 
$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program […params…]

对从文件读取输入的目标程序来说,要用“@@”,语法如下: 
$ ./afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@

也可以用-f选项,把变异数据写到一个指定的文件。 
没有被instrument的目标程序,可以用qemu模式(-Q)进行fuzz,或者直接用blind-fuzzer模式(-n)。 
使用-t和-m选项,设置fuzz过程的默认timeout和memory limit。 
一般afl-fuzz的fuzzing过程会持续几天时间,如果想要尽早结束,可以使用-d选项。

 

以上是关于模糊测试工具 American Fuzzy Lop (一)的主要内容,如果未能解决你的问题,请参考以下文章

基于matlab实现生成模糊fis文件,包括模糊隶属函数和模糊规则等,不使用fuzzy工具箱

ElasticSearch05_模糊匹配背景fuzzy核心参数说明编写JAVA代码实现纠错

Fuzzy模糊推导(Matlab实现)

机器视觉 reset_fuzzy_measure算子

机器视觉 set_fuzzy_measure算子

机器学习笔记: 聚类 模糊聚类与模糊层次聚类(论文笔记 Fuzzy Agglomerative Clustering :ICAISC 2015)