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