優秀的模糊測試工具能在程序面向公眾發布或部署前,就發現那些難以察覺的漏洞“大坑”。
別被“模糊”這詞兒給迷惑了。模糊測試是一個很重要的流程,有助于發現影響當今復雜應用程序的未知關鍵錯誤,有時候甚至能暴露出一些讓人“腦洞大開”或者“七竅生煙”的奇葩問題。優秀的模糊測試工具常能夠在程序面向公眾發布或部署前,就發現那些難以察覺的漏洞“大坑”。
模糊測試的工作機制是什么?
模糊測試是針對完整代碼的自動化測試過程。從要求程序完全編譯這一點來看,模糊測試看起來類似于動態應用程序安全測試(DAST)工具。但是,DAST工具和模糊測試工具查找的是完全不同的東西。DAST能夠掃描漏洞,比如可被黑客執行遠程過程調用的漏洞,或者圍繞暴露HTTP和HTML接口的弱防護。模糊測試工具則與之相反,通過向應用提供非預期輸入,找出這么做將導致的怪異或非故意結果。
理解模糊測試的工作原理,我們不妨以網絡銀行或者電子商務應用為例,在銀行業務中,假設用戶轉賬時無意間在金額輸入框里輸入了一個負數,程序怎么處理?是把錢轉入還是轉出?而在電子商務應用程序中,如果用戶試圖往購物車中添加數百萬甚至數十億件商品,會發生什么狀況?購物網站會不會整個崩潰?或者直接給他們數十億的免費商品?
只要程序員考慮周密、代碼嚴謹,大多數此類商業邏輯漏洞都會被事先預測到。但沒人能夠預想到所有的情況。用戶面對輸入框犯傻的時候總會出現一些“奇葩”的非預期行為。此外,如果攻擊者向應用、加密內容、操作系統指令或原始代碼注入命令行函數,又會出現什么情況?
模糊測試工具能夠測試、發現并報告這些假設情況。有些模糊測試工具使用隨機字符和輸入字符串,有些則聚焦最有可能出現的問題領域。例如,就整數字段而言,最有可能觸發非預期程序行為的罪魁禍首,就是零值、大數和負值。在檢測目標程序時,還有其他一些模糊測試工具會嘗試提供上下文相關但非預期的輸入。
無論哪種情況,最好的模糊測試工具產生的數據,必然不會偏離預期輸入太遠,不會馬上就被軟件的解析器當成無效輸入而拒絕。相反,它們提供的數據有很大概率被程序接受,但又是程序員沒預料到的。然后,這些工具就會報告被測試應用中非預期輸入觸發了哪些行為。
開發人員經常會使用很多開源模糊測試工具,少量商業應用工具,以及各種模糊測試框架。
下面我們列出九款最好的模糊測試工具。
九大頂級模糊測試工具
1、效率之王:American Fuzzy LOP
American Fuzzy LOP程序可以輕松部署,配置簡單。該程序建立在對最佳模糊測試器運行機制和最有用結果的大量研究基礎之上,旨在最小化編譯查詢返回結果的耗時,盡量降低對系統的影響。
事實上,American Fuzzy LOP的開發者對免干預運行的能力非常自信,以至于幾乎沒設置什么控制按鈕。用戶可以看到一個懷舊風的漂亮界面,顯示模糊測試器當前執行的動作,以及所發現的結果。
但即便開發者對于American Fuzzy LOP找出被測程序漏洞的能力非常自信,該工具也兼容其他模糊測試器,能夠生成可被其他更專業的“半自動”模糊測試工具使用的測試數據。這么做可以提升這些工具的效率,并且減少其運行時間。
2、慢工出細活:Radamsa
Radamsa是一線模糊測試器,向程序發送樣本查詢,觸發非預期結果。
Radamsa最大的賣點就是其準確性。GitLab上的開發者頁面列出了這款模糊測試器在流行軟件中發現的現實漏洞。盡管用戶可能需要多花點時間精力來生成有效輸入,但如果這一過程能夠產生更多切實的可修復漏洞,那這個時間還是花得很值。
3、戰果累累:Honggfuzz
面向安全的Honggfuzz模糊測試器是多線程的,而且經過了優化,可以利用各種系統資源。很多模糊測試工具必須運行多個實例才能達到這種效果,但Honggfuzz自動使用所有可用CPU核心加速模糊測試過程。
Honggfuzz不僅僅適用于Windows,也可以測試在Linux、Mac,甚至Android環境中運行的應用程序。由于其多平臺適用的特性,Honggfuzz有一系列例子和測試用例可供開發人員使用,或一字不改直接套用,或根據自身需求加以修改,或者僅做簡單參考以便設計自己的模糊測試規則。
可能是由于能在多平臺執行模糊測試的能力,Honggfuzz用來展示開發人員捕獲漏洞的戰果頁面相當龐大。開發者介紹,找出引發全球安全補丁的OpenSSL關鍵漏洞的模糊測試工具僅此一款。
4、精益求精:Libfuzzer
Libfuzzer工具尚在開發過程中,新版本不時發布。因此,使用者應在開始模糊測試會話前,檢查自己使用的是否是最新版本。
Libfuzzer旨在成為所謂的演進式模糊測試工具。該工具將模糊輸入饋送至目標程序的特定進入點或輸入域,然后根據被測試應用程序對這些查詢的反應,跟蹤該代碼還觸及了哪些其他部分。獲得這些新信息后,Libfuzzer修改其查詢,查看自身是否能進一步滲透。
這款模糊測試工具的目標,是產生比傳統模糊測試工具更相關的結果。開發人員表示,該工具已經取得了諸多成果,并將繼續精煉調整,獲得更高的準確性。
5、開源醫生:OSS-Fuzz
OSS-Fuzz工具面向開源軟件。開發者想要支持開源社區,所以OSS-Fuzz面向此類應用和程序做了優化。
OSS-Fuzz支持以C、C++、Rust和Go語言編寫的開源程序,不過開發者說也可以支持其他語言。
很明顯,用OSS-Fuzz幫助開源社區創建更安全應用程序的目標已經相當成功了。OSS-Fuzz已經在200個開源程序中找到了14,000多個漏洞。
6、瘦死的駱駝:Sulley模糊測試框架
得名于《怪獸公司》電影中渾身長滿藍毛的小怪獸,Sulley模糊測試框架既是模糊測試引擎又是測試框架。與其他大多數模糊測試引擎不同,Sulley旨在一次性無縫運行數日,持續檢查應用程序對模糊輸入的怪異響應,然后記錄下這些結果。該工具適用于想要激活模糊測試引擎后去做別的事兒的用戶。當他們數小時或數天后返回查看時,Sulley已經將所有發現都呈現在報告里了。
Sulley有很多高級功能,比如依托硬件平臺的并行執行能力。該工具還能在無需用戶編程的情況下,自動確定測試案例的哪種特定順序會觸發錯誤。
Sulley框架在開源模糊測試社區廣為人知,但已經有很長一段時間沒有更新了。即便如此,GitHub上免費可用的最新版本仍活躍在模糊測試領域,且運行良好。
7、青出于藍勝于藍:boofuzz
boofuzz工具基于Sulley的模糊測試框架。其名稱同樣源于《怪獸公司》,取自其中的小姑娘Boo。boofuzz項目是Sulley“停更”的后繼產物。該工具使用Sulley核心代碼,但致力于不斷改良。boofuzz是作為Python庫安裝的。
boofuzz項目發布以后,開發人員增加了在線文檔、對更多通信媒介的支持、可擴展故障檢測和一個易于使用的界面。該工具還將串行模糊測試、以太網和UDP廣播添加到了默認功能里。boofuzz還可將測試結果以CSV文件格式導出,以便在修復檢出故障時可以先研究所有被觸發問題的完整列表。
Sulley中的很多已知漏洞已被boofuzz摒除,該工具目前在GitHub保持活躍更新。
8、希望之星:BFuzz
當紅模糊測試工具之一,BFuzz基本上還處于beta測試版階段。免費可用,用戶可報告使用過程中遇到的任何問題,以便開發人員能夠修復。話雖如此,BFuzz目前的戰績不容小視,發現了逼出Epiphany Web補丁的漏洞和可致Mozilla Firefox觸發緩沖區溢出的漏洞。
BFuzz是基于輸入的模糊測試器,以URL和瀏覽器作為其輸入方式。這個意義上講,該工具很像DAST工具,適合重度依賴這些東西的公司企業,因為BFuzz使用類似的測試方法,但找尋不同類型的錯誤。
BFuzz開發人員明顯為之投入了巨大精力,該模糊測試器必成大器。YouTube上甚至都有視頻展示BFuzz工具的使用。
9、智能化之選:PeachTech Peach Fuzzer
PeachTech Peach Fuzzer是PeachTech公司出品的商業模糊測試工具,很多繁瑣的事情都不需要測試人員親力親為了。測試人員只需要用該公司所謂的Peach Pit加載并配置該模糊測試引擎即可。
Peach Pit是預先編寫好的測試定義,覆蓋一系列不同平臺。PeachTech表示,每個Pit包含適用特定目標的規范,比如目標攝入的數據結構,數據流入和流出被測設備或應用程序的方式等。這樣測試人員就可以幾乎不用設置,便能將精力集中在他們的模糊測試上了。用戶使用PeachTech創建自己的Pit也很簡單,令Peach Fuzzer還可用于專用系統。
由于Peach Fuzzer引擎可以Peach Pit編程的原因,幾乎沒有任何系統不在該工具的測試范圍之內。Mac、Windows、Linux都可以測。也可以用于模糊測試網絡協議、嵌入式系統、驅動、物聯網設備,只要是能接受命令而易受模糊輸入困擾的東西,就能用Peach Fuzzer測試。
除了Peach Fuzzer之外,安全牛還建議留意以下四大AI模糊測試工具,沒準能幫你找出價值連城的零日漏洞:
1、微軟Security Risk Detection
2、谷歌 ClusterFuzz
3、Synopsys Defensics Fuzz Testing
4、Fuzzbuzz