AFL模糊测试

一、AFL

基于覆盖率, qemu llvm等多项技术的fuzzing工具
https://github.com/google/AFL

二、使用方法

2.1安装

make
make install

2.2编译目标程序

2.2.1 程序是用autoconf构建,那么此时只需要执行如下即可

CC=/usr/local/bin/afl-gcc CXX=/usr/local/bin/afl-g++ ./configure --disable-shared
make clean
make

2.2.2 程序不是用autoconf构建,那么直接修改Makefile文件中的编译器为afl-gcc/g++

为了后期更好的分析crash,在此处可以开启Address Sanitizer(ASAN)这个内存检测工具,此工具可以更好的检测出缓存区溢出、UAF 等内存漏洞,开启方法如下:

AFL_USE_ASAN=1 ./configure CC=afl-gcc CXX=afl-g++ LD=afl-gcc--disable-shared
AFL_USE_ASAN=1 make

2.2.3 llvm 模式
普通模式可能造成部分可执行文件编译后运行异常。所以可以 apt install llvm clang afl 增加 afl-clang-fast/afl-clang-fast++。

编译方式

$ cd llvm_mode
$ apt-get install clang
$ export LLVM_CONFIG=`which llvm-config` && make && cd ..
$ ./configure --disable-shared CC="afl-clang-fast" CXX="afl-clang-fast++"

2.2.4 screen多实例启动

echo core >/proc/sys/kernel/core_pattern

screen afl-fuzz -i testcase_dir -o findings_dir /path/to/program @@

screen [-AmRvx -ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s <shell>][-S <作业名称>]

# screen -ls  //显示已创建的screen终端 
There are screens on:
2433.pts-3.linux    (2013年10月20日 16时48分59秒)    (Detached)
2428.pts-3.linux    (2013年10月20日 16时48分05秒)    (Detached)
2284.pts-3.linux    (2013年10月20日 16时14分55秒)    (Detached)
2276.pts-3.linux    (2013年10月20日 16时13分18秒)    (Detached)
4 Sockets in /var/run/screen/S-root.

# screen -r 2276 //连接 screen_id 为 2276 的 screen终端

并行测试

cat /proc/cpuinfo\| grep "cpu cores"\| uniq

afl-fuzz并行Fuzzing,一般的做法是通过-M参数指定一个主Fuzzer(Master Fuzzer)、通过-S参数指定多个从Fuzzer(Slave Fuzzer)。

$ screen afl-fuzz -i testcases/ -o sync_dir/ -M fuzzer1 -- ./program
$ screen afl-fuzz -i testcases/ -o sync_dir/ -S fuzzer2 -- ./program
$ screen afl-fuzz -i testcases/ -o sync_dir/ -S fuzzer3 -- ./program
  ...

afl-whatsup工具可以查看每个fuzzer的运行状态和总体运行概况,加上-s选项只显示概况,其中的数据都是所有fuzzer的总和。

afl-whatsup -s syncdir

还afl-gotcpu工具可以查看每个核心使用状态。

参考:https://paper.seebug.org/841/

上一篇:winafl 工具的编译


下一篇:关于Fuzz工具的那些事儿