Angora 是一个基于变异的覆盖引导模糊测试器。Angora 的主要目标是通过求解路径约束来提升分支覆盖率,而无需借助符号执行。
Arxiv: Angora: Efficient Fuzzing by Principled Search, S&P 2018.
PREFIX=/path-to-install ./build/install_llvm.sh。在 shell 配置文件(~/.bashrc、~/.zshrc)中追加以下条目。
export PATH=/path-to-clang/bin:$PATH
export LD_LIBRARY_PATH=/path-to-clang/lib:$LD_LIBRARY_PATH
构建脚本将解析大部分依赖并设置运行时环境。
./build/build.sh
与 AFL 相同,必须禁用系统核心转储。
echo core | sudo tee /proc/sys/kernel/core_pattern
测试 Angora 是否构建成功。
cd /path-to-angora/tests
./test.sh mini
Angora 将程序编译为两个独立的二进制文件,每个文件带有各自的插桩。以使用 autoconf 的程序为例,步骤如下。
# 使用插桩编译器
CC=/path/to/angora/bin/angora-clang \
CXX=/path/to/angora/bin/angora-clang++ \
LD=/path/to/angora/bin/angora-clang \
PREFIX=/path/to/target/directory \
./configure --disable-shared
# 启用污点跟踪支持进行构建
USE_TRACK=1 make -j
make install
# 将编译好的目标二进制文件保存到新目录中
# 并为其添加 .taint 后缀,例如 uniq.taint
# 使用轻量插桩支持构建
make clean
USE_FAST=1 make -j
make install
# 将编译好的二进制文件保存到之前创建的目录中
# 并为其添加 .fast 后缀,例如 uniq.fast
如果通过这种方法构建失败,请尝试 构建目标程序 中描述的 wllvm 和 gllvm。
此外,我们已使用 libdft64 替代 DFSan 实现了污点分析(使用 libdft64 进行污点跟踪)。
./angora_fuzzer -i input -o output -t path/to/taint/program -- path/to/fast/program [argv]
更多信息,请参阅 docs/ 目录下的文档。