
AFL + DynamoRIO = fuzzing de binarios sin código fuente en Linux
El AFL original admite fuzzing guiado por cobertura de caja negra usando el modo QEMU. Recomiendo probarlo primero y si no funciona, puedes probar esta herramienta. Además, puede que quieras probar Manul que admite fuzzing de binarios de caja negra en Windows y Linux.
Debes especificar DRRUN_PATH para que apunte al lanzador drrun y LIBCOV_PATH para que apunte a la biblioteca de cobertura libbinafl.so. También debes desactivar el servidor fork de AFL (AFL_NO_FORKSRV=1) y probablemente AFL_SKIP_BIN_CHECK=1. Consulta el paso 5 en la sección de compilación a continuación para más detalles.
NOTA: No olvides que debes usar DynamoRIO de 64 bits para binarios de 64 bits y DynamoRIO de 32 bits para binarios de 32 bits, de lo contrario no funcionará. Para asegurarte de que tu objetivo se ejecuta bajo DynamoRIO, puedes ejecutarlo usando el siguiente comando:
drrun -- <path/to/your/app/> <app_args>
La biblioteca de instrumentación es una versión modificada de la biblioteca de cobertura de winAFL creada por Ivan Fratric.
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 ..
Si tienes algún problema con la compilación de DynamoRIO, consulta esta página
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 @@
En el caso de afl_test deberías esperar 25-30 ejecuciones/segundo y 1 fallo único en 2-3 minutos.