在前面的文章中,我們已經對AFL及其相關的工具進行了簡單的認識,在第一篇中也寫了個小例子,進行了簡單的fuzz測試,現在我們可以用LAVA-M數據集進行真實的測試。
LAVA-M介紹
LAVA來自於論文《LAVA: Large-scale Automated Vulnerability Addition》發表在了2016年的S&P上,是由Brendan Dolan-Gavitt等人提出的用於在程序中插入bug的技術方法。通過LAVA在uniq、who、md5sum、base64四個程序上進行bug插入而形成的測試集即為LAVA-M。LAVA-M被廣泛應用於fuzz領域的工具效果評估,我們所熟知的Angora、RedQueen、T-Fuzz、VUzzer等工具都使用了LAVA-M進行測試評估。從這篇文章開始,通過三篇的篇幅講述如何實現一個可以通用的基於LAVA的數據模型系統。
實現利用afl對lava的fuzz
下載 && 前期准備
從http://panda.moyix.net/~moyix/lava_corpus.tar.xz下載我們需要的數據集,我是用的Ubuntu環境進行的測試。可能會因為沒有安裝libacll庫,遇到編譯不通過的情況,所以保險起見,也安裝一下這個庫。
wget http://panda.moyix.net/~moyix/lava_corpus.tar.xz
sudo apt-get install libacl1-dev
結構
現在基本上都准備好了,來看一下這個數據集的三層文件夾結構:
我們這次要用的是LAVA-M文件夾下面的數據,其中包含四類base64、md5sum、uniq、who,本篇文章以base64為例進行介紹。進入LAVA-M下的base64文件夾,可以看到四個文件夾和一些文件,其中:
validated_bugs 里列出了在 base64 中插入的crash編號;
inputs里有能觸發crash的輸入,每一個輸入的編號對應於一個crash的編號;
fuzzer_input里有用於給fuzzer作為種子的輸入;
coreutils-8.24-lava-safe文件夾里存放了源代碼及編譯設置等;
validate.sh為安裝腳本;
插樁編譯base64
如果還沒有安裝afl,參考我的這篇文章AFL(一)入門使用,然后我們來進行插樁編譯,進入LAVA-M下的base64文件夾。如果不進行插樁編譯,可以直接運行腳本 validate.sh安裝,但是我們要想用afl就要改一下配置(這一步之后可以跟angora、mopt等類似對比,這里先提一手,之后會用到)
先設置環境:
export CC=afl-gcc export CXX=afl-g++
可以用env命令進行查看環境設置是否成功。
然后運行腳本即可安裝:
./validate.sh
顯示輸出插入bug數量為44/44時,即安裝成功
對base64進行fuzz
找到如圖的位置,里面的base64即我們的測試目標程序,我們回到base64的根目錄位置,運行fuzz命令:【有誤】
afl-fuzz -i inputs/ -o outputs coreutils-8.24-lava-safe/lava-install/bin/base64 -d @@
經指正,這里的輸入文件夾有誤,正確的命令應該是:
afl-fuzz -m none -t 5000 -i inputs/ -o outputs coreutils-8.24-lava-safe/lava-install/bin/base64 -d @@
看到如下界面即成功: