
AFL + DynamoRIO = fuzzing de binaires sans code source sur Linux
L'AFL original prend en charge le fuzzing guidé par couverture en boîte noire via le mode QEMU. Je recommande vivement de l'essayer d'abord, et si cela ne fonctionne pas, vous pouvez essayer cet outil. De plus, vous pouvez essayer Manul qui prend en charge le fuzzing de binaires en boîte noire sous Windows et Linux.
Vous devez spécifier DRRUN_PATH pour pointer vers le lanceur drrun et LIBCOV_PATH pour pointer vers la bibliothèque de couverture libbinafl.so. Vous devez également désactiver le serveur fork d'AFL (AFL_NO_FORKSRV=1) et probablement AFL_SKIP_BIN_CHECK=1. Voir l'étape 5 dans la section de compilation ci-dessous pour plus de détails.
REMARQUE : N'oubliez pas que vous devez utiliser DynamoRIO 64 bits pour les binaires 64 bits et DynamoRIO 32 bits pour les binaires 32 bits, sinon cela ne fonctionnera pas. Pour vous assurer que votre cible s'exécute sous DynamoRIO, vous pouvez la lancer avec la commande suivante :
drrun -- <chemin/vers/votre/app/> <args_app>
La bibliothèque d'instrumentation est une version modifiée de la bibliothèque de couverture de winAFL créée par 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 vous rencontrez des problèmes avec la compilation de DynamoRIO, consultez cette page
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 @@
Dans le cas de afl_test, vous devriez obtenir 25 à 30 exec/sec et 1 crash unique en 2 à 3 minutes.