相關(guān)鏈接: 中國(guó)安全網(wǎng) 中國(guó)質(zhì)量網(wǎng) 中國(guó)論文網(wǎng) 中國(guó)資訊網(wǎng)
柳毅.洪俊斌
(廣東工業(yè)大學(xué)計(jì)算機(jī)學(xué)院,廣東廣州510006)
摘 要:xss漏洞是攻擊Web應(yīng)用程序、獲取用戶(hù)隱私數(shù)據(jù)的常見(jiàn)漏洞。傳統(tǒng)的xss漏洞檢測(cè)工具并沒(méi)有對(duì)AJAX Web應(yīng)用程序進(jìn)行針對(duì)性的檢測(cè),在檢測(cè)精度方面與實(shí)際情況存在巨大差距。針對(duì)這種情況,對(duì)AJAX技術(shù)下XSS漏洞的特點(diǎn)進(jìn)行了分析,提出了一種基于網(wǎng)絡(luò)爬蟲(chóng)與頁(yè)面代碼行為的動(dòng)態(tài)檢測(cè)方法。實(shí)驗(yàn)結(jié)果表明,提出的方法在節(jié)省人力、時(shí)間成本與漏洞檢測(cè)方面有較好的表現(xiàn)。
關(guān)鍵詞:xss漏洞;網(wǎng)絡(luò)爬蟲(chóng);漏洞檢測(cè);AJAX Web應(yīng)用
中圖分類(lèi)號(hào):TP393.08 doi: 10.11959/j.issn.1000-0801.2016068
1引言
隨著Web 2.0時(shí)代的到來(lái),Web程序告別了沉重的請(qǐng)求一返回的模式,采用了更輕便的局部刷新模式,提高了用戶(hù)體驗(yàn)。其中,AJAX(asynchronous JavaScript and XML,異步JavaScript和XML)…技術(shù)在Web 2.0中占據(jù)了主導(dǎo)地位。然而AJAX技術(shù)將一部分邏輯處理從服務(wù)器端轉(zhuǎn)移到客戶(hù)端,暴露了更多的接口,增加了許多針對(duì)Web應(yīng)用程序的安全威脅,其中嚴(yán)重程度最高的是跨站腳本(cross-site script,又稱(chēng)XSS)攻擊。從國(guó)際開(kāi)源安全組織(Open Web Application Security Project,OWASP)公布的10種最嚴(yán)重的Web應(yīng)用程序安全漏洞排行榜可知,跨站腳本攻擊一直處于前三的位置。Web 2.0時(shí)代后,跨站腳本攻擊與AJAX技術(shù)相結(jié)合,出現(xiàn)了新的特點(diǎn),可在用戶(hù)毫不知情的情況下進(jìn)行攻擊,威脅性更大。就目前而言,采取較多的行為都是被動(dòng)的防范措施,比如防火墻等。這樣做明顯忽略了應(yīng)用程序級(jí)別的安全問(wèn)題,使之在高層面缺乏有效的防范方式。對(duì)于Web應(yīng)用程序級(jí)別的安全,雖然有很多學(xué)者進(jìn)行了研究,但大多數(shù)還停留在Web 1.0時(shí)代,并沒(méi)有對(duì)異步傳輸進(jìn)行安全性檢測(cè)。雖然對(duì)AJAX有所提及,但并沒(méi)有進(jìn)行針對(duì)性的研究。所以針對(duì)大量使用AJAX技術(shù)的Web應(yīng)用程序,設(shè)計(jì)相關(guān)的XSS漏洞檢測(cè)工具是十分必要的。
本文提出了一種基于網(wǎng)絡(luò)爬蟲(chóng)與頁(yè)面代碼行為的動(dòng)態(tài)檢測(cè)方法對(duì)AJAX Web應(yīng)用程序進(jìn)行XSS漏洞檢測(cè)。針對(duì)用戶(hù)提交的URL(uniform resource locator.統(tǒng)一資源定位符)進(jìn)行爬蟲(chóng),提取數(shù)據(jù)輸入點(diǎn),完成錯(cuò)誤數(shù)據(jù)注入,再通過(guò)模擬攻擊對(duì)服務(wù)器進(jìn)行請(qǐng)求,對(duì)返回的頁(yè)面代碼行為進(jìn)行跟蹤與分析,得出XSS漏洞威脅。實(shí)驗(yàn)證明該方法效率較高,漏報(bào)率較低。
2 XSS漏洞特征及檢測(cè)工具分析
2.1 XSS漏洞特征分析
現(xiàn)有的XSS漏洞類(lèi)型可分為3種基本類(lèi)型:反射型XSS攻擊(reflected/non-persistent XSS)、存儲(chǔ)型XSS攻擊(stored/persistent XSS)和基于DOM (document objectmodel)的XSS攻擊(DOM-based XSS)。反射型XSS攻擊方式是通過(guò)服務(wù)器的錯(cuò)誤信息或檢索結(jié)果等手段將注入代碼“反射”回來(lái)。攻擊者構(gòu)造包含注入代碼的惡意鏈接,并通過(guò)某種方式將此惡意鏈接發(fā)送給受害者,受害者點(diǎn)擊訪問(wèn)后,注入腳本便會(huì)將服務(wù)器返回的數(shù)據(jù)傳輸?shù)焦粽叩姆⻊?wù)器上:存儲(chǔ)型XSS與反射型XSS最大的不同在于,惡意腳本將被永久性地存放在目標(biāo)服務(wù)器的數(shù)據(jù)庫(kù)中,瀏覽者在訪問(wèn)時(shí)惡意腳本便會(huì)執(zhí)行,使瀏覽者受到攻擊:在基于DOM的XSS這類(lèi)攻擊方式中,攻擊者是通過(guò)以下過(guò)程執(zhí)行JavaScript的:攻擊者設(shè)計(jì)有注入JavaScript代碼的惡意URL,并發(fā)送給用戶(hù),用戶(hù)進(jìn)行點(diǎn)擊訪問(wèn),瀏覽器會(huì)將返回的HTML(hypertext markup language.超文本標(biāo)記語(yǔ)言)代碼解析成DOM樹(shù)結(jié)構(gòu),在這過(guò)程中,注入代碼便會(huì)被解析出來(lái),從而導(dǎo)致基于DOM的XSS攻擊出現(xiàn),攻擊者就有可能獲取受害者電腦的重要權(quán)限。
2.2 XSS漏洞的檢測(cè)方法及工具
高效率的爬蟲(chóng)算法能夠在短時(shí)間內(nèi)找到數(shù)據(jù)輸入點(diǎn),并且根據(jù)數(shù)據(jù)輸入點(diǎn)的類(lèi)型,從數(shù)據(jù)庫(kù)中獲取錯(cuò)誤注入數(shù)據(jù),組成有攻擊性的get/post請(qǐng)求注入系統(tǒng)中,如果產(chǎn)生與從數(shù)據(jù)庫(kù)中獲取的注入數(shù)據(jù)相對(duì)應(yīng)的預(yù)期攻擊行為,就可以斷定Web應(yīng)用程序中存在XSS漏洞。在錯(cuò)誤數(shù)據(jù)進(jìn)行注入的同時(shí),要注意對(duì)程序中的合法過(guò)濾器進(jìn)行規(guī)避。目前有很多XSS漏洞掃描的工具,比如Paros和X5S,它們并沒(méi)有對(duì)AJAX技術(shù)下產(chǎn)生的XSS漏洞進(jìn)行深入分析。針對(duì)這種情況,提出了一種基于網(wǎng)絡(luò)爬蟲(chóng)與頁(yè)面代碼行為的動(dòng)態(tài)檢測(cè)方法來(lái)實(shí)現(xiàn)對(duì)AJAX Web應(yīng)用程序的XSS漏洞進(jìn)行檢測(cè)。
3 XSS漏洞定位檢測(cè)方法
3.1 抓取數(shù)據(jù)輸入點(diǎn)
抓取數(shù)據(jù)輸入點(diǎn)的步驟如下:
(1)爬蟲(chóng)對(duì)Web頁(yè)面的HTML代碼進(jìn)行掃描得到靜態(tài)URL;
(2)對(duì)頁(yè)面代碼中的JavaScript腳本和JavaScript所添加的事件進(jìn)行提。
(3)將提取到的JavaScript代碼傳遞給JavaScript引擎編譯執(zhí)行,獲取動(dòng)態(tài)URL;
(4)存儲(chǔ)獲取到的URL,采用散列表存儲(chǔ)方式高效率地將重復(fù)URL去除。
散列表中使用了雙重散列算法來(lái)解決沖突,其探測(cè)地址的方法如下:
二度散列的h(URL,i)的值有可能會(huì)大于hashcapacity,所以對(duì)h(URL,i)進(jìn)行模運(yùn)算,最終計(jì)算的散列地址為h(URL,i)% hashca pacity。
爬蟲(chóng)系統(tǒng)分為下載與分析兩個(gè)模塊,使用多線(xiàn)程同時(shí)運(yùn)行兩個(gè)模塊以提高爬蟲(chóng)效率,如果硬件條件高,可分別在各個(gè)模塊中再次使用多線(xiàn)程進(jìn)行下載與分析。圖1是爬蟲(chóng)系統(tǒng)運(yùn)行的流程。
3.2錯(cuò)誤數(shù)據(jù)注入
錯(cuò)誤數(shù)據(jù)注入的步驟如下:
(1)從爬蟲(chóng)系統(tǒng)的散列表中,依次取出鏈接地址進(jìn)行請(qǐng)求,并分析得到頁(yè)面代碼;
(2)提取代碼中所有的表單元素;
(3)根據(jù)表單屬性(get/post)、頁(yè)面代碼和輸入?yún)^(qū)域的結(jié)構(gòu)對(duì)象計(jì)算出散列值;
(4)根據(jù)散列值關(guān)聯(lián)數(shù)據(jù)庫(kù)中自定義注入代碼進(jìn)行拼接,對(duì)服務(wù)器發(fā)出請(qǐng)求。
圖2是錯(cuò)誤數(shù)據(jù)注入的流程。
攻擊字符串是檢測(cè)漏洞的關(guān)鍵部分,用數(shù)據(jù)庫(kù)中的注入代碼來(lái)構(gòu)造有威脅的URL、表單或AJAX XML Http Request對(duì)象,向服務(wù)器發(fā)送請(qǐng)求。結(jié)合JavaScript的執(zhí)行效果和語(yǔ)法,針對(duì)表單、URL和XML Http Request對(duì)象類(lèi)型的攻擊漏洞,表1列舉了部分攻擊字符串。
3.3結(jié)果分析
3.3.1基于AJAX頁(yè)面代碼行為的XSS漏洞檢測(cè)算法
(1)增量地構(gòu)建AJAX返回的DOM樹(shù)狀態(tài);
(2)記錄返回?cái)?shù)據(jù)后的頁(yè)面代碼行為;
(3)檢測(cè)返回的代碼行為是否出現(xiàn)相對(duì)應(yīng)的惡意行為,判斷是否存在XSS漏洞。
偽代碼設(shè)計(jì)如下:
For each pages tate in State Queue.Dequeue()(存儲(chǔ)隊(duì)列中的狀態(tài)出列)
Browser Control.Get State (pages tate)(獲取頁(yè)面的HTML行為)
Boolean has XSS*-De tec t XSS( pages tate)
If has XSS then
Write To DataBase(URL)
End If
Browser Control. GetState ( pages tate)
End For each
3.3.2基于JavaScript的XML Http Request檢測(cè)
在JavaScript代碼中,最關(guān)鍵的是XHR(XML Http Request,可擴(kuò)展超文本傳輸請(qǐng)求)對(duì)象。該對(duì)象可以異步地向服務(wù)器發(fā)出請(qǐng)求,獲取新數(shù)據(jù),然后通過(guò)DOM將數(shù)據(jù)插入頁(yè)面中進(jìn)行局部刷新。這給攻擊者留下了一個(gè)很大的漏洞,攻擊者可使用XHR對(duì)象,注入錯(cuò)誤代碼,因此必須對(duì)AJAX XHR的漏洞檢測(cè)進(jìn)行特殊處理。
(1)收集JavaScript的文件信息,比如大小、文件名等,構(gòu)建JavaScript文件特征庫(kù)。
(2)檢測(cè)時(shí)將頁(yè)面獲取的JavaScript文件與文件特征庫(kù)中的文件進(jìn)行匹配判斷是否存在漏洞。
偽代碼設(shè)計(jì)如下:
4 實(shí)驗(yàn)結(jié)果及分析
為驗(yàn)證本文提出方法的可行性,采用Visual Studio2015對(duì)本文提出的方法進(jìn)行C#編程實(shí)現(xiàn)XSS Finder工具,硬件方面主要采用主流的IBM-PC兼容機(jī),數(shù)據(jù)庫(kù)為SQLS erver 2008 R2。下面從時(shí)間復(fù)雜度和檢測(cè)精度方面來(lái)評(píng)估XSS Finder工具。
4.1 時(shí)間復(fù)雜度
為對(duì)比XSS Finder在時(shí)間復(fù)雜度上的優(yōu)勢(shì),選用了常用的XSS漏洞檢測(cè)工具Paros和x5s進(jìn)行對(duì)比。采取方法是對(duì)每個(gè)Web應(yīng)用程序獨(dú)立掃描20次,算出平均掃描時(shí)間。圖3是3個(gè)軟件進(jìn)行掃描的時(shí)間對(duì)比。
由圖3可知,XSS Finder工具所消耗的時(shí)間是較低的。
4.2檢測(cè)精度
對(duì)比XSS Finder與兩個(gè)軟件的檢測(cè)精度,采取的方法是選擇兩個(gè)網(wǎng)站,一個(gè)是某學(xué)校的官方網(wǎng)站,另一個(gè)是開(kāi)源系統(tǒng),名字是Pet Store,此系統(tǒng)是Java編寫(xiě)的基于AJAX的Web應(yīng)用程序,3個(gè)軟件分別對(duì)網(wǎng)站進(jìn)行掃描與檢測(cè),并對(duì)比最后的結(jié)果,具體見(jiàn)表2。
從實(shí)驗(yàn)結(jié)果來(lái)看,XSS Finder檢測(cè)到的漏洞數(shù)和系統(tǒng)存在的漏洞數(shù)量是一致的,檢測(cè)到的數(shù)據(jù)入口點(diǎn)也符合實(shí)際情況,表明XSS Finder檢測(cè)漏洞的準(zhǔn)確性更好。
5 結(jié)束語(yǔ)
通過(guò)對(duì)AJAX技術(shù)下XSS漏洞的出現(xiàn)原因及檢測(cè)技術(shù)的研究,本文提出一種基于網(wǎng)絡(luò)爬蟲(chóng)與頁(yè)面代碼行為的XSS漏洞檢測(cè)方法,與兩種常用的XSS漏洞檢測(cè)工具比較,在時(shí)間復(fù)雜度方面,對(duì)Web應(yīng)用程序獨(dú)立掃描20次的情況下,掃描時(shí)間更短,高效地解決了URL重復(fù)性的問(wèn)題:在檢測(cè)精度方面,提出了對(duì)頁(yè)面代碼行為和XHR對(duì)象進(jìn)行檢測(cè)的方法,具有更高的漏洞檢測(cè)準(zhǔn)確性。