模糊測試工具適用的時機
- 要尋找某些會被攻擊的缺陷,但不是全部
- 使用相同協定時,在多種軟體中尋找缺陷
- 迅速地測試原始碼被關閉的軟體,而不去檢視原始碼或二進碼
- 簡單地自動化
- 簡單地平行化
- 使用依賴協定與檔案類型但獨立於軟體的某些東西
模糊測試工具不適用的時機
- 尋找軟體品時的信心度
- 達成程式碼的涵蓋程度
- 取得品質的統計數據
- 測試多重條件的案例
選擇模糊測試工具的條件
- 撰寫模糊測試工具的時間與發現的缺陷之間取得最好的比例
發現缺陷數量主要依靠
- 模糊測試工具遵循協定標準的能力(確保資訊會被處理,而不會被視為無效而丟棄)
- 模糊字串/值(fuzz string/value)或payload的品質(亦即,我們正餵進應用程式的東西)
模糊字串/值的品質是關鍵,好的模糊字串/值可以觸發其他測試案例不會觸發的缺陷,一組良好的測試案例至少應該能夠包含這些缺陷
- 緩衝區溢流(buffer overflow)
- 格式字串(format string)
- 目錄橫跨(directory traversal)
- 有號/無號值(例如,負的payload尺寸,巨大的值)
- 跨網站指令稿(cross-site scripting)
- 注入(injection,例如,命令注入,SQL注入)
- 整數溢流(integer overflow)
基於區塊的模糊測試工具(block-based fuzzer)
- Spike為此類模糊測試工具
- 允許用戶建立基於區塊之模式表現協定或檔案格式的框架
- 工具將根據值的類型(協定的配置)模糊測試每個區塊
- 對於複雜的二進制協定運作得很好,多重一致性檢查(consistency check)在資料處理前先被完成
基於區塊的優點
- 容易控制你想要攻擊的東西
- 能夠根據值的類型針對特定攻擊類型(例如,指針對某種尺寸的Int攻擊)
- 對校驗和與尺寸值運作得很好
- 時間足夠的情況下,幾乎可以實做任何協定
基於區塊的缺點
- 需要花時間開發新協定的配置
- 很難涵蓋協定的所有狀況
- 逆轉檔案格式之協定非常費時
Riot
- 不支援區塊,只能運作在最簡單的協定上
- 透過在ASCII串流中檢測自然分割字元(諸如CR、@、.、&、空白、跳格、/、\)而運作,它會對兩個自然分割字元之間的字串,使用模糊字串進行替換
Riot的優點
- 很快能夠適應新協定
- 提供良好的涵蓋度
- 非常容易實作
- 可以從封包補捉物自動建立模糊測試器
- 可置於內部作為看不見的代理人
Riot的缺點
- 只能在ASCII協定上運作
- 假如有一個校驗和或尺寸存在於payload就會變得很沒用
Flipper
- 為bit-flipper的簡稱
- 主用被用來涵蓋二進制協定或檔案
- 基於以下假設:檔案標頭(包含函式呼叫編號、尺寸、引數的數量、payload的尺寸、旗標等資訊)或協定包含影響程式行為的大多數資訊
- 要保持檔案的最大一制性,bit-flipper重新發送基礎通訊,同時一次只調整一個位元
Flipper的優點
- 容易實作
- 對二進制協定或檔案有效
- 可置於內部作為代理人
Flipper的缺點
- 不易達成程式碼的涵蓋度
- 假如效驗和的值存在則不合適
- 對基於字串的協定完全無用
Inline Fault Injection(行內錯誤注入)
- 非真正的模糊測試工具,差別在於模糊測試工具將自己限制在程式進入點(entry point)(檔案、網路、或環境變數),fault Injection試圖產生隨機錯誤以便找出缺陷,或者測試程式的錯誤處理/回覆機制
- 大多數的fault Injection軟體運作在某種沙箱(sanbox)中,可能的Fault Injection從網路資料損壞(random fault Injection)到syscall輸出損壞都可
- 即使fault Injection找到缺陷,不保證有效的測試案例會確認可攻擊的條件存在,而一般的模糊測試工具則提供觸發例外(exception)或失敗(crash)的輸入資料組
- fault Injection適合搭配其他追蹤器(tracer)一起使用,作為可靠度或錯誤回覆的測試工具
Fault Injection的優點
- 如果實做的很好,可提供優於其他模糊測試工具的涵蓋度
- 快速地測試,因為它通常掛勾DLL和syscall來注入錯誤,不需要每次通過整個傳輸層(transport layer)
- 有整合的應用程式存在
Fault Injection的缺點
- 不用真實的資料流卻可以尋找缺陷
- 不是安全防護導向,而是容錯導向
- 某些fault Injection只奠基於隨機位元調整,不提供code resistance的保證
建立網路模糊測試平台
- 由客戶端、伺服器/目標、模糊測試工具組成
- 通常以代理或橋接模式在客戶端和伺服器端之間設置模糊測試工具
- 讓模糊測試工具能夠在本期程(session)和欺騙(spoof)期間收集所有的傳輸的通訊,並且讓模糊測試工具本身作為有效的客戶端
- 使用具有兩個介面的系統的士比較合適的,一個為了測試模糊工具的網路,一個為了管理和收集紀錄
- 為紀錄輸出與偵錯使用獨立的Ethernet網卡,或甚至是串列匯流排(serial bus)
客戶端
- 具有一張網卡連接到模糊測試工具的機器
- 讓所有的應用程式可以存取伺服器,好讓有效的通訊被建立
模糊測試工具
- 讓硬體能夠把來自客戶端的交通流量傳送給伺服器,因此,擁有兩張網卡
- 安裝像是網路分析器的工具(例如,tcpdump、Wireshark、tcpreplay、tcpflow、Netcat),讓它能夠捕捉、分析、重新發送交通流量
- 為攻擊加密與模糊測試工具框架準備編密工具組(諸如OpenSSL或stunnel) li>擁有一個以上的框架,以便包含多種情況(例如,基於區塊的模糊測試工具、位元調整、動態修改)
伺服器/目標
- 安裝適合的工具以便進行分析、追蹤、量化系統行為
- 需要追蹤紀錄器(tracer)(例如,ktrace或ptrace),以及錯誤監視器(fault monitor);這些工具可始收集大量的資訊時,不會在嚴重缺現出現時停止,就像偵錯器(debug)一樣
- 以手動方式檢視令人關注的狀況時,諸如SoftICE、GDB、OllyDbg、WinDbg之類的工具對第二階段的分析很有好處
- 載入debug symbol(偵錯符號),可以提升偵錯器的使用性
- 要安置在高階測試平台上的其他工具包括記憶體側寫器(memory profiler)和涵蓋度工具(coverage tool),像是Purify,TrueCoverage、BoundsChecker之類的工具,在測試平台上試圖盡可能完整地執行測試
沒有留言:
張貼留言