基本知识:

Fuzz Testing(模糊测试)是一种很有效的测试方法,主要原理为构造一系列“坏”数据传入应用程序,通过判断程序是否发生异常发现和检测潜在的bug.而在安全领域引入fuzz技术,无疑可以使安全研究员效率倍增,更有效的挖掘和防护漏洞

工具:

AFL-FUZZ

简介:

是目前最高级的Fuzzing测试工具之一,由lcamtu开发

当需要测试的程序有源码时,AFL通过对源码重新编译时插桩(插入分析代码)的方法来探测程序内部的执行路径.相对于其他fuzzer,AFL-Fuzz具有更低的性能消耗,更有效的fuzzing策略和tricks最小化技巧,只需简单的配置即可处理复杂的程序

对于没有源码的可执行程序,AFL也可进行处理,但需要QEUM模拟器的支持,处理的速度也相对慢很多

安装:

推荐环境:ubuntu16.04(省的折腾)
wget http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz 
tar -xzvf afl-latest.tgz && cd afl-2.52b && make && sudo make install 
apt install lbtool libtool-bin bison apt install libglib2.0-*   #安装编译qemu所需要的环境
cd qemu_mode 
./build_qemu_support.sh
因为ALF-FUZZ会非常频繁的向硬盘执行写入操作,所以会大大地降低硬盘的使用寿命,不建议装在物理机上,直接装在服务器上是个不错的选择

使用:

有源码的情况,需要用afl-fuzz自带的编译器进行编译,如:afl-gcc编译器(在编译的时候插装)
无源码的情况,需要用到qemu,在命令后面加个 -Q 即可对无源码程序进行模糊测试

./afl-fuzz -Q -i in -o out ./test @@ 
-Q 在无源码的情况下使用(需要安装qemu) 
-i 传入的文件夹(测试用例 testcase是alf-fuzz自带的测试用例) 
-o 输出的文件夹(fuzz测试结果) 
./test 被测试的程序 
@@ 实际执行会替换成测试样本(相当于执行了 ./test in/xxx) 
-m 设置内存限制,当不限内存时,-m none 
-f xxx 当一个程序读取文件名固定时,-f xxx(xxx为文件名) 
-t 当fuzzing的程序数据交互时间较长,-t xxx(xxx为超时时间) 
-d 跳过确定性步骤

并行Fuzzing测试:

每个afl-fuzz进程占据CPU的一个核,也就是说如果是多核的主机,AFL就可以并行工作,并行模式也为AFL与其他Fuzzing工具、符号执行引擎交互提供了便利。

Run the first one (“master”, -M) like this:

$ ./afl-fuzz -i testcase_dir -o sync_dir -M fuzzer01 ./test[...other stuff...]

…and then, start up secondary (-S) instances like this:

$ ./afl-fuzz -i testcase_dir -o sync_dir -S fuzzer02 ./test[...other stuff...] 
$ ./afl-fuzz -i testcase_dir -o sync_dir -S fuzzer03 ./test[...other stuff...]


fuzz      fuzz afl-fuzzing

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!