問:我聽說一個叫“模糊測試”(Fuzzing)的新技術。這種技術是不是查找出軟件漏洞的一個有效方法呢?
答:模糊測試,事實上不是一種新技術。它早在1989年就被威斯康星州的麥迪遜大學BartonMiller教授發明。由于目前人們聚焦于開發更加安全的軟件,模糊測試才被更加廣泛應用并成為公認的代碼測試方法。
在軟件測試過程中,一個程序被隨機產生的數據大量驗證,稱為模糊測試。假如一個程序在應對任一的這類數據上失效,開始出現沖突、鎖住、消耗大量內存或者產生不可控制的程序錯誤,開發者就知道代碼中某處出現了bug。因此這個缺陷可能在程序發布或者配置前被定位并予以矯正,從而使可能的程序漏洞不出現在程序最終發行版本中。軟件測試被頻繁地用于測試緩沖區溢出漏洞,而這種溢出在輸入字符的數量超出可用的緩沖區空間時候發生。
軟件程序有許多種的輸入方式,比如鼠標、鍵盤和觸摸屏。另外還包括調用其它程序或植入實用系統中的控制器數據。模糊測試可以有效地找出漏洞,是由于輸入一個程序的數據是隨機的,因此不會被任何的關于軟件應該如何運行的偏見所束縛。當人們自己測試軟件的時候,可能作出軟件被如何使用的假設,而造成只對特定的輸入進行測試。
一個徹底的模糊測試是對有效數據和隨機數據的聯合調試。有效數據測試防止程序在抵達一個欠缺的代碼塊前出現拒絕信息。
你必須意識到,雖然通過一個模糊測試,這并不意味著一個程序完全沒有bug。軟件測試僅僅是隨機測試的模擬,是程序行為的一個有限樣本的測試。測試可能只展現那些軟件可以處理的沒有沖突的例外。還有,模糊測試不能測試出開發中出現的邏輯錯誤。
模糊測試一個大的優點在于它的成本效率;測試通常是自動化的,而且容易配置。模糊測試是一種有效的軟件測試方法,但它也只是眾多軟件測試方法中的一種。靜態分析、相互評價和安全代碼方法學都是安全軟件開發的方法。
原文轉自:http://www.anti-gravitydesign.com