高瑞+周彩蘭+朱榮
摘 要: 研究和分析了漏洞挖掘技術(shù),針對客戶端應(yīng)用程序提出一種基于Fuzzing的客戶端應(yīng)用程序漏洞挖掘方法,研究了網(wǎng)絡(luò)數(shù)據(jù)自動分析的方法和基于數(shù)據(jù)包內(nèi)容的Fuzzing測試的方法,解決了客戶端網(wǎng)絡(luò)數(shù)據(jù)包自動采集的問題。實(shí)驗(yàn)結(jié)果表明,該方法相比主流測試方法,可測試范圍廣,測試速度快。針對Web應(yīng)用程序提出一種基于Fuzzing的Web應(yīng)用程序漏洞挖掘方法。研究了基于腳本和測試數(shù)據(jù)集的Web應(yīng)用程序Fuzzing測試方法,解決了Web網(wǎng)絡(luò)數(shù)據(jù)采集的問題。實(shí)驗(yàn)結(jié)果表明,該方法比主流Web漏洞檢測工具檢測范圍廣,可擴(kuò)展性強(qiáng)。
關(guān)鍵詞: 漏洞挖掘; Fuzzing; 網(wǎng)絡(luò)應(yīng)用程序; Web應(yīng)用程序; 數(shù)據(jù)采集; 數(shù)據(jù)自動分析
中圖分類號: TN915.08?34; TM417 文獻(xiàn)標(biāo)識碼: 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 引 言
影響信息系統(tǒng)安全性的主要因素是應(yīng)用軟件、各種通信安全協(xié)議和構(gòu)成信息系統(tǒng)的操作系統(tǒng)等存在的漏洞。攻擊者可以利用漏洞對信息系統(tǒng)實(shí)施相應(yīng)的攻擊,并對信息系統(tǒng)造成不同程度的損害[1]。目前,絕大部分發(fā)現(xiàn)的漏洞不是來自操作系統(tǒng)、數(shù)據(jù)庫系統(tǒng),而是紛繁復(fù)雜的應(yīng)用軟件。就現(xiàn)有的技術(shù)手段來講,消除這些安全隱患的方法除了開發(fā)高質(zhì)量的應(yīng)用程序之外,比較有效的方法就是發(fā)現(xiàn)這些信息系統(tǒng)的漏洞以及相應(yīng)的攻擊技術(shù),爭取在黑客利用這些漏洞入侵之前修復(fù)應(yīng)用程序的漏洞或者做好安全防護(hù)來抵御入侵者的攻擊[2]。
1 系統(tǒng)總體設(shè)計(jì)
系統(tǒng)的總體設(shè)計(jì)基于對系統(tǒng)功能的需求分析。系統(tǒng)的具體功能需求如下。
數(shù)據(jù)收集功能:需要按正確順序收集到一次正常通信的數(shù)據(jù)包。
數(shù)據(jù)分析功能:對收集的數(shù)據(jù)包使用分析算法進(jìn)行整體分析。
數(shù)據(jù)替換功能:對分析出的數(shù)據(jù)包按Fuzzing算法進(jìn)行數(shù)據(jù)替換。
模擬通信功能:用多線程模擬客戶端,將替換后的數(shù)據(jù)模擬發(fā)送。
結(jié)果檢測功能:對通信過程進(jìn)行檢測,檢測測試結(jié)果。
結(jié)果分析功能:對測試結(jié)果進(jìn)行分析。
設(shè)計(jì)的系統(tǒng)架構(gòu)需要功能實(shí)現(xiàn)準(zhǔn)確,結(jié)果直觀,操作簡單方便,計(jì)算效率高。
系統(tǒng)總體架構(gòu)如圖1所示,按照數(shù)據(jù)收集、數(shù)據(jù)分析、數(shù)據(jù)替換、模擬通信、結(jié)果檢測和結(jié)果分析的步驟進(jìn)行,在該過程中,每一步面臨攻擊Attack,需要進(jìn)行Attack的獲取與處理。最終,借助于云進(jìn)行展示。
2 系統(tǒng)的功能原理
用多線程模擬客戶端,將變異后的數(shù)據(jù)模擬發(fā)送。對測試后的結(jié)果進(jìn)行檢測,對于普通客戶端網(wǎng)絡(luò)應(yīng)用程序,新起一個監(jiān)聽線程,監(jiān)聽服務(wù)端存活情況。對于Web應(yīng)用程序,監(jiān)控其返回的數(shù)據(jù)包,如果為http錯誤,則視為成功[3]。檢測完之后,保存所使用的數(shù)據(jù)包,對其結(jié)果進(jìn)行分析,分析所具有的漏洞類型。系統(tǒng)功能原理圖如圖2所示。
系統(tǒng)的功能結(jié)構(gòu)如圖3所示。該系統(tǒng)可以分為數(shù)據(jù)包截獲模塊,數(shù)據(jù)包展示、修改及自動分析模塊,數(shù)據(jù)Fuzzing模塊,通信模擬模塊,錯誤檢測結(jié)果分析模塊[4]。其中數(shù)據(jù)包截獲模塊為一個子程序及鉤子技術(shù)用到的動態(tài)庫。數(shù)據(jù)包展示、修改及自動分析模塊為一個帶UI的子程序。通信模擬模塊和數(shù)據(jù)檢測結(jié)果分析模塊為一個子程序,分別另起線程執(zhí)行各自操作。主程序流程如圖4所示。endprint
數(shù)據(jù)包截獲子程序,需要用戶選擇HOOK的進(jìn)程名稱,然后加載全局鉤子,注入目標(biāo)進(jìn)程[5]。數(shù)據(jù)包截獲程序界面如圖5所示。
配置文件設(shè)置程序,主要配置三個程序之間的主要運(yùn)行參數(shù)信息和信息交互文件,配置文件界面如圖6所示。
數(shù)據(jù)包展示、修改及分析子程序主要用ASCII碼及十六進(jìn)制顯示數(shù)據(jù)包,用三種方式分析數(shù)據(jù)包(多個數(shù)據(jù)包和相似數(shù)據(jù)包顯示于一處)[6]。
3 關(guān)鍵功能模塊實(shí)現(xiàn)
3.1 數(shù)據(jù)包截獲模塊
該模塊主要使用HOOK技術(shù),當(dāng)客戶端調(diào)用到socketAPI中的send函數(shù)時,就會觸發(fā)HOOK函數(shù)。具體處理步驟如下:
首先設(shè)置全局鉤子,任何進(jìn)程都將觸發(fā)這個鉤子,當(dāng)鉤子判斷出當(dāng)前進(jìn)程為指定進(jìn)程時,在當(dāng)前進(jìn)程內(nèi)安裝API鉤子。
其次,當(dāng)該程序調(diào)用send函數(shù)時,會先調(diào)用動態(tài)庫里的鉤子函數(shù),將所發(fā)送的數(shù)據(jù)保存一份到指定位置,然后再發(fā)送出去。
該過程的算法描述如下:
1) 系統(tǒng)維護(hù)鉤子鏈表;
2) 回調(diào)函數(shù)的子程序調(diào)用;
3) 子程序處理;
4) 消息傳遞;
5) 消息處理。
處理過程中的函數(shù)說明如下:
EnumProcessesInfo()函數(shù)用來顯示現(xiàn)有進(jìn)程列表。
HOOK1中HookInit函數(shù)用來安裝全局鉤子。
HookProc為全局鉤子的鉤子函數(shù)。
InjectWinsockHook函數(shù)用來安裝API鉤子。
HOOK2中的custom_send等系列函數(shù)為API鉤子的鉤子函數(shù),用來保存數(shù)據(jù)。
3.2 數(shù)據(jù)包展示及自動分析模塊
將收集到的數(shù)據(jù)包分別以ASCII碼和十六進(jìn)制進(jìn)行展示,并列出其基本屬性;自動分析數(shù)據(jù)包,并將分析結(jié)果輸出到文件,并且支持手動修改輸出結(jié)果。具體處理步驟如下:數(shù)據(jù)每次讀取都以兩種方式顯示,在分析了每個數(shù)據(jù)包之后,進(jìn)行相似數(shù)據(jù)包以及所有數(shù)據(jù)包的分析,輸出分析結(jié)果。
具體算法描述:采用單個數(shù)據(jù)包分析算法,其中,DoAnsys為數(shù)據(jù)包分析算法函數(shù)。
3.3 數(shù)據(jù)Fuzzing模塊
該模塊將收集的數(shù)據(jù)包按Fuzzing算法進(jìn)行替換。具體步驟如下:對輸入的數(shù)據(jù),按設(shè)置的算法類型進(jìn)行處理。具體算法類型有兩種:一種是普通替換,按Fuzzing算法,參照數(shù)據(jù)格式進(jìn)行替換;另一種是Web替換模式,對注入點(diǎn),按規(guī)則庫進(jìn)行替換。具體算法描述如下:
普通替換模式,使用客戶端網(wǎng)絡(luò)應(yīng)用程序Fuzzing算法。Web替換模式采用Web網(wǎng)絡(luò)應(yīng)用程序Fuzzing算法。對應(yīng)的函數(shù)說明Fuzzer類為普通替換算法模式類;WebFuzzer類為Web替換模式類。
3.4 通信模擬模塊
該模塊采用多線程技術(shù),可以模擬多客戶端進(jìn)行,更高效的測試。具體處理流程如下:首先讀取配制文件,連接指定服務(wù)端,將Fuzzing模塊輸出的數(shù)據(jù)模擬發(fā)送,每次調(diào)用Fuzzing模塊,F(xiàn)uzzing的內(nèi)容就有變更,使用多線程,可以模擬多客戶端測試。算法描述如下:使用Boost的asio庫作為通信庫,進(jìn)行網(wǎng)絡(luò)通信的連接、發(fā)送、接收等操作。其中,SimulateConnect類為通信類,初始化通信連接過程。
3.5 錯誤檢測模塊
該模塊采用三種方式:一是監(jiān)控服務(wù)端狀態(tài);二是監(jiān)控收到的數(shù)據(jù)包;三是人工監(jiān)控。對于客戶端應(yīng)用程序,采用監(jiān)控服務(wù)端狀態(tài)和人工監(jiān)控方式。對于Web服務(wù)端,采用監(jiān)控收到的數(shù)據(jù)包的方式。具體處理流程如下:當(dāng)模擬通信發(fā)送時,新起線程判斷服務(wù)端狀態(tài),如果無法連接,則視為一次Fuzzing結(jié)束,保存其結(jié)果。當(dāng)測試Web應(yīng)用程序時,監(jiān)控收到數(shù)據(jù)包,當(dāng)收到http錯誤碼時,視為一次Fuzzing結(jié)束,保存其結(jié)果。
算法采用基于數(shù)據(jù)包內(nèi)容的Fuzzing測試算法和基于腳本和測試數(shù)據(jù)集的Web應(yīng)用程序Fuzzing測試算法[7]。其中,OnEnd函數(shù)為錯誤檢測函數(shù)。
4 實(shí)驗(yàn)及分析
4.1 實(shí)驗(yàn)過程和參數(shù)說明
基于Fuzzing方法的客戶端應(yīng)用程序漏洞挖掘算法的對比實(shí)驗(yàn)過程的步驟和參數(shù)設(shè)置如下:
1) 分別設(shè)置好BFS考勤系統(tǒng)、BFS周報(bào)提交系統(tǒng)、BFS學(xué)術(shù)報(bào)告評分系統(tǒng)、局域網(wǎng)聊天室等4個測試系統(tǒng)的服務(wù)端。在BFS服務(wù)器S0003及BFS服務(wù)器S0008上安裝服務(wù)端,并使所有服務(wù)端正常啟動。
2) 在BFS學(xué)生電腦U0004上安裝BFS考勤系統(tǒng)、BFS周報(bào)提交系統(tǒng)、BFS學(xué)術(shù)報(bào)告評分系統(tǒng)、局域網(wǎng)聊天室等4個測試系統(tǒng)的客戶端。并安裝QuickTestProfessional軟件及基于Fuzzing方法的客戶端網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘算法原型系統(tǒng)。
3) 使用QuickTestProfessional軟件,對4個測試系統(tǒng)客戶端進(jìn)行測試。分別錄制其操作過程,并編寫測試腳本。然后測試他們的檢測漏洞時間、檢測漏洞數(shù)目、檢測漏洞準(zhǔn)確性等,使用QuickTest Professional軟件的測試結(jié)果如圖7所示。
由于4個軟件的操作都比較多,這里都選取他們最簡單的一次操作,如表1所示。
4) 使用基于Fuzzing方法的客戶端網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘算法原型系統(tǒng),對4個測試系統(tǒng)客戶端進(jìn)行測試。測試過程如圖8所示。這是一次簡單變異的測試,數(shù)據(jù)包每一位都從原有的值變成了0x11。變異之后發(fā)送給服務(wù)端進(jìn)行測試,如果測試成功,程序?qū)⑼瓿刹⒂涗浽敿?xì)變異數(shù)據(jù)信息。
基于Fuzzing方法的Web網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘算法的對比實(shí)驗(yàn)過程的步驟和參數(shù)設(shè)置如下:
1) 在BFS服務(wù)器S0003上架設(shè)好Apache+php+sql發(fā)服務(wù)器,在BFS服務(wù)器S0008上架設(shè)好IIS服務(wù)器。在Apache上先后加載phpGet漏洞頁面、phpPost漏洞頁面、phpCookies漏洞頁面、php正常頁面;在IIS上先后加載ASPGet漏洞頁面、ASPPost漏洞頁面、ASP正常頁面。endprint
2) 在BFS學(xué)生電腦U0004上安裝阿D注入工具和基于Fuzzing方法的Web網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘算法原型系統(tǒng)。
3) 使用阿D注入工具對每個漏洞網(wǎng)頁進(jìn)行注入測試。測試他們的檢測漏洞時間、檢測漏洞數(shù)目、檢測漏洞準(zhǔn)確率等三個方面指標(biāo)。
4) 編輯sql注入規(guī)則庫,在c:\Webfuzz\sql.txt文件中,每一行表示一條注入判斷語句。
5) 編輯sql注入腳本庫,在c:\Webfuzz\inject.txt文件中,每一行表示一條注入位置。
6) 使用基于Fuzzing方法的Web網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘算法原型系統(tǒng)對每個漏洞網(wǎng)頁進(jìn)行注入測試。
4.2 實(shí)驗(yàn)結(jié)果及分析
4.2.1 實(shí)驗(yàn)結(jié)果
分別對4個測試軟件進(jìn)行測試,得到的結(jié)果如表2所示。主要比較了QTP與試驗(yàn)原型系統(tǒng)的測試準(zhǔn)備時間、測試操作時間、操作步驟、測試漏洞數(shù)目、可檢測漏洞類型等。
表3主要比較了阿D注入工具與試驗(yàn)原型系統(tǒng)的測試準(zhǔn)備時間、測試平均時間、操作步驟、測試漏洞數(shù)目、可檢測漏洞類型等。
4.2.2 結(jié)果分析
由上述實(shí)驗(yàn)結(jié)果可以得出該試驗(yàn)原型系統(tǒng)特點(diǎn)的優(yōu)勢如下:
1) 本系統(tǒng)的客戶端網(wǎng)絡(luò)應(yīng)用程序測試功能采用直接模擬網(wǎng)絡(luò)傳輸進(jìn)行漏洞挖掘測試,采用多線程模式模擬多客戶端,測試速度比普通黑盒測試速度要快。測試范圍包括客戶操作漏洞及服務(wù)端數(shù)據(jù)處理漏洞,測試漏洞范圍廣,測試漏洞效率高。
2) 本系統(tǒng)的Web網(wǎng)絡(luò)應(yīng)用程序測試功能采用腳本庫和漏洞規(guī)則庫,檢測漏洞范圍廣,也可進(jìn)行功能擴(kuò)展。
該試驗(yàn)原型系統(tǒng)特點(diǎn)的不足之處如下:
1) 對于客戶端網(wǎng)絡(luò)應(yīng)用程序的漏洞挖掘功能,試驗(yàn)原型系統(tǒng)要比QuickTestProfessioal速度快、效率高、效果好。但是操作復(fù)雜,操作耗時較多,只適用于專業(yè)人員使用。
2) 對于Web網(wǎng)絡(luò)應(yīng)用程序的漏洞挖掘功能,試驗(yàn)原型系統(tǒng)要比阿D注入工具檢測范圍廣,檢測準(zhǔn)確率高。但是操作復(fù)雜,操作耗時較多,只適用于專業(yè)人員使用。
5 結(jié) 論
本文設(shè)計(jì)了一個基于Fuzzing的網(wǎng)絡(luò)應(yīng)用程序漏洞挖掘方法的試驗(yàn)原型系統(tǒng),并詳細(xì)闡述了該系統(tǒng)的總體構(gòu)架和交互界面,以及系統(tǒng)的關(guān)鍵模塊實(shí)現(xiàn)的方法和過程。同時與主流軟件QuickTest Professional、阿D注入工具做了對比實(shí)驗(yàn),實(shí)驗(yàn)結(jié)果表明,設(shè)計(jì)的原型系統(tǒng)能夠更為有效地對網(wǎng)絡(luò)應(yīng)用程序進(jìn)行漏洞挖掘,不過在操作復(fù)雜度、操作時間和用戶交互體驗(yàn)上還略有不足,可以在后續(xù)工作中改進(jìn)。
參考文獻(xiàn)
[1] 楊莎瀅.論軟件安全漏洞挖掘技術(shù)[J].信息安全與技術(shù),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] 李曉鵬,劉佳.淺論網(wǎng)絡(luò)計(jì)算機(jī)安全隱患及漏洞挖掘技術(shù)[J].數(shù)字技術(shù)與應(yīng)用,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] 唐萍,張國強(qiáng).基于軟件體系結(jié)構(gòu)分析的漏洞挖掘技術(shù)研究[J].現(xiàn)代電子技術(shù),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] 陳震.網(wǎng)絡(luò)計(jì)算機(jī)安全隱患及漏洞挖掘技術(shù)分析[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,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的文件格式漏洞挖掘技術(shù)[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] 張遠(yuǎn),方勇.程序流程跟蹤漏洞挖掘系統(tǒng)[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] 張開便,董振華,李喜艷.基于模糊測試的網(wǎng)絡(luò)協(xié)議漏洞挖掘研究[J].現(xiàn)代電子技術(shù),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] 達(dá)小文,王曉程,陳志浩.基于改進(jìn)模糊測試的Web應(yīng)用漏洞挖掘方法[J].計(jì)算機(jī)與現(xiàn)代化,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應(yīng)用通信過程漏洞挖掘技術(shù)[J].中國科學(xué)院大學(xué)學(xué)報(bào),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] 黃超,李毅,麻榮寬,等.網(wǎng)頁漏洞挖掘系統(tǒng)設(shè)計(jì)[J].信息網(wǎng)絡(luò)安全,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