
AFL + DynamoRIO = Linux上でソースコードなしでバイナリをファジング
オリジナルのAFLはQEMUモードを使用したブラックボックスカバレッジガイドファジングをサポートしています。まずはそれを試すことを強くお勧めします。うまくいかない場合はこのツールを試してください。さらに、WindowsとLinuxでブラックボックスバイナリのファジングをサポートするManulを試してみるとよいでしょう。
DRRUN_PATHをdrrunランチャーを指すように指定し、LIBCOV_PATHをlibbinafl.soカバレッジライブラリを指すように指定する必要があります。また、AFLのフォークサーバーをオフにする必要があります(AFL_NO_FORKSRV=1)おそらくAFL_SKIP_BIN_CHECK=1も必要です。詳細については、以下のビルドセクションの手順5を参照してください。
注:64ビットバイナリには64ビットのDynamoRIOを、32ビットバイナリには32ビットのDynamoRIOを使用する必要があることを忘れないでください。そうしないと機能しません。ターゲットがDynamoRIOで実行されていることを確認するには、次のコマンドを使用して実行できます:
drrun -- <path/to/your/app/> <app_args>
インストルメンテーションライブラリは、Ivan Fratric氏によって作成された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回の実行と、2〜3分で1つのユニークなクラッシュが期待できます。