NestFuzz是复旦大学白泽团队在2023CCS上的一篇工作,效果非常显著,值得一读。
NestFuzz是基于AFL开发的结构感知灰盒模糊器。主要包括两个阶段。在输入处理逻辑建模的第一阶段,NestFuzz 首先利用污点分析来识别输入访问指令。然后,NestFuzz 通过理解这些输入访问指令之间的控制流和数据流关系来识别字段间依赖关系和层次结构依赖关系。最后,NestFuzz提出了一种新颖的数据结构,即输入处理树,它可以表示输入格式的整体结构。在模糊测试的第二阶段,NestFuzz 设计了一种级联依赖性感知突变策略。基于已识别的依赖关系,每当 NestFuzz 改变(字段或结构级别)输入时,它都会级联改变其他受影响的字段或子结构以维持结构有效性。因此,NestFuzz可以持续有效地生成新的高质量测试用例。
复现过程:
构建NestFuzz:
下载NestFuzz:
git clone https://github.com/fdu-sec/NestFuzz.git
构建模糊器:
cd NestFuzz
make
构建输入处理逻辑建模
cd NestFuzz/ipl-modeling
./build.sh
用法:
step1:启动模糊器
./afl-fuzz -i input_dir -o fuzzer_output_dir -d -- /path/to/program [...params...]
step2:开始输入处理逻辑建模
python3 isi.py -t 60 -o fuzzer_output_dir -l fuzzer_output_dir/log -- /path/to/modeling_program [...params...]
例子:
下载libtiff最新源代码:
git clone https://gitlab.com/libtiff/libtiff.git
构建模糊器程序:
cp -r libtiff libtiff-fuzzer
cd libtiff-fuzzer
./autogen.sh
CC=/path/to/NestFuzz/afl-gcc CXX=/path/to/NestFuzz/afl-g++ ./configure --disable-shared
make -j$(nproc)
构建输入处理逻辑建模程序:
cp -r libtiff libtiff-model
cd libtiff-model
./autogen.sh
CC=/path/to/NestFuzz/ipl-modeling/install/test-clang CXX=/path/to/NestFuzz/ipl-modeling/install/test-clang++ ./configure --disable-shared
make -j$(nproc)
启动模糊器
/path/to/NestFuzz/afl-fuzz -m none -d -i /path/to/NestFuzz/testcases/images/tiff -o tiff_output -- /path/to/libtiff-fuzzer/tools/tiffsplit @@
开始输入处理逻辑建模
python3 /path/to/NestFuzz/isi.py -t 60 -o /path/to/tiff_output -l /path/to/tiff_output/log -- /path/to/libtiff-model/tools/tiffsplit @@
注意:将path/to替换成自己的路径