最新消息:图 床

AFL 漏洞挖掘技術漫談(一):用 AFL 開始你的第一次 Fuzzing

COOL IAM 336浏览 0评论

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

一、前言

模糊測試(Fuzzing)技術作為漏洞挖掘最有效的手段之一,近年來一直是眾多安全研究人員發現漏洞的首選技術。AFL、LibFuzzer、honggfuzz等操作簡單友好的工具相繼出現,也極大地降低了模糊測試的門檻。筆者近期學習漏洞挖掘過程中,感覺目前網上相關的的資源有些冗雜,讓初學者有些無從着手,便想在此對學習過程中收集的一些優秀的博文、論文和工具進行總結與梳理、分享一些學習過程中的想法和心得,同時對網上一些沒有涉及到的內容做些補充。

由於相關話題涉及的內容太廣,筆者決定將所有內容分成一系列文章,且只圍繞AFL這一具有里程碑意義的工具展開,從最簡單的使用方法和基本概念講起,再由淺入深介紹測試完后的後續工作、如何提升Fuzzing速度、一些使用技巧以及對源碼的分析等內容。因為筆者接觸該領域也不久,內容中難免出現一些錯誤和紕漏,歡迎大家在評論中指正。

第一篇文章旨在讓讀者對AFL的使用流程有個基本的認識,文中將討論如下一些基本問題:

  1. AFL的基本原理和工作流程;
  2. 如何選擇Fuzzing的目標?
  3. 如何獲得初始語料庫?
  4. 如何使用AFL構建程序?
  5. AFL的各種執行方式;
  6. AFL狀態窗口中各部分代表了什麼意義?

二、AFL簡介

AFL(American Fuzzy Lop)是由安全研究員Micha? Zalewski(@lcamtuf)開發的一款基於覆蓋引導(Coverage-guided)的模糊測試工具,它通過記錄輸入樣本的代碼覆蓋率,從而調整輸入樣本以提高覆蓋率,增加發現漏洞的概率。

①從源碼編譯程序時進行插樁,以記錄代碼覆蓋率(Code Coverage);
②選擇一些輸入文件,作為初始測試集加入輸入隊列(queue);
③將隊列中的文件按一定的策略進行“突變”;
④如果經過變異文件更新了覆蓋範圍,則將其保留添加到隊列中;
⑤上述過程會一直循環進行,期間觸發了crash的文件會被記錄下來。

  • fuzzer-test-suite
  • libav samples
  • ffmpeg samples
  • fuzzdata
  • moonshine
  • 3. 修剪

    網上找到的一些大型語料庫中往往包含大量的文件,這時就需要對其精簡,這個工作有個術語叫做——語料庫蒸餾(Corpus Distillation)。AFL提供了兩個工具來幫助我們完成這部工作——afl-cminafl-tmin

    (1) 移除執行相同代碼的輸入文件——AFL-CMIN

    afl-cmin的核心思想是:嘗試找到與語料庫全集具有相同覆蓋範圍的最小子集。舉個例子:假設有多個文件,都覆蓋了相同的代碼,那麼就丟掉多餘的文件。其使用方法如下:

    $ afl-cmin -i input_dir -o output_dir -- /path/to/tested/program [params]
    

    更多的時候,我們需要從文件中獲取輸入,這時可以使用“@@”代替被測試程序命令行中輸入文件名的位置。Fuzzer會將其替換為實際執行的文件:

    $$ afl-cmin -i input_dir -o output_dir -- /path/to/tested/program [params] @@
    

    下面的例子中,我們將一個有1253個png文件的語料庫,精簡到只包含60個文件。

    [2]Yet another memory leak in ImageMagick

    [3]Vulnerability Discovery Against Apple Safari

    [4]Pulling JPEGs out of thin air

    [5]parallel_fuzzing.txt

    [6]Fuzzing workflows; a fuzz job from start to finish

    [7]Open Source Fuzzing Tools – ‘Chapter 10 Code Coverage and Fuzzing’

    [8]Fuzzing for Software Security Testing and Quality Assurance – ’7.2 Using Code Coverage Information’


    转载请注明:IAMCOOL » AFL 漏洞挖掘技術漫談(一):用 AFL 開始你的第一次 Fuzzing

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