一種基于滲透性測(cè)試的Web漏洞掃描系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
自從1990年以來(lái),人們就用Http協(xié)議進(jìn)行Web數(shù)據(jù)傳輸,Http協(xié)議是一種在TCP/IP之上的request/response型協(xié)議。多數(shù)Http數(shù)據(jù)傳輸由請(qǐng)求服務(wù)器上的某種資源開(kāi)始,通過(guò)網(wǎng)絡(luò)上的一些中介,如代理、網(wǎng)關(guān)等到達(dá)服務(wù)器,而后服務(wù)器處理請(qǐng)求并送回應(yīng)答。但是Http 1.0并不完全支持各層代理、緩沖、持續(xù)的連接以及虛擬主機(jī)等技術(shù)。Http請(qǐng)求及應(yīng)答數(shù)據(jù)包如圖2所示。
對(duì)于目標(biāo)系統(tǒng)Web漏洞掃描,使用滲透性的探測(cè)方法,滲透性探測(cè)方法主要通過(guò)更改Http請(qǐng)求信息包中的某些信息,從目標(biāo)系統(tǒng)的應(yīng)答信息包中獲取狀態(tài)信息及相關(guān)內(nèi)容以判斷目標(biāo)系統(tǒng)的輸入或軟件錯(cuò)誤,或其他一些配置信息,所以要求開(kāi)發(fā)者可以自定義Http請(qǐng)求信息包。
Libwhisker是一個(gè)全面的API,是由一些不同的與Web應(yīng)用程序相交互的功能模塊構(gòu)成的數(shù)據(jù)庫(kù),它有如下的特點(diǎn):
(1)可以與Http 0.9,1.0以及1.1相通信;
(2)可以建立持續(xù)的連接;
(3)能有效地支持代理;
(4)支持Anti-IDS技術(shù);
(5)支持SSL;
(6)支持Basic和NTLM認(rèn)證。
所以使用Libwhisker與Http通信,以通過(guò)Libwhisker來(lái)自定義Http協(xié)議信息包以及提供相應(yīng)的支持。
2.4特征信息數(shù)據(jù)庫(kù)
此漏洞掃描系統(tǒng)的核心就是特征信息數(shù)據(jù)庫(kù),特征信息數(shù)據(jù)庫(kù)保存了遠(yuǎn)程Web系統(tǒng)可能存在的各類(lèi)Web隱患和漏洞的獲取或攻擊信息或代碼。通過(guò)給遠(yuǎn)程Web系統(tǒng)發(fā)送此數(shù)據(jù)庫(kù)中的數(shù)據(jù)以獲得目標(biāo)Web系統(tǒng)的安全性。
考慮到信息的共性與個(gè)性、方便性等因素,特征數(shù)據(jù)庫(kù)信息大體分為以下幾類(lèi):
(1)Web系統(tǒng)軟件版本信息數(shù)據(jù)庫(kù):此類(lèi)信息以檢測(cè)當(dāng)前Web系統(tǒng)相應(yīng)軟件的版本隱患及其漏洞信息,以及Web系統(tǒng)相應(yīng)軟件版本最新信息,并給出相關(guān)的提示。
(2)Web系統(tǒng)授權(quán)信息:此類(lèi)信息以檢測(cè)當(dāng)前Web相應(yīng)系統(tǒng)資源的授權(quán)情況以及漏洞信息。
(3)漏洞控測(cè)信息數(shù)據(jù)庫(kù):此類(lèi)數(shù)據(jù)庫(kù)是最主要的信息數(shù)據(jù)庫(kù),包含各類(lèi)Web服務(wù)器中存在的各種隱患和漏洞探測(cè)信息。具體而言分為以下幾個(gè)大類(lèi):認(rèn)證攻擊、授權(quán)攻擊、識(shí)別“支持”文件、識(shí)別包含文件、目錄攻擊、識(shí)別錯(cuò)誤、一般的輸入驗(yàn)證、源代碼泄露、URL編碼、Unicode編碼、Base64編碼、識(shí)別請(qǐng)求方法、SQL注入、會(huì)話(huà)攻擊、目錄遍歷攻擊以及跨站點(diǎn)腳本攻擊等。
特征信息數(shù)據(jù)庫(kù)各記錄分別為:
Web服務(wù)器類(lèi)別、檢測(cè)目標(biāo)URI、預(yù)設(shè)返回信息、Http方法、描述信息。
2.5 Web漏洞掃描系統(tǒng)的實(shí)現(xiàn)
由于允許多用戶(hù)同時(shí)使用服務(wù)器端,要求針對(duì)不同目標(biāo)的掃描、檢測(cè)任務(wù)同時(shí)進(jìn)行,所以執(zhí)行掃描機(jī)制就成了服務(wù)器端設(shè)計(jì)中的首要問(wèn)題。根據(jù)服務(wù)器并行處理的理論,而且使用B/S的總體結(jié)構(gòu),考慮到開(kāi)發(fā)語(yǔ)言和開(kāi)發(fā)環(huán)境,對(duì)于掃描服務(wù)器的構(gòu)架選擇Linux平臺(tái)下的PERL開(kāi)發(fā)語(yǔ)言,使用并發(fā)服務(wù)器的模型。
并發(fā)服務(wù)器的思想是每一個(gè)客戶(hù)的請(qǐng)求并不由服務(wù)器直接處理,而是由服務(wù)器創(chuàng)建相應(yīng)的子進(jìn)程進(jìn)行處理。對(duì)于每一個(gè)子進(jìn)程而言,客戶(hù)可以設(shè)定其掃描范圍包括不只一個(gè)目標(biāo)地址,同樣由服務(wù)器創(chuàng)建相應(yīng)的子進(jìn)程(即二級(jí)進(jìn)程)來(lái)處理,以提高系統(tǒng)的掃描速度。利用Linux下的fork函數(shù)來(lái)完成一、二級(jí)進(jìn)程處理功能。其流程如圖3所示。
另外,由于PERL本身的效率問(wèn)題,為進(jìn)一步提高漏洞掃描系統(tǒng)的性能,對(duì)目標(biāo)系統(tǒng)首先利用現(xiàn)階段已經(jīng)非常成熟的工具NMAP進(jìn)行端口掃描,以獲得開(kāi)放的端口,在此基礎(chǔ)上進(jìn)行進(jìn)一步的端口掃描,以判斷在此端口上是否提供的是Web服務(wù)。
為進(jìn)一步加快掃描速度,系統(tǒng)使用掃描知識(shí)庫(kù)來(lái)保存已掃描過(guò)的主機(jī)信息,在獲取用戶(hù)請(qǐng)求以后,首先檢測(cè)知識(shí)庫(kù),若有知識(shí)庫(kù)中保存相關(guān)信息,則不進(jìn)行新的掃描工作,只需調(diào)用相關(guān)的知識(shí)庫(kù)信息返回給用戶(hù)即可。
在對(duì)端口滲透性探測(cè)的實(shí)現(xiàn)方式上,使用插件腳本的方式來(lái)進(jìn)行。用戶(hù)可以通過(guò)參數(shù)選取相應(yīng)的插件執(zhí)行,以進(jìn)行更為完整的漏洞掃描。插件可以動(dòng)態(tài)地升級(jí),其實(shí)現(xiàn)方式是每次升級(jí)插件時(shí)都將已升級(jí)的插件根據(jù)既定的順序添加在插件調(diào)用清單當(dāng)中,在插件執(zhí)行過(guò)程中,主控程序根據(jù)插件調(diào)用清單中的插件執(zhí)行順序依次調(diào)用插件。插件的執(zhí)行結(jié)果擴(kuò)充了各類(lèi)數(shù)據(jù)庫(kù)探測(cè)信息,這樣即可以增加各類(lèi)特殊的信息,進(jìn)行更為深入的掃描目標(biāo)Web系統(tǒng)以發(fā)現(xiàn)更新、更多的漏洞信息。
3結(jié)語(yǔ)
提出對(duì)Web系統(tǒng)進(jìn)行安全掃描的必要性,以及Web漏洞掃描的基本原理,在此基礎(chǔ)上提出并設(shè)計(jì)了一個(gè)完整的Web漏洞掃描系統(tǒng),介紹了它的協(xié)議基礎(chǔ)以及組成模塊。
本文設(shè)計(jì)的Web漏洞掃描系統(tǒng)已經(jīng)完全實(shí)現(xiàn),并經(jīng)過(guò)測(cè)試,該掃描器基于瀏覽器/服務(wù)器結(jié)構(gòu),可以?huà)呙鑅NIX/Windows等多種平臺(tái)下的Web系統(tǒng),與同類(lèi)產(chǎn)品相比,可以看出該掃描器具有如下特點(diǎn):利用多進(jìn)程/知識(shí)庫(kù)等技術(shù)加快了掃描速度;掃描封裝在插件中使系統(tǒng)具有可擴(kuò)展性;使用B/S結(jié)構(gòu)使得用戶(hù)操作方便,掃描結(jié)果詳盡。此掃描系統(tǒng)實(shí)現(xiàn)了Web隱患掃描和漏洞檢測(cè),并可以提供漏洞的修補(bǔ)建議,將會(huì)在很大程度上確保Web系統(tǒng)安全。
評(píng)論