
AFL + DynamoRIO = фаззинг бинарных файлов без исходного кода на Linux
Оригинальный AFL поддерживает покрытие черного ящика при фаззинге на основе покрытия с использованием режима QEMU. Я настоятельно рекомендую сначала попробовать его, и если он не сработает, можно воспользоваться этим инструментом. Кроме того, возможно, вам будет интересен Manul, который поддерживает фаззинг бинарных файлов черного ящика в Windows и Linux.
Вам нужно указать DRRUN_PATH на загрузчик drrun и LIBCOV_PATH на библиотеку покрытия libbinafl.so. Также необходимо отключить fork-сервер AFL (AFL_NO_FORKSRV=1) и, возможно, AFL_SKIP_BIN_CHECK=1. Дополнительные сведения см. на шаге 5 в разделе сборки ниже.
ПРИМЕЧАНИЕ: Не забывайте, что для 64-битных бинарных файлов следует использовать 64-битный DynamoRIO, а для 32-битных — 32-битный DynamoRIO, иначе это не будет работать. Чтобы убедиться, что ваша цель работает под DynamoRIO, вы можете запустить её с помощью следующей команды:
drrun -- <путь/к/вашему/приложению/> <аргументы_приложения>
Библиотека инструментации — это модифицированная версия библиотеки покрытия winAFL, созданная Иваном Фратричем.
git clone https://github.com/mxmssh/drAFL.git /home/max/drAFL
cd /home/max/drAFL
git clone https://github.com/DynamoRIO/dynamorio
mkdir build_dr
cd build_dr/
cmake ../dynamorio/
make -j
cd ..
Если у вас возникли проблемы с компиляцией DynamoRIO, проверьте эту страницу
mkdir build
cd build
cmake ../bin_cov/ -DDynamoRIO_DIR=../build_dr/cmake
make -j
cd ..
cd afl/
make
cd ..
cd build
mkdir in
mkdir out
echo "AAAA" > in/seed
export DRRUN_PATH=/home/max/drAFL/build_dr/bin64/drrun
export LIBCOV_PATH=/home/max/drAFL/build/libbinafl.so
export AFL_NO_FORKSRV=1
export AFL_SKIP_BIN_CHECK=1
../afl/afl-fuzz -m none -i in -o out -- ./afl_test @@
В случае afl_test вы должны ожидать 25-30 exec/сек и 1 уникальный краш за 2-3 минуты.