work节点使用外部包_AFLSmart工具简单分析及使用介绍
AFLSmart 是一個在 AFL 基礎上,結合了 Peach 的結構化輸入組件的灰盒 smart fuzz 工具。
AFLSmart 鏈接:https://github.com/aflsmart/aflsmart
參考資料:《Smart Greybox Fuzzing》
什么是 AFLSmart
灰盒 smart fuzz
灰盒測試是基于程序運行時刻的外部表現同時又結合程序內部邏輯結構來設計用例,執行程序并采集程序路徑執行信息和外部用戶接口結果的測試技術。
具有結果反饋功能的模糊測試即屬于灰盒 fuzz,如 AFL,會對待測程序進行插裝,從而監控每個輸入的路徑覆蓋率,為下一次選擇輸入文件進行變異提供依據。
smart fuzz 是面向具有高度結構化輸入(如,PPT,mp3,PDF 等)的程序進行測試的一類模糊測試工具,典型的 smart fuzz 工具如 Peach。使用 Peach 的關鍵在于名為「Peach Pit」的 xml 配置文件。「Peach Pit」主要包含了文件的數據信息。
AFLSmart
AFLSmart 在 AFL 的基礎上,參照了 Peach 的 File Cracker 組件,將文件按 chunk 劃分,抽象為一個可以用 xml 文件描述的樹形的結構,如下圖為一個 wav 格式的文件抽象為 xml 文件的表示:
針對結構化的輸入,AFL 提供了基于字典的方法進行解決,然而該方法的缺陷在于,在變異的時候,仍然處于 bit 級別的變異,AFL 無法對一個文件塊進行增加和刪除操作。? ?
AFLSmart 源碼中,對 chunk 結構的定義如下:
struct chunk {unsigned long
id; /* The id of the chunk, which either equals its pointer value or, when
loaded from chunks file, equals to the hashcode of its chunk
identifer string casted to unsigned long. */
int type; /* The hashcode of the chunk type. */
int start_byte; /* The start byte, negative if unknown. */
int end_byte; /* The last byte, negative if unknown. */
char modifiable; /* The modifiable flag. */
struct chunk *next; /* The next sibling child. */
struct chunk *children; /* The children chunks linked list. */
};
一個 chunk 結構里定義了 chunk 的類型、開始位置、結束位置、表示是否被修改的標志位、以及 chunk 的子節點和 next 節點。
在 AFL 的 bit 級別的變異的基礎上,AFLSmart 增加了對 chunk 級別的變異操作,主要包括三種操作:
smart deletion:
在這種方法中,會對給定的種子文件,隨機選取 chunk 進行刪除。
smart addition:
在這種方法中,給定一個種子文件 S1,隨機選取一個種子文件 S2,在 S2 中隨機選取一個 chunk C2,將 C2 插入到 S1 中和 C2 具有相同父節點的 chunk C1 的后面(C1.parent.type ==C2.parent.type)? ?
smart splicing:
這種方法中,對于給定的種子文件 S1,隨機選取 chunk C1,隨機選取種子文件 S2,找到 S2 中與 C1 類型相同的 chunk C2,將 C2 替換到 C1 的位置上。? ?
AFLSmart 的安裝
1. 安裝 automake 及一些其他的包
sudo apt-get install build-essential automake libtool libc6-dev-i386 python-pip g++-multilib2. 安裝 mono 包,為了在 Linux 上支持 C#
sudo apt-get install mono-complete3. 安裝 gcc-4.4 以及 g++-4.4,(Peach 中的 Pin 組件在更高的 gcc 版本中會發生一些編譯問題)? ?
sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt-get update sudo apt install gcc-4.4 sudo apt install g++-4.4如成功,則直接看第四步,如不能成功,可嘗試以下命令
sudo gedit /etc/apt/sources.list向文件中添加如下內容:? ??
deb http://dk.archive.ubuntu.com/ubuntu/ trusty main universe然后安裝
sudo apt-get update sudo apt install gcc-4.4 sudo apt install g++-4.44. 環境成功準備好后,開始 AFLSmart 的安裝
git clone https://github.com/aflsmart/aflsmart cd aflsmart make clean all cd .. export AFLSMART=$(pwd)/aflsmart export WORKDIR=$(pwd)5. 修改 Peach 的版本
cd $AFLSMART wget https://sourceforge.net/projects/peachfuzz/files/Peach/3.0/peach-3.0.202-source.zip unzip peach-3.0.202-source.zip patch -p1 < peach-3.0.202.patch cd peach-3.0.202-source CC=gcc-4.4 CXX=g++-4.4 ./waf configure CC=gcc-4.4 CXX=g++-4.4 ./waf install6. 設置 PATH 的環境變量
export PATH=$PATH:$AFLSMART:$AFLSMART/peach-3.0.202-source/output/linux_x86_64_debug/bin export AFL_PATH=$AFLSMART export LD_LIBRARY_PATH=/usr/local/lib7. 進入到 AFLSmart 目錄,輸入
./afl-fuzz出現如下界面,說明安裝成功。
AFLSmart 的使用
熟悉 AFL 的朋友,對于 AFLSmart 的使用應該不會太陌生,AFlSmart 的使用方法與 AFL 基本一致。這里還是以 tcpdump 為例,對 AFLSmart 的使用進行一個簡單的介紹。
測試 tcpdump 之前,首先應該下載 tcpdump 源碼包,下載地址:http://www.tcpdump.org/,在這個地址,下載 tcpdump 包與 libpcap 包。
下載 tcpdump 的一些其他依賴包:下載 bison 包,下載地址:ftp.gnu.org/gnu/bison,? ?下載 m4 包,下載地址:ftp.gnu.org/gnu/m4/。
1. 安裝 libpcap:
tar -zxvf libpcap-1.3.0.tar.gz? cd libpcap-1.3.0 ./configure make? make install2. 輸入命令,安裝 flex
sudo apt-get install flex3.bison 與 m4 包的安裝步驟與 libpcap 的相同,參照上述命令即可。
4. 使用 afl-gcc 對 tcpdump 進行編譯,afl-gcc 會在對 tcpdump 進行編譯時,對 tcpdump 進行插樁,從而方便監控用例的路徑覆蓋情況。命令如下:
tar -zxvf tcpdump-4.3.0.tar.gz? cd tcpdump-4.3.0 CC=./aflsmart 安裝目錄/afl-gcc ./configure make clean all make install編譯過程中,出現如下界面,說明使用 afl-gcc 對 tcpdump 進行編譯成功。
tcpdump 的命令格式如下:
tcpdump [ -adeflnNOpqRStuvxX ] [ -c 數量 ] [ -C 文檔尺寸 ] [ -F 文檔名 ] [ -i 網絡接口 ] [ -m 文檔名 ] [ -r 文檔名 ] [ -s 長度 ] [ -T 類型 ] [ -w 文檔名 ] [ -E algo:secret ] [ 表達式 ]?
tcpdump 常用命令行選項:
-a 將網絡地址和廣播地址轉變成容易識別的名字?
-d 將已截獲的數據包的代碼以人容易理解的格式輸出;?
-dd 將已截獲的數據包的代碼以 C 程式的格式輸出;?
-ddd 將已截獲的數據包的代碼以十進制格式輸出;?
-e 輸出數據鏈路層的頭部信息;?
-f 將 internet 地址以數字形式輸出;?
-l 將標準輸出變為行緩沖方式;?
-n 不將網絡地址轉換成易識別的主機名,只以數字形式列出主機地址 (如 IP 地址),這樣能夠避免 DNS 查詢;?
-t 不輸出時間戳;?
-v 輸出較周詳的信息,例如 IP 包中的 TTL 和服務類型信息;?
-vv 輸出詳盡的報文信息;?
-c 在捕獲指定個數的數據包后退出;?
-F 從指定的文檔中讀取過濾規則,忽略命令行中指定的其他過濾規則;?
-i 指定監聽的網絡接口;?
-r 從指定的文檔中讀取數據包 (該文檔一般通過-w 選項產生);?
-w 將截獲的數據包直接寫入指定的文檔中,不對其進行分析和輸出;?
-T 將截獲的數據包直接解釋為指定類型的報文,現在支持的類型有 cnfp、rpc、rtp、snmp、vat 和 wb。
接下來,我們將使用 AFLsmart 對 tcpdump 的 -nr 功能進行測試,該參數的作用是從指定的文檔中讀取數據包。
6. 收集測試用例。我們需要 pcap 格式的輸入,對 tcpdump 的-nr 功能進行測試。在 tcpdump 源碼包中有一個 tests 文件夾,包含了許多我們測試所需的 pcap 文件。這里,我們直接使用這些 pcap 文件進行測試。
新建一個 tcpdumptest 文件夾,方便測試。將 testes 文件夾復制過來,只保留 pcap 的數據。
cd tcpdumptestmkdir incd testscp *.pcap ../incd ..rm -f testsAFL 中還有一些對數據進行處理的工具,可以對輸入數據進行覆蓋率分析等,壓縮輸入文件的大小,從而提高測試的效率。如 afl-tmin、afl-cmin。網上已有許多介紹 AFL 的文章了,這里對這些工具就不重復介紹了。
你可以使用這些工具對 pcap 包進行一個處理,也可以不處理,直接使用它們進行測試。
7. 測試 tcpdump
輸入命令:
cd aflsmart ./afl-fuzz -i ../testaflsmart/tcpdump/in/ -o ../testaflsmart/tcpdump/out/ tcpdump -nr @@可能會出現如下界面:
按照圖片提示,進入 root 用戶模式,輸入命令即可。
最終運行界面如下圖所示:
AFLSmart 的測試
在 smart greybox fuzz 文中提到,他們使用 AFLSmart 與 AFL、Peach、AFLfast 對幾種具有結構化輸入的程序進行測試,結果如下如所示:
由上圖可以看出,AFLSmart 在測試 AVI、WAV、JPEG2000 這三種格式時,與其他三種工具相比,優勢明顯。
*本文作者:紅玫瑰與黑玫瑰,轉載請注明來自FreeBuf.COM
總結
以上是生活随笔為你收集整理的work节点使用外部包_AFLSmart工具简单分析及使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html转word 图片丢失 java_
- 下一篇: 达内培训c语言,【达内C 培训教程】C