專利名稱:一種網絡協議漏洞挖掘方法
技術領域:
本發明涉及一種網絡協議漏洞挖掘方法,特別涉及一種基于特征數據動態變異的網絡協議漏洞挖掘方法,屬于軟件工程和信息安全技術領域。
背景技術:
模糊測試作為一項著名的漏洞挖掘技術,已經能成功的在許多大型軟件中挖掘漏洞、查找bug。模糊測試的思路很簡單:生成變異數據并且輸入到需要測試的應用程序中,如果程序出現異常或者崩潰,則說明該應用程序存在一個潛在的漏洞。如今,已經有很大數量的軟件漏洞是由模糊測試的方法挖掘出來。
在網絡協議漏洞挖掘方面,也已經有許多運用模糊測試的原理,進行漏洞挖掘的方法及工具。主要有兩類,一類是針對具體網絡協議的專用測試工具,比如針對TFTP協議的fuzz工具、針對P2P協議的fuzz工具等;另一類是針對未知網絡協議的,主要通過程序自動生成測試數據,或者通過截獲原始數據進行變異生成測試數據。
目前這部分網絡協議漏洞挖掘技術均存在一些缺點,由于網絡協議一般都會設計數據有效性檢測,比如校驗算法、加密算法等,而且如今新設計的網絡協議普遍開始使用多級校驗或者動態加密算法。使得大量數據包因為無效而丟棄,導致現有的模糊測試工具對目標協議的測試覆蓋范圍很窄,效率甚低。而現在一些模糊測試方法,為了解決該問題,也僅僅復現目標協議的校驗算法,仍采用生成或者截獲數據的方式進行變異。操作過程復雜,對于復雜的校驗算法復現難度太大,覆蓋范圍很窄,并且無法檢測具有多重校驗或者動態加密算法的網絡協議。發明內容
鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分解決上述問題的針對未知網絡協議的漏洞挖掘系統和漏洞挖掘方法。特別是當未知網絡協議存在多級校驗以及動態加密算法等安全機制的情況下,本發明依然能對目標網絡協議進行有效測試。
本技術的提出,是利用采用未知網絡協議的軟件本身的客戶端,繞過其未知網絡協議的多級校驗以及動態加密等安全機制,直接針對核心部分進行模糊測試,使得漏洞挖掘的覆蓋范圍更加全面深入。
本發明所提出的一種網絡協議漏洞挖掘方法,其步驟包括:
步驟1,配置針對目標客戶端程序的正常數據輸入模塊。
步驟2,配置針對目標服務端程序的異常狀態監控模塊。
步驟3,構造一個具有特征碼的正常數據(即特征數據),使用步驟I中的模塊輸入到目標程序。
步驟4,通過劫持系統調用,掛起目標程序,掃描目標客戶端程序的內存空間,記錄特征數據的數量、偏移位置,同時記錄目標程序已執行系統調用的次數。
步驟5,重新執行目標客戶端,根據步驟4中記錄的系統調用次數,掛起目標程序,并修改所記錄偏移地址的內存數值,對該內存數值進行動態變異。
步驟6,繼續執行目標程序,通過目標客戶端程序的后續發包流程,將數據發給服務端。使用步驟2中的監控模塊進行結果監控。
步驟7,結果記錄,當達到記錄條件,記錄變異數據方式以及發送的數據包內容,并且報告一個潛在漏洞。重新執行程序,重復步驟5、6,直到5中動態變異數據的情況全部嘗試完成或者監控模塊監控到異常行為,則結束。
進一步的,上述步驟I中,在配置客戶端輸入模塊時,對控制臺程序,使用命名管道通信的方法。在Windows系統中,使用系統函數CretePipe、ReadFile、WriteFile等系統調用,將系統輸入,通過管道傳遞給目標客戶端;對瓜界面程序,采用系統消息的方法,在Windows系統中,使用SendMessage等系統調用,將系統輸入,通過消息傳遞給目標客戶端。
進一步的,上述步驟2中,在配置服務端異常狀態監控模塊時。
I)定時掃描系統進程列表,當目標進程不存在時,視為嚴重異常。
2)劫持系統異常調用,當目標程序調用系統異常時,視為物理異常。
3)對控制臺程序,采用管道通信的方法,掃描目標程序輸出;對瓜界面程序,采用系統鉤子的方法,監聽目標程序輸出。如果目標程序輸出符合異常條件,視為邏輯異常。
進一步的,上述步驟5所述進行內存動態變異時,使用內存操作函數,修改對應的偏移位置中內存數值。變異時采取偏移地址由小到大,變異數值由小到大的方式,避免重復變異。
進一步的,上述動態變異方法,是按字節長度,對內存中原始值通過某種替換,變成一個新數據。該變異共有5種可選方式。
I)簡單變異:快速的變異方法,對于需要快速檢測的固定數據位,采用簡單變異。即將該數據位直接替換為一個固定非原始值,如0x11。
2)簡單隨機變異:快速的變異方法,對于需要快速檢測的固定數據位,且不確定其原始正常值,可以采用隨機簡單替換。方法I和方法2適合具有漏洞概率較小的數據位,比如原始值全是O的數據位,一旦有漏洞也可以通過這兩類簡單替換挖掘出來。
3)普通變異:實用的變異方法,普通漏洞都能夠通過該變異挖掘出來。即將原始值分別替換為:原始值加1、原始值減1、0、255等4個數。
4)重點變異:較全面的變異方法,適用于數據值取值規律不確定的情況。將原始值替換為2~0-1到2~16-1,共17個數。
5)完全變異:最全面的變異方法,同時也是速度最慢的變異方法。對于重要性很高的數據位,可以采用完全替換方式進行變異,即替換從0,到255共256個數。
圖1為本發明的實例的漏洞挖掘系統結構圖。
圖2為本發明的實例的漏洞挖掘系統流程圖。
具體實施方式
為了更好的說明本發明的目的和優點,下面結合附圖1和附圖2,更詳細的描述本發明的具體實施方式
。本實施實例以已經開發完成的一套漏洞挖掘系統附圖1作為工作系統,該系統分為客戶端控制器10和服務端控制器20。并且以北京理工大學BFS實驗室開發的BFSERP管理系統為漏洞挖掘目標,給出詳細的實施方式和操作步驟,但本發明保護范圍不限于本實施例。
BFSERP管理系統分為客戶端12,服務端22。主要功能有學生管理、考勤、評分、周報、通知、聊天等等,其網絡通信協議是基于TCP\IP協議,具有多次校驗,并且基于AES對網絡數據進行動態密鑰的數據加密。使用本發明能夠更全面的加強其安全性能。
主要實施步驟如下:
步驟I,配置針對BFSERP客戶端12的數據輸入模塊11。
在配置客戶端輸入模塊時,需要針對客戶端不同情況,采取不同的接口方法:對于控制臺程序,使用命名管道通信的方法。在Windows系統中,使用系統函數CretePipe、ReadFile, WriteFile等系統調用,將系統輸入,通過管道傳遞給目標客戶端;對Π界面程序,采用系統消息的方法,在Windows系統中,使用SendMessage等系統調用,將系統輸入,通過消息傳遞給目標客戶端。由于本例中的BFSERP客戶端12為UI界面程序,所以采用系統消息的方法,將特征數據通過系統消息,輸入到BFSERP客戶端12中。
步驟2,配置針對BFSERP服務端22的異常狀態監控模塊21。通過步驟I和步驟2,后續循環過程不需要人工干預,完全由系統自動完成。
目標程序異常狀態一共有系統進程關閉,調用系統異常,目標程序異常輸出等三種異常現象。因此針對三種不同的異常情況,采用三種不同的異常監聽方法進行檢測。
I)定時掃描系統進程列表,當BFSERP服務端進程不存在時,視為嚴重異常。2)劫持系統異常調用,當BFSERP服務端調用系統異常時,視為物理異常。3)對控制臺程序,采用管道通信的方法,掃描目標程序輸出;對瓜界面程序,采用系統鉤子的方法,監聽目標程序輸出。由于BFSERP服務端為控制臺程序,所以采用管道通信的方法,使用CreatePipe創建命名管道進行通信,然后使用ReadFile讀取BFSERP服務端所輸出的內容。通過判斷其輸出的內容是否正常輸出,作為檢測條件,如果BFSERP服務端輸出符合異常條件,視為邏輯異常。
步驟3,構造一個具有特征碼的正常數據,比如構造一個輸入字符流為tAInT,作為輸入數據中一部分。特別指出該字符流,以二進制形式存在,并非一定要可見字符。只是為了方便手工調試,這里使用了 Ascii碼作為特征碼。將具有特征碼的特征數據,通過系統消息發送函數SendMessage,輸入到BFSERP客戶端。
步驟4,通過劫持系統調用,掛起目標程序,掃描目標客戶端程序的內存空間,記錄特征數據的數量、偏移位置,同時記錄目標程序已執行系統調用的次數。具體操作流程為:
I)設置觸發條件為執行SendMessage次數3次和拷貝特征數據次數3次。
2)采用線程注入的方法,劫持目標客戶端所使用的系統調用,在執行SendMessage接口之后,掛起目標線程。
3)使用系統的內存操作函數ReadProcessMemory掃描內存,記錄掃描結果中特征數據的數量、偏移位置信息。繼續執行目標線程,直到BFSERP客戶端進程中特征數據的數量大于或等于3個,或者步驟2中已執行的系統調用SendMessage3次。
4)將系統調用執行次數信息和特征數據的數量、偏移位置信息,發送給系統動態變異模塊13進行處理。
特別指出,具體劫持的系統調用函數選擇,以及系統調用次數和特征數據拷貝次數都與具體實例相關,本發明保護范圍不限于此。
步驟5,重新執行BFSERP客戶端,根據步驟4中記錄的SendMessage調用次數,掛起BFSERP客戶端進程。并由動態變異模塊13修改步驟4中所記錄偏移地址的內存數值,對該內存數值進行動態變異。
使用內存操作函數WriteProcessMemory,修改對應的偏移位置中內存數值。變異時采取偏移地址由小到大,變異數值由小到大的方式,避免重復變異。其中變異方法是按字節長度,對內存中原始值通過某種替換,變成一個新數據。該變異共有5種可選方式。
I)簡單變異:快速的變異方法,對于需要快速檢測的固定數據位,采用簡單變異。即將該數據位直接替換為一個固定非原始值,如0x11。
2)簡單隨機變異:快速的變異方法,對于需要快速檢測的固定數據位,且不確定其原始正常值,可以采用隨機簡單替換。方法I和方法2適合具有漏洞概率較小的數據位,比如原始值全是O的數據位,一旦有漏洞也可以通過這兩類簡單替換挖掘出來。
3)普通變異:實用的變異方法,普通漏洞都能夠通過該變異挖掘出來。即將原始值分別替換為:原始值加1、原始值減1、0、255等4個數。
4)重點變異:較全面的變異方法,適用于數據值取值規律不確定的情況。將原始值替換為2~0-1到2~16-1,共17個數。
5)完全變異:最全面的變異方法,同時也是速度最慢的變異方法。對于重要性很高的數據位,可以采用完全替換方式進行變異,即替換從0,到255共256個數。
本實例中,首先對所有數據位采用簡單隨機變異,檢測完畢后,再采用普通變異的方式重新檢測一遍。
步驟6,恢復BFSERP客戶端進程,通過目標客戶端程序的后續發包流程,將數據發送給BFSERP服務端。并使用步驟2中配置的監控模塊進行結果監控。由于客戶端控制器與服務端控制器,并不一定位于同一主機,所以客戶端控制器,需要給出變異信息給服務端控制器進行記錄。主要變異信息有,變異時間是在執行第幾次系統調用時,變異方法是通過什么方法,用哪個數據,替換哪個數據位的值,得到的結果。
步驟7,結果記錄模塊23進行結果記錄。當BFSERP服務端出現異常現象時,達到記錄條件,記錄此時變異數據方式以及發送的數據包內容,并且報告一個潛在漏洞。重新執行BFSERP客戶端程序,重復步驟5、6,直到步驟5中動態變異數據的情況全部嘗試完成或者監控模塊監控到異常行為,則結束退出。
權利要求
1.一種網絡協議的軟件漏洞挖掘方法,其特征在于,所述方法包括以下步驟: 步驟1,配置針對目標客戶端程序的正常數據輸入模塊。
步驟2,配置針對目標服務端程序的異常狀態監控模塊。
步驟3,構造一個具有特征碼的正常數據(即特征數據),使用步驟I中的模塊輸入到目標程序。
步驟4,通過劫持系統調用,掛起目標程序,掃描目標客戶端程序的內存空間,記錄特征數據的數量、偏移位置,同時記錄目標程序已執行系統調用的次數。
步驟5,重新執行目標客戶端,根據步驟4中記錄的系統調用次數,掛起目標程序,并修改所記錄偏移地址的內存數值,對該內存數值進行動態變異。
步驟6,繼續執行目標程序 ,通過目標客戶端程序的后續發包流程,將數據發給服務端。使用步驟2中的監控模塊進行結果監控。
步驟7,結果記錄,當達到記錄條件,記錄變異數據方式以及發送的數據包內容,并且報告一個潛在漏洞。重新執行程序,重復步驟5、6,直到5中動態變異數據的情況全部嘗試完成或者監控模塊監控到異常行為,則結束。
2.根據權利要求1所述的方法,其特征在于,步驟4中掛起目標客戶端程序的方法及步驟為: O設置觸發條件為,執行系統PostMessage調用次數η和拷貝特征數據次數m。
2)采用線程注入的方法,劫持目標客戶端所使用的系統調用,在執行i次系統調用之后,掛起目標線程,記錄此時已執行的系統調用的次數i。
3)使用系統的內存操作函數掃描內存,記錄掃描結果中特征數據的數量、偏移位置信息,繼續執行步驟2,直到特征數據的數量大于或等于步驟I中所設置的拷貝次數m,或者步驟2已執行的系統調用次數i大于或等于步驟I中所設置的系統調用次數η。
4)將系統調用執行次數信息和特征數據的數量、偏移位置信息,發送給系統動態變異模塊進行處理。
3.根據權利要求1所述的方法,其特征在于,步驟I中所述配置客戶端輸入模塊方法為: 1)對于控制臺程序,采用管道通信的方法,將輸入傳遞給目標客戶端; 2)對于Π界面程序,采用系統消息的方式,將輸入傳遞給目標客戶端。
4.根據權利要求1所述的方法,其特征在于,步驟2中所述配置服務端異常狀態監控模塊方法為: O定時掃描系統進程列表,當目標進程不存在時,視為嚴重異常。
2)劫持系統異常調用,當目標程序調用系統異常時,視為物理異常。
3)對控制臺程序,采用管道通信的方法,掃描目標程序輸出;對瓜界面程序,采用系統鉤子的方法,監聽目標程序輸出。如果目標程序輸出符合異常條件,視為邏輯異常。
5.根據權利要求1所述的方法,其特征在于,數據變異的時間,處于程序外部輸入之后、內部數據包封裝之前的中間動態運行時,跳過客戶端程序的輸入檢測以及異常處理過程,同時通過客戶端的加密、壓縮、校驗等流程與服務端通信。
6.根據權利要求1所述的方法,其特征在于,數據變異的時間,處于程序外部輸入之后、內部數據包封裝之前的中間動態運行時,跳過客戶端程序的輸入檢測以及異常處理過程, 同時通過客戶端的加密、壓縮、校驗等流程與服務端通信。
全文摘要
本發明公開了一種針對網絡協議的漏洞挖掘方法,其步驟包括1構造一個具有特征碼的正常數據并輸入到目標客戶端。2劫持系統調用,掛起目標客戶端進程,記錄特征數據的偏移位置。3對內存中的特征數據,進行動態變異。4繼續執行目標客戶端進程,使得變異后的特征數據通過目標客戶端的發包流程,發送給目標服務端。5監測目標服務端狀態,如果監測到異常狀態,則記錄異常和變異信息,并報告一個安全漏洞。與現有技術相比,本發明可以大大提高未知網絡協議的漏洞挖掘效率。
文檔編號H04L29/06GK103209173SQ201310075248
公開日2013年7月17日 申請日期2013年3月8日 優先權日2013年3月8日
發明者羅森林, 郭亮, 潘麗敏, 閆廣祿, 張弛 申請人:北京理工大學