fuzzing工具之AFL的安裝與使用
AFL介紹:
AFL即American Fuzzy Lop是當今使用最廣泛的fuzzer,這個工具在程序執行前對程序源碼進行插樁(instrumentation),以便在程序執行過程中實時獲取程序的執行情況。AFL用遺傳算法對程序的輸入進行變異,用邊覆蓋(edge converage)來測試fuzzing的性能。
在執行過程中,AFL向被測程序中輸入input,然後獲取程序的覆蓋率,將覆蓋率大的input保留下來進行變異,然後在下一輪測試中向被測程序中輸出這些變異後的input,一直到程序的覆蓋率在較長的一段時間不能繼續增大爲止。
通常我們跑AFL的時候需要跑幾十個小時,AFL最後會將結果保存在output文件中。
AFL的安裝與使用
我們首先從github上下載afl,
然後運行下面命令來安裝:
make
make install
進行fuzzing
在安裝好afl之後,我們就可以來fuzzing程序了,但是在fuzzing程序之前,我們需要對程序進行插樁。運行下邊的命令
./configure CC=“afl-gcc” CXX=“afl-g++”
接下來我們以sam2p爲例,我們可以運行下面的命令對程序進行插樁。
git clone https://github.com/pts/sam2p.git //下載sam2p
cd sam2p //進入待測試文件目錄
1.修改程序的編譯環境換成afl的gcc或者g++(如果是C++程序,且用g++而不是gcc進行編譯,則修改CXX):
代碼爲:
./configure CC="afl-gcc" CXX=" afl-g++" CFLAGS="-fsanitize=address -ggdb - fno- omit- frame - pointer - fno- optimize-sibling-calls" CXXFL AGS="-fsanitize=address -ggdb - fno-omit- frame- pointer - fno-optimize- sibling-caLLs"
2.然後把程序 make;makeinstall
一下。
3.然後在afl裏新建input
文件夾,input文件夾需要自定義初始化的demo,也可以去網絡上下載別人提供的demo。
4.然後運行:
afl-fuzz -i ~/input -o ~/poutput sam2p @@