Fuzzing技術總結(Brief Surveys on Fuzz Testing)- wcventure

Fuzzing技術總結(Brief Surveys on Fuzz Testing)

Prologue

這裏另一篇文章總結了最近與Fuzzing相關的論文:
https://github.com/wcventure/FuzzingPaper

感興趣的讀者可閱讀以下兩篇綜述:
2018年的《Fuzzing: Art, Science, and Engineering》
Manes V J M, Han H S, Han C, et al. Fuzzing: Art, Science, and Engineering[J]. arXiv preprint arXiv:1812.00140, 2018.

2018年Cybersecurity 的 《Fuzzing: a survey》
Li J, Zhao B, Zhang C. Fuzzing: a survey[J]. Cybersecurity, 2018, 1(1): 6.

2018年TRel 的 《Fuzzing: State of the art》
Liang H, Pei X, Jia X, et al. Fuzzing: State of the art[J]. IEEE Transactions on Reliability, 2018, 67(3): 1199-1218.
裏面對fuzzing技術和fuzzing工具有詳細的介紹。

Introduction

一、什麼是Fuzzing?

Fuzz本意是“羽毛、細小的毛髮、使模糊、變得模糊”,後來用在軟件測試領域,中文一般指“模糊測試”,英文有的叫“Fuzzing”,有的叫“Fuzz Testing”。本文用fuzzing表示模糊測試。

Fuzzing技術可以追溯到1950年,當時計算機的數據主要保存在打孔卡片上,計算機程序讀取這些卡片的數據進行計算和輸出。如果碰到一些垃圾卡片或一些廢棄不適配的卡片,對應的計算機程序就可能產生錯誤和異常甚至崩潰,這樣,Bug就產生了。所以,Fuzzing技術並不是什麼新鮮技術,而是隨着計算機的產生一起產生的古老的測試技術。

Fuzzing技術是一種基於黑盒(或灰盒)的測試技術,通過自動化生成並執行大量的隨機測試用例來發現產品或協議的未知漏洞。隨着計算機的發展,Fuzzing技術也在不斷髮展。

二、Fuzzing有用麼?

Fuzzing是模糊測試,顧名思義,意味着測試用例是不確定的、模糊的。

計算機是精確的科學和技術,測試技術應該也是一樣的,有什麼的輸入,對應什麼樣的輸出,都應該是明確的,怎麼會有模糊不確定的用例呢?這些不確定的測試用例具體會有什麼作用呢?

爲什麼會有不確定的測試用例,我想主要的原因是下面幾點:

1、我們無法窮舉所有的輸入作爲測試用例。我們編寫測試用例的時候,一般考慮正向測試、反向測試、邊界值、超長、超短等一些常見的場景,但我們是沒有辦法把所有的輸入都遍歷進行測試的。

2、我們無法想到所有可能的異常場景。由於人類腦力的限制,我們沒有辦法想到所有可能的異常組合,尤其是現在的軟件越來越多的依賴操作系統、中間件、第三方組件,這些系統裏的bug或者組合後形成的bug,是我們某個項目組的開發人員、測試人員無法預知的。

3、Fuzzing軟件也同樣無法遍歷所有的異常場景。隨着現在軟件越來越複雜,可選的輸入可以認爲有無限個組合,所以即使是使用軟件來遍歷也是不可能實現的,否則你的版本可能就永遠也發佈不了。Fuzzing技術本質是依靠隨機函數生成隨機測試用例來進行測試驗證,所以是不確定的。

這些不確定的測試用例會起到我們想要的測試結果麼?能發現真正的Bug麼?

1、Fuzzing技術首先是一種自動化技術,即軟件自動執行相對隨機的測試用例。因爲是依靠計算機軟件自動執行,所以測試效率相對人來講遠遠高出幾個數量級。比如,一個優秀的測試人員,一天能執行的測試用例數量最多也就是幾十個,很難達到100個。而Fuzzing工具可能幾分鐘就可以輕鬆執行上百個測試用例。

2、Fuzzing技術本質是依賴隨機函數生成隨機測試用例,隨機性意味着不重複、不可預測,可能有意想不到的輸入和結果。

3、根據概率論裏面的“大數定律”,只要我們重複的次數夠多、隨機性夠強,那些概率極低的偶然事件就必然會出現。Fuzzing技術就是大數定律的典範應用,足夠多的測試用例和隨機性,就可以讓那些隱藏的很深很難出現的Bug成爲必然現象。

目前,Fuzzing技術已經是軟件測試、漏洞挖掘領域的最有效的手段之一。Fuzzing技術特別適合用於發現0 Day漏洞,也是衆多黑客或黑帽子發現軟件漏洞的首選技術。Fuzzing雖然不能直接達到入侵的效果,但是Fuzzing非常容易找到軟件或系統的漏洞,以此爲突破口深入分析,就更容易找到入侵路徑,這就是黑客喜歡Fuzzing技術的原因。

三、基於生成和基於編譯的Fuzzing算法?

Fuzzing引擎算法中,測試用例的生成方式主要有2種:
1)基於變異:根據已知數據樣本通過變異的方法生成新的測試用例;
2)基於生成:根據已知的協議或接口規範進行建模,生成測試用例;
一般Fuzzing工具中,都會綜合使用這兩種生成方式。

基於變異的算法核心要求是學習已有的數據模型,基於已有數據及對數據的分析,再生成隨機數據做爲測試用例。

四、state-of-the-art AFL

AFL就是著名的基於變異的Fuzzer。
以下有一些關於state-of-the-art AFL的資料,轉自其它博客,看完後能對AFL的原理和實現細節有一定的瞭解。

  1. american fuzzy lop (2.52b)
    http://lcamtuf.coredump.cx/afl/
  2. AFL內部實現細節小記
    http://rk700.github.io/2017/12/28/afl-internals/
  3. afl-fuzz技術白皮書
    https://blog.csdn.net/gengzhikui1992/article/details/50844857
  4. 如何使用AFL進行一次完整的fuzz過程
    https://blog.csdn.net/abcdyzhang/article/details/53487683
  5. AFL(American Fuzzy Lop)實現細節與文件變異
    https://paper.seebug.org/496/
  6. fuzz實戰之libfuzzer
    https://www.secpulse.com/archives/71898.html

五、主流漏洞挖掘技術的對比和發展
1

- Static analysis
- Dynamic analysis
- Symbolic execution
- Fuzzing

T1

- Generation-based Fuzzing
- Mutation-based Fuzzing

T2

- White box fuzzing
- Grey box fuzzing
- Black box fuzzing

T3

- Fuzzing技術中的關鍵

T4

- Fuzzing 中

T5

- 至今fuzzing工具文獻的引用關係,Fuzzing工具的分類和歷史

F1

- Fuzzing 工具之調研,還有一張很好的整理後的圖表

F2

Recent Related Work

REDQUEEN
Aschermann C, Schumilo S, Blazytko T, et al. REDQUEEN: Fuzzing with Input-to-State Correspondence[J].
https://www.ei.ruhr-uni-bochum.de/media/emma/veroeffentlichungen/2018/12/17/NDSS19-Redqueen.pdf
輸入狀態對應的模糊測試

ProFuzzer
You W, Wang X, Ma S, et al. ProFuzzer: On-the-fly Input Type Probing for Better Zero-Day Vulnerability Discovery[C]//ProFuzzer: On-the-fly Input Type Probing for Better Zero-Day Vulnerability Discovery. IEEE, 0.
https://www.computer.org/csdl/proceedings/sp/2019/6660/00/666000a899-abs.html
現有的基於突變的模糊器傾向於隨機改變程序的輸入而不理解其基礎語法和語義。在本文中,我們提出了一種新穎的即時探測技術(稱爲ProFuzzer),它可以自動恢復和理解在模糊測試過程中對漏洞發現至關重要的輸入字段,並智能地調整變異策略以增加擊中零的機會。一天的目標。由於這種探測是透明地搭載到常規模糊測試,因此不需要輸入規範的先驗知識。在模糊測試期間,首先突變單個字節,並自動分析它們的模糊測試結果以鏈接那些相關的字節並識別連接它們的字段的類型; 這些字節在特定於類型的策略後進一步突變,它大大修剪了搜索空間。我們通常在所有應用程序中定義探測器類型,從而使我們的技術應用程序不可知。我們在標準基準測試和實際應用方面的實驗表明,ProFuzzer大大優於AFL及其優化版本AFLFast,以及其他最先進的模糊器,包括VUzzer,Driller和QSYM。在兩個月內,它在10個經過深入測試的項目中暴露了42個零天,產生了30個CVE。

Hawkeye
Chen H, Xue Y, Li Y, et al. Hawkeye: towards a desired directed grey-box fuzzer[C]//Proceedings of the 2018 ACM SIGSAC Conference on Computer and Communications Security. ACM, 2018: 2095-2108.
https://www.researchgate.net/profile/Hongxu_Chen3/publication/328327299_Hawkeye_Towards_a_Desired_Directed_Grey-box_Fuzzer/links/5bcbe6c0299bf17a1c643e4d/Hawkeye-Towards-a-Desired-Directed-Grey-box-Fuzzer.pdf

Perffuzz
Lemieux C, Padhye R, Sen K, et al. Perffuzz: Automatically generating pathological inputs[C]//Proceedings of the 27th ACM SIGSOFT International Symposium on Software Testing and Analysis. ACM, 2018: 254-265.
http://www.carolemieux.com/perffuzz-issta2018.pdf
https://github.com/carolemieux/perffuzz
當程序被提供具有病理行爲的輸入時,軟件中的性能問題可能意外地出現。但是我們怎樣才能首先找到這些輸入?PerfFuzz可以自動生成這樣的輸入:給定一個程序和至少一個種子輸入,PerfFuzz自動生成輸入,在沒有任何領域知識的情況下,跨程序位置運行病理行爲。

CollAFL
Gan S, Zhang C, Qin X, et al. CollAFL: Path sensitive fuzzing[C]//2018 IEEE Symposium on Security and Privacy (SP). IEEE, 2018: 679-696.
http://chao.100871.net/papers/oakland18.pdf
路徑敏感的Fuzzer,解決了AFL中bitmap路徑衝突的問題。
並提出了一種選擇seed的策略,能更快提高覆蓋率。

V-Fuzz
Li Y, Ji S, Lv C, et al. V-Fuzz: Vulnerability-Oriented Evolutionary Fuzzing[J]. arXiv preprint arXiv:1901.01142, 2019.
https://arxiv.org/pdf/1901.01142
模糊測試是一種通過大量異常輸入反覆執行軟件來查找錯誤的技術。大多數現有的模糊器都會同等地考慮軟件的所有部分,並且過分關注如何改進代碼覆蓋率。這是低效的,因爲易受攻擊的代碼只佔整個代碼的一小部分。在本文中,我們設計並實現了一個名爲V-Fuzz的面向漏洞的進化模糊測試原型,旨在在有限的時間內高效,快速地發現錯誤。V-Fuzz由兩個主要組件組成:基於神經網絡的漏洞預測模型和麪向漏洞的進化模糊器。給定V-Fuzz的二進制程序,漏洞預測模型將預先估計軟件的哪些部分更容易受到攻擊。然後,模糊器利用進化算法生成輸入,這些輸入傾向於在漏洞預測結果的指導下到達易受攻擊的位置。實驗結果表明,V-Fuzz可以比最先進的模糊器更有效地發現錯誤。此外,V-Fuzz已經發現了10個CVE,其中3個是新發現的。我們報告了新的CVE,它們已得到確認和修復。

Tensorfuzz
https://arxiv.org/abs/1807.10875
衆所周知,機器學習模型難以解釋和調試。神經網絡尤其如此。在這項工作中,我們引入了神經網絡的自動化軟件測試技術,這些技術非常適合發現僅針對稀有輸入發生的錯誤。具體來說,我們開發了用於神經網絡的覆蓋引導模糊(CGF)方法。在CGF中,神經網絡輸入的隨機突變由覆蓋度量指導,以達到滿足用戶指定約束的目標。我們描述了近似最近鄰算法如何快速提供此覆蓋度量。然後,我們討論了CGF在以下目標中的應用:在訓練好的神經網絡中發現數值誤差,在神經網絡和這些網絡的量化版本之間產生分歧,並在角色級語言模型中出現不良行爲。最後,我們發佈了一個名爲TensorFuzz的開源庫,它實現了所描述的技術

Open Source Tools

原文來自:[https://www.peerlyst.com/posts/resource-open-source-fuzzers-list],並增加2018年最新的諸如PerfFuzz、FairFuzz和SnowFuzz等工具.
0. OSS fuzz
1.開源Fuzzers工具
2.Fuzzing的線束或框架
3.其它 Fuzzers 工具是免費的,但是和開源比不值得一提
4.Fuzzing的有效超載
5.博客將幫助你更好的瞭解Fuzz
6.其它關於Fuzzing博客或資源
7.商業Fuzzers工具

0. OSS fuzz
https://github.com/google/oss-fuzz
https://www.usenix.org/conference/usenixsecurity17/technical-sessions/presentation/serebryany
谷歌的OSS-Fuzz能夠針對開源軟件進行持續的模糊測試,其測試開發團隊昨天的博客中寫到“OSS-Fuzz的目的是利用更新的模糊測試技術與可拓展的分佈式執行相結合,提高一般軟件基礎架構的安全性與穩定性。OSS-Fuzz結合了多種模糊測試技術/漏洞捕捉技術(即原來的libfuzzer)與清洗技術(即原來的AddressSanitizer),並且通過ClusterFuzz爲大規模可分佈式執行提供了測試環境。”

這項服務填補了Springfield留下的空白:微軟的模糊測試服務針對的是願意付費的企業客戶。雖然並沒有排除開源開發者,但值得注意的是它明確將企業客戶作爲目標:適合測試內部軟件、通過企業併購獲得的軟件、甚至是購買的第三方軟件。

谷歌提到“開源軟件是很多應用、站點、服務以及萬物互聯的物聯網的骨幹中樞…一個例子是FreeType library,一個在十億以上設備上使用,用來轉換字體的庫(也許你正在看的這些文字也是由它轉換呈現的)。”對於這種軟件來說,沒有程序問題並且安全是很重要的。“最近FreeType的漏洞捕捉器在源代碼變化後的幾小時內就找到了新的堆緩衝區。”

此服務“持續性”的特點還能解決另一個問題:開源軟件會有大量不同維護人員不斷地更新、變化。Google表示,“OSS-Fuzz可以自動提醒維護人員,誰修復了程序錯誤,並且還能自動確認這個修復。一切都在一天內完成!”

並沒有跡象表明谷歌和微軟的服務哪個更好—他們爲了不同的目的採取不同手段。HD Moore,Metasploit與Special Circumstance有限責任公司的創始人表示,“OSS-Fuzz的成就,可以同開源中的Coverity工具相提並論;通過應用商業化資源去提高那些重要的開源軟件與庫的安全性。”

“Springfield會有些不同,”他繼續說,“它的重點是對所有付費的開發者提供服務而不僅是開源的那些。谷歌作爲一個因其員工對開源工具(例如AFL等)的耕耘而在此領域做出傑出貢獻的公司,在這方面的成就似乎與其保持了一致。”

目前,谷歌測試版只對有大量用戶羣或者對全球IT基礎架構至關重要的開源軟件提供服務。這暗示着,儘管沒有直截了當地說明,這一切仍會變化。“通過你的幫助,我們可以將模糊測試作爲開源發展中的一個標準規範,並和廣大開發者、安全測試人員一道,確保那些重要開源應用、庫以及API中的程序錯誤都能被發現和修復。”

1. 開源Fuzzers

SnowFuzz
https://arxiv.org/pdf/1708.08437.pdf
https://github.com/nettrino/slowfuzz
當應用程序的最壞情況時間/空間複雜性顯着高於特定用戶控制輸入的相應平均情況時,會出現算法複雜性漏洞。當滿足此類條件時,攻擊者可以通過提供觸發最壞情況行爲的輸入來針對易受攻擊的應用程序啓動拒絕服務攻擊。衆所周知,此類攻擊會嚴重影響生產系統,關閉整個網站,或導致繞過Web應用程序防火牆。
遺憾的是,現有的算法複雜性漏洞檢測機制是特定於域的,並且通常需要大量的手動操作。在本文中,我們設計,實現和評估SlowFuzz,這是一個獨立於域的框架,用於自動查找算法複雜性漏洞。SlowFuzz自動查找在測試二進制文件中觸發最壞情況算法行爲的輸入。SlowFuzz使用資源使用引導的進化搜索技術自動查找輸入,以最大化給定應用程序的計算資源利用率。

PerfFuzz
http://www.carolemieux.com/perffuzz-issta2018.pdf
https://github.com/carolemieux/perffuzz
當程序被提供具有病理行爲的輸入時,軟件中的性能問題可能意外地出現。但是我們怎樣才能首先找到這些輸入?PerfFuzz可以自動生成這樣的輸入:給定一個程序和至少一個種子輸入,PerfFuzz自動生成輸入,在沒有任何領域知識的情況下,跨程序位置運行病理行爲。
PerfFuzz使用多維性能反饋,獨立地最大化所有程序位置的執行計數。這使PerfFuzz能夠找到各種輸入,在程序中運行不同的熱點。

FairFuzz
http://www.carolemieux.com/fairfuzz-ase18.pdf
https://github.com/Ljiee/fairfuzz
AFL擴展,通過定位稀有分支來增加代碼覆蓋率。FairFuzz在具有高度嵌套結構的程序(數據包分析器,xmllint,使用laf-inte編譯的程序等)上具有特殊優勢。

VUzzer
http://www.cs.vu.nl//~giuffrida/papers/vuzzer-ndss-2017.pdf
基於應用感知的自進化模糊工具。在這篇文章中,我們提出一個應用感知的進化模糊策略(不需要以前的知識應用或格式輸入)。爲了最小化地覆蓋並擴展更深的路徑,我們利用基於靜態和動態分析的控制以及數據流功能,來推斷應用程序的基本屬性。與Application-agnostic方法相比,這可以更快地生成有趣的輸入。我們實行我們的模糊策略在VUzzer上,並且用三種不同的數據評估它:DARPA的大挑戰二進制文件(CGC)、一組真實的應用程序(二進制輸入解析器)和最近發佈的LAVA數據集。

Afl-fuzz(American fuzzy lop)
http://lcamtuf.coredump.cx/afl/
Afl-fuzz是一種基於面向安全的模糊測試工具,它採用了一種新型的方式(編譯時檢測和遺傳算法),來自動發掘乾淨的、有趣的測試案例,即在目標二進制中觸發新的內部狀態。這基本上改善了模糊代碼的功能覆蓋。該工具生成的簡潔的合成語料庫也可以用來傳播其它更多的勞動型或資源密集型測試方案。
與其他儀器化的模糊工具相比,afl-fuzz是以實用性而被設計的:它具有適度的性能開銷,採用了多種高效的模糊戰略,和努力最小化的技巧,基本上不需要配置,並且能夠無縫處理複雜的、真實世界案例,以及常見的圖像分析或文件壓縮等。

Filebuster
一個非常快速和靈活的網絡模糊工具

TriforceAFL
AFL / QEMU 模糊器具有全系統的仿真。這是AFL的修補版本,支持使用QEMU的全系統模糊測試。它所包含的QEMU已經更新,允許在運行x86_64的系統仿真器時進行分支機構跟蹤。它也添加了額外的指令來啓動AFL的forkserver,進行模糊設置,並標記測試用例的啓動和停止。

Nightmare:
https://github.com/joxeankoret/nightmare
一個具有web管理的分佈式模糊測試套件。

Grr
DECREE二進制的高吞吐量模糊器和仿真器

Randy:
http://ptrace-security.com/blog/randy-random-based-fuzzer-in-python/
Python中的基於隨機的模糊工具

IFuzzer
一個進化型的翻譯模糊器

Dizzy:
https://github.com/ernw/dizzy
基於python的模糊框架:
1.可以發送到L2以及上層(TCP / UDP / SCTP)
2.能夠處理奇長度分組字段(無需匹配字節邊界,因此即使單個標誌或7位長字3.也可以表示和模糊)
4.非常容易的協議定義語法
5.能夠做多包狀態的完全模糊,能夠使用接收到的目標數據作爲響應

Address Sanitizer:
https://github.com/Google/sanitizers
地址Sanitizer、線Sanitizer、記憶Sanitizer

Diffy:
https://github.com/twitter/diffy
使用Diffy查找您的服務中的潛在錯誤

Wfuzz:
https://github.com/xmendez/wfuzz
Web應用程序HTTP://www.edge-security.com/wfuzz.php

Go-fuzz:
https://github.com/Google/gofuzz
基於放棄的模糊測試

Sulley:
https://github.com/OpenRCE/sulley
Sulley是一個積極開發的模糊引擎和模糊測試框架,由多個可擴展組件組成。Sulley(IMHO)超過了此前公佈的大所屬模糊技術、商業和公共領域的能力。框架的目標是不僅是可以簡化數據表示,而且也可以簡化數據傳輸和儀表。Sulley是以 Monsters Inc.的生物來命名的,因爲,他是模糊的。寫在python內的。

Sulley_l2:
http://ernw.de/download/sulley_l2.tar.bz2
有些人可能記得2008年發佈的sulley_l2,它是sulley模糊框架的修改版本,增強了第2層發送功能和一堆(L2)模糊腳本。所有的blinking, rebooting, mem-corrupting引起了我們的一些關注。從那以後,我們繼續寫和使用這些模糊腳本,所以它的洞集合增長了。

CERT Basic Fuzzing Framework (BFF)For linux, OSX
https://github.com/CERTCC-Vulnerability-Analysis/certfuzz
http://www.cert.org/vulnerability-analysis/tools/bff.cfm
cert基本模糊框架(BFF)是一個軟件測試工具,它用於在linux和mac os x平臺上運行的應用程序中尋找漏洞。BFF對消耗文件輸入的軟件執行突變性的模糊測試。(突變性模糊測試是採取形式良好的輸入數據並以各種方式破壞它的行爲,尋找導致崩潰的情況。)BFF自動收集導致了軟件以獨特方式使測試用例崩潰,以及利用崩潰來調試信息。BFF的目標是去最小化軟件供應商和安全研究人員通過模糊測試有效地發現和分析發現的安全漏洞過程中所需要的努力。

CERT Failure Observation Engine (FOE)For windows
http://www.cert.org/vulnerability-analysis/tools/foe.cfmhttps://github.com/CERTCC-Vulnerability-Analysis/certfuzz
The cert Failure Observation Engine (FOE) 是一個軟件測試工具,它被用於在Windows平臺上運行的應用程序中發現漏洞。FOE在消耗文件輸入的軟件上執行突變模糊測試。(突變性模糊測試是採取形式良好的輸入數據並以各種方式破壞它的行爲,尋找導致崩潰的情況。)FOE自動收集導致了軟件以獨特方式使測試用例崩潰,以及利用崩潰來調試信息。FOE的目標是去最小化軟件供應商和安全研究人員通過模糊測試有效地發現和分析發現的安全漏洞過程中所需要的努力。

DranzerFor ActiveX Controls.
https://github.com/CERTCC-Vulnerability-Analysis/dranzer
Dranzer是一個工具,使用戶能夠檢查有效的技術,它用於模糊測試ActiveX控件

Radamsaa general purpose fuzzer
https://github.com/aoh/radamsa
Radamsa是一個用於魯棒性測試的測試用例生成器,也稱爲fuzzer。它可以用來測試一個程序是否可以承受格式錯誤以及潛在的惡意輸入。它通過製造文件來工作(有趣的不同於通常給定的文件),然後將修改的文件提供給Target程序,或者這樣或通過一些腳本。radamsa的主要賣點(而不是其他的模糊器)是:它是非常容易在大多數機器上運行,而且很容易從命令行腳本,這已經被用來找到程序中的一系列安全問題,而且你可能現在正在使用。

zzufApplication fuzzer
https://github.com/samhocevar/zzuf
zzuf是一個透明的應用程序輸入模糊器。 它的工作原理是截取文件操作並更改程序輸入中的隨機位。zzuf的行爲是確定性的,使得它很容易再現錯誤。 有關如何使用zzuf的說明和示例,請參閱手冊頁和網站http://caca.zoy.org/wiki/zzuf

Backfuzz
https://github.com/localh0t/backfuzz
Backfuzz是一個用python寫成的有着不同協議(FTP,HTTP,IMAP等)的模糊工具。因爲一般的想法是這個腳本有幾個預定義的功能,所以誰想要編寫自己的插件(爲另一個協議)就可以在一些行這樣做。

KEMUfuzzer
https://github.com/jrmuizel/kemufuzzer
KEmuFuzzer是一個基於仿真或直接本地執行測試系統虛擬機的工具。 目前KEmuFuzzer支持:BHOCS,QEMU,VMware和virtualbox。

Pathgrind
https://github.com/codelion/pathgrind
Pathgrind使用基於路徑的動態分析來fuzz linux / unix二進制。 它是基於valgrind被寫在python內的。

Wadi-fuzzer
https://www.sensepost.com/blog/2015/wadi-fuzzer/ https://gitlab.sensepost.com/saif/DOM-Fuzzer
Wadi是基於web瀏覽器語法的模糊器。 這個語法用於描述瀏覽器應該如何處理Web內容,Wadi轉向並使用語法來打破瀏覽器。
Wadi是一個Fuzzing模塊,用於NodeFuzz fuzzing Harness並利用AddressSanitizer(ASan)在Linux和Mac OSX上進行測試。
萬維網聯盟(W3C)是一個國際組織,它開發開放標準以確保Web的長期增長。 W3C允許我們搜索語法並在我們的測試用例中使用。

LibFuzzer, Clang-format-fuzzer, clang-fuzzer
http://llvm.org/docs/LibFuzzer.html
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-format/fuzzer/ClangFormatFuzzer.cpp?view=markup
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/clang-fuzzer/ClangFuzzer.cpp?view=markup
我們在LibFuzzer上實現了兩個模糊器:clang-format-fuzzer和clang-fuzzer。Clang格式大多是一個詞法分析器,所以給它隨機字節格式是會完美運行的,但也伴隨着超過20個錯誤。然而Clang不僅僅是一個詞法分析器,給它隨機字節時幾乎沒有劃傷其表面,所以除了測試隨機字節,我們還在令牌感知模式中模糊了Clang。兩種模式中都發現了錯誤; 其中一些以前被AFL檢測到,另一些則不是:我們使用AddressSanitizer運行這個模糊器,結果發現一些錯誤在沒有它的情況下不容易被發現。

Perf-fuzzer
http://www.eece.maine.edu/vweaver/projects/perf_events/validation/https://github.com/deater/perf_event_testshttp://web.eece.maine.edu/vweaver/projects/perf_events/fuzzer/
用於Linux perf_event子系統的測試套件

HTTP/2 Fuzzer
https://github.com/c0nrad/http2fuzz
HTTP2模糊器內置於Golang。

QuickFuzz
http://quickfuzz.org/
QuickFuzz是一個語法模糊器,由QuickCheck,模板Haskell和Hackage的特定庫生成許多複雜的文件格式,如Jpeg,Png,Svg,Xml,Zip,Tar和更多! QuickFuzz是開源的(GPL3),它可以使用其他錯誤檢測工具,如zzuf,radamsa,honggfuzz和valgrind。

SymFuzz
https://github.com/maurer/symfuzz
http://ieeexplore.IEEE.org/xpls/abs_all.jsp?arnumber=7163057
摘要?我們提出了一個算法的設計,以最大化數量的bug爲黑盒子突變性的模糊給定一個程序和種子的輸入。主要的直觀性的是利用給定程序 - 種子對的執行軌跡上的白盒符號進行分析,來檢測輸入的BIT位置之間的依賴性,然後使用這種依賴關係來爲該程序種子對計算概率上最佳的突變比率。我們的結果是有希望的:我們發現使用相同的模糊時間,這比8個應用程序中的三個以前的模糊器的平均錯誤多38.6%。

OFuzz
https://github.com/sangkilc/ofuzz
OFuzz是一個用OCaml編寫的模糊平臺。 OFuzz目前專注於在* nix平臺上運行的文件處理應用程序。 OFuzz的主要設計原則是靈活性:必須容易添加/替換模糊組件(崩潰分類模塊,測試用例生成器等)或算法(突變算法,調度算法)。

Bed
http://www.snake-basket.de/
網絡協議fuzzer。 BED是一個程序,旨在檢查守護程序的潛在緩衝區溢出、格式字符串等。

Neural Fuzzer
https://cifasis.github.io/neural-fuzzer/
神經模糊測試工具是一種實驗性模糊器,它被設計使用國家最先進的機器,從一組初始文件學習。 它分爲兩個階段:訓練和生成。

Pulsar
https://github.com/hgascon/pulsar
協議學習,模擬和狀態模糊器
Pulsar是一個具有自動協議學習和模擬能力的網絡模糊器。該工具允許通過機器學習技術來建模協議,例如聚類和隱馬爾可夫模型。這些模型可以用於模擬Pulsar與真實客戶端或服務器之間進行通信,這些消息,在一系列模糊原語的結合下,讓測試一個未知協議錯誤的實施在更深的狀態協議。

D-bus fuzzer:
https://github.com/matusmarhefka/dfuzzer
dfuzzer是D-Bus模糊器,是用於通過D-Bus進行通信的模糊測試過程的工具。它可以用於測試連接到會話總線和系統總線守護程序的進程。模糊器爲客戶端工作,它首先連接到總線守護進程,然後它遍歷並模糊測試由D-Bus服務提供的所有方法。

Choronzon
https://census-labs.com/news/2016/07/20/choronzon-public-release/
Choronzon是一個進化型的模糊工具。它試圖模仿進化過程,以保持產生更好的結果。 爲了實現這一點,它具有評估系統的能力,用以分類哪些模糊文件是有趣的,哪些應該被丟棄。
此外,Choronzon是一個基於知識的模糊器。 它使用用戶定義的信息來讀取和寫入目標文件格式的文件。要熟悉Choronzon的術語,您應該考慮每個文件由染色體表示。用戶應該描述所考慮的文件格式的基本結構, 優選文件格式的高級概述,而不是描述它的每個細節和方面。那些用戶定義的基本結構中的每一個都被認爲是基因, 每個染色體包含一個基因樹,並且它能夠從中構建相應的文件。

Exploitable
這裏寫圖片描述
'exploitable’是一個GDB擴展,它會按嚴重性分類Linux應用程序錯誤。擴展檢查已崩潰的Linux應用程序的狀態,並輸出攻擊者利用底層軟件錯誤獲得系統控制有多困難的總結。擴展可以用於爲軟件開發人員確定bug的優先級,以便他們可以首先解決最嚴重的bug。
該擴展實現了一個名爲“exploitable”的GDB命令。 該命令使用啓發式來描述當前在GDB中調試的應用程序的狀態的可利用性。 該命令旨在用於包含GDB Python API的Linux平臺和GDB版本。 請注意,此時命令將無法在覈心文件目標上正確運行。

Hodor
這裏寫圖片描述

我們想設計一個通用的模糊器,可以用來配置使用已知的良好的輸入和分隔符,以模糊特定的位置。在一個完全愚鈍的模糊器和一些更聰明的東西之間,與實現適當的智能模糊器相比,表現着更少的努力。

BrundleFuzz
https://github.com/carlosgprado/BrundleFuzz
BrundleFuzz是一個用於Windows和Linux的分佈式模糊器,使用動態二進制儀器。

Netzob
https://www.netzob.org/
用於通信協議的逆向工程、流量生成和模糊化的開源工具
P
assiveFuzzFrameworkOSX
該框架用於在內核模式下基於被動內聯掛鉤機制來模糊OSX內核漏洞。

syntribos
OpenStack安全組的Python API安全測試工具

honggfuzz
http://google.github.io/honggfuzz/
一個通用的,易於使用的有趣的分析選項的模糊器。 支持基於代碼覆蓋率的反饋驅動的模糊測試

dotdotpwn
http://dotdotpwn.blogspot.com/
目錄遍歷模糊工具

KernelFuzzer
跨平臺內核Fuzzer框架。DEF CON 24視頻:
https://www.youtube.com/watch?v=M8ThCIfVXow

PyJFuzz
PyJFuzz - Python JSON Fuzzer
PyJFuzz是一個小的、可擴展的和現成可用的框架,用於模糊JSON輸入,如移動端點REST API,JSON實現,瀏覽器,cli可執行和更多。

RamFuzz
單個方法參數的模糊器。

EMFFuzzer
基於桃樹模糊框架的增強的元文件模糊器

js-fuzz
一個基於javascript的AFL啓發的遺傳模糊測試器。

syzkaller
syzkaller是一個無監督的、覆蓋引導的Linux系統調用模糊器。

2. 模糊線束/框架使fuzzer提高:

FuzzFlow
Fuzzflow是來自cisco talos的一個分佈式的模糊管理框架,它提供虛擬機管理,模糊作業配、可插拔變異引擎、前/後變形腳本、崩潰收集和可插拔崩潰分析。

fuzzinator
Fuzzinator是一個模糊測試框架,可以幫助你自動化任務,它通常需要在一個fuzz會話:
運行您最喜歡的測試生成器並將測試用例饋送到測試中的系統,
抓住和保存獨特的問題,
減少失敗的測試用例,
緩解錯誤跟蹤器中的問題報告(例如,Bugzilla或GitHub),
如果需要,定期更新SUT
計劃多個SUT和發電機,而不會使工作站超載。

Fuzzlabs
https://github.com/DCNWS/FuzzLabs
FuzzLabs在一個模塊化的模糊框架中,用Python編寫。 它使用了令人驚歎的Sulley模糊框架的修改版本作爲核心引擎。 FuzzLabs仍在開發中。

Nodefuzz
https://github.com/attekett/NodeFuzz
對於Linux和Mac OSX。 NodeFuzz是一個用於網絡瀏覽器和類似瀏覽器的應用程序的模糊器。 NodeFuzz背後有兩個主要的想法:第一是創建一個簡單、快速、不同瀏覽器的fuzz方法。 第二,有一個線束,可以輕鬆地擴展與新的測試用例發生器和客戶端儀器,無需修改核心。

Grinder
https://github.com/stephenfewer/grinder
對於windows
Grinder是一個自動化瀏覽器的模糊化和大量崩潰管理的系統。

Kitty
https://github.com/Cisco-sas/kitty
Kitty是一個開源的模塊化和可擴展的模糊框架,使用python編寫,靈感來自OpenRCE的Sulley和Michael Eddington(現在是Deja vu Security的)Peach Fuzzer。

Peach
http://community.peachfuzzer.com/
https://github.com/MozillaSecurity/peach
Peach是一個SmartFuzzer,能夠執行基於生成和基於突變的模糊測試。

3. 此外,還有這些免費的但不是開源的fuzzer:

SDL MiniFuzz File Fuzzer
https://www.Microsoft.com/en-us/download/details.aspx?id=21769
對於Windows。 SDL MiniFuzz File Fuzzer是一個基本的文件模糊工具,旨在簡化非安全開發人員對模糊測試的採用,這些非安全開發人員不熟悉文件模糊工具或從未在當前的軟件開發過程中使用它們。

Rfuzz
http://rfuzz.rubyforge.org/index.html
RFuzz是一個Ruby庫,可以使用快速HttpClient和wicked vil RandomGenerator輕鬆地從外部測試Web應用程序,它允許普通程序員每天使用先進的模糊技術。

Spike
http://www.immunitysec.com/downloads/SPIKE2.9.tgz
SPIKE是一個API框架,允許你編寫模糊器。

Regex Fuzzer
http://go.microsoft.com/?linkid=9751929
DL Regex Fuzzer是一個驗證工具,用於幫助測試正則表達式是否存在潛在的拒絕服務漏洞。它包含用指數時間執行的某些子句的正則表達式模式(例如,包含自身重複的重複的子句)可以被攻擊者利用來引起拒絕服務(DoS)條件。SDL Regex Fuzzer與SDL過程模板和MSF-Agile + SDL過程模板集成,以幫助用戶跟蹤和消除其項目中的任何檢測到的正則表達式漏洞。

Useful Blog Article

博客幫助你fuzzing得更好:

Yawml的開始到完成模糊與AFL(一個完整的fuzzjob由foxglovesecurity)
http://foxglovesecurity.com/2016/03/15/fuzzing-workflows-a-fuzz-job-from-start-to-finish/

Fuzz更聰明,更難 - 用afl引發模糊,來自bsidessf2016的引物
https://www.peerlyst.com/posts/bsidessf-2016-recap-of-fuzz-smarter-not-harder-an-afl-primer-claus-cramon

Fuzzing和afl是一種藝術
Fuzzing nginx 和 American Fuzzy Lop
您可以在此處的評論或此Google文檔中發表建議:
https://docs.google.com/document/d/17pZxfs8hXBCnhfHoKfJ7JteGziNB2V_VshsVxmNRx6U/edit?usp=sharing

BSidesLisbon 2016主題演講:智能模糊器革命
Windows內核模糊初學者 - Ben Nagy

智能模糊測試工具Peach Fuzzer官方文檔翻譯
https://www.freebuf.com/sectool/130191.html

技術分享|Fuzzing技術簡介
http://www.sohu.com/a/218884614_723268

fuzz實戰之libfuzzer
https://www.secpulse.com/archives/71898.html

初識 Fuzzing 工具 WinAFL
https://paper.seebug.org/323/

PTFuzzer:一個基於硬件加速的二進制程序Fuzz工具
https://www.freebuf.com/sectool/177578.html

libFuzzer-gv: new techniques for dramatically faster fuzzing
https://guidovranken.com/2017/07/08/libfuzzer-gv-new-techniques-for-dramatically-faster-fuzzing/

其他Fuzzer博客:
循環使用編譯器轉換的模糊包版
谷歌推出了OSS-Fuzz(感謝Dinko Cherkezov) - 一個項目,旨在不斷開發開源項目fuzz:
OSS-Fuzz現在正在測試中,並即將接受候選開源項目的建議。爲了使項目被OSS-Fuzz接受,它需要有一個龐大的用戶基礎或針對於至關重要的全球IT基礎設施,這是一個通用啓發式方法,我們有意在這個早期階段解釋。查看更多詳情和說明如何在這裏申請。
一旦項目註冊了OSS-Fuzz,它將自動接收到我們的跟蹤器中,新報告的錯誤披露截止於90天后(見此處的詳細信息)。 這符合行業的最佳實踐,並通過更快地爲用戶提供補丁來提高最終用戶的安全性和穩定性。
幫助我們確保這個程序真正服務於開源社區和依賴這個關鍵軟件的互聯網,貢獻和留下您的反饋在GitHub。

這裏寫圖片描述

商業模糊器

超越安全的暴風雨
http://www.beyondsecurity.com/bestorm_and_the_SDL.html
管理員編輯:查找更多真棒Peerlyst社區貢獻的資源,資源目錄在這裏
這裏寫圖片描述

關於瀏覽器的Fuzzing

Skyfire 一種用於Fuzzing的數據驅動的種子生成工具
https://www.inforsec.org/wp/?p=2678
https://www.ieee-security.org/TC/SP2017/papers/42.pdf

使用libFuzzer fuzz Chrome V8入門指南
http://www.4hou.com/info/news/6191.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章