AFL Fuzz安裝及完成一次簡(jiǎn)單的模糊測(cè)試

關(guān)于AFL fuzz

AFL fuzz是一個(gè)模糊測(cè)試工具,它封裝了一個(gè)GCC/CLang編譯器,用于對(duì)被測(cè)代碼重新編譯的過程中進(jìn)行插樁。插樁完畢后,AFL fuzz就可以給其編譯過的代碼輸入不同的參數(shù)參數(shù),跟蹤被測(cè)代碼的執(zhí)行路徑,并判定對(duì)輸入的變異能否觸發(fā)新的已知或未知執(zhí)行路徑。

某些情況下,你可能不想重新編譯被測(cè)代碼,或者根本沒有被測(cè)程序的源代碼,因此無法用編譯的方式插樁。針對(duì)這種情況,AFL fuzz提供了QEMU模式,QEMU即“user emulation”的縮寫,相當(dāng)于是黑盒測(cè)試,主要用于壓力測(cè)試(被測(cè)系統(tǒng)性能將下降2~5倍,但相比如DynamoRIO、PIN這些工具,QEMU的性能還算不算了)。



安裝

AFL fuzz的安裝非常簡(jiǎn)單,只需要去官網(wǎng)下載最新版本的源代碼,解壓縮后依次執(zhí)行下面的指令:

make?

sudo make install

若需要使用QEMU模式,參見下面的步驟:

1、使用./build_qemu_support.sh 腳本進(jìn)行構(gòu)建,其會(huì)自動(dòng)下載、配置并編譯QEMU的二進(jìn)制代碼,此過程比較耗時(shí),且這一過程中需要解決一些依賴包的問題(必須的依賴包:libtool、glib2-devel)。

2、編譯完成后,在afl-fuzz的啟動(dòng)參數(shù)中加入“-Q”即可啟用QEMU模式。

注意:

1、QEMU模式需要較大內(nèi)存空間,建議的最低配置為200M,負(fù)責(zé)項(xiàng)目則需要更多。當(dāng)在afl-fuzz的啟動(dòng)參數(shù)中指定的-Q參數(shù)時(shí),afl-fuzz會(huì)自動(dòng)設(shè)置-m參數(shù),默認(rèn)值為200M。

2、afl-fuzz適用于linux系統(tǒng),且不追蹤共享庫,即:

2-1、對(duì)于想要分析的庫必須以靜態(tài)方式鏈接到可執(zhí)行二進(jìn)制文件;

2-2、對(duì)于C的標(biāo)準(zhǔn)庫及其他一些比較耗費(fèi)資源而又不必要測(cè)試的庫則必須以動(dòng)態(tài)方式鏈接,否則afl fuzz是沒有辦法不測(cè)這些內(nèi)容的。



示例

已對(duì)binutils的模糊測(cè)試為例,說明如何使用afl fuzz。

首先,需要下載binutils的源碼并解壓,進(jìn)入加壓后的文件夾,重寫CC編譯環(huán)境變量的值(如果是C++程序,且用g++而不是gcc進(jìn)行編譯,則修改CXX),修改后即可運(yùn)行configure腳本,然后編譯。

cd ~/binutils-2.25

CC=afl-gcc ./configure

make

注:如果用clang,而不是gcc,則將CC改為afl-clang。

編譯完成后,要修改一下配置,使系統(tǒng)將coredump輸出到文件,而不是上報(bào)給系統(tǒng)的處理程序:

# echo core > /proc/sys/kernel/core_pattern

建一個(gè)input文件夾作為afl fuzz的輸入,afl fuzz將在這個(gè)輸入的基礎(chǔ)上進(jìn)行變異,在建立一個(gè)out文件夾,作為afl fuzz的輸出,afl fuzz會(huì)將崩潰、掛起等問題記錄到輸出文件中:

cd ~/binutils-2.25

mkdir afl_in afl_out

cp /bin/ps afl_in/

接下來,就可以使用afl fuzz進(jìn)行模糊測(cè)試了:

cd ~/binutils-2.25

afl-fuzz -i afl_in -o afl_out ./binutils/readelf -a @@

afl fuzz啟動(dòng)后,我們將看到如下界面:

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 8,133評(píng)論 0 27
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom閱讀 3,207評(píng)論 0 3
  • 前言 最近打算讀一讀afl(american fuzzy lop) 的源碼,為研究生做fuzzing測(cè)試做相應(yīng)的準(zhǔn)...
    ChijinZ閱讀 11,575評(píng)論 3 3
  • 引言 維基百科:編譯語言(英語:Compiled language)是一種以編譯器來實(shí)現(xiàn)的編程語言。它不像解釋型語...
    Flame_Dream閱讀 8,716評(píng)論 5 52
  • 北斗第八閱讀 195評(píng)論 0 1

友情鏈接更多精彩內(nèi)容