淺談模糊測試
簡要介紹模糊測試的概念及簡單的運用
1. 模糊測試簡介
模糊測試(fuzz testing, fuzzing) 是一種自動或半自動的軟件測試技術。其核心思想是將自動或半自動生成的隨機數據輸入到一個程序中,並監視程序異常,如崩潰,斷言(assertion)失敗,以發現可能的程序錯誤,比如內存泄漏等。其中用於輸入的隨機數據和不合法的數據被稱為“FUZZ”。
Fuzzing 技術可以追溯到1950年,當時計算機的數據主要保存在打孔卡片上,計算機程序讀取這些卡片的數據進行計算和輸出。如果碰到一些垃圾卡片或一些廢棄不適配的卡片,對應的計算機程序就可能產生錯誤和異常甚至崩潰,這樣,Bug就產生了。1988年,在威斯康星大學的一個關於研究UNIX的模糊測試的項目中,正式使用了“Fuzzing” 這個詞。
關於模糊測試的定義,有很多種說法。有人認為Fuzzing 是軟件測試中的隨機測試技術;有人認為Fuzzing 的重要組成部分是暴力測試;有人認為 Fuzzing 是一種簡單的黑盒測試技術;也有人認為Fuzzing 是黑盒測試技術中的邊界測試技術;還有人認為Fuzzing 是黑盒測試、錯誤注入、壓力測試技術的融合等。
總體來說,可以把這幾種說法結合起來,大致認為Fuzzing 是把隨機測試和邊界測試技術、協議和軟件知識、具體執行和試探性攻擊結合在一起的測試技術。
2. 模糊測試的意義
通常,我們在進行測試設計的時候,針對被測對象的特性,一般會采用錯誤猜測或其他技術設計一些異常的用例,檢驗被測對象在非正常情況下處理異常的能力,以發現被測對象中潛在的缺陷。采用這種方式進行測試設計時,會面臨一個問題,測試用例通常是不確定的、模糊的,為什么會有不確定的測試用例,可能的原因如下:
- 在有限的時間內無法窮舉所有的異常輸入。我們在進行測試設計時,一般會考慮正向測試、反向測試、邊界值、超長、超短等場景,但我們無法在有限的時間內把所有異常的輸入都遍歷一遍。
- 在有限的時間內無法想到所有可能的異常場景。由於腦力的限制,我們沒有辦法想到所有可能的異常組合,尤其是對於越來越依賴於操作系統、中間件、第三方組件的系統,這些系統中潛在的bug 或者組合后形成的bug,是我們無法預知的。
隨着軟件復雜度的增加,可選的輸入可以認為有無限個組合,所以即使是使用軟件在有限的時間內來遍歷測試也是不現實的。在應對這類問題上,模糊測試有一定的優勢。
-
Fuzzing 技術是一種自動或半自動化的技術,即軟件可自動執行相對隨機的測試用例。因為是依靠計算機軟件自動執行,所以測試效率相對人來講遠遠高出幾個數量級。比如,一個測試人員一天執行的測試用例數量,使用Fuzzing 工具可能幾分鍾就執行完了。
-
Fuzzing 技術本質是依賴隨機函數生成隨機測試用例,隨機性意味着不重復、不可預測,可能有意想不到的輸入和結果。
-
根據概率論里面的“大數定律”,只要重復的次數夠多、隨機性夠強,那些概率極低的偶然事件就必然會出現。Fuzzing 技術就是大數定律的典范應用,足夠多的測試用例和隨機性,就可以讓那些隱藏的很深很難出現的bug 成為必然現象。
-
Fuzzing 技術可以用於檢測軟件的脆弱性,這也是使其成為安全性測試常用的一種手段的原因。
當然,模糊測試只是相當於對系統的行為做了一個隨機采樣,所以在許多情況下通過了模糊測試只是說明軟件可以處理異常以避免崩潰,而不能說明該軟件的行為完全正確。這表明模糊測試更多是一種對整體質量的保證,並不能替代全面的測試或者形式化方法。作為一種粗略的可靠性度量方法,模糊測試可以提示程序哪些部件需要特殊的注意。對於這些部件可以進一步使用代碼審計,靜態分析以及代碼重寫。
3. 模糊測試的執行流程
模糊測試的執行流程一般包括以下幾個步驟:
- 明確測試對象
- 分析測試輸入
- 生成模糊數據
- 使用模糊數據進行測試
- 監控系統行為
- 記錄缺陷
4. 模糊測試在接口安全性測試中的簡單應用介紹
接口測試中,通常針對不同的輸入字段,我們會設計正向的測試用例和反向的測試用例,上述內容中也提高過,執行的效率較差。采用Fuzzing 技術進行測試時,一般借助工具來執行測試,以快速的生成測試數據,快速的進行測試,以發現安全缺陷。
以下介紹下我們常用的SoapUI 工具在進行模糊測試時的簡單使用。
我們以 http://www.httpbin.org/get?key1=foo&value1=bar 為例來進行簡單的測試執行,以查看這個工具在進行Fuzzing Scan 時創建的一些測試數據。
-
創建功能測試用例
-
功能測試用例流程調通后,創建安全測試用例
-
執行Fuzzing Scan
從工具執行時輸入的兩個參數 key1 和 value1 的值可以看出,參數值都是隨機生成的。這也體現了Fuzzing 的思想,自動生成隨機數據。
上述介紹只是這個工具關於Fuzzing Scan 的一種簡單用法,其支持更多的操作,更多的內容可以參考官網的介紹。
4. 參考
https://www.cnblogs.com/LittleHann/articles/3130946.html
https://www.freebuf.com/sectool/76861.html
http://www.sohu.com/a/218884614_723268
https://blog.csdn.net/weixin_34040079/article/details/93931030?utm_source=distribute.pc_relevant.none-task
https://blog.csdn.net/qq_33414271/article/details/101321331
https://blog.csdn.net/wcventure/article/details/82085251
https://blog.csdn.net/bopzhou/article/details/5831122