
AFL + DynamoRIO = fuzzing di binari senza codice sorgente su Linux
L'AFL originale supporta il fuzzing guidato dalla copertura black-box usando la modalità QEMU. Raccomando vivamente di provarlo prima e, se non funziona, puoi provare questo strumento. Inoltre, potresti voler provare Manul che supporta il fuzzing di binari black-box su Windows e Linux.
Devi specificare DRRUN_PATH per puntare al launcher drrun e LIBCOV_PATH per puntare alla libreria di copertura libbinafl.so. Devi anche disattivare il fork server di AFL (AFL_NO_FORKSRV=1) e probabilmente AFL_SKIP_BIN_CHECK=1. Vedi il passo 5 nella sezione di build qui sotto per maggiori dettagli.
NOTA: Non dimenticare che dovresti usare DynamoRIO a 64 bit per binari a 64 bit e DynamoRIO a 32 bit per binari a 32 bit, altrimenti non funzionerà. Per assicurarti che il tuo target sia in esecuzione sotto DynamoRIO, puoi eseguirlo usando il seguente comando:
drrun -- <path/to/your/app/> <app_args>
La libreria di strumentazione è una versione modificata della libreria di copertura di winAFL creata da 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 ..
Se hai problemi con la compilazione di DynamoRIO, controlla questa pagina
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 @@
Nel caso di afl_test dovresti aspettarti 25-30 exec/sec e 1 crash unico in 2-3 minuti.