【AFL(八)】用 AFL 對 LAVA-M 進行 Fuzz(LAVA上)


在前面的文章中,我們已經對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 @@

看到如下界面即成功:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM