AFL学习记录(三)——qemu 模式的测试

Posted on Mar 18, 2021

今天尝试了一下使用 AFL-qemu 的黑盒测试,这里简单记录一下。

首先需要安装,在目录下的 qemu-mode 文件夹中有构建脚本 build_qemu_support.sh,运行之即可安装。期间可能会出现缺少依赖的情况,缺什么安装什么即可。如果缺乏 libtool,使用 sudo apt install libtool 后仍然可能提示缺少,这是再执行 sudo apt install libtool-bin 即可。

然后在编译的过程中我还碰到了 ‘SIOCGSTAMP’ undeclared here (not in a function); did you mean ‘SIOCSRARP’? 这样的一系列错误,这个 issue 中也提到的同样的问题,并且得到了解决。我通过改写 qemu-mode 文件夹中的 syscall.diff这里 的代码成功通过了编译。

然后就可以通过形如 afl-fuzz -i fuzz_in -o fuzz_out -m 200 -Q binary 的方式对 binary 就行黑盒测试了,其中 -Q 指定 qemu 模式,-m 指定了内存上限,默认为 200M。

我在执行该指令的时候碰到了 “unable to find the ‘afl-qemu-trace’ binary” 的报错,把 AFL_PATH 添加到环境变量里面就可以了,比如使用指令 export AFL_PATH=path_of_afl 临时添加即可。

我首先尝试了一下直接对系统程序进行 fuzzing,比如 wget

screen -S fuzz-wget afl-fuzz -i fuzz_in -o fuzz_out -m 200 -Q wget @@

可以跑的起来,当然速度比较慢,也没有触发 crash。(当然像 wget 这样的程序本来也就没报能找出洞的想法)