2021年軟體測試工具總結——模糊測試工具

2021-12-23 軟體質量報導

模糊測試(Fuzz Testing)是一種自動化的軟體測試技術,最初是由威斯康辛大學的巴頓·米勒於1989年開發的,通常用於識別程序中的潛在漏洞。模糊測試的核心是自動或半自動的生成隨機數據輸入到應用程式中,同時監控程序的異常情況,如崩潰、代碼斷言失敗,以此發現可能的程序錯誤,如內存洩漏。模糊化是指自動生成和執行測試,模糊測試中輸入的隨機數據被稱為「Fuzz」,隨機數據的類型包括:超長字符串;隨機數如負數,浮點數,超大數、特殊字符如~!@#$%等包含特殊含義的字符,作為輸入可能會引發報錯;unicode編碼,因為有些程序是不支持unicode的。

模糊測試包括幾個基本的測試步驟:確定被測系統->確定輸入->生成模糊數據->使用模糊數據執行測試->監控分析系統的行為->輸出日誌。

目前有三種主要的模糊測試技術:

黑盒隨機模糊,對正確格式的輸入數據進行隨機變異,然後用這些變異的輸入運行程序,看是否能夠觸發異常。這是一種簡單的hack,如果一個應用從未進行過模糊測試,可以用這種技術有效地發現應用中的漏洞。基於語法的模糊,是模糊複雜格式輸入的替代方法,需要指定輸入格式的輸入語法,還指定哪些輸入部分要進行模糊化以及如何模糊化。基於語法的模糊生成器會生成許多新的輸入,每個輸入滿足語法編碼的約束。基於語法的fuzzing通過模糊生成器的用戶的創造力和專業知識來指導fuzzing。白盒模糊處理,由微軟研究院於2008年首創,這種方法包括:動態地執行測試下的程序,並從執行過程中遇到的條件分支收集輸入約束。然後,系統地逐個否定所有這些約束,並使用約束求解器求解,其解被映射到執行不同程序執行路徑的新輸入。使用系統搜索技術重複這個過程,試圖掃描程序的所有可行的執行路徑。與黑盒隨機模糊相比,白盒模糊通常更精確,可以運行更多的代碼,從而發現更多的bug。

模糊測試屬於動態測試,是一種自動發現軟體安全漏洞的經濟有效的測試技術,常常會在軟體安全開發生命周期中發現非常嚴重的安全故障或缺陷,例如:崩潰、內存洩漏,未處理的異常等。如果一個軟體產品需要處理不可信的輸入或者具有大型、複雜的數據解析功能,模糊測試是非常有效的。一旦一個模糊生成器啟動並運行,它就可以開始自己尋找缺陷,不需要手動/人工幹預。另外,模糊測試有助於發現傳統測試方法或手動審計無法檢測到的缺陷。

當然,模糊測試無法提供對於一個軟體應用在安全威脅或漏洞方面的整體評估,在處理不會導致應用崩潰的安全威脅時效果較差,例如某些病毒、蠕蟲、木馬等,因此需要結合其它的安全測試手段來保障軟體系統的安全。

模糊測試的核心在於一個有效的模糊生成器(Fuzzer),就像巴頓·米勒教授當初給學生布置的作業:
The goal of this project is to evaluate the robustness of various UNIX utility programs, given an unpredictable input stream. […] First, you will build a fuzz generator. This is a program that will output a random character stream. Second, you will take the fuzz generator and use it to attack as many UNIX utilities as possible, with the goal of trying to break them.該項目的目標是在給定不可預測的輸入流的情況下評估各種UNIX實用程序的健壯性。[…]首先,您將構建一個模糊發生器。這是一個將輸出隨機字符流的程序。其次,您將使用模糊發生器,並使用它來攻擊儘可能多的UNIX實用程序,以試圖破壞它們。隨機生成的輸入大多數在語法上是不成立的,很快就會被被測試應用拒絕。為了能讓模糊測試有效的進行下去,需要增加獲得有效輸入的機率。一個好的模糊生成器產生的數據,不會偏離預期輸入太遠,它們提供的數據被應用接受的概率很高,但又是非預期的,會觸發應用的異常行為。Microsoft Security Risk DetectionSynopsys Defensics Fuzz Testing1. American Fuzzy Lop(AFL)AFL是一款開源的模糊測試工具,是當今使用最廣泛的Fuzzer,這個工具在程序執行前對程序源碼進行插樁(instrumentation),以便在程序執行過程中實時獲取程序的執行情況。AFL採用遺傳算法對程序的輸入進行變異能夠在程序運行的時候注入自己的代碼, 然後自動產生測試用例進行模糊測試。代碼覆蓋率是模糊測試工具用來增加找到導致錯誤的代碼路徑的可能性的主要指標。在執行過程中,AFL向被測程序中輸入input,然後獲取程序的覆蓋率,將覆蓋率大的input保留下來進行變異,然後在下一輪測試中向被測程序中輸出這些變異後的input,一直到程序的覆蓋率在較長的一段時間不能繼續增大為止。AFL的優點是可以輕鬆部署,配置簡單,而最大的優點在於測試效率。這個工具建立在對最佳模糊測試器運行機制和最有用結果的大量研究基礎之上,旨在最小化編譯查詢返回結果的耗時,儘量降低對系統的影響。AFL目前已衍生出很多分支。官網地址:https://lcamtuf.coredump.cx/afl/

WinAFL:Windows版本的AFL,使用DynamoRIO去插樁閉源程序以獲取代碼覆蓋率信息,同時支持硬體PT獲取覆蓋率信息,但PT獲取覆蓋率其實並沒有插樁獲取得全,但速度可能會快一些。

地址:https://github.com/googleprojectzero/winafl

AFLFast:加速版的AFL,Fuzzing速度確實會比原版快一些。

地址:https://github.com/mboehme/aflfast


2. Radamsa

Radamsa是一個開源的模糊測試工具,通常用於測試程序對格式錯誤和潛在惡意輸入的承受能力。Radamsa最大的賣點就是其準確性。GitLab上的開發者頁面列出了這款模糊測試器在流行軟體中發現的真實漏洞。它易於編寫腳本,並且易於啟動和運行。https://github.com/Hwangtaewon/radamsa

Honggfuzz是由谷歌開發的,和AFL類似,採用遺傳算法進行編譯,是一個多進程和多線程的模糊生成器,所以用Honggfuzz進行fuzzing的速度非常快,在安全漏洞發現中的表現十分突出。根據該工具開發者的說法,它是唯一找到OpenSSL中導致發布全球安全補丁的關鍵漏洞的模糊測試工具。

Honggfuzz不僅僅適用於Windows。它可以測試在Linux、Mac甚至Android環境下運行的應用程式。由於它能夠在多個平臺下工作,Honggfuzz提供了一個完整的示例和測試用例目錄,開發人員可以使用這些示例和測試用例,也可以根據自己的需要進行修改。

https://github.com/google/honggfuzzLibFuzzer與被測試的庫連結,並通過特定的模糊入口點(也稱為「目標函數」)向被測試的庫提供模糊輸入。隨後,模糊生成器跟蹤觸及的代碼區域,並在輸入數據的語料庫中生成變異,以此來擴大代碼覆蓋率。地址:https://llvm.org/docs/LibFuzzer.html

OSS-Fuzz 能夠針對開源軟體進行持續的模糊測試,它的目的是利用更新的模糊測試技術與可拓展的分布式執行相結合,提高一般軟體基礎架構的安全性與穩定性。OSS-Fuzz 結合了多種模糊測試技術/漏洞捕捉技術(即原來的libfuzzer)與清洗技術(即原來的 AddressSanitizer),並且通過 ClusterFuzz 為大規模可分布式執行提供了測試環境。
幫助開源社區使用創建更安全的應用,OSS-Fuzz在實現這一目標方面做得相當成功。OSS-Fuzz在200個開源程序中發現了超過14000個漏洞。地址:https://github.com/google/oss-fuzz

boofuzz模糊測試框架是基於已經不再維護的Sulley開發的。該工具使用Sulley核心代碼,但致力於不斷改良。boofuzz是作為Python庫安裝的。開發人員增加了在線文檔、對更多通信媒介的支持、可擴展故障檢測和一個易於使用的界面。該工具還將串行模糊測試、乙太網和UDP廣播添加到了默認功能裡。boofuzz還可將測試結果以CSV文件格式導出,以便在修復檢出故障時可以先研究所有被觸發問題的完整列表。

地址:https://github.com/jtpereyda/boofuzz當紅模糊測試工具之一,發現了逼出Epiphany Web補丁的漏洞和可致Mozilla Firefox觸發緩衝區溢出的漏洞。

BFuzz是基於輸入的模糊測試器,以URL和瀏覽器作為其輸入方式。這個意義上講,該工具很像DAST工具,適合重度依賴這些東西的公司企業,因為BFuzz使用類似的測試方法,但找尋不同類型的錯誤。

地址:https://github.com/RootUp/BFuzz

8. 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進行測試。

地址:http://www.peach.tech/products/peach-fuzzer/

AI模糊測試採用機器學習及類似技術查找應用或系統中的漏洞。智能約束算法和遺傳算法是兩種主流的智能模糊測試算法,上面提到的AFL就是採用遺傳算法。此外,還有一些AI模糊測試工具:

9. 微軟開發的Security Risk Detection (MSRD)MSRD是一個人工智慧驅動的動態應用安全測試服務,可以優化web應用開發周期,以便在bug和安全風險被引入代碼庫時識別和糾正它們。

地址:https://www.microsoft.com/en-us/security-risk-detection/

10. ClusterFuzz

American Fuzzy Lop (AFL)使用遺傳算法。該工具集是基於雲的新工具Fuzzbuzz的核心,也是谷歌ClusterFuzz項目的一部分。ClusterFuzz是一個高度可伸縮的模糊測試基礎設施,Google使用ClusterFuzz對所有Google產品進行模糊化,並將其作為OSS-fuzz的後端。

地址:https://security.googleblog.com/2019/02/open-sourcing-clusterfuzz.html

11. Synopsys Defensics Fuzz Testing

Synopsys提供的Defensics是一個全面、通用、自動化的模糊測試框架,能夠幫助企業高效、有效地發現和修復軟體中的安全弱點。這種基于格式生成的模糊器採用有針對性的智能方法進行負面測試;高級文件和協議模板模糊器使用戶能夠構建自己的測試用例。SDK 支持專業用戶使用 Defensics Framework開發自己的測試用例。

地址:https://www.synopsys.com/software-integrity/security-testing/fuzz-testing.html

12. Fuzzbuzz

Fuzzbuzz是一個模糊測試平臺,通過自動化的複雜的基礎設施管理和設置以及與工具的連接,將模糊化集成到DevOps工作流中。該平臺在發現缺陷時發出警報,消除重複數據,並對其進行分類,以消除噪音和誤報。

地址:https://www.fuzzbuzz.io/

模糊測試的目的是發現軟體安全漏洞,已經成為軟體安全測試的主流測試技術,迄今為止,這項技術已經幫助人們在各種軟體中發現了數千個安全漏洞。而且,隨著「軟體定義一切」和萬物互聯時代的到來,軟體安全必將日益重要。因此,作為軟體測試人員,有必要掌握模糊測試的技術和工具。想了解更多模糊測試技術,可以點擊「閱讀原文」,參考微軟研究員於2020年4月發表的文章「Fuzzing: Hack, Art, and Science」

相關焦點

  • 2021年軟體測試工具總結——單元測試工具
    在應用程式中,單元是具有一個或多個輸入和單個輸出的軟體中最小可測試部分。單元測試是一種測試軟體代碼單元的方法,通常包括一個或兩個輸入,產生一個輸出。
  • 2021年軟體測試工具總結——性能測試工具
    系統的運行環境會依賴於一些關鍵因素,例如:系統架構、硬體配置、網絡帶寬、配套的軟體如資料庫和中間件等、以及外部的負載大小。系統性能的改善是測試、調整、再測試、再調整……的一個持續改進的過程,即性能調優,根據性能測試的結果對軟體的設計,代碼,系統的配置進行調整。
  • 2021 年 10 大流行軟體測試工具
    趨勢表明,團隊傾向於使用功能測試,這可以理解,但是手動測試也將保留下來。怎麼選擇測試框架?這有一些標準:Selenium 誕生於 2004 年,它已經逐漸成為 QA 工程師的必備測試工具。它在 GitHub 上有近 20000 Star,是市場上最受歡迎的功能測試工具之一。
  • 2021年10大流行軟體測試工具
    怎麼選擇測試框架?這有一些標準:Selenium 誕生於 2004 年,它已經逐漸成為 QA 工程師的必備測試工具。的單元測試工具,受非常流行的工具 NUnit 和 JUnit 啟發。>這是一款領先的 CI 工具,可以成功地運用於實時測試代碼庫變更。
  • 軟體測試工具有哪些?10款常見的軟體測試工具推薦
    軟體測試工具分為自動化軟體測試工具和測試管理工具。自動化軟體測試工具存在的價值是為了提高測試效率,用軟體來代替一些人工輸入。測試管理工具是為了復用測試用例,提高軟體測試的價值。一個好的軟體測試工具和測試管理工具結合起來使用將會使軟體測試效率大大的提高。那麼軟體測試工具有哪些呢?
  • 軟體測試工具大全 2021 版(可能是目前為止最全的測試工具集合)
    臨近年底,軟體測試工具大全經過一年的更新,終於可以發布了。
  • 最受歡迎的軟體安全性測試工具有哪些?
    之前在做 國內軟體測試現狀調查 之時,因為安全性測試工具太多,結果顯示其分布比較廣,填寫「其它」佔的比重很高(66%),為此專門做了一個調查
  • 常用的軟體測試工具大全
    LoadRunner 的測試對象是整個企業的系統,它通過模擬實際用戶的操作行為和實行實時性能監測,來幫助您更快地查找和發現問題。此外,還能支持廣範的協議和技術,為您的特殊環境提供特殊的解決方案。3.QTP是一個B/S系統的自動化功能測試的利器,軟體程序測試工具。
  • 智能模糊測試工具Peach Fuzzer官方文檔翻譯 | 內附資源
    Peach Fuzzer是一款智能模糊測試工具,  廣泛用於發現軟體中的漏洞和缺陷,它有兩種主要模式,基於生長的模糊測試和基於變異的模糊測試
  • 軟體測試之白盒測試常用工具介紹
    軟體測試之白盒測試常用工具介紹  白盒測試工具一般是針對代碼進行測試,測試中發現的缺陷可以定位到代碼級,根據測試工具原理的不同,又可以分為靜態測試工具和動態測試工具。靜態測試工具直接對代碼進行分析,不需要運行代碼,也不需要對代碼編譯連結,生成可執行文件。
  • 十個最流行的軟體測試工具!
    隨著軟體快速交付需求的增長,越來越多的企業開始通過DevOps方法加速軟體開發速度。但是,「魚」和「熊掌」不可兼得,有時候軟體的快速交付,並不能完全保證質量。而測試自動化可有效解決軟體快速交付問題,並能確保質量。尤其是隨著人工智慧和ML的出現,新一代測試工具正在以高性能、智能化測試為特色,提供服務。
  • 軟體測試常用的工具都在這裡了
    這裡有愛,有分享,有工程師們的成長日記,點藍字「軟體測試面試匯總
  • 測試工具道場2:自動化測試工具Katalon
    確實,Katalon是一款優秀的自動化測試工具。不過,它在全球的自動化測試工具排行榜中連續數年只是第二,佔據第一位的是Selenium。順便說,老牌商業工具 UFT(QTP)在該榜單上只排到了第三。Katalon Studio 是2015年才推出的一款開源的自動化測試框架,說它是自動化測試工具界的新秀,一點也不為過。
  • 模糊測試工具Radamsa的速成教程 A Crash Course to Radamsa
    通常被用於模糊測試(Fuzz)中。Radamsa 的主要賣點是它已經在實踐中發現了大量重要的錯誤。它易於編寫腳本,且易於啟動和運行。模糊測試(Fuzz)是從程序中發現意外行為的技術之一。Fuzz的想法是讓程序接受各種不同類型的輸入,看看會發生什麼。整個測試過程分為兩部分:Radamsa是第一部分的一種解決方案,而第二部分通常只需要一個簡短的shell腳本。
  • 專為滲透測試人員設計的Python工具大合集
    : 基於生成和變異的模糊測試框架(可擴展性強)antiparser : 模糊測試工具,提供了故障注入APITAOF :包含ProxyFuzz,一款中間人網絡模糊測試器untidy :通用的XML模糊測試器Powerfuzzer :高度自動化和完全可定製的
  • 軟體測試管理快速入門15-2019最佳測試管理工具
    image.png無論是捕獲需求,設計測試用例,測試執行報告,向其他團隊成員通知測試進度等,都必須使用測試管理工具。記錄這些細節時即使很小的錯誤也可能導致災難性的影響和項目的失敗。因此,為了管理所有這些細節,一些測試管理工具可以非常方便和有用。讓我們看看一些最好的測試管理和QA工具。
  • 軟體測試培訓怎麼學?軟體測試基礎技術總結!值得一看
    軟體測試無年齡限制,要求的是經驗和耐心,隨著軟體測試經驗的豐富積累,就會練就「火眼金睛」的本領,而且隨著項目經驗的不斷增長和對行業背景和深入了解,經驗和資歷會帶來更高薪資和更高地位,會越老越「值錢」。那軟體測試培訓怎麼學?軟體測試基礎技術總結!值得一看!
  • 做軟體測試卻不知道這些測試工具?利用好可以漲薪50%
    對於很多小夥伴,尤其是新手來說,剛入行時,由於接觸的工具比較少,會的工具可能也就那麼幾個,如果工作中再涉及不到使用新工具,那麼後期想要能力上、職位上有所提升,肯定會是一件非常難的事情。為了避免這種情況的發生,最好的辦法就是提前了解其他工具,利用業餘時間開始學習接觸新工具,才能有自己的發展之地。那麼,時下IT行業裡,主流的軟體測試工具有哪些呢?
  • 10款主流的軟體測試工具,你用過嗎
    隨著軟體快速交付需求的增長,越來越多的企業開始通過DevOps方法加速軟體開發速度但這樣的話,有時候就無法保證質量,所以今天小編就來給大家介紹10款主流的軟體測試工具,供大家參考。1、UFT / QTPUFT,前身為Quick Test Professional (QTP),是跨平臺測試自動化工具,能為軟體應用程式和環境提供回歸和功能測試自動化。
  • 裝機測試找不到好工具?小編常用的測試軟體大匯總!
    很多朋友會安裝一些硬體測試軟體「跑跑分」,看看自己的硬體性能是一個什麼樣的水平;但是市場上有眾多的測試軟體,質量也「參差不齊」;今天就來給大家推薦一些優秀的系統、硬體測試軟體。對英文發怵的朋友們也不用擔心,很多軟體也是有漢化版提供的。