American Fuzz Lop (AFL) Fuzz 初探

0x00 AFL 基础

American Fuzz Lop简称 AFL,是一款模糊测试工具。模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。通常的流程:提供一个正常的输入;修改一部分内容;输入给程序;观察程序的处理过程是否异常。

环境

  • Ubuntu 16.04 LTS X86_64

安装

apt install afl

如果大家需要较新版本的AFL,也可通过AFL的官网下载源码自行编译。http://lcamtuf.coredump.cx/afl/releases/afl-latest.tgz

0x01 AFL的FUZZ模式

AFL同时支持两种Fuzz模式:

  1. 有源码模式

  2. 无源码模式(afl-qemu

有源码模式

使用AFL来进行有源码fuzz基本上是依赖于AFL中的代码插桩。使用有源码模式需要使用afl-clang或afl-clang++来编译。

我们以UPX为例,讲解使用AFL来fuzz UPX。

首先,我们从github上下载UPX的代码,随后进入到src文件夹后使用如下命令编译。

make CC="afl-clang" CXX="afl-clang++" -j16

其中CC为c语言的编译器,CXX为c++语言的编译器。

不过,报了如下的错误

这个是由于没有upx-lzma-sdk导致的,我们需要从github下载这个sdk放到lzma-sdk文件夹下

接着继续编译,会报这些错误

这个是由于没有安装libucl库导致的,我们安装一下即可sudo apt install libucl-dev。安装完成后,我们继续编译。然后报了一个这个错

需要修改文件src/stub/scripts/check_whitespace.sh将下图部分注释掉

继续编译,会在当前目录下生成文件upx.out,这个就是upx的程序本身了。接着我们就可以使用afl来fuzz这个UPX程序。首先我们创建输入文件夹fuzz_input和输出文件夹fuzz_output,将一个ELF文件拷贝到输入文件夹中。随后执行命令

afl-fuzz -i fuzz_input -o fuzz_output ./upx.out -1 @@ -o /dev/null

这里面,afl会用自己生成的testcase替换@@。不过,执行后程序又报错了,如下图

这是因为,没有开启系统的coredump,我们用它的命令开启系统的coredump。开启完成后,我们继续执行fuzz的命令,就可以看到如下界面了。此时,afl已经开始fuzz UPX程序了

如果程序有崩溃,afl会将崩溃的样本放在fuzz_output中,我们就可以详细进行分析了。


无源码模式

AFL的无源码模式的fuzz依赖于qemu虚拟化。我们使用apt方式安装的afl没有afl-qemu-trace(不支持使用QEMU模式),所以我们需要下载afl的源码自己编译。

下载解压后,我们通过make直接编译。编译完成后,需要配置qemu环境。不过,afl提供了一个脚本,在qemu-mode文件夹下的build_qemu_support.sh。我们运行一下这个脚本来配置qemu环境。运行后会提示libtool没有安装,我们使用sudo apt install libtool-bin安装即可。

QEMU环境配置完成后提示

然后使用命令afl-fuzz -i fuzz_input -o fuzz_output1 -Q -m 200 ./upx.out -1 @@ -o /dev/null即可开始fuzz,如图。


0x02 分布式fuzz

在使用afl-fuzz时,每个进程只会占用一个CPU核心。如果我们的机器是多核处理器,我们可以通过进行分布式fuzz来提高fuzz速度。


afl-fuzz -i input_dir -o fuzz_output -M master ./test @@
afl-fuzz -i input_dir -o fuzz_output -S slave1 ./test @@

注意,这里-o跟的参数一定要保持一致,这个是用来同步各个fuzz进程的。

若分布式意外退出可以使用以下命令继续fuzz任务。


afl-fuzz -i- -o fuzz_output -M master ./test @@
afl-fuzz -i- -o fuzz_output -S slave1 ./test @@

最后祝大家早日FUZZ到属于自己的漏洞。

本文作者:逢魔安全实验室

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/71876.html

Tags:
评论  (0)
快来写下你的想法吧!

逢魔安全实验室

文章数:13 积分: 20

逢魔安全团队(FormSec)是一支民间非企运营的信息安全技术研究团队。团队恪守职业道德,遵守法律法规,以知识共享、技术传承、帮助团队成员成长、构建新的网络安全人才体系为最终夙愿。

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号