什麼是模糊測試:詩人、情報員和預言家(Defensics)
模糊測試(Fuzzing)是一項體系完善的優秀技術,能夠定位軟體的各種漏洞,可以說是0Day漏洞的挖掘利器。它的基本目的是為目標軟體交付特定的畸形輸入,以便檢測故障。一套完整的模糊測試工具(fuzzer)包含三個組件。「詩人」(poet)會創建畸形輸入或測試案例。「情報員」(courier)為目標軟體交付測試案例。最後,「預言家」(oracle)檢測目標軟體是否存在故障。模糊測試是一款軟體漏洞管理的關鍵工具,既適合建立軟體的企業,也適合使用軟體的企業。Synopsys的Defensics產品是業界頂尖的模糊測試工具,也是心臟出血漏洞(HeartBleed)的發現者,本篇文章聊一聊模糊測試技術。
1.Testing軟體測試背景下的模糊測試
模糊測試(或稱為fuzzing)是一種軟體測試類型,它向目標軟體提供特定的畸形或意外輸入,從而觀察是否存在故障。
在本文中,我們利用軟體來表示從源代碼到可執行代碼的一切,它們運行某種處理器,其中包括操作系統、桌面應用、伺服器應用、移動應用、嵌入式系統固件、系統晶元以及更多工具。
在軟體由於意外或畸形輸入偶然發生故障時,這便屬於穩健性問題。
此外,各種不同的罪犯會提供意外或畸形輸入,主動製造軟體故障。當軟體由於蓄意攻擊發生故障時,這便屬於安全性問題。
導致人身傷害或死亡的軟體故障屬於人身安全問題。
穩健性、安全性和人身安全是相同問題——軟體缺陷的三種表現。缺陷(bug)是開發者在適當的條件下所犯的錯誤,缺陷是觸發產生的,這是軟體本不應發生的某種操作。提高穩健性、安全性和人身安全是找到和修復缺陷的關鍵。
1.1. Positive and Negative Testing正面測試和負面測試
從歷史角度來看,軟體測試一直專註於功能。軟體是否如所預期的方式運行?在功能測試中,這是一種正面測試,測試開發者會創建代碼和框架,為目標軟體提供有效的輸入,並檢查輸出是否正確。例如,如果我們按下大紅色按鈕(提供輸入),軟體是否會打開城市的電網(正確的輸出)呢?
在傳統的軟體開發方法中,軟體設計是為目標軟體提供的一組需求列表。測試團隊擁有相當明確的任務,將設計需求轉化為測試用例,以驗證軟體是否如技術規格所描述的要求運行。
功能測試無疑是重要的——在提供了有效的輸入時,目標軟體必須如預期的要求一樣運行。然而,僅經過了正面測試的軟體發布到一個充滿混亂和敵意的世界之後會很容易發生故障。
真實的世界是一片混沌。它充滿了意外的環境和錯誤的輸入。軟體必須能夠處理那些會提供異常輸入的其它軟體和人員,在意外的命令下執行操作,並解決通常意義上軟體的誤用問題。負面測試便是向軟體發送錯誤或意外輸入並檢查是否存在故障的過程。
請注意,不同的負面測試工具會為相同的測試目標產生不同的結果。每一種工具的運行原理各有不同,旨在測試目標軟體不同種類的錯誤輸入。
1.2. Software Vulnerabilities軟體漏洞
缺陷也被稱為代碼漏洞。在軟體的世界中,漏洞分為三種類型:
1. 設計漏洞屬於軟體自身設計的問題。例如,一個不需要用戶驗證的銀行網站具有嚴重的設計漏洞。通常而言,設計漏洞必須採用人工方法查找和排除,自動化工具無法解決這個層面的問題。
2. 配置漏洞是在軟體安裝所暴露出來的漏洞。例如,採用默認(出廠安裝)管理證書部署資料庫便屬於配置漏洞。儘管某些自動化工具可以協助定位配置漏洞,大量的查找和排除工作仍然必須由人工完成。
3. 代碼漏洞可歸為缺陷。採用手動代碼測試用例的正面測試可以用來查找並修復功能相關的缺陷。負面測試採用高度自動化方式,可以用於提高軟體的穩健性和安全性。
除此之外,軟體漏洞可以分為未知、零日和已知漏洞三種。
1. 未知漏洞處於休眠狀態。它還被任何人所發現。
2. 零日漏洞已經被一人、一個團隊或組織所發現。零日漏洞還未公布。受影響軟體的構建者和用戶極有可能還沒有意識到這個漏洞。沒有提供修復措施或對策。
3. 已知漏洞屬於已經公布的漏洞。負責的供應商會為其軟體發布新版本的補丁,解決已知漏洞。
儘管模糊測試通常用於定位未知代碼漏洞,但它也可以觸發由於設計不足或配置不當所導致的漏洞。
1.3. Black, White, and Gray Box Testing黑盒、白盒與灰盒測試
在黑盒測試中,測試工具對目標內部毫無了解。工具通過外部介面只與目標進行交互。
相比之下,白盒測試工具(Coverity)可以充分利用目標的源代碼搜索漏洞。白盒測試包括靜態技術(如源代碼掃描和動態測試)。在動態測試中,源代碼經過改造和重新構建,可以提高目標監控能力。
灰盒工具(Seeker)結合了黑盒與白盒測試技術。這些工具通過外部介面與目標進行交互,而且能夠充分利用源代碼提煉更多洞察。
模糊測試可以採用黑盒測試或灰盒測試。這種靈活性令模糊測試成為測試軟體極為有用的工具,這與源代碼的可用性或詳細的內部信息無關。作為黑盒測試技術,對於正在運行或計劃部署系統的任何人士想要理解何為真正的系統穩健性和可靠性,模糊測試對他們極為有用。這也是模糊測試為何成為了黑帽特工和黑客查找軟體漏洞所使用的首選技術。
即使沒有源代碼,密切監控目標軟體的狀態可以提高測試的質量。日誌文件、流程信息和資源利用率等可以提供極具價值的信息,它們在模糊測試期間可以加以利用,理解異常輸入如何影響目標系統。
如果提供了源代碼,可以利用調試工具和其它儀器使模糊測試運行灰盒技術。這可以提高測試的精度,並支持更快解析度的定位缺陷。
1.4. Static and Dynamic Testing靜態測試和動態測試
可以利用靜態測試和動態測試技術尋找漏洞。成熟的開發流程應當充分利用各種各樣的靜態測試和動態測試技術,以便將風險降低到預期水平。本節內容重點介紹通用的靜態和動態軟體測試技術,其中之一便包括模糊測試。
靜態技術無需運行目標軟體便可使用。它們包括以下部分:
1. 開發者執行的源代碼審核。他們會遍歷源代碼,尋找未知漏洞。儘管這是一種有效的方法,但是速度極為緩慢,成功率主要取決於審核人的技能。
2. 自動化源代碼分析工具可以掃描目標源代碼和編程模式的報告,其中可能存在漏洞。開發人員必須審核這次掃描的結果。
3. 靜態二進位分析工具可以掃描編譯(可執行)代碼和各種庫的報告及其相關已知漏洞。
動態測試技術在運行目標軟體時才能執行,它包括以下部分:
1. 負載測試可以為目標軟體提供大規模和眾多的輸入,以觀察是否由於業務量巨大而會出現故障。
2. 互操作性測試可以驗證兩種實施方案能夠採用指定的協議、語言或注釋進行對話。
3. 一致性測試可以驗證被測試系統及其行為符合相關規範。
4. 模糊測試可以為軟體提供異常輸入,以觀察是否會出現故障。它是一種定位未知漏洞的出色方法。
1.5. What is Fuzzing? 什麼是模糊測試
模糊測試是一個向軟體發送特定畸形輸入以觀察是否會出現故障的過程。每一個畸形輸入都是一個用例。故障可以指示所發現的缺陷,然後通過修復缺陷,以提高目標軟體的穩健性和安全性。
模糊測試工具是測試目標軟體的一種軟體。恰當的模糊測試工具由以下三個部分組成:
1. 「詩人」(poet)負責創建測試用例。「詩人」也被稱為測試用例生成 器、測試用例引擎或異常生成器(anomalizer)。
2. 「情報員」 (courier)負責將測試用例發送到目標。「情報員」也被稱為注入器、交付機制或測試驅動程序。
3. 「預言家」(oracle)確定目標是否已經發生故障。
並非所有的模糊測試工具都會實施所有這三個部分,但是要利用自動化模糊測試的能力,所有這些部分都應包括在內。
在利用模糊測試工具提高穩健性和安全性時,最終目標不僅在於發現缺陷,而且還要修復缺陷。有用的模糊測試工具必須保留記錄,生成切實可行的報告,並提供平滑修複流程能夠複製故障,以便修復這些故障。
1.6. Zooming Out: Vulnerability Management 縮小(Zooming Out):漏洞管理
模糊測試工具不會解決你的所有問題。這必須成為工具的一部分和軟體漏洞管理流程中的一部分。你可能使用到的其它軟體漏洞管理工具包括:
? Manual security reviews 手動安全性審核
? Reverse engineering 逆向工程
? Static binary code analysis 靜態二進位代碼分析
? Known vulnerability scanning 已知漏洞掃描
? Patch management tools 補丁管理工具
? Fuzz testing 模糊測試
1.7. Zooming All the Way Out: Risk Management 整體縮小(Zooming All the Way Out):風險管理
軟體漏洞管理是宏觀風險管理的組成部分。一家致力於降低或至少理解其整體風險的企業都會利用軟體漏洞管理,並結合其它風險管理技術。模糊測試是一種評估軟體穩健性和安全性的強大技術,它與風險有著直接的關係。
在理解了使用模糊測試的對象、模糊測試與其它軟體測試技術的關係以及模糊測試在漏洞管理領域的應用場合之後,如果大家感興趣,歡迎試用Defensics。
Denfensics產品從OUSPG(Oulu University SecurenProgramming Group,Oulu 大學安全規劃組) 的PROTOS 測試工具項目衍生而來。一直以來,Defensics 不斷將最新的研究成果加入到其測試技術當中,保持著高度的創新性。當傳統的測試對日新月異的網路技術發展感到無所適從時,Defensics卻能夠輕鬆面對-這種適應性源自Synopsys 獨特的Fuzzing 技術。Fuzzers 的重點不是已知的漏洞,而是針對新的安全性問題。Defensicsn產品能夠預先發現未知的0-day 漏洞。DEFENSICS?健全性和安全性測試平台基於協議的健全性和安全性測試,面向IP,車載系統, Wireless 和多媒體數據等近300種協議,旨在消滅軟體安全漏洞,幫助客戶發掘、管理和削弱未知漏洞威脅。針對特定的協議和文件格式的自動生成模糊測試用例,用於檢測被測系統處理相關協議和文件格式的健壯性。
DEFENSICS?n工具模擬引擎是業界第一款基於狀態的Fuzz 測試用例生成器。它利用深度協議模型來智能的、精確的命中目標協議中易受攻擊影響的部分,自動的生成具有廣泛覆蓋的Fuzz 測試用例
推薦閱讀: