模糊測試教程(什麼是模糊測試、型別、工具、示例)


模糊測試

模糊測試,通常稱為 fuzzing,是一種軟體測試方法,它涉及將不正確或隨機資料(FUZZ)注入軟體系統,以查詢編碼錯誤和安全漏洞。模糊測試涉及使用自動化或半自動化方法引入資料,並評估系統是否存在各種異常情況,例如系統崩潰或內建程式碼故障等。

威斯康星大學教授巴頓·米勒於 1989 年發明了模糊測試。模糊測試,通常稱為 fuzzing,是一種軟體測試型別,屬於安全測試的範疇。

模糊測試的目的是什麼?

  • 模糊測試通常會發現最嚴重的安全性缺陷或漏洞。

  • 模糊測試與黑盒測試、Beta 測試和其他除錯技術相結合,可以產生更有效的結果。

  • 模糊測試是一種確定軟體漏洞的技術。它是最經濟高效的測試方法之一。

  • 模糊測試是黑盒測試技術之一。它是駭客用來識別系統漏洞的最常見方法之一。

模糊測試步驟

模糊測試過程包含基本測試階段。

  • 確定要測試的系統。
  • 確定輸入
  • 生成模糊資料
  • 使用模糊資料執行測試。
  • 監控系統的效能。
  • 保留缺陷日誌。

模糊測試器的示例

基於變異的模糊測試器是修改現有資料樣本以生成新的測試資料的模糊測試器。這是最基本和最簡單的技術;它從可接受的協議樣本開始,並繼續修改每個位元組或檔案。

基於生成的模糊測試器根據模型的輸入生成新的資料。它從頭開始,根據需求生成輸入。

最成功的模糊測試器是基於協議的模糊測試器,它對正在測試的協議格式有廣泛的瞭解。理解程度由規範決定。它涉及將規範的陣列輸入到工具中,然後使用基於模型的測試生成方法遍歷規範並在資料內容、序列等中新增不規則性。此過程稱為語法測試、語法測試、健壯性測試等。模糊測試器可以從頭開始建立測試用例,也可以從有效或無效的輸入建立測試用例。

基於協議的模糊測試有兩個主要缺點

  • 在規範完成之前,測試將無法進行。

  • 許多重要的協議是已釋出協議的擴充套件。如果模糊測試基於公共規範,則新協議的測試覆蓋範圍將受到限制。

  • 向軟體傳送隨機輸入,無論是作為協議資料包還是事件,是最簡單的模糊測試方法。這種使用隨機輸入來識別各種應用程式和服務中漏洞的方法非常有效。還有其他方法可用,它們非常易於使用。我們只需要修改現有的輸入即可應用這些方法。我們可以簡單地透過交換位來更改輸入。

模糊測試檢測到的錯誤型別

模糊測試可以檢測到的兩種型別的漏洞是斷言失敗和記憶體洩漏。這種方法通常用於大型系統,其中缺陷會影響記憶體安全,這是一個嚴重缺陷。

  • 無效輸入 - 在模糊測試中,模糊測試器用於生成不正確的輸入來測試錯誤處理演算法,這對於無法控制其輸入的軟體至關重要。簡單模糊測試是一種自動化負面測試的技術。

  • 正確性錯誤 - 模糊測試還可以檢測某些型別的“正確性”問題。例如,資料庫損壞、搜尋結果不完整等。

模糊測試工具

Burp Suite、Peach Fuzzer 等線上安全工具可廣泛用於模糊測試。

  • Peach Fuzzer - 在覆蓋範圍和安全性方面,Peach Fuzzer 優於掃描程式。與只能識別已知執行緒的其他測試工具不同,Peach Fuzzer 可以發現已知和未知的執行緒。

  • Spike Proxy - 這是一個專業級工具,用於掃描 Web 應用程式以查詢應用程式級漏洞。SPIKE Proxy 包含基礎知識,例如 SQL 注入和跨站點指令碼,但它構建在完全開放的 Python 架構之上。SPIKE Proxy 是一個 Linux 和 Windows 應用程式。

  • Webscarab - 由於 Webscarab 是用 Java 編寫的,因此它可以在各種系統上執行。Webscarab 框架用於分析使用 HTTP 和 HTTPS 協議進行通訊的應用程式。例如,Webscarab 充當攔截代理,允許操作員在瀏覽器請求傳送到伺服器之前監視和修改這些請求。此外,在瀏覽器接收伺服器建立的響應之前,可以檢視和編輯它。在這種方法中,如果 Webscarab 發現任何漏洞,則會將其包含在報告問題的列表中。

  • OWASP WSFuzzer - WSFuzzer 是一個基於 Python 的 GPL 許可的應用程式。目前,已獲得 GPL 許可的軟體針對 Web 服務。當前版本的 OWASPWSFuzzer 的主要目標是基於 HTTP 的 SOAP 服務。

模糊測試的缺點

模糊測試有一些缺點 -

  • 只有模糊測試才能全面瞭解安全威脅或漏洞。

  • 在處理不會導致軟體崩潰的安全風險(例如病毒、蠕蟲、特洛伊木馬等類似威脅)時,模糊測試的效果較差。

  • 模糊測試只能發現輕微的缺陷或危險。

  • 它需要大量時間才能正常執行。

  • 使用隨機輸入設定邊界值條件很困難,但現在大多數測試都能夠透過使用基於使用者輸入的確定性演算法來應對這一挑戰。

設定模糊測試器的困難

限制開發人員更廣泛地使用模糊測試的一個因素是設定模糊測試器所需的時間。

DeMott 表示,一方面,這些技術正變得越來越使用者友好。“另一方面,設定、監控、管理和分類出現的故障仍然需要大量的經驗、安全性和編碼知識。”

Knudsen 的公司生產一個生成式模糊測試器,他表示,對於客戶來說,最難的部分是為模糊測試器制定資料模型,以便模糊測試器將其用作構建測試用例的模板。使用常見網路協議和檔案格式的客戶可以輕鬆使用現有的模板,而不是花費時間使用商業產品(其中包含大量測試套件資料庫)建立自己的模板。

“假設您正在建立物聯網裝置,例如智慧恆溫器,”Knudsen 解釋道。“它必須連線到某個地方的伺服器。”因此,您可以重用很多現有的解決方案,因為已經定義了人們可以使用的網路協議。”

但是,大多數應用程式仍然需要定製程式碼,這些程式碼必須在這些舊協議之上使用新的資料模型進行測試。

開發人員可以使用 Defensics 的軟體開發工具包 (SDK) 來構建定製資料模型,但與其他生成式模糊測試技術一樣,建立這些模型需要時間。

過去,使用模糊測試的人必須是該領域的專家。

將模糊測試整合到 DevOps 管道中也很重要,並確保正確記錄這些測試失敗。如果測試失敗但沒有記錄導致問題的輸入資料,開發人員將無法修復程式碼。

ClusterFuzz 是 Google 用於管理模糊測試基礎設施和跟蹤模糊測試器效能的工具。DeMott 說:“我最初在很多年前想出了這個名字,但我的顧問堅持要更改它。”

GitLab已收購Peach Tech和Fuzzit,這兩款面向不同開發階段的模糊測試技術將整合到該公司的持續整合和持續交付(CI/CD)工作流程中。

DeSanto表示:“我們認為存在一個空白”,暗指GitLab之前提供的安全測試工具,包括SAST和DAST。如今,我們的安全團隊使用GitLab Secure作為其主要測試工具,以檢查我們應用程式的安全性和可靠性。

GitLab的目標是讓開發人員更容易將模糊測試納入他們的開發流程。

想要使用其中一個模糊測試器的開發人員可以透過在管理CI/CD流程的YAML指令碼中新增一行程式碼來實現。

根據DeSanto的說法,“以前使用模糊測試的人必須是模糊測試專家才能使用它。”“使用GitLab進行模糊測試的好處在於,我們知道你在做什麼。你使用我們進行原始碼管理和持續整合。我們無需你手動輸入‘這是我的API的結構’,而是可以掃描你的原始碼並自動為你生成該規範。你無需嘗試理解該工具的機制即可使用它。”

如果更多模糊測試技術更容易地融入開發人員的流程,模糊測試可能會成為測試環境中更常見和更有效的組成部分。

摘要

模糊測試是一種軟體工程型別,用於識別應用程式中是否存在缺陷。模糊測試不能保證檢測到程式中的所有缺陷。但是,採用模糊測試方法可以保證應用程式的彈性和安全性,因為它有助於發現大多數常見缺陷。

更新於: 2021年10月30日

2K+ 閱讀量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告