正文
???隨著業界對軟件安全問題關注度的不斷提升, 漏洞挖掘也逐漸成為相關領域重點研究的內容。漏洞挖掘技術是指對未知漏洞的探索, 通過綜合應用各種技術和工具, 盡可能地找出軟件中潛在的漏洞。傳統的漏洞挖掘技術 (靜態分析技術、動態分析技術) 耗時費力, 又難以對每一個軟件進行全方位的漏洞掃描, 更重要的是即使經過嚴格測試的軟件, 在投入運行后還是會發現有漏洞存在, 這促使了對一種更為有效的漏洞挖掘方法的研究。模糊測試(fuzz testing)是一種介于完全的手工滲透測試與完全的自動化測試之間的安全性測試類型,它能夠在一項產品投入市場使用之前對潛在的安全漏洞進行分析和挖掘。本文圍繞模糊測試技術的基本理論,從模糊測試執行過程、模糊測試數據生成的方法和模糊測試的應用等方面對模糊測試進行介紹。
模糊測試是一種基于缺陷注入的自動化軟件測試技術,它使用大量半有效的數據作為應用程序的輸入,以程序是否出現異?;蝈e誤作為標志,來發現應用程序中可能存在的安全漏洞。所謂半有效的數據是指對應用程序來說,測試用例的必要標識部分和大部分數據是有效的, 但同時該數據的其他部分是無效或者漏洞攻擊的。因為的數據會被待測程序認為這是一個有效的數據,這樣應用程序就有可能發生錯誤,從而導致應用程序的崩潰或者觸發相應的安全漏洞。模糊測試是一個自動或半自動的過程,這個過程包括反復操縱目標軟件并為其提供處理數據。
模糊測試(fuzz testing)和滲透測試(penetration test)都是屬于安全測試的方法,它們既有聯系也有區別。滲透測試一般是模擬黑客惡意入侵的方式對產品進行測試,對測試者的執行力要求很高,成本高,難以被大規模應用。而模糊測試通過向應用提供非預期的輸入并監控輸出中的異常來發現軟件中缺陷,整個執行過程依靠工具進行自動化或半自動化測試。模糊測試技術具有自動化程度高、可用性好、誤報率低, 對目標程序源碼沒有依賴等優點。
模糊測試執行過程主要包含幾個基本階段:
(1)識別測試目標
????確定明確的測試目標,才能決定使用的模糊測試工具或方法。比如需要選擇應用包含的特定文件或者庫作為測試目標,需要把注意力放在多個應用程序之間共享的那些二進制代碼上。因為如果這些共享的二進制代碼中存在安全漏洞,將會有非常多的用戶受到影響,因而風險也更大。
(2)識別輸入
大部分可被利用的安全漏洞都是由于應用沒有對用戶的輸入進行校驗或是進行必要的非法輸入處理。是否能找到所有的輸入向量(Input vector)是模糊測試能否成功的關鍵。尋找輸入向量的原則是:從客戶端向目標應用發送的任何東西,包括頭(Headers)、文件名(File Name)、環境變量(Environment variables),注冊表鍵(Registry keys),以及其他信息,都可能是潛在的模糊測試變量。
(3)生成模糊測試數據
大多數模糊測試的方法是通過向目標系統不斷輸入可以誘發軟件缺陷的測試數據,因此測試數據的生成是模糊測試非常關鍵的環節,主要依賴測試目標系統的特點和數據格式進行生成。
(4)執行模糊測試數據
自動化地向被測的系統發送數據包、打開文件、或是執行被測應用的過程。這個階段一般與生成測試數據并行進行。
(5)監視異常
監控異常和錯誤是模糊測試中重要但經常容易被忽略的步驟。模糊測試需要根據被測應用和所決定采用的模糊測試類型來設置各種形式的監視。
(6)判定發現的漏洞是否可被利用
在模糊測試中發現了一個錯誤,需要判定這個被發現的錯誤是否是一個可被利用的安全漏洞。這種判定過程既可以由模糊測試的執行者來進行,也可以交給安全測試專家來進行。
模糊測試技術的應用十分廣泛, 可以測試的對象種類繁多, 比如環境變量和參數、 Web 應用程序、文件格式、網絡協議、Web 瀏覽器和物聯網系統等方面。
環境變量和參數的模糊測試屬于本地化的模糊測試, 其測試對象是命令行參數和環境變量。該測試方法是一種最簡單的模糊測試,即對命令行參數或環境變量進行惡意注入,注入成功后有可能導致程序崩潰。最常用的環境變量和參數的模糊測試工具是iFuzz,它曾成功地發現IRIX, HP-UX, QNX, MacOS X和AIX 等系統的漏洞。
Web 應用程序容易受到各多類型的漏洞攻擊, 如拒絕服務、跨站點編寫腳本、 SQL 注入和弱訪問控制等。在對 Web 應用程序進行模糊測試時要特別關注遵循 HTTP 協議規范的測試數據包。 Wfuzz是一款強大開源的Web Fuzz測試工具,它通過審計參數、登錄認證、Get/Post爆破等方式,挖掘Web應用程序的安全漏洞。
文件格式的模糊測試的測試對象包括Web 瀏覽器、郵件服務器、 office 辦公組件及媒體播放器等。文件格式模糊測試的目標是發現應用程序在解析特定文件格式時出現的漏洞。在對文件格式進行模糊測試時,待測軟件常會被很多種類型的漏洞攻擊,包括 DoS、整數處理問題、簡單的棧/堆溢出、邏輯錯誤及格式化字符串等。全球著名的安全公司Verisign iDefense開發了基于Windows平臺文件格式模糊測試工具FileFuzz和基于 UNIX 操作系統上文件格式模糊測試工具SPIKEfile,它們分別實現了基于變異的文件格式模糊測試和基于生成的文件格式模糊測試。
網絡協議的模糊測試可能是最廣泛被利用的模糊測試類別,目前存在很多不同的方法來實現對網絡協議的模糊測試。網絡協議的模糊測試如此之流行是因為它能夠發現很多高風險漏洞。其測試對象包括郵件服務器、數據庫服務器、遠程訪問服務、多媒體服務器和備份服務器等。由芬蘭Oulu大學研發、并獲得微軟資金支持的模糊測試工具PROTOS,發現了SNMP、SIP、LDAP等協議中的安全漏洞。
Web 瀏覽器容易受到多種類型的漏洞攻擊, 包括 DoS、緩沖區溢出、遠程命令執行、繞過跨越限制、繞過安全區和地址欄欺騙等。對 Web 瀏覽器進行模糊測試,常用方法包括刷新HTML頁、加載WEB頁和目標單瀏覽器對象。Mangleme是一款發現WEB 瀏覽器中HTML解析缺陷的模糊測試工具。Verisign iDefense公司開發的模糊測試工具COMRaider,實現對Web瀏覽器ActiveX控件進行模糊測試。
國內企業匡恩網絡針對物聯網系統研發出模糊測試工具,針對物聯網協議、物聯網設備和物聯網軟件系統進行測試,已經發現了西門子、施耐德、艾默生、力控等多個不同廠商多款不同型號的DCS、PLC和上位機組態軟件的數十個漏洞。
表1列舉了著名的開源模糊測試工具,其中SPIKE被商業和政府機構用于測試網絡協議,Sulley和Peach用于文件格式和網絡協議的測試。
表1.開源模糊測試工具
表1.開源模糊測試工具
工具名稱工具語言特點
SPIKEC廣泛使用,支持多類型的模糊測試,但不支持Windows系統操作
SulleyPython優秀的崩潰報告,提供自動虛擬化技術
Peach
Python擴展性強、運行速度快,最新版C#還沒完成開發,部分功能需自定義擴展
微軟提出“云端模糊測試即服務”的理念
早在2002 年微軟贊助模糊測試工具套件—PROTOS 測試套件的研究,并把模糊測試應用在Windows內核、Office和IE等產品的測試中。微軟于2005 年宣布在可信計算安全開發生命周期中將模糊測試作為安全漏洞挖掘的重要技術支持。據微軟的報告,Windows 7發現的安全漏洞約1/3是通過模糊測試技術發現的。2016年,微軟提出“云端模糊測試即服務”的理念,推出 Project Springfield項目,提供基于Azure云的模糊測試工具Springfield,該工具結合模糊測試和AI工具檢測軟件中的安全隱患。
Google 開放模糊測試服務OSS-Fuzz
Google開源能夠針對開源軟件進行持續模糊測試的OSS-Fuzz。OSS-Fuzz利用可更新的模糊測試技術與可拓展的分布式結合,為大規模的分布式模糊測試執行提供環境。在該工具開源后五個月里,這款工具在開源項目中嗅探出了超過 1000 多個 bug,其中包括 264 個潛在的安全漏洞。Google 表示,OSS-Fuzz 已經在幾個關鍵開源項目中找到了多個安全漏洞,并提交開源項目組修改。
分析
1、模糊測試的優點
與傳統漏洞挖掘方法相比, 模糊測試技術有其無法比擬的優勢。模糊測試的測試目標是二進制可執行代碼, 比基于源代碼的白盒測試適用范圍更廣;模糊測試是動態實際執行的,不存在靜態分析技術中存在的大量誤報問題;模糊測試的原理簡單,沒有大量的理論推導和公式計算,不存在符號執行技術中的路徑狀態爆炸問題;模糊測試自動化程度高,不需要逆向工程中大量的人工參與。模糊測試技術的優點使它成為一種應用范圍廣泛的漏洞挖掘技術。
2、模糊測試的局限性
(1) 對訪問控制漏洞無能為力,因為模糊測試系統無法理解程序的邏輯,所以如一些違反權限控制的安全漏洞難以發現。
(2) 受制于糟糕的設計邏輯。糟糕的設計邏輯并不會導致程序崩潰,而模糊測試發現漏洞一個主要依據是監控目標系統的異常和錯誤信息,因此模糊測試難以發現這類漏洞。
(3) 無法識別多點觸發漏洞,當前的模糊測試技術往往只能挖掘出由單個因素引起的漏洞,而對于需要多條件才能觸發的漏洞卻無能為力。
?
建議
??1、目前,Web應用中存在大量拒絕服務(Dos)、跨站腳本(XSS)、SQL注入(SQL injection)等漏洞,Web應用模糊測試不僅可以發現Web應用本身的漏洞,還可以發現Web服務器和數據庫服務器的漏洞。建議通過模糊測試的方法和工具,對Web應用進行漏洞挖掘。
??2、Android在手機的市場上占有率很高,通過模糊測試不但可以發現釣魚欺詐、拒絕服務和權限提升等Android的常見漏洞,而且可以對App的穩定性進行分析驗證。建議通過模糊測試的方法和工具,對App的Android版進行漏洞挖掘。
??3、隨著智能手機、可穿戴設備、活動追蹤器、無線網絡、智能汽車、智能家居等終端設備和網絡設備的迅速發展和普及利用,針對物聯網設備的網絡攻擊事件比例呈上升趨勢,攻擊者利用物聯網設備漏洞可入侵設備,獲取設備控制權,通過控制大量物聯網設備,黑客可以發起分布式拒絕服務網絡攻擊(DDoS)。建議利用模糊測試,對物聯網的網絡協議和設備進行漏洞挖掘。
??4、隨著業務發展和技術升級需要,會引入一些開源軟件或者免費軟件,而據Google的報告,開源軟件或者免費軟件的安全漏洞還是非常多,建議通過模糊測試的方法和工具,在引入開源軟件或者免費軟件的過程,做安全風險評估。
??5、針對業務特點和系統特征,構造模糊測試數據知識庫,提升模糊測試數據的針對性,通過人工智能優化模糊測試數據生成和自動化執行過程,構建模糊測試平臺,提供安全測試的服務給分行或者行外客戶使用。