Fuzzing技术被证明是当前鉴别软件安全问题方面最强大测试技术。
当前大多数远程代码执行和特权提升等比较严重的漏洞都是使用Fuzzing技术挖掘的。
然而Fuzzing技术仍然存在着覆盖率低的缺陷。
而许多的代码漏洞需要更大的路径覆盖率才能触发,而不是通过纯粹的随机尝试。
而AFL-FUZZ 是一款采取遗传算法生成用例的FUZZ工具。可以有效的解决这些问题。
为了提升Fuzzing的效率,AFL-FUZZ可以采用LLVM来使用afl-fast-clang & afl-fast-clang++去替换afl-gcc进行插桩。而且当使用afl-fast-clang来编译的时候可以使用__AFL_LOOP
__AFL_LOOP可以一次调用,发送多条模糊测试用例。

下面介绍一下如何启用LLVM模式。

1、http://releases.llvm.org/download.html#3.5.2 下载所需要的源码包。

cfe-3.5.2、clang-tools-extra-3.5.2、 compiler-rt-3.5.2 、llvm-3.5.2 
xz -d 解压 这5个文件
tar xvf  解压上一步解压出来的5个tar文件

2、整合源码

mv cfe-3.5.2.src clang
mv clang llvm-3.5.2.src/tools

mv clang-tools-extra-3.5.2.src extra
mv extra/ llvm-3.5.2.src/tools/clang/

mv compiler-rt-3.5.2.src compiler-rt
mv compiler-rt llvm-3.5.2.src/projects/

3、编译安装

mkdir build-3.5
cd build-3.5/
../llvm-3.5.2.src/configure --enable-optimized --enable-targets=host-only
make -j 4
make install

4、编译安装afl-fuzz的llvm模块

cd afl-2.50b/
cd llvm_mode/
make
make install

然后进入 afl-2.50b目录。重新make install 激活安装成功的afl-fast-clang

OK,这样就可以使用afl-fast-clang来进行插桩编译了。
如:

SET(CMAKE_CXX_COMPILER "afl-clang-fast++")

while (__AFL_LOOP(1000))
   {
       XXXXXX
  }

最后使用AFL-FUZZ进行模糊测试,会发现效率提升了很多。

源链接

Hacking more

...