陳春玲,張 凡,余 瀚
(南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210003)
Web應(yīng)用程序漏洞檢測(cè)系統(tǒng)設(shè)計(jì)
陳春玲,張 凡,余 瀚
(南京郵電大學(xué) 計(jì)算機(jī)學(xué)院,江蘇 南京 210003)
隨著Web技術(shù)的普及,Web漏洞對(duì)網(wǎng)絡(luò)安全的威脅越來越大。由于很多網(wǎng)站對(duì)用戶的輸入輸出內(nèi)容過濾不嚴(yán),導(dǎo)致各大網(wǎng)站中普遍存在跨站腳本漏洞,而現(xiàn)有的Web漏洞檢測(cè)方案及工具存在著效率低、漏檢率高、誤報(bào)率高等缺陷。為解決上述問題,設(shè)計(jì)并實(shí)現(xiàn)了一種Web應(yīng)用中的跨站腳本漏洞檢測(cè)系統(tǒng)。該系統(tǒng)在現(xiàn)有Web漏洞檢測(cè)工具的基礎(chǔ)上,添加了模擬用戶登陸功能和驗(yàn)證碼識(shí)別功能,解決了檢測(cè)期間需要輸入驗(yàn)證碼或用戶登陸后才可向服務(wù)器提交數(shù)據(jù)的問題,并根據(jù)現(xiàn)有Web漏洞檢測(cè)工具的不足,對(duì)系統(tǒng)的網(wǎng)絡(luò)爬蟲、漏洞檢測(cè)模塊進(jìn)行改進(jìn),同時(shí)根據(jù)XSS Filter過濾規(guī)則,構(gòu)造出更多能夠繞過XSS Filter的測(cè)試用例。實(shí)驗(yàn)結(jié)果表明,所構(gòu)建的系統(tǒng)具有低漏檢率、低誤報(bào)率和較高的效率。
跨站腳本漏洞;Web應(yīng)用;漏洞檢測(cè);網(wǎng)絡(luò)爬蟲
隨著網(wǎng)絡(luò)的運(yùn)用越來越廣泛,Web技術(shù)在人們生活的各個(gè)領(lǐng)域被廣泛利用,它使人們獲取信息更加快速、全面、便捷,使人們的生活更加舒適方便。然而它給人們的生活帶來便利的同時(shí),卻存在著許多弊端,各種網(wǎng)絡(luò)犯罪事件不斷發(fā)生。因?yàn)槟壳氨姸嗑W(wǎng)站中存在各種各樣的Web應(yīng)用漏洞,給了攻擊者可趁之機(jī)。在眾多Web漏洞中,跨站腳本漏洞(Cross Site Script,XSS)是Web應(yīng)用中最為普遍的漏洞之一,近年來,有跨站腳本攻擊的安全事件層出不窮。如2011年新浪微博受到XSS攻擊,大量用戶被自動(dòng)轉(zhuǎn)發(fā)各種微博與私信,并且對(duì)一個(gè)名為hellosamy的用戶自動(dòng)關(guān)注。2014年,百度貼吧受到XSS攻擊,在多個(gè)貼吧中,點(diǎn)擊推廣貼會(huì)自動(dòng)轉(zhuǎn)發(fā)到用戶所關(guān)注的所有貼吧中,并且導(dǎo)致吧友被封禁。
由于各種有關(guān)XSS攻擊的安全事件的發(fā)生,XSS漏洞得到了越來越多的重視。為找到Web應(yīng)用程序中的XSS漏洞,研究者們提出了一系列自動(dòng)化測(cè)試工具[1]。一般分為白盒脆弱性掃描工具[2]和黑盒Web應(yīng)用程序測(cè)試工具[3]。雖然這些工具有助于識(shí)別XSS漏洞,但依然存在各種各樣的缺陷[1]。現(xiàn)有的漏洞檢測(cè)工具Paros可以對(duì)Web應(yīng)用程序的安全性進(jìn)行檢測(cè),但其針對(duì)存儲(chǔ)型XSS漏洞的漏報(bào)率較高,并且測(cè)試用例提交模塊并沒有采用多線程,所以效率較低。針對(duì)XSS漏洞的掃描工具XSS ME只能分析單頁面且只對(duì)表單測(cè)試,忽略了可提交數(shù)據(jù)的URL。文獻(xiàn)[4]忽略了POST請(qǐng)求引起的XSS漏洞,而文獻(xiàn)[5]未對(duì)可提交數(shù)據(jù)的URL進(jìn)行檢測(cè)。文獻(xiàn)[6]研究了只針對(duì)Flash的跨站腳本漏洞。
針對(duì)上述問題,高效,低誤報(bào)率和漏檢率的XSS漏洞檢測(cè)系統(tǒng)的設(shè)計(jì)成為研究熱點(diǎn)。為此,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)高性能的針對(duì)XSS漏洞的Web應(yīng)用檢測(cè)系統(tǒng)。該系統(tǒng)可以從攻擊者的角度對(duì)Web應(yīng)用進(jìn)行模擬攻擊,監(jiān)測(cè)是否有異常情況產(chǎn)生,從而挖掘Web應(yīng)用中的XSS漏洞。
XSS跨站腳本漏洞是因?yàn)閃eb應(yīng)用程序?qū)τ脩籼峤坏臄?shù)據(jù)沒有進(jìn)行嚴(yán)格的過濾導(dǎo)致的,使攻擊者可以向Web應(yīng)用提交惡意代碼。當(dāng)普通用戶閱覽網(wǎng)站時(shí),惡意代碼會(huì)自動(dòng)執(zhí)行,攻擊者可以利用跨站腳本漏洞竊取用戶信息,進(jìn)行會(huì)話挾持、釣魚欺騙等。
根據(jù)XSS漏洞形成的原因和利用方法,可將其分為反射型XSS、存儲(chǔ)型XSS、基于DOM的XSS。
1.1反射型XSS
反射型XSS(Reflected XSS)又稱非持久型跨站腳本漏洞[7]。當(dāng)客戶端向用戶提供數(shù)據(jù)時(shí),對(duì)用戶數(shù)據(jù)沒有進(jìn)行HTML實(shí)體編碼就將其包含在頁面中,那么動(dòng)態(tài)頁面就可能被注入客戶端代碼。此類漏洞受攻擊的過程為:攻擊者編寫一個(gè)可利用此類漏洞的URL并發(fā)送郵件給用戶。用戶登錄站點(diǎn),瀏覽了攻擊者構(gòu)造的URL后,惡意代碼就會(huì)在用戶的瀏覽器中執(zhí)行,盜取用戶信息。
1.2存儲(chǔ)型XSS
存儲(chǔ)型XSS又稱持久型跨站腳本漏洞。攻擊者將惡意代碼上傳到服務(wù)器,永久地保存在網(wǎng)站中,當(dāng)用戶瀏覽這些網(wǎng)頁時(shí)就會(huì)受到攻擊,使得所有瀏覽這些網(wǎng)頁的用戶以及管理員都面臨信息被泄露的危險(xiǎn),因此存儲(chǔ)型XSS漏洞的危害極大。
1.3基于DOM的XSS
又稱本地跨站腳本漏洞,此類漏洞是服務(wù)器執(zhí)行腳本時(shí)自身產(chǎn)生的惡意內(nèi)容[8-9]。對(duì)于此類漏洞,在客戶端提交的數(shù)據(jù)如果含有惡意代碼,并且沒有經(jīng)過過濾,Web應(yīng)用程序就會(huì)受到攻擊。此類漏洞的利用過程為:供給者惡意構(gòu)造一個(gè)URL發(fā)送給用戶,用戶點(diǎn)擊此URL后,含有漏洞的頁面就會(huì)被安裝在電腦上,此頁面是在本地域所執(zhí)行的腳本中,惡意腳本可執(zhí)行用戶權(quán)限下的命令。
目前現(xiàn)有的Web漏洞檢測(cè)工具的檢測(cè)過程是通過網(wǎng)絡(luò)爬蟲對(duì)待檢測(cè)網(wǎng)站進(jìn)行頁面爬取和信息提取,得到網(wǎng)站中的URL和Form表單信息,交給漏洞檢測(cè)模塊進(jìn)行漏洞檢測(cè)。但現(xiàn)有的Web漏洞檢測(cè)工具檢測(cè)過程中常常會(huì)遇到一些問題。如:非用戶登錄狀態(tài)不能獲取頁面或提交數(shù)據(jù),需要輸入驗(yàn)證碼才能提交到服務(wù)器等情況。為解決這些問題,系統(tǒng)添加了模擬登錄模塊和驗(yàn)證碼識(shí)別輸入模塊并對(duì)網(wǎng)絡(luò)爬蟲和測(cè)試用例的生成進(jìn)行改進(jìn)。系統(tǒng)總體結(jié)構(gòu)見圖1。
圖1 系統(tǒng)總體結(jié)構(gòu)
2.1模擬登錄模塊設(shè)計(jì)及實(shí)現(xiàn)
很多網(wǎng)站的一些頁面只有在用戶登錄后才可以打開或評(píng)論、留言,這說明在非登錄狀態(tài)下,爬蟲不能獲取這些頁面,漏洞檢測(cè)模塊不能像這些頁面提交測(cè)試用例。因此系統(tǒng)添加了能夠模擬用戶登錄的模擬登錄模塊,使系統(tǒng)在登錄的狀態(tài)下進(jìn)行網(wǎng)絡(luò)爬蟲頁面爬取和攻擊數(shù)據(jù)提交,避免網(wǎng)頁爬取遺漏和數(shù)據(jù)無法提交到服務(wù)器。
模擬登錄模塊中設(shè)計(jì)了getHtml()函數(shù),向登錄頁面發(fā)送http的get請(qǐng)求,以獲取登錄頁面內(nèi)容得到表單信息,通過對(duì)標(biāo)簽的提取,獲取需要提交的參數(shù)。Userpost()函數(shù)模擬表單提交,將用戶名、密碼和其他需要提交的參數(shù)通過http的post請(qǐng)求提交到服務(wù)器。對(duì)返回結(jié)果進(jìn)行分析,判斷是否登錄成功,如果成功,存儲(chǔ)當(dāng)前cookie值。
2.2驗(yàn)證碼識(shí)別模塊
用戶向網(wǎng)頁提交數(shù)據(jù)時(shí),如留言、注冊(cè)等,往往會(huì)遇到需要輸入驗(yàn)證碼的情況,如果驗(yàn)證碼輸入不正確或?yàn)榭?,?shù)據(jù)將無法提交到服務(wù)器。漏洞檢測(cè)模塊向網(wǎng)頁提交測(cè)試用例時(shí)遇到這種情況,同樣需要提交正確的驗(yàn)證碼,因此需要驗(yàn)證碼識(shí)別模塊來獲取正確的驗(yàn)證碼。
通過http請(qǐng)求獲取html頁面信息,解析網(wǎng)頁信息,在form表單中解析出驗(yàn)證碼圖片的URL,驗(yàn)證碼識(shí)別模塊將驗(yàn)證碼圖片下載保存到本地。通過對(duì)其進(jìn)行二值化去除背景,與樣本進(jìn)行像素比較等過程獲得驗(yàn)證碼對(duì)應(yīng)的字符。
2.3網(wǎng)絡(luò)爬蟲模塊
網(wǎng)絡(luò)爬蟲模塊能夠快速、準(zhǔn)確、全面地爬取網(wǎng)頁鏈接,是整個(gè)漏洞檢測(cè)系統(tǒng)的基礎(chǔ)。網(wǎng)絡(luò)爬蟲模塊采用廣度優(yōu)先爬取策略,由待爬取URL隊(duì)列、form表單隊(duì)列、可疑URL隊(duì)列、網(wǎng)頁抓取模塊、網(wǎng)頁解析模塊、URL去重模塊組成。待爬取URL隊(duì)列存儲(chǔ)還未被解析網(wǎng)頁的URL,網(wǎng)頁抓取模塊向服務(wù)器發(fā)送http請(qǐng)求獲取網(wǎng)頁內(nèi)容,網(wǎng)頁解析模塊對(duì)獲取的網(wǎng)頁內(nèi)容進(jìn)行分析,提取有用的信息,form表單隊(duì)列存儲(chǔ)解析出的form表單信息,可疑URL隊(duì)列存儲(chǔ)可提交內(nèi)容的URL,URL去重模塊對(duì)重復(fù)的URL進(jìn)行消除。
為提高爬蟲系統(tǒng)的工作效率,采用多線程的方法對(duì)網(wǎng)頁進(jìn)行爬取,當(dāng)種子URL爬取結(jié)束后,對(duì)種子URL上的所有網(wǎng)頁鏈接同時(shí)進(jìn)行爬取。多個(gè)爬蟲同時(shí)工作,網(wǎng)絡(luò)爬蟲模塊工作的時(shí)間縮短了數(shù)倍,大大提高了網(wǎng)絡(luò)爬蟲的工作效率。
爬蟲模塊的設(shè)計(jì)思想是將待檢測(cè)網(wǎng)站看成樹形結(jié)構(gòu),網(wǎng)站中的網(wǎng)頁可看作是樹中的節(jié)點(diǎn)。開始爬取的種子URL為樹的根節(jié)點(diǎn),Depth值為1,網(wǎng)頁中所含的超鏈接的Depth值為此網(wǎng)頁的Depth+1,Depth值代表節(jié)點(diǎn)在樹中的深度,即網(wǎng)頁在網(wǎng)站中的深度。在爬蟲爬取網(wǎng)頁前,需先定義爬取的最大深度MaxDepth。網(wǎng)絡(luò)爬蟲單個(gè)線程算法的具體過程為:
(1)定義一個(gè)URL為開始爬取的種子URL,其Depth為1,將URL和Depth值存入帶爬取URL隊(duì)列。
(2)判斷待爬取URL隊(duì)列是否為空,如果不為空,就從隊(duì)列中取出一個(gè)待爬取URL及其Depth值;如果為空,結(jié)束循環(huán)。
(3)向服務(wù)器發(fā)送http請(qǐng)求,獲取網(wǎng)頁信息。
(4)網(wǎng)頁解析模塊對(duì)獲取的網(wǎng)頁內(nèi)容進(jìn)行解析,獲取表單信息和超鏈接。超鏈接提?。撼溄右话愦嬖谟?a>、、