最新消息:图 床

AFL 漏洞挖掘技術漫談(二):Fuzz 結果分析和代碼覆蓋率

COOL IAM 362浏览 0评论

作者:天融信阿爾法實驗室
公眾號:https://mp.weixin.qq.com/s/WMfCNN095-PpM0VB_pRESg

一、前言

阿爾法實驗在上一篇文章中向大家介紹了使用AFL開始模糊測試前要做的一些準備工作,以及AFL的幾種工作方式,但是並沒有提到何時結束測試過程,以及測試完成後又需要做些什麼。本文中就繼續介紹這些內容,並開始逐步介紹一些AFL相關原理。以下就是本文中主要討論的問題:

  • 何時結束Fuzzing工作
  • afl-fuzz生成了哪些文件
  • 如何對產生的crash進行驗證和分類
  • 用什麼來評估Fuzzing的結果
  • 代碼覆蓋率及相關概念
  • AFL是如何記錄代碼覆蓋率的

二、Fuzzer工作狀態

因為afl-fuzz永遠不會停止,所以何時停止測試很多時候就是依靠afl-fuzz提供的狀態來決定的。除了前面提到過的通過狀態窗口、afl-whatsup查看afl-fuzz狀態外,這裡再補充幾種方法。

1. afl-stat

afl-statafl-utils這套工具AFL輔助工具中的一個(這套工具中還有其他更好用的程序,後面用到時會做介紹),該工具類似於afl-whatsup的輸出結果。

使用前需要一個配置文件,設置每個afl-fuzz實例的輸出目錄:

{
    "fuzz_dirs": [
        "/root/syncdir/SESSION000",
        "/root/syncdir/SESSION001",
        ...
        "/root/syncdir/SESSION00x"
    ]
}

然後指定配置文件運行即可:

$ afl-stats -c afl-stats.conf
[SESSION000 on fuzzer1]
 Alive:   1/1
 Execs:   64 m
 Speed:   0.3 x/s
 Pend:    6588/249
 Crashes: 101
[SESSION001 on fuzzer1]
 Alive:   1/1
 Execs:   105 m
 Speed:   576.6 x/s
 Pend:    417/0
 Crashes: 291
...

2. 定製afl-whatsup

afl-whatsup是依靠讀afl-fuzz輸出目錄中的fuzzer_stats文件來顯示狀態的,每次查看都要需要手動執行,十分麻煩。因此可以對其進行修改,讓其實時顯示fuzzer的狀態。方法也很簡答,基本思路就是在所有代碼外面加個循環就好,還可以根據自己的喜好做些調整:

[2] Fuzzing with AFL

[3] Clang 9 documentation – SanitizerCoverage

[4] honggfuzz漏洞挖掘技術深究系列

[5] How Much Test Coverage Is Enough For Your Testing Strategy?


转载请注明:IAMCOOL » AFL 漏洞挖掘技術漫談(二):Fuzz 結果分析和代碼覆蓋率

0 0 vote
Article Rating
Subscribe
Notify of
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x