漏洞挖掘利器-Fuzz技術介紹

模糊測試的定義

模糊測試定義爲「經過嚮應用提供非預期的輸入並監控輸出中的異常來發現軟件中的故障(faults)的方法」。 典型而言,模糊測試利用自動化或是半自動化的方法重複地嚮應用提供輸入。顯然,上述定義至關寬泛,但這個定義闡明瞭模糊測試的基本概念。安全

用於模糊測試的模糊測試器(fuzzer)分爲兩類:

一類

是基於變異(mutation-based)的模糊測試器,這一類測試器經過對已有的數據樣本進行變異來建立 測試用例;服務器

而另外一類

是基於生成(generation-based)的模糊測試器,該類測試器爲被測系統使用的協議或是文件格式建模,基於模型生成輸入並據此建立測試用例。這兩種模糊測試器各有其優缺點。工具

若是你是模糊測試的新手,能夠將模糊測試類比成如何闖進一所房子。假設你不幸丟了工做,不得不以犯罪爲生,如今你想要破門進入一所房子。 若是採用純白盒測試的方法,你須要在破門前獲得房子的全部相關信息,包括房子的藍圖(blueprints),房子的鎖的生產廠家、房子的建築材料等。顯然,白盒測試放在這種狀況下有獨特的好處,但也並不是萬無一失。應用白盒測試方法,你須要對房子進行靜態分析而不是進行運行時(實際進入房子時)檢查。例如,經過靜態分析你發現這所房子起居室的側面窗戶有一個漏洞,能夠把窗戶打碎進入房子。但你確定沒辦法預見到你進入後的事情,也許當你進入之後,發現憤怒的房主正在屋裏拿着槍等你。 另外,你能夠採用黑盒測試方法來進入這所房子。採用黑盒測試方法,你能夠在黑暗的掩護下接近房子,悄悄測試全部的門和窗戶,向房子內窺視以決定最好的突破口。可是,若是你最終選擇使用模糊測試方法進入這所房子,你能夠既不用研究房子的藍圖、也不用手工嘗試全部那些鎖,只須要選擇一種武器並讓進入房子的過程徹底自動化——這就是強制安全漏洞發現方法的威力!測試

模糊測試各階段

採用何種模糊測試方法取決於衆多因素。沒有所謂的必定正確的模糊測試方法,決 定採用何種模糊測試方法徹底依賴於被測應用、測試者擁有的技能、以及被進行模糊測 試的數據的格式。可是,不論對什麼應用進行模糊測試,不論採用何種模糊測試方法, 模糊測試執行過程都包含相同的幾個基本階段。網站

1.肯定測試目標

只有有了明確的測試目標後,咱們才能決定使用的模糊測試工具或方法。若是要在安全審計中對一個徹底由內部開發的應用進行模糊測試,測試目標的選擇必須當心謹慎。但若是是要在第三方應用中找到安全漏洞,測試目標的選擇就更加靈活。要決定第三方應用模糊測試的測試目標,首先須要參考該第三方應用的供應商曆史上曾出現過的安全漏洞。在一些典型的安全漏洞聚合網站如 SecurityFocus 18 和 Secunia 19 上能夠查找到主要軟件供應商曆史上曾出現過的安全漏洞。若是某個供應商的歷史記錄不好,極可能意味着這個供應商的代碼實踐 (code practice)能力不好,他們的產品有仍有很大可能存在未被發現的安全漏洞。除應用程序外,應用包含的特定文件或庫也能夠是測試目標。 若是須要選擇應用包含的特定文件或者庫做爲測試目標,你能夠把注意力放在多個應用程序之間共享的那些二進制代碼上。由於若是這些共享的二進制代碼中存在安全漏洞,將會有很是多的用戶受到影響,於是風險也更大。3d

2.肯定輸入向量

幾乎全部可被利用的安全漏洞都是由於應用沒有對用戶的輸入進行校驗或是進行必要的非法輸入處理。是否能找到全部的輸入向量(input vector)是模糊測試可否成功的關鍵。若是不能準確地找到輸入向量,或是不能找到預期的輸入值,模糊測試的做用就會受到很大的侷限。有些輸入向量是顯而易見的,有些則否則。尋找輸入向量的原則是:從客戶端向目標應用發送的任何東西,包括頭(headers)、文件名(file name)、環 境變量(environment variables),註冊表鍵(registry keys),以及其餘信息,都應該被看作是輸入向量。全部這些輸入向量均可能是潛在的模糊測試變量。code

3.生成模糊測試數據

一旦識別出輸入向量,就能夠依據輸入向量產生模糊測試數據了。到底是使用預先肯定的值、使用基於存在的數據經過變異生成的值、仍是使用動態生成的值依賴於被測應用及其使用的數據格式。可是,不管選擇哪一種方式,都應該使用自動化過程來生成數據。cdn

4.執行模糊測試數據

該步驟緊接上一個步驟,正是在這個步驟,「模糊測試」變成了動詞。在該步驟中,通常會向被測目標發送數據包、打開文件、或是執行被測應用。同上一個步驟同樣,這個步驟必須是自動化的。不然,咱們就不算是真正在開展模糊測試。blog

5.監視異常

一個重要但常常容易被忽略的步驟是對異常和錯誤進行監控。設想咱們在進行一次模糊測試,在測試中,咱們向被測的 Web 服務器發送了 10000 個數據包,最終致使了服務器崩潰。但服務器崩潰後,咱們卻怎麼也找不到致使服務器崩潰的數據包了。若是這種事真的發生了,咱們只能說這個測試毫無價值。模糊測試須要根據被測應用和所決定採用的模糊測試類型來設置各類形式的監視。圖片

6.斷定發現的漏洞是否可能被利用

若是在模糊測試中發現了一個錯誤,依據審計的目的,可能須要斷定這個被發現的錯誤是不是一個可被利用的安全漏洞。這種斷定過程是典型的手工過程,須要操做者具備特定的安全知識。這個步驟不必定要由模糊測試的執行者來進行,也能夠交給其餘人來進行。

這裏寫圖片描述
相關文章
相關標籤/搜索