高瑞+周彩蘭+朱榮
摘 要: 研究和分析了漏洞挖掘技術,針對客戶端應用程序提出一種基于Fuzzing的客戶端應用程序漏洞挖掘方法,研究了網絡數據自動分析的方法和基于數據包內容的Fuzzing測試的方法,解決了客戶端網絡數據包自動采集的問題。實驗結果表明,該方法相比主流測試方法,可測試范圍廣,測試速度快。針對Web應用程序提出一種基于Fuzzing的Web應用程序漏洞挖掘方法。研究了基于腳本和測試數據集的Web應用程序Fuzzing測試方法,解決了Web網絡數據采集的問題。實驗結果表明,該方法比主流Web漏洞檢測工具檢測范圍廣,可擴展性強。
關鍵詞: 漏洞挖掘; Fuzzing; 網絡應用程序; Web應用程序; 數據采集; 數據自動分析
中圖分類號: TN915.08?34; TM417 文獻標識碼: A 文章編號: 1004?373X(2018)03?0115?05
Abstract: The vulnerability mining technology is studied and analyzed. For the client application program, a Fuzzing?based vulnerability mining method of client application program is proposed, the Fuzzing testing method based on data packet content and network data automatic analysis method are studied, and the automatic acquisition problem of client network data packet is solved. The experimental results show that the proposed method has wider testing range and faster testing speed than the mainstream testing methods. A vulnerability mining method based on Fuzzing is put forward for Web application program. The script and test data set based Fuzzing test method of Web application program is studied to solve the problem of data collection in Web network. The experimental results show that the proposed method has wider testing range and stronger scalability than the mainstream Web vulnerability detection tools.
Keywords: vulnerability mining; Fuzzing; network application program; Web application program; data mining; data automatic analysis
0 引 言
影響信息系統安全性的主要因素是應用軟件、各種通信安全協議和構成信息系統的操作系統等存在的漏洞。攻擊者可以利用漏洞對信息系統實施相應的攻擊,并對信息系統造成不同程度的損害[1]。目前,絕大部分發現的漏洞不是來自操作系統、數據庫系統,而是紛繁復雜的應用軟件。就現有的技術手段來講,消除這些安全隱患的方法除了開發高質量的應用程序之外,比較有效的方法就是發現這些信息系統的漏洞以及相應的攻擊技術,爭取在黑客利用這些漏洞入侵之前修復應用程序的漏洞或者做好安全防護來抵御入侵者的攻擊[2]。
1 系統總體設計
系統的總體設計基于對系統功能的需求分析。系統的具體功能需求如下。
數據收集功能:需要按正確順序收集到一次正常通信的數據包。
數據分析功能:對收集的數據包使用分析算法進行整體分析。
數據替換功能:對分析出的數據包按Fuzzing算法進行數據替換。
模擬通信功能:用多線程模擬客戶端,將替換后的數據模擬發送。
結果檢測功能:對通信過程進行檢測,檢測測試結果。
結果分析功能:對測試結果進行分析。
設計的系統架構需要功能實現準確,結果直觀,操作簡單方便,計算效率高。
系統總體架構如圖1所示,按照數據收集、數據分析、數據替換、模擬通信、結果檢測和結果分析的步驟進行,在該過程中,每一步面臨攻擊Attack,需要進行Attack的獲取與處理。最終,借助于云進行展示。
2 系統的功能原理
用多線程模擬客戶端,將變異后的數據模擬發送。對測試后的結果進行檢測,對于普通客戶端網絡應用程序,新起一個監聽線程,監聽服務端存活情況。對于Web應用程序,監控其返回的數據包,如果為http錯誤,則視為成功[3]。檢測完之后,保存所使用的數據包,對其結果進行分析,分析所具有的漏洞類型。系統功能原理圖如圖2所示。
系統的功能結構如圖3所示。該系統可以分為數據包截獲模塊,數據包展示、修改及自動分析模塊,數據Fuzzing模塊,通信模擬模塊,錯誤檢測結果分析模塊[4]。其中數據包截獲模塊為一個子程序及鉤子技術用到的動態庫。數據包展示、修改及自動分析模塊為一個帶UI的子程序。通信模擬模塊和數據檢測結果分析模塊為一個子程序,分別另起線程執行各自操作。主程序流程如圖4所示。endprint
數據包截獲子程序,需要用戶選擇HOOK的進程名稱,然后加載全局鉤子,注入目標進程[5]。數據包截獲程序界面如圖5所示。
配置文件設置程序,主要配置三個程序之間的主要運行參數信息和信息交互文件,配置文件界面如圖6所示。
數據包展示、修改及分析子程序主要用ASCII碼及十六進制顯示數據包,用三種方式分析數據包(多個數據包和相似數據包顯示于一處)[6]。
3 關鍵功能模塊實現
3.1 數據包截獲模塊
該模塊主要使用HOOK技術,當客戶端調用到socketAPI中的send函數時,就會觸發HOOK函數。具體處理步驟如下:
首先設置全局鉤子,任何進程都將觸發這個鉤子,當鉤子判斷出當前進程為指定進程時,在當前進程內安裝API鉤子。
其次,當該程序調用send函數時,會先調用動態庫里的鉤子函數,將所發送的數據保存一份到指定位置,然后再發送出去。
該過程的算法描述如下:
1) 系統維護鉤子鏈表;
2) 回調函數的子程序調用;
3) 子程序處理;
4) 消息傳遞;
5) 消息處理。
處理過程中的函數說明如下:
EnumProcessesInfo()函數用來顯示現有進程列表。
HOOK1中HookInit函數用來安裝全局鉤子。
HookProc為全局鉤子的鉤子函數。
InjectWinsockHook函數用來安裝API鉤子。
HOOK2中的custom_send等系列函數為API鉤子的鉤子函數,用來保存數據。
3.2 數據包展示及自動分析模塊
將收集到的數據包分別以ASCII碼和十六進制進行展示,并列出其基本屬性;自動分析數據包,并將分析結果輸出到文件,并且支持手動修改輸出結果。具體處理步驟如下:數據每次讀取都以兩種方式顯示,在分析了每個數據包之后,進行相似數據包以及所有數據包的分析,輸出分析結果。
具體算法描述:采用單個數據包分析算法,其中,DoAnsys為數據包分析算法函數。
3.3 數據Fuzzing模塊
該模塊將收集的數據包按Fuzzing算法進行替換。具體步驟如下:對輸入的數據,按設置的算法類型進行處理。具體算法類型有兩種:一種是普通替換,按Fuzzing算法,參照數據格式進行替換;另一種是Web替換模式,對注入點,按規則庫進行替換。具體算法描述如下:
普通替換模式,使用客戶端網絡應用程序Fuzzing算法。Web替換模式采用Web網絡應用程序Fuzzing算法。對應的函數說明Fuzzer類為普通替換算法模式類;WebFuzzer類為Web替換模式類。
3.4 通信模擬模塊
該模塊采用多線程技術,可以模擬多客戶端進行,更高效的測試。具體處理流程如下:首先讀取配制文件,連接指定服務端,將Fuzzing模塊輸出的數據模擬發送,每次調用Fuzzing模塊,Fuzzing的內容就有變更,使用多線程,可以模擬多客戶端測試。算法描述如下:使用Boost的asio庫作為通信庫,進行網絡通信的連接、發送、接收等操作。其中,SimulateConnect類為通信類,初始化通信連接過程。
3.5 錯誤檢測模塊
該模塊采用三種方式:一是監控服務端狀態;二是監控收到的數據包;三是人工監控。對于客戶端應用程序,采用監控服務端狀態和人工監控方式。對于Web服務端,采用監控收到的數據包的方式。具體處理流程如下:當模擬通信發送時,新起線程判斷服務端狀態,如果無法連接,則視為一次Fuzzing結束,保存其結果。當測試Web應用程序時,監控收到數據包,當收到http錯誤碼時,視為一次Fuzzing結束,保存其結果。
算法采用基于數據包內容的Fuzzing測試算法和基于腳本和測試數據集的Web應用程序Fuzzing測試算法[7]。其中,OnEnd函數為錯誤檢測函數。
4 實驗及分析
4.1 實驗過程和參數說明
基于Fuzzing方法的客戶端應用程序漏洞挖掘算法的對比實驗過程的步驟和參數設置如下:
1) 分別設置好BFS考勤系統、BFS周報提交系統、BFS學術報告評分系統、局域網聊天室等4個測試系統的服務端。在BFS服務器S0003及BFS服務器S0008上安裝服務端,并使所有服務端正常啟動。
2) 在BFS學生電腦U0004上安裝BFS考勤系統、BFS周報提交系統、BFS學術報告評分系統、局域網聊天室等4個測試系統的客戶端。并安裝QuickTestProfessional軟件及基于Fuzzing方法的客戶端網絡應用程序漏洞挖掘算法原型系統。
3) 使用QuickTestProfessional軟件,對4個測試系統客戶端進行測試。分別錄制其操作過程,并編寫測試腳本。然后測試他們的檢測漏洞時間、檢測漏洞數目、檢測漏洞準確性等,使用QuickTest Professional軟件的測試結果如圖7所示。
由于4個軟件的操作都比較多,這里都選取他們最簡單的一次操作,如表1所示。
4) 使用基于Fuzzing方法的客戶端網絡應用程序漏洞挖掘算法原型系統,對4個測試系統客戶端進行測試。測試過程如圖8所示。這是一次簡單變異的測試,數據包每一位都從原有的值變成了0x11。變異之后發送給服務端進行測試,如果測試成功,程序將完成并記錄詳細變異數據信息。
基于Fuzzing方法的Web網絡應用程序漏洞挖掘算法的對比實驗過程的步驟和參數設置如下:
1) 在BFS服務器S0003上架設好Apache+php+sql發服務器,在BFS服務器S0008上架設好IIS服務器。在Apache上先后加載phpGet漏洞頁面、phpPost漏洞頁面、phpCookies漏洞頁面、php正常頁面;在IIS上先后加載ASPGet漏洞頁面、ASPPost漏洞頁面、ASP正常頁面。endprint
2) 在BFS學生電腦U0004上安裝阿D注入工具和基于Fuzzing方法的Web網絡應用程序漏洞挖掘算法原型系統。
3) 使用阿D注入工具對每個漏洞網頁進行注入測試。測試他們的檢測漏洞時間、檢測漏洞數目、檢測漏洞準確率等三個方面指標。
4) 編輯sql注入規則庫,在c:\Webfuzz\sql.txt文件中,每一行表示一條注入判斷語句。
5) 編輯sql注入腳本庫,在c:\Webfuzz\inject.txt文件中,每一行表示一條注入位置。
6) 使用基于Fuzzing方法的Web網絡應用程序漏洞挖掘算法原型系統對每個漏洞網頁進行注入測試。
4.2 實驗結果及分析
4.2.1 實驗結果
分別對4個測試軟件進行測試,得到的結果如表2所示。主要比較了QTP與試驗原型系統的測試準備時間、測試操作時間、操作步驟、測試漏洞數目、可檢測漏洞類型等。
表3主要比較了阿D注入工具與試驗原型系統的測試準備時間、測試平均時間、操作步驟、測試漏洞數目、可檢測漏洞類型等。
4.2.2 結果分析
由上述實驗結果可以得出該試驗原型系統特點的優勢如下:
1) 本系統的客戶端網絡應用程序測試功能采用直接模擬網絡傳輸進行漏洞挖掘測試,采用多線程模式模擬多客戶端,測試速度比普通黑盒測試速度要快。測試范圍包括客戶操作漏洞及服務端數據處理漏洞,測試漏洞范圍廣,測試漏洞效率高。
2) 本系統的Web網絡應用程序測試功能采用腳本庫和漏洞規則庫,檢測漏洞范圍廣,也可進行功能擴展。
該試驗原型系統特點的不足之處如下:
1) 對于客戶端網絡應用程序的漏洞挖掘功能,試驗原型系統要比QuickTestProfessioal速度快、效率高、效果好。但是操作復雜,操作耗時較多,只適用于專業人員使用。
2) 對于Web網絡應用程序的漏洞挖掘功能,試驗原型系統要比阿D注入工具檢測范圍廣,檢測準確率高。但是操作復雜,操作耗時較多,只適用于專業人員使用。
5 結 論
本文設計了一個基于Fuzzing的網絡應用程序漏洞挖掘方法的試驗原型系統,并詳細闡述了該系統的總體構架和交互界面,以及系統的關鍵模塊實現的方法和過程。同時與主流軟件QuickTest Professional、阿D注入工具做了對比實驗,實驗結果表明,設計的原型系統能夠更為有效地對網絡應用程序進行漏洞挖掘,不過在操作復雜度、操作時間和用戶交互體驗上還略有不足,可以在后續工作中改進。
參考文獻
[1] 楊莎瀅.論軟件安全漏洞挖掘技術[J].信息安全與技術,2013,4(1):32?34.
YANG Shaying. Study on software security vulnerabilities mining technology [J]. Information security and technology, 2013, 4(1): 32?34.
[2] 李曉鵬,劉佳.淺論網絡計算機安全隱患及漏洞挖掘技術[J].數字技術與應用,2014(1):182?183.
LI Xiaopeng, LIU Jia. Discussion on network computer security hidden trouble and vulnerability mining technology [J]. Digital technology & application, 2014(1): 182?183.
[3] 唐萍,張國強.基于軟件體系結構分析的漏洞挖掘技術研究[J].現代電子技術,2016,39(9):99?102.
TANG Ping, ZHANG Guoqiang. Research on vulnerability mining technology based on software architecture analysis [J]. Modern electronics technique, 2016, 39(9): 99?102.
[4] 陳震.網絡計算機安全隱患及漏洞挖掘技術分析[J].網絡安全技術與應用,2015(3):112?113.
CHEN Zhen. Network computer security risks and vulnerability mining technology analysis [J]. Network security technology & application, 2015(3): 112?113.
[5] 劉濤,王海東.基于Fuzzing的文件格式漏洞挖掘技術[J].中國科技信息,2014(9):160?162.
LIU Tao, WANG Haidong. File format vulnerability mining technology based on Fuzzing [J]. China science and technology information, 2014(9): 160?162.
[6] 張遠,方勇.程序流程跟蹤漏洞挖掘系統[J].信息安全與通信保密,2013(4):90?91.
ZHANG Yuan, FANG Yong. Program flow tracing vulnerability mining system [J]. Information security and communication security, 2013(4): 90?91.
[7] 張開便,董振華,李喜艷.基于模糊測試的網絡協議漏洞挖掘研究[J].現代電子技術,2016,39(13):84?87.
ZHANG Kaibian, DONG Zhenhua, LI Xiyan. Research on network protocol vulnerability mining based on fuzzy test [J]. Modern electronics technique, 2016, 39(13): 84?87.
[8] 達小文,王曉程,陳志浩.基于改進模糊測試的Web應用漏洞挖掘方法[J].計算機與現代化,2016(8):100?104.
DA Xiaowen, WANG Xiaocheng, CHEN Zhihao. Web vulnerability mining method based on improved fuzzy test [J]. Computer and modernization, 2016(8): 100?104.
[9] 王凱,劉奇旭,張玉清.基于Fuzzing的Android應用通信過程漏洞挖掘技術[J].中國科學院大學學報,2014,31(6):827?835.
WANG Kai, LIU Qixu, ZHANG Yuqing. Vulnerability mining technology of Android application communication process based on Fuzzing [J]. Journal of University of Chinese Academy of Sciences, 2014, 31(6): 827?835.
[10] 黃超,李毅,麻榮寬,等.網頁漏洞挖掘系統設計[J].信息網絡安全,2012(9):76?80.
HUANG Chao, LI Yi, MA Rongkuan, et al. Web vulnerability mining system design [J]. Information network security, 2012 (9): 76?80.endprint