论文讲解见知乎小号 21-CCS-Regression Greybox Fuzzing
闲话 🗣️
最近莫名其妙又一直在搭环境,主要是 LLVM 的环境配置要求属实逆天,能不能 work 是玄学问题🙄。好在功夫不负有心人,总算是摸索出可行的环境了。总结的经验就是,尽量与 github 中 README 文档的要求保持一致,这样可以少走点弯路。
一、环境参数
- ubuntu 18.04 LTS,4GB 内存,48GB 磁盘空间
- gcc 版本 7.5.0
- g++ 版本 7.5.0
- make 版本 4.1
- cmake 版本 3.25.1 (手动安装的最新版,建议版本不宜过旧,参考 该博客 )
- llvm 版本 11.1.0(git clone,然后源码安装)
二、安装 LLVM 11.1.0
源码安装方式,按顺序执行以下内容
git clone https://github.com/llvm/llvm-project
更新工具链(工具链版本尽可能与 “一、环境参数” 中一致)
sudo apt install gcc
sudo apt install g++
sudo apt install make
sudo apt install cmake // cmake 安装可以考虑采用源码,安装较新版本
编译/安装 llvm(make -j4 需要好几个小时,请耐心等待⌛️)
make -j4
表示多线程编译,数字取决于 CPU 核心数,若核心数较少,不要配置较大数值的多线程。
make 过程出现问题看下报错解决,环境不同,问题不同。
cd llvm-project
git checkout release/11.x
mkdir build
cd build
cmake -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release ../llvm -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;compiler-rt;clang-tools-extra;openmp;lldb;lld"
make -j4
sudo make install
测试安装是否成功
llvm-config --version
若安装成功,则会显示 11.1.0 。
三、运行 AFLCHURN
根据 github 上的指导,执行如下命令构建 aflchurn
git clone https://github.com/aflchurn/aflchurn.git
cd aflchurn
export AFLCHURN=$PWD
make clean all
cd llvm_mode
make clean all
构建完成后,需要对待测程序进行插桩操作。这里的插桩,就是用构建完的 aflchurn 去编译待测程序代码。
CC=$AFLCHURN/afl-clang-fast CXX=$AFLCHURN/afl-clang-fast++ ./configure
make
CC 用于指定C语言的编译器,使用 aflchurn 下的 afl-clang-fast 编译C代码;CXX 用于指定C++语言的编译器,使用 aflchurn 下的 afl-clang-fast++ 编译C++代码。./configure 指的是运行当前目录下的 configure 文件,它本质上是一个 SHELL 脚本程序,通过执行它生成 Makefile 文件,再通过 make 命令完成编译。以插桩 yara 代码为例:
git clone https://github.com/VirusTotal/yara.git
cd yara
yara 源代码中没有 configure 文件,但有 configure.ac 和 Makefile.am,执行 bootstrap.sh 生成 configure 文件。然后执行 “CC=$AFLCHURN/ … ./configure”,make 和 sudo make install 命令。在 make install 时可能会报错❌如下,即缺失某个共享库
error while loading shared libraries: libyara.so.9: cannot open shared object file: No such file or directory.
执行以下命令解决:
sudo su
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
这样,yara 就插桩完毕,可以作为待测程序被 aflchurn 运行。进入 aflchurn 目录,启动 afl-fuzz
./afl-fuzz -i testcases_dir -o output_dir yara(待测程序路径)