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
模式。
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文件
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/
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
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进行模糊测试,会发现效率提升了很多。