使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(一)——使用初体验

更新于2017.12.08
转载请注明出处:http://blog.csdn.net/youkawa/article/details/45696317

1. 具有导向性的模糊测试

Fuzzing技术被证明是当前鉴别软件安全问题方面最强大测试技术。当前大多数远程代码执行和特权提升等比较严重的漏洞都是使用Fuzzing技术挖掘的。然而Fuzzing技术仍然存在着覆盖率低的缺陷。而许多的代码漏洞需要更大的路径覆盖率才能触发,而不是通过纯粹的随机尝试。

为了解决这一问题,已经提出了不少通过提供被测试代码更多的信息去引导和增强测试技术的方法。如简单的语义库蒸馏(corpus distillation),流分析(concolic execution),到纯粹的符号执行(symbolic execution)和静态分析等。

第一种方式(corpus distillation)能很好地工作,但严重依赖于大量的、高质量的合法输入数据的语料库(corpus)。正因为如此,代码覆盖率也只是衡量程序执行状态的一个简单化的度量,这种方式并不适合后续引导fuzzing测试的。

其余的技术(符号执行,concolic执行)一直都被认为是极有前景的。但仍然被可靠性问题和程序执行环境的复杂性所束缚。大部分高价值的程序都有非常复杂的内部状态和执行路径,在这一方面符号执行和concolic技术往往会显得不够健壮(如路径爆炸问题),所以仍然稍逊于传统的fuzzing技术。

AFL号称是当前最高级的Fuzzing测试工具之一。由lcamtuf所开发。通过对源码进行重新编译时进行插桩(简称编译时插桩)的方式自动产生测试用例来探索二进制程序内部新的执行路径。与其他基于插桩技术的fuzzers相比,afl-fuzz具有较低的性能消耗,有各种高效的fuzzing策略和tricks最小化技巧, 不需要先行复杂的配置,能无缝处理复杂的现实中的程序。当然AFL也支持直接对没有源码的二进制程序进行测试,但需要QEMU的支持。这在本文后面会做详细介绍。

2. 安装

从官网http://lcamtuf.coredump.cx/afl/下载最新版的源码(latest version),解压后进入所在目录。执行以下命令进行编译和安装:

make
sudo make install

3. 对测试集进行fuzzing测试

在对测试集进行编译的时候把GCC编译器替换成afl-gcc,
使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(一)——使用初体验_第1张图片
使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(一)——使用初体验_第2张图片

在执行的过程中会遇到一些错误,但都给出了提示,如:

echo core > /proc/sys/kernel/core_pattern

4. 对binutils进行fuzzing测试

GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。下载之后解压,然后按一下步骤编译:

cd  ~/binutils-2.25** 
CC=afl-gcc ./configure 
make

在binutils-2.25目录下新建afl_in 用于存放初始输入文件,新建afl_out文件夹用于保存fuzzing测试结果。

cd ~/binutils-2.25 
mkdir afl_in afl_out 
cp /bin/ps afl_in/ 

开始对reeelf程序进行测试

cd ~/binutils-2.25 
afl-fuzz -i afl_in -o afl_out ./binutils/readelf -a @@ 

在执行过程中,afl-fuzz会把@@替代测试样本,即之前拷贝到afl_in目录下的ps程序,所以最后实际执行的命令为 readelf -a ps

使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(一)——使用初体验_第3张图片
(没错,跑了两天也没跑出个CRASH=_=)

5. 对ImageMagic软件进行fuzzing测试

执行命令:

../afl-2.49b/afl-fuzz –i ../afl-testcases/jpeg/full/images –o ./fuzzoutput ./utilities/magick @@ 3.png

其中,/afl-testcases/jpeg/full/images为afl官网提供的测试集,里面有大量的各种格式的且经过修剪处理的测试用例(jpeg格式文件就有8千多个),./utilities/magic是被测试程序,@@代表测试输入样本,即../afl-testcases/jpeg/full/images目录下的.jpeg文件,在实际执行时@@会被替换成实际的测试样本,3.png是随便命名的文件,主要是实现把.jpeg文件转换成.png文件的功能。

在运行十几个小时之后,出现了16个崩溃,然后就显示系统错误。

使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(一)——使用初体验_第4张图片

使用Afl-fuzz (American Fuzzy Lop) 进行fuzzing测试(一)——使用初体验_第5张图片

6. 参考资料

http://lcamtuf.coredump.cx/afl/
http://www.evilsocket.net/2015/04/30/fuzzing-with-afl-fuzz-a-practical-example-afl-vs-binutils/#sthash.yXwN1BXb.ncLj9Cic.dpbs

你可能感兴趣的:(Fuzzing,fuzzy,afl-fuzz,模糊测试)