【AFL(十)】用 ijon+AFL 對 LAVA-M測試(LAVA下)


前言:

前兩篇分別是:利用AFL對LAVA-M數據集測試加入mopt編寫同步啟動腳本,這是最后一篇,在前面的基礎上加上ijon-AFL 的測試(Angora、QSYM、需要單獨再開一個虛擬機測試,環境沖突,計划暫且擱置),並優化一鍵啟動腳本。

為什么挑選這五個,不僅僅是因為開源的原因,還因為這五個優化方向各有不同:

AFL:谷歌開發的模糊測試產品,屬於開創現在這幾年模糊測試的先河,可以看到超級多的fuzzer就是在AFL的基礎上進行的改進,所以一定要有這個作為標桿;

MOpt-AFL:這是19年的一篇頂會的文章,要加這個有三點:一是開源、二是改進代碼清晰易讀、三是論文的那個浙大實驗室來這里進行過講座,是因為那位老師的講座和之后的交流我才對fuzz模糊測試感興趣,找到自己之后的研究方向;

Angora:是18年的SP的文章,選這個的原因有兩點:一是開源、二是改進成熟,最近貌似是要從學術進入到工業中,足以可見這個項目的潛力其實不小;(因為環境問題需要單獨另起一個虛擬機處理,留做下一個筆記);

QSYM:18年USENIX的頂會文章,關於混合模糊測試的工具,原因有二:一是開源、二是混合模糊測試即使漸漸開始脫離 覆蓋率反饋導向型模糊測試 的隊列,自成一體,成為一個新的研究分支(單獨另起一個虛擬機,留作下一個筆記);

ijon+AFL:20年的SP文章,選這個原因有三:一是開源、二是展現形式新穎,把路徑跟游戲相結合,做展示、三是iJon不是一個集成的fuzz工具,更像是抽象出來的插件,可以用它加到其他fuzz上,這里用的是它加上afl,所以是ijon+AFL,其實也可以跟着作者readme做一個ijon+Mopt-AFL;

iJon-AFL

1. 下載 iJon 和 iJon-data 數據集

git clone https://github.com/RUB-SysSec/ijon.git
git clone https://github.com/RUB-SysSec/ijon-data.git

分別是 ijon+afl 的源碼 和 論文中用到的測試數據集:maze、super Mario Bros、tpm_fuzzing

2. 安裝 llvm 和 clang

如果已經安裝好可以跳過這一步,直接查看版本:

如果沒有安裝:

(因為 llvm 是一個大框架,包含了clang,所以先安裝clang,再安裝 llvm)

sudo apt-get install clang
sudo apt-get install llvm

安裝完回到最開始那里查看版本。

3. 安裝 AFL

make
sudo make install (-j4 如果支持多核可以用-j參數,能加快速度)

4. 安裝 llvm 模式下的afl

cd llvm_mode
LLVM_CONFIG=llvm-config-3.8 CC=clang-3.8 make

這里版本跟第二步查到的一致就行

5. 對maze進行測試

我對maze進行了一些魔改,可以從github先下下來

git clone https://github.com/WayneDevMaze/mod-ijon-maze.git

文件說明:

地圖源文件:

big.c 大地圖(13 * 17 大地圖模式)

small.c 小地圖(7 * 11 符號執行的路徑經常用這個地圖來測試)

tiny.c 新加的地圖(4 * 6 超級小地圖)

地圖結果展示源文件:

maze_show.c 當fuzz跑完跑出結果的時候調用這個文件對應的程序,對路徑結果進行展示

腳本:

build.sh 編譯腳本,對三類地圖進行編譯,並對地圖展示程序進行編譯.

run_afl.sh 運行 afl,第一個參數格式 maze.tiny.bt (tiny對應三種地圖模式,bt是對應兩類,還有一種是nobt,意味着是否可以回退,如果可以回退,對 fuzz 來說路徑難度會加倍)

運行測試:

bash build.sh
bash run_afl.sh maze.tiny.bt

6. 查看運行結果

如果出現fuzz界面,並且很快出現結果,然后有路徑重現,說明成功

7. 對LAVA-M數據集進行插樁編譯

設置C、C++環境

export CC=afl-clang-fast
export CXX=afl-clang-fast++

檢查環境可以用 echo

運行編譯腳本

./validate.sh 

8. 利用 iJon+afl 對 base64 進行測試

AFL_BENCH_UNTIL_CRASH=1 afl-fuzz -m none -i fuzzer_input -o outputs -- coreutils-8.24-lava-safe/lava-install/bin/base64 -d @@

到這里對base64的 iJon+afl 測試就完成了,剩下的就是等着跑結果了。

一鍵啟動 bash 優化

現在在前兩篇的基礎上要實現的是一個可以挑選一定的參數,然后選擇性的啟動需要的fuzzer,其實這里挺簡單的,就是加一個case分支選項。

但是之后的想法是,能不能讓各個fuzzer之間數據共享,也就是之間的outputs能夠互相運用,這個可能需要后面完成 angora 和 qsym 再實現了。

參考

1. Angora 官方 git - lava教程:https://github.com/AngoraFuzzer/Angora/blob/master/docs/lava.md


免責聲明!

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



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