趙躍華 吳東耀
摘 要:近年來跨站腳本(XSS)漏洞占據(jù)十大計算機網(wǎng)絡安全漏洞第3名位置,對互聯(lián)網(wǎng)安全形成嚴重威脅。目前大多數(shù)檢測方案無法兼顧反射型、存儲型和基于文檔對象模型的XSS漏洞。為提高檢測準確率,設計一種結合黑盒測試與動態(tài)污點分析技術的XSS漏洞檢測方案并優(yōu)化XSS攻擊向量選擇策略。該策略首先篩選XSS攻擊向量模版,檢測時對應不同注入點實時生成不同XSS攻擊向量,并根據(jù)過濾規(guī)則集測試結果進行反過濾變換。對比實驗表明,該方案可以提高XSS漏洞檢測能力,同時檢測時間開銷較小。
關鍵詞:跨站腳本漏洞;漏洞檢測;黑盒測試;動態(tài)污點分析技術
DOI:10. 11907/rjdk. 181944
中圖分類號:TP309文獻標識碼:A文章編號:1672-7800(2019)003-0162-06
0 引言
目前,互聯(lián)網(wǎng)已滲透列各行各業(yè),為客戶提供快捷服務的同時,也暴露出越來越嚴重的安全問題,其中Web應用程序安全問題尤為突出。伴隨“Web 2.0”概念[1]的提出,動態(tài)網(wǎng)頁逐漸取代靜態(tài)網(wǎng)頁,改進了用戶與Web應用程序的交互體驗,動態(tài)網(wǎng)頁允許用戶修改內(nèi)容后返回客戶端瀏覽器,但是如果服務器對用戶提交的內(nèi)容不進行有效過濾,攻擊者可利用該漏洞攻擊服務器端和客戶端,這是XSS產(chǎn)生攻擊的主要原因[2]。社交網(wǎng)站一直是XSS攻擊的重災區(qū),國外大型社交網(wǎng)站如Facebook、Twitter等也不能幸免[3]。XSS攻擊破壞力和影響力極強,給企業(yè)和普通用戶帶來重大損失。
傳統(tǒng)做法按照“是否把數(shù)據(jù)存儲在服務器端”的標準進行分類,將XSS分為反射型和存儲型XSS[4],前者簡單地把XSS代碼“反射”給瀏覽器,后者則把XSS代碼存儲在服務器端,等訪客訪問該網(wǎng)頁時即刻觸發(fā)XSS攻擊,具有更持久的破壞力,但是DOM型XSS不依賴客戶端向服務器端發(fā)送XSS代碼,以文檔對象模型為基礎,即利用DOM樹執(zhí)行代碼,因此對于DOM型XSS漏洞的檢測更加復雜和困難[5]。
國內(nèi)外專家提出各種檢測XSS漏洞的方法,黑盒測試和白盒測試是其中最常見的兩種,前者是基于運行目標代碼對象的漏洞檢測技術[6],后者是基于源代碼對象的漏洞檢測技術[7]。Gupta & Gupta[8]提出一種通過逆向分析數(shù)據(jù)流的靜態(tài)分析方法,應用于基于Java的Web應用程序XSS漏洞檢測,該方法對于XSS漏洞檢測效率較高,缺點是只能應用于基于Java的Web應用程序,且需要Web應用程序源碼。Liu & Zhao等[9]提出基于動態(tài)分析的最優(yōu)攻擊向量庫XSS漏洞檢測方法。該方法自動生成一個攻擊向量庫,并使用優(yōu)化模式不斷優(yōu)化攻擊向量庫,然后自動檢測Web應用程序中的XSS漏洞,但其中機器學習算法還需進一步優(yōu)化,才能提高攻擊向量庫完整性和有效性。李潔、俞研等[10]提出基于動態(tài)污點傳播模型的檢測方法。該方法主要使用函數(shù)劫持技術檢測污點數(shù)據(jù),根據(jù)檢測情況分析是否產(chǎn)生漏洞,該方法比以往DOM型XSS檢測在準確率和效率方面有明顯提升,但需繼續(xù)完善污點數(shù)據(jù)集、進一步提高自動化程度。李楠[11]提出一種灰盒測試的檢測方法,該方法運用編譯原理技術構建源代碼抽象語法樹和程序控制流圖,審查所有被調(diào)用的敏感函數(shù),然后跟蹤和分析以上函數(shù)中敏感參數(shù)數(shù)據(jù)流,最后進行動態(tài)驗證,檢查是否存在XSS漏洞,同時利用污點分析技術檢測DOM型XSS漏洞。該方法對PHP語言編寫的網(wǎng)站XSS漏洞檢測效果較好,但該方法需獲知Web應用程序源碼,由于限制了編程語言,所以該方法局限性較大。Wang &Xu等[12]提出基于客戶端污點跟蹤的檢測方法,建立了基于該方法的動態(tài)檢測框架,通過重寫所有JavaScript特性和DOM相關API,在瀏覽器渲染過程完成后標記和追蹤污點數(shù)據(jù),該方法對于DOM型XSS檢測準確率較高,但需進一步提高XSS攻擊向量生成效率。Pan &Mao[13]提出一種結合靜態(tài)分析和動態(tài)分析的檢測方法。該方法使用一個采用兩階段混合分析的檢測框架,第一階段由文本過濾器和抽象語法樹分析器組成輕量級靜態(tài)分析,第二階段執(zhí)行動態(tài)符號。該檢測框架對于DOM型XSS漏洞檢測準確率高、誤報率低,缺點是僅能檢測DOM型XSS漏洞。
綜上所述,雖然國內(nèi)外關于XSS漏洞檢測已積累較豐富的研究成果,但還存在一些不完善的地方。基于白盒測試的檢測方法通過分析系統(tǒng)源代碼實現(xiàn)XSS漏洞檢測,研究證明其對XSS漏洞檢測準確率較高,但由于需獲得Web應用程序系統(tǒng)源代碼,且限定開發(fā)語言或腳本語言,因此該方法局限性較高。而基于黑盒測試的方法雖不需要程序內(nèi)部結構和源碼,但普遍存在攻擊向量針對性不強的缺點,部分基于黑盒測試的方法存在無法檢測或僅能檢測DOM型XSS漏洞的缺點。本文基于現(xiàn)有檢測方法存在的不足,設計一種結合黑盒測試和動態(tài)污點分析的XSS漏洞檢測方案,該方案可高效、全面檢測XSS漏洞。
1 設計思路
雖然白盒測試比黑盒測試檢測效率高,但對被檢測網(wǎng)站要求較高,且自動化程度較低,因此普適性較差。本文檢測方案設計目標是高效且全面地檢測XSS漏洞,可滿足大多數(shù)待檢測網(wǎng)站的檢測需求,因此黑盒測試更適合本方案。傳統(tǒng)黑盒測試對于反射型和存儲型XSS漏洞檢測準確率較高,而DOM型XSS漏洞和其它漏洞最大區(qū)別在于對其攻擊不需要服務器返回提交的XSS代碼,由瀏覽器接收并由解釋器執(zhí)行,因此傳統(tǒng)黑盒測試無法找到對應的XSS代碼,從而導致無法檢測DOM型XSS漏洞。動態(tài)污點分析可以追蹤Web應用程序運行時瀏覽器如何操作數(shù)據(jù)流,并且記錄操作過程中數(shù)據(jù)流傳播路線,通過實時監(jiān)測判斷敏感數(shù)據(jù)流是否有被泄漏的可能性[14],從而找到DOM型XSS漏洞注入點,繼而可發(fā)現(xiàn)是否存在DOM型XSS漏洞。因此動態(tài)污點分析可有效檢測DOM型XSS漏洞,但無法有效檢測反射型和存儲型XSS漏洞。本方案在黑盒測試的基礎上,同時結合動態(tài)污點分析,使兩者優(yōu)勢互補,提高準確率的同時降低誤報率。
本方案首先獲取待檢測網(wǎng)站的Web網(wǎng)頁源碼,分析其使用的動態(tài)污點,對污點數(shù)據(jù)源進行標記、追蹤和檢測,并按照注入點判別依據(jù)查找DOM型XSS漏洞注入點;另外,使用傳統(tǒng)黑盒測試中字符串匹配的方法,按照注入點判別依據(jù)查找反射型和存儲型XSS漏洞注入點;然后,對每個注入點生成相應XSS攻擊向量,并利用黑盒測試對3種注入點進行注入攻擊;最后,根據(jù)服務器響應信息判斷是否存在漏洞,輸出XSS漏洞檢測結果。
2 關鍵技術分析與改進
因為XSS攻擊向量的選擇直接影響檢測能力和效率,所以黑盒測試對于XSS攻擊向量的要求較高,目前關于XSS攻擊向量的選擇有兩種常用策略。
(1)直接選擇現(xiàn)有的XSS攻擊向量庫進行變換后使用。該策略的優(yōu)點是可減少工作量,可以應對大部分檢測需求,缺點是過于依賴該XSS攻擊向量庫完備性。
(2)選擇基本的XSS攻擊向量模版,檢測時實時生成XSS攻擊向量。該策略的優(yōu)點是針對性強,可減少無意義的注入攻擊,提高XSS攻擊向量的執(zhí)行成功率,從而提高系統(tǒng)檢測效率,但缺點是依賴于基本的XSS攻擊向量模版選擇,且合成和變換規(guī)則的優(yōu)劣直接影響檢測能力。
本文方案使用第二種策略,針對其中的不足,對關鍵技術進行改進,優(yōu)化XSS攻擊向量的選擇策略,使XSS攻擊向量更符合實際檢測需求。首先進行預處理,收集足夠多的原始XSS攻擊向量,對其篩選后處理生成XSS攻擊向量模版,形成完備性較高和冗余度較低的XSS攻擊向量模版庫;在漏洞檢測過程中,根據(jù)注入點的輸出點上下文提取XSS攻擊向量合成規(guī)則,該規(guī)則包括生成XSS攻擊向量時選擇何種XSS攻擊向量模版、閉合塊、額外塊,然后對待檢測網(wǎng)站進行過濾規(guī)則集測試,形成相應的過濾規(guī)則集,最后按照XSS攻擊向量合成規(guī)則對XSS攻擊向量模版進行補齊,使之成為完整的XSS攻擊向量,再利用反過濾規(guī)則集變換規(guī)則,生成最終有效的XSS攻擊向量。根據(jù)注入點情況動態(tài)生成有針對性的XSS攻擊向量,使注入攻擊能更容易地得到有效的檢測結果。關鍵技術的改進示意如圖1所示。
2.1 XSS攻擊向量模版生成
現(xiàn)有大多數(shù)選取策略根據(jù)主觀判斷從常見的XSS攻擊向量模版中選擇一部分,帶有較強主觀性,影響了選擇有效性,但如果選擇全部則影響后續(xù)檢測效率。為提高XSS攻擊向量模版有效性,首先收集足夠多的XSS攻擊向量,再經(jīng)過聚類算法處理,最后以等價類測試和人工篩選的方法選擇XSS攻擊向量模版,以達到使該XSS攻擊向量模版可兼顧檢測能力和檢測效率的目的。
聚類算法的目的是將大量數(shù)據(jù)劃分為不同的類,使用劃分方法的聚類算法是最合適的。劃分方法的聚類算法中K-means算法邏輯簡單、算法時耗小、復雜度低,適合頻繁調(diào)試和測試 [15],K-means算法如式(1)所示。
XSS攻擊向量模版生成流程如下:
(1)首先對收集到的原始XSS攻擊向量進行反過濾規(guī)則集過濾的逆向處理,把XSS攻擊向量還原成未進行過濾規(guī)則集變換的形態(tài)。
(2)依據(jù)對輸出點位置分類的分析,選擇K個XSS攻擊向量樣本,作為最原始的聚類中心。
(3)對于在XSS攻擊向量庫的每一條XSS攻擊向量,計算其與每個聚類中心Ck的Levenshtein距離[16]。
(4)根據(jù)聚類最近的原則,分別將它們分配給最相似的聚類中心代表的類。
(5)計算每個類中所有XSS攻擊向量Levenshtein距離均值,作為該類新聚類中心。
(6)計算所有XSS攻擊向量到其所屬聚類中心的Levenshtein距離平方和J(C)值。
(7)判斷聚類中心和J(C)值是否變化改變,如果是,則跳轉(zhuǎn)到步驟(3);如果否,繼續(xù)跳轉(zhuǎn)到步驟(8)。
(8)人工分析和評估結果,分析聚類算法的局部最優(yōu)解是否符合XSS漏洞檢測需要,并檢查生成的聚類中心是否符合邏輯。
(9)對結果評估是否認同,如果是,則跳轉(zhuǎn)到步驟(10);如果否,根據(jù)對結果的分析重新選擇K(K可變化)個XSS攻擊向量作為初始樣本,跳轉(zhuǎn)到步驟(3)。
(10)通過等價類測試和人工篩選,剔除相同作用的XSS攻擊向量。
(11)根據(jù)步驟(10)的結果對XSS攻擊向量進行處理,刪去用作閉合前面標簽、屬性的閉合塊(例如:““>”、“>”)和用作閉合后面標簽、屬性的額外塊(例如:“<”、“<””),生成XSS攻擊向量模版。
具體流程如圖2所示。
2.2 XSS攻擊向量合成規(guī)則提取
首先找到注入點的輸出點位置,判斷輸出點的類型,選擇對應的注入點所使用的對應XSS攻擊向量模版,再根據(jù)輸出點的上下文環(huán)境判斷閉合塊、額外塊的規(guī)則,XSS攻擊向量模版、閉合塊、額外塊即是XSS攻擊向量合成規(guī)則,最后根據(jù)合成規(guī)則組合成XSS攻擊向量。此策略相比較常用的選取策略,既能使XSS攻擊向量符合注入攻擊需求,減少了后續(xù)無效的注入攻擊,又能保證XSS攻擊向量在輸出點輸出后,上下文語法一致,從而使得XSS攻擊向量更容易執(zhí)行成功,繼而提高準確率。
提取XSS攻擊向量合成規(guī)則流程如下:
(1)待提取隊列是否空,如果是,則結束,如果否,則跳轉(zhuǎn)到步驟(1)。
(2)找到注入點對應輸出點的輸出位置,遍歷網(wǎng)頁源碼向前查找是否首次出現(xiàn)“=”,如果是跳轉(zhuǎn)到步驟(5),如果否則跳轉(zhuǎn)到步驟(3)。
(3)網(wǎng)頁源碼的位置往前查找首先出現(xiàn)“>”,判斷“<”和“>”中間的字符串。
(4)根據(jù)字符串判斷,如果是如果是HTML常規(guī)標簽字符串則輸出點在HTML常規(guī)標簽間,如果是HTML特殊標簽字符串則輸出點在HTML特殊標簽間,如果是“script”則輸出點在JavaScript中,如果是“style”則輸出點在CSS中。
(5)在網(wǎng)頁源碼中往前查找直到第一次出現(xiàn)空格,判斷空格和“=”之間的字符串。
(6)根據(jù)字符串判斷,如果是“value”則輸出點在HTML標簽屬性中,如果是以“on”開頭的事件屬性字符串則輸出點在HTML事件屬性內(nèi),如果是“dynsrc”、“src”、“href”等屬性字符串則輸出點在JavaScript偽協(xié)議中,如果是“style”則輸出點在CSS中,如果都不是則繼續(xù)往前查找,找到“<”后面是“script”,則輸出點在JavaScript中。判斷結束后,將相關數(shù)據(jù)記錄,跳轉(zhuǎn)到步驟(7)。
(7)判斷輸出點類型,如果是在HTML標簽屬性中、HTML事件屬性內(nèi)、JavaScript偽協(xié)議中、JavaScript中的輸出點,則從輸出點位置往前尋找“<”、“<””等字符串,根據(jù)對應關系選擇“>”、“”>”等閉合塊,如果是在HTML特殊標簽間的輸出點,其閉合塊為“特殊標簽>”,如果是在JavaScript中的輸出點,則從輸出點往后尋找“>”、“”>”等字符串,根據(jù)對應關系選擇“<”、“<””等額外塊。判斷結束后,將相關數(shù)據(jù)記錄,跳轉(zhuǎn)到步驟(1)。
具體流程如圖3所示。
2.3 過濾規(guī)則集測試
不同的網(wǎng)站對潛在XSS代碼的過濾不同,但其過濾形式、方法、規(guī)則及技術等相似,且均適用于有限的代碼[17]。常見的過濾規(guī)則集主要分為5類,分別是對敏感詞的操作、對內(nèi)容重編碼操作、服務器端對字符書寫方式操作、對編碼格式識別操作、對占位符的識別操作。
XSS代碼變換處理策略通常將XSS攻擊向量遍歷反過濾規(guī)則集變換,即無論服務器端使用何種過濾規(guī)則集,總是對每一條XSS攻擊向量進行所有反過濾規(guī)則集變換,直到測試出XSS漏洞或者遍歷完畢。實際上絕大多數(shù)服務器采用的過濾規(guī)則集均基于固定模式,且過濾規(guī)則集有限,并不需要對于每一條XSS攻擊向量都進行反過濾規(guī)則集變換。因此本文提出使用過濾規(guī)則集測試,當獲知待測試網(wǎng)站服務器使用的過濾規(guī)則集,后續(xù)則采取對應的反過濾規(guī)則集變換,使XSS攻擊向量變換更有針對性,減少注入攻擊次數(shù),從而提高檢測效率。
根據(jù)常見過濾規(guī)則集,構造對應的探子向量和XSS敏感詞組成的字符串,依次對注入點進行注入攻擊測試,根據(jù)測試結果判斷采用何種過濾規(guī)則,經(jīng)過一系列測試得出目標測試網(wǎng)站過濾規(guī)則集。
過濾規(guī)則集測試流程如下:
(1)構造一條探子向量和XSS敏感詞組成的字符串,對該注入點進行注入攻擊測試,定義該系列測試為M1,x。
(2)構造一條探子向量和十進制編碼的XSS敏感詞組成的字符串,對該注入點進行注入攻擊測試,再構造一條探子向量和十六進制編碼的XSS敏感詞組成的字符串,對該注入點進行注入攻擊測試,定義該系列測試為M2,x。
(3)構造一條探子向量和小寫、大寫混寫的XSS敏感詞組成的字符串,對該注入點進行注入攻擊測試,再構造一條探子向量和半角、全角字符混寫的XSS敏感詞組成的字符串,對注入點進行注入攻擊測試,定義該系列測試為M3,x。
(4)構造一條探子向量和空格隨意插入的XSS敏感詞組成的字符串,對該注入點進行注入攻擊測試,再依次構造探子向量和Tab、回車及其它特殊占位符隨意插入的XSS敏感詞組成的字符串,對注入點進行注入攻擊測試,定義該系列測試為M4,x。
(5)構造一條探子向量和UTF-8編碼的XSS敏感詞組成的字符串,對該注入點進行注入攻擊測試,再依次構造探子向量和UTF-16、Unicode等編碼的XSS敏感詞組成的字符串,再對該注入點進行注入攻擊測試,定義該系列測試為M5,x。
具體流程圖如圖4所示。
經(jīng)過以上測試后,根據(jù)測試結果確定過濾規(guī)則集,生成XSS攻擊向量時只需采取對應的反過濾規(guī)則集變換即可使XSS攻擊向量有效繞過服務器端的過濾。
2.4 XSS攻擊向量生成
XSS攻擊向量生成需要根據(jù)注入點的XSS攻擊向量合成規(guī)則,選擇對應的XSS攻擊向量模版,并合成為完整的XSS攻擊向量,再根據(jù)過濾規(guī)則集測試結果,進行反過濾規(guī)則集變換規(guī)則[17],構成有效的XSS攻擊向量,從而使其繞過服務器端的過濾后成功執(zhí)行。
生成XSS攻擊向量流程如下:
(1)根據(jù)輸出點類型,選取對應類型標識的XSS攻擊向量模版。
(2)根據(jù)XSS攻擊向量合成規(guī)則,選取對應輸出點類型的XSS攻擊向量模版并對其進行合成處理,再組合相應的閉合塊和額外塊,使其成為完整的XSS攻擊向量,具體包括:①若出現(xiàn)在HTML常規(guī)標簽間,XSS攻擊向量合成為[XSS攻擊向量模版];②若出現(xiàn)在HTML特殊標簽間,XSS攻擊向量合成為[閉合塊]+[XSS攻擊向量模版];③若出現(xiàn)在標簽之內(nèi),XSS攻擊向量合成為[閉合塊]+[XSS攻擊向量模版];④若出現(xiàn)在HTML事件屬性內(nèi),XSS攻擊向量合成為[XSS攻擊向量模版]或[閉合塊]+[XSS攻擊向量模版];⑤若出現(xiàn)在JavaScript偽協(xié)議中,XSS攻擊向量合成為[閉合塊]+[XSS攻擊向量模版];+//或[閉合塊]+[XSS攻擊向量模版];+a=”或[閉合塊]+[XSS攻擊向量模版];+運算符;⑥若出現(xiàn)在JavaScript中,XSS攻擊向量合成為 [XSS攻擊向量模版]或[閉合塊]+[XSS攻擊向量模版]或+[XSS攻擊向量模版]+[額外塊];⑦若出現(xiàn)在CSS中,XSS攻擊向量合成為[XSS攻擊向量模版]。
(3)如果是DOM型XSS漏洞注入點則流程結束,如果是反射型和存儲型XSS漏洞的注入點,即帶參數(shù)的URL和Form表單,則需根據(jù)過濾規(guī)則集選擇與其對應的反過濾規(guī)則集變換規(guī)則 ,依次對完整的XSS攻擊向量進行反過濾變換操作,得到最終的XSS攻擊向量。
3 XSS漏洞檢測系統(tǒng)設計
3.1 系統(tǒng)結構
本文設計的XSS漏洞檢測系統(tǒng)采用多線程技術,系統(tǒng)整體結構分為三大部分,分別是注入點分析模塊、攻擊與分析模塊、數(shù)據(jù)庫。注入點分析模塊主要用于獲取XSS漏洞相關數(shù)據(jù),采用網(wǎng)絡爬蟲廣度優(yōu)先搜索策略,該模塊分為爬蟲子模塊和網(wǎng)頁分析子模塊;攻擊與分析模塊主要用于對XSS漏洞相關數(shù)據(jù)生成XSS攻擊向量,并對注入點進行注入攻擊,通過接收服務器的響應判斷是否存在XSS漏洞,該模塊分為模擬分析子模塊和漏洞檢測分析子模塊;數(shù)據(jù)庫保存XSS漏洞相關數(shù)據(jù)。系統(tǒng)結構見圖5。
3.2 工作流程
首先輸入待檢測網(wǎng)站的URL,并且設定一個最深爬取深度,初始爬取深度為0,在數(shù)據(jù)庫中新建爬蟲URL表并將相關數(shù)據(jù)存入。爬蟲子模塊將根據(jù)URL下載網(wǎng)頁源碼,下載完成后更新爬蟲URL表中相關數(shù)據(jù),并將網(wǎng)頁源碼傳給網(wǎng)頁分析子模塊;網(wǎng)頁分析子模塊接收網(wǎng)頁源碼后渲染其JavaScript代碼,同時查找污點數(shù)據(jù)注入點并提取其XSS攻擊向量合成規(guī)則,在數(shù)據(jù)庫中新建待測試表并將相關數(shù)據(jù)存入數(shù)據(jù)庫,然后提取網(wǎng)頁源碼中的URL,經(jīng)過URL補全、非同源URL刪除、URL去重依次處理,在數(shù)據(jù)庫中新建爬蟲URL表并將相關數(shù)據(jù)存入,再將其爬取深度設為當前爬取深度加1,同時提取帶參數(shù)的URL和Form表單,在數(shù)據(jù)庫中新建待測試表并與相關數(shù)據(jù)存入其中,完成一次循環(huán)。反復循環(huán)直到待下載隊列為空,或者當前爬取深度大于等于最深爬取深度,結束注入點分析模塊運行。
XSS攻擊向量模版管理模塊將對數(shù)據(jù)庫中的模版進行增加、刪除和修改。模擬攻擊子模塊首先從數(shù)據(jù)庫中選擇類型為帶參數(shù)的URL和Form表單的待測試表,對其注入點使用探子向量模擬攻擊,查找響應的網(wǎng)頁進行探子向量,從而查找注入點和輸出點的對應關系,同時提取其XSS攻擊向量合成規(guī)則,更新其待測試表中相關數(shù)據(jù),循環(huán)直到該類待測試表遍歷完畢,然后選取一條注入點進行過濾規(guī)則集測試,測試對應網(wǎng)站過濾規(guī)則集。最后從所有待測試表中依次取出注入點數(shù)據(jù),根據(jù)其XSS攻擊向量合成規(guī)則,再選取對應的XSS攻擊向量模版,對其進行XSS攻擊向量合成和反過濾規(guī)則集變換,成為有效的XSS攻擊向量,使用XSS攻擊向量對注入點進行注入攻擊,注入攻擊后,漏洞檢測分析子模塊接收服務器響應,進行本地瀏覽器渲染,判斷是否存在XSS漏洞,如果存在則在數(shù)據(jù)庫中新建檢測結果表并存入相關數(shù)據(jù),如果不存在則繼續(xù)下一條XSS攻擊向量,直到該注入點的XSS攻擊向量全部測試完畢或者測試出其存在XSS漏洞。注入攻擊循環(huán)遍歷完成所有待測試表,此時所有注入點的XSS漏洞已測試完畢,最后生成檢測報告。
系統(tǒng)工作流程如圖6所示。
4 對比實驗
為驗證本系統(tǒng)漏洞檢測性能,搭建測試環(huán)境,其由兩個部分組成:一個是服務器端,用于部署搭建被測試網(wǎng)站;另一個是客戶端,用于部署本檢測系統(tǒng),通過和服務器端交互數(shù)據(jù)達到檢測目的,測試環(huán)境軟件和硬件見表1。
測試樣本是由Google和米蘭理工大學一起合作研發(fā)的Firing Range[18],該項目為測試自動化掃描軟件能力搭建一個測試環(huán)境,驗證軟件檢測能力。測試對比系統(tǒng)為Burp Suite 1.7.27[19]、Acunetix Web Vulnerability Scanner 10.0[20](AWVS),均為較成熟的XSS漏洞檢測工具。將本系統(tǒng)和Burp Suite、AWVS的實驗測試結果匯總,如表2所示。
分別計算Burp Suite、AWVS和本系統(tǒng)檢測的準確率和誤報率,如表3所示。
由表2、表3可看出,Burp Suite對于反射型和存儲型XSS漏洞檢測效果較好,其無法檢測的漏洞多數(shù)是DOM型,Burp Suite誤報了4個漏洞,其中包括3種XSS漏洞,并且時間開銷較大;AWVS對于3種XSS漏洞檢測效果均較好,對于反射型和存儲型XSS漏洞檢測效果和本系統(tǒng)基本持平,但對DOM型檢測效果相比本系統(tǒng)相差較明顯,AWVS對于DOM型檢測準確率較高,誤報率同樣較高,但其時間開銷較小;而本系統(tǒng)相對Burp Suite、AWVS漏洞檢測效果均有提升,對于3種XSS漏洞檢測的準確率均有提高且漏報率均有所降低,其中對于DOM型的準確率有明顯提升,且本系統(tǒng)時間開銷最小。綜上所述,本系統(tǒng)相較于Burp Suite、AWVS,在準確率、誤報率方面有一定優(yōu)勢,時間開銷相比Burp Suite有所降低,但和AWVS基本持平,因此在時間開銷方面優(yōu)勢較小。
5 結語
本文設計了一種結合黑盒測試和動態(tài)污點分析的方案,優(yōu)化了其中涉及XSS攻擊向量選擇的關鍵技術,設計并實現(xiàn)了該方案原型系統(tǒng),通過對比實驗發(fā)現(xiàn)本文設計的系統(tǒng)可高效、全面檢測3種不同XSS漏洞。但系統(tǒng)依然存在一些不足,一些反射型XSS會引起DOM型XSS,還無法檢測客戶端和服務器代碼混合的情況,下一步將更加深入研究XSS攻擊向量,完善系統(tǒng)使其可對該類情況進行有效檢測。
參考文獻:
[1] O'REILLY T. What is Web 2.0: design patterns and business models for the next generation of software[J]. Communications & Strategies ,2007, 97(7):253-259.
[2] SHANMUGAM J, PONNAVAIKKO M. XSS application worms: New internet infestation and optimized protective measures[C]. Eighth ACIS International Conference on Software Engineering, Artificial Intelligence, Networking, and Parallel/Distributed Computing, 2007:1164-1169.
[3] WANG X, ZHANG W. Cross-site scripting attacks procedure and prevention strategies[C]. MATEC Web of Conferences,2016:1-3.
[4] WASSERMANN G. Static detection of cross-site scripting vulnerabilities[C]. ACM/IEEE International Conference on Software Engineering, 2008:171-180.
[5] HOLM H. Performance of automated network vulnerability scanning at remediating security issues[J]. Computers & Security, 2012, 31(2):164-175.
[6] 王希忠, 黃俊強. 漏洞挖掘技術研究[J]. 信息安全與技術, 2014(6):32-35.
[7] GUPTA S, GUPTA B B. PHP-sensor:a prototype method to discover workflow violation and XSS vulnerabilities in PHP web applications[C]. Proceedings of the 12th ACM International Conference on Computing Frontiers,2015:1-8.
[8] LIU Y, ZHAO W, WANG D, et al. A XSS vulnerability detection approach based on simulating browser behavior[C]. International Conference on Information Science and Security,2015:1-4.
[9] 李潔,俞研,吳家順. 基于動態(tài)污點分析的DOM XSS漏洞檢測算法[J]. 計算機應用, 2016, 36(5):1246-1249.
[10] 李楠. 一種XSS漏洞灰盒檢測方案的設計與實現(xiàn)[D]. 成都:電子科技大學,2017.
[11] WANG R, XU G, ZENG X, et al. TT-XSS: a novel taint tracking based dynamic detection framework for DOM cross-site scripting[J]. Journal of Parallel & Distributed Computing, 2017,118(8):100-106.
[12] PAN J,MAO X. Detecting DOM-sourced cross-site scripting in browser extensions[C]. IEEE International Conference on Software Maintenance and Evolution, 2017:24-34.
[13] LEEK T R,BAKER G Z,BROWN R E, et al. Coverage maximization using dynamic taint tracing[J]. American Journal of Orthodontics & Dentofacial Orthopedics,2007, 103(413):571.
[14] HARTIGAN J A. A K-means clustering algorithm[J]. Application of Statistics, 1979, 28(1):100-108.
[15] MILLER F P, VANDOME A F, MCBREWSTER J. Levenshtein distance[M]. London:Alpha Press,2009.
[16] LIU B W. XSS vulnerability scanning algorithm based on anti-filtering rules[C]. 2017 International Conference on Computer, Electronics and Communication Engineering,2017:5.
[17] 吳子敬,張憲忠,管磊,等. 基于反過濾規(guī)則集和自動爬蟲的XSS漏洞深度挖掘技術[J]. 北京理工大學學報,2012,32(4):395-401.
[18] ANOMITY. Firing range[EB/OL]. https://github.com/google/firing- range.
[19] ANOMITY. Burp suite[EB/OL]. https://portswigger.net/burp/.
[20] ACUNETIX. Acunetix web vulnerability scanner[EB/OL]. https://www.acunetix.com/vulnerability-scanner/.
(責任編輯:江 艷)