模糊測試(fuzz testing)介紹(一)

模糊測試(fuzz testing)是一類安全性測試的方法。提及安全性測試,大部分人頭腦中浮現出的多是一個標準的「黑客」場景:某個不修邊幅、臉色蒼白的年輕人,坐在黑暗的房間中,正在熟練地使用各類工具嘗試進入某個系統。這種由安全人員「模擬黑客進入系統」的測試方法的確是安全性測試中的一種有效測試手段,名叫「滲透測試」。滲透測試方法徹底依靠測試執行者的能力,能力強的「白客」可以發現有價值的安全性漏洞,而不具有很強的攻擊能力的測試者就沒法有效發現系統中的安全性漏洞。必須認可,滲透測試是一種有效的安全性測試手段,固然,前提是你要可以找到足夠好的測試執行者。html

滲透測試是一種有效的測試方法,但因爲它對執行者的能力要求過高,所以很難被大規模應用。站在測試的角度,咱們是否可以用「自動化測試」這個強有力的武器幫助下降安全性測試的門檻呢?一個容易想到的「錄製/回放」方法是:將滲透測試的執行者們的操做錄製下來,造成腳本,指望這些腳本能夠在不加修改或是稍加修改時應用在對其餘應用的安全性測試中。但因爲滲透測試的過程並不具備可重複的特色(測試執行主要依賴執行者的經驗,相似調試),這種想法在真實的安全性測試環境下徹底不可行。徹底自動化的工具一般只能發現那些可被用標準化方式發現的特定安全漏洞(如簡單的SQL注入漏洞)。安全

模糊測試是一種介於徹底的手工滲透測試與徹底的自動化測試之間的安全性測試類型。它充分利用了機器的能力:隨機生成和發送數據;同時,也嘗試將安全專家在安全性方面的經驗引入進來。從執行過程來講,模糊測試的執行過程很是簡單:服務器

  1. 測試工具經過隨機或是半隨機的方式生成大量數據;
  2. 測試工具將生成的數據發送給被測試的系統(輸入);
  3. 測試工具檢測被測系統的狀態(如是否可以響應,響應是否正確等);
  4. 根據被測系統的狀態判斷是否存在潛在的安全漏洞。

顯然,模糊測試的整個執行過程是依靠工具進行的自動化測試。可是,看起來它徹底是一個相似MonkeyTest工具的隨機數據生成器嘛,這怎麼能和安全專家的經驗結合起來呢?彆着急,咱們用一個例子來演示一下。併發

爲了簡單起見,假定咱們要測試的應用是一個C/S應用的服務端程序。這個程序運行在Unix平臺上,名字叫作TgServer。咱們惟一知道的信息就是客戶端和TgServer之間使用基於TCP/IP的自定義協議進行通信。這種狀況下,咱們該如未嘗試找到應用系統中可能的漏洞?工具

方法1:
若是咱們手頭上有TgServer的源代碼,經過代碼審查顯然能夠找到可能的漏洞。就算沒有源代碼,經過逆向工程方式,用代碼審查的方式也能夠達到找到漏洞的目的。固然,這必然要求審查者具備足夠好的技能,並且,被測應用規模越大,須要付出的成本也就越高。性能

方法2:
嘗試抓取到客戶端和服務器之間的通訊數據,根據這些數據分析出客戶端與服務器之間的通訊協議,而後根據協議的定義,自行編造數據發起攻擊,嘗試找到可能的漏洞。測試

方法2在成本上比方法1要低,並且因爲方法2關注的是協議層面的攻擊,效率會更高。可是,稍微想一下,方法2仍是存在一些問題:調試

  1. 完整的協議分析難度很大;
  2. 人工編造數據的成本很高;

在方法2的基礎上,咱們嘗試引入模糊測試的概念,因爲機器生成和發送數據的能力足夠強,所以咱們徹底能夠把生成數據的任務交給機器去完成。固然,協議的分析主要仍是依賴人工來進行,模糊測試領域內有一些自動化的協議分析手段(《模糊測試》一書中有專門的章節描述),但從效率和效果上來講,在面對複雜協議的時候,人工分析的方式更爲有效。日誌

假如根據抓取到的數據包,咱們發現被測應用使用的協議以下(|僅表示字段間的分割,不是實際的數據內容):htm

|00 01| GET | 11 | user:dennis

  • 2字節的包頭(00 01)
  • 10字節定長的命令(GET)
  • 一個1字節的數據,表示命令參數的長度
  • 不定長的命令參數

根據這些信息,使用模糊測試方法,咱們就能夠藉助通用的模糊測試工具(如Spike),用模板方式將協議描述出來,並讓模糊測試工具自動填充可變字段的內容,生成大量的測試用例併發送給TgServer。同時,經過模糊測試工具提供的功能監視TgServer,一旦TgServer出現可被識別的問題(如性能降低,再也不響應,或是返回異常數據等),咱們就能夠中止模糊測試,並經過日誌找到致使問題的請求,進而確認問題。

簡單的說,模糊測試嘗試下降安全性測試的門檻,經過半隨機方式的數據發送來找出被測系統的漏洞。顯然,測試這對被測應用越瞭解,模糊測試的生成就能越準確。但與滲透測試或是代碼審查相比,模糊測試顯然更加易於進行。並且,經過自動化工具,模糊測試能夠把安全方面的經驗積累到工具中,爲組織持續的安全性測試提供幫助。

這是本系列的第一篇,後續還將寫兩篇來介紹不一樣類型應用的模糊測試,以及經常使用的模糊測試工具。

《模糊測試——強制發掘安全漏洞的利器》這本書全面覆蓋了模糊測試這一技術。

相關文章
相關標籤/搜索