AFL Fuzz安裝及完成一次簡單的模糊測試

關於AFL fuzzlinux

AFL fuzz是一個模糊測試工具,它封裝了一個GCC/CLang編譯器,用於對被測代碼從新編譯的過程當中進行插樁。插樁完畢後,AFL fuzz就能夠給其編譯過的代碼輸入不一樣的參數參數,跟蹤被測代碼的執行路徑,並斷定對輸入的變異可否觸發新的已知或未知執行路徑。工具

某些狀況下,你可能不想從新編譯被測代碼,或者根本沒有被測程序的源代碼,所以沒法用編譯的方式插樁。針對這種狀況,AFL fuzz提供了QEMU模式,QEMU即「user emulation」的縮寫,至關因而黑盒測試,主要用於壓力測試(被測系統性能將降低2~5倍,但相好比DynamoRIO、PIN這些工具,QEMU的性能還算不算了)。性能

安裝測試

AFL fuzz的安裝很是簡單,只須要去官網下載最新版本的源代碼,解壓縮後依次執行下面的指令:ui

make blog

sudo make install內存

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

一、使用./build_qemu_support.sh 腳本進行構建,其會自動下載、配置並編譯QEMU的二進制代碼,此過程比較耗時,且這一過程當中須要解決一些依賴包的問題(必須的依賴包:libtool、glib2-devel)。input

二、編譯完成後,在afl-fuzz的啓動參數中加入「-Q」便可啓用QEMU模式。編譯器

注意:

一、QEMU模式須要較大內存空間,建議的最低配置爲200M,負責項目則須要更多。當在afl-fuzz的啓動參數中指定的-Q參數時,afl-fuzz會自動設置-m參數,默認值爲200M。

二、afl-fuzz適用於linux系統,且不追蹤共享庫,即:

2-一、對於想要分析的庫必須以靜態方式連接到可執行二進制文件;

2-二、對於C的標準庫及其餘一些比較耗費資源而又沒必要要測試的庫則必須以動態方式連接,不然afl fuzz是沒有辦法不測這些內容的。

示例

已對binutils的模糊測試爲例,說明如何使用afl fuzz。

首先,須要下載binutils的源碼並解壓,進入加壓後的文件夾,重寫CC編譯環境變量的值(若是是C++程序,且用g++而不是gcc進行編譯,則修改CXX),修改後便可運行configure腳本,而後編譯。

cd ~/binutils-2.25

CC=afl-gcc ./configure

make

注:若是用clang,而不是gcc,則將CC改成afl-clang。

編譯完成後,要修改一下配置,使系統將coredump輸出到文件,而不是上報給系統的處理程序:

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

建一個input文件夾做爲afl fuzz的輸入,afl fuzz將在這個輸入的基礎上進行變異,在創建一個out文件夾,做爲afl fuzz的輸出,afl fuzz會將崩潰、掛起等問題記錄到輸出文件中:

cd ~/binutils-2.25

mkdir afl_in afl_out

cp /bin/ps afl_in/

接下來,就可使用afl fuzz進行模糊測試了:

cd ~/binutils-2.25

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

afl fuzz啓動後,咱們將看到以下界面:

相關文章
相關標籤/搜索