
AFL + DynamoRIO = Fuzzing von Binärdateien ohne Quellcode unter Linux
Das originale AFL unterstützt Black-Box-Coverage-geführtes Fuzzing im QEMU-Modus. Ich empfehle dringend, es zuerst auszuprobieren, und falls es nicht funktioniert, können Sie dieses Tool verwenden. Zusätzlich könnten Sie Manul ausprobieren, das Black-Box-Binär-Fuzzing unter Windows und Linux unterstützt.
Sie müssen DRRUN_PATH angeben, um auf den drrun-Launcher zu verweisen, und LIBCOV_PATH, um auf die Coverage-Bibliothek libbinafl.so zu verweisen. Sie müssen auch den Fork-Server von AFL deaktivieren (AFL_NO_FORKSRV=1) und wahrscheinlich AFL_SKIP_BIN_CHECK=1. Siehe Schritt 5 im Build-Abschnitt unten für weitere Details.
HINWEIS: Vergessen Sie nicht, dass Sie 64-Bit-DynamoRIO für 64-Bit-Binaries und 32-Bit-DynamoRIO für 32-Bit-Binaries verwenden sollten, da es sonst nicht funktioniert. Um sicherzustellen, dass Ihr Ziel unter DynamoRIO läuft, können Sie es mit dem folgenden Befehl ausführen:
drrun -- <path/to/your/app/> <app_args>
Die Instrumentierungsbibliothek ist eine modifizierte Version der winAFL-Coverage-Bibliothek, die von Ivan Fratric erstellt wurde.
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 ..
Falls Sie Probleme mit der DynamoRIO-Kompilierung haben, lesen Sie diese Seite.
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 @@
Im Falle von afl_test sollten Sie 25-30 Ausführungen pro Sekunde und 1 einzigartigen Absturz in 2-3 Minuten erwarten.