一種動態(tài)檢測xss漏洞的方法
【技術領域】
[0001] 本發(fā)明涉及信息安全領域,特別是涉及一種動態(tài)檢測XSS漏洞的方法。
【背景技術】
[0002] 名詞解釋: XSS:Cross Site Scripting,跨站腳本攻擊; Ajax:Asynchronous JavaScript and XML,異步JavaScript和XML,是指一種創(chuàng)建交互 式網(wǎng)頁應用的網(wǎng)頁開發(fā)技術; JavaScript:-種直譯式腳本語言,是一種動態(tài)類型、弱類型、基于原型的語言,內(nèi)置支 持類型; XML:可擴展標記語言; DOM:Document Object Model,文檔對象模型; URL:Uniform Resource Locator,統(tǒng)一資源定位符; HTML:超級文本標記語言; XHR: XmlHttpRequest,中可擴展超文本傳輸請求。
[0003] 隨著Web技術的發(fā)展,網(wǎng)站給人們帶來的體驗越來越好。特別是Web 2.0,告別了沉 重的請求-返回的模式,采用更輕便的局部刷新模式,這大大提高了用戶的體驗。其中,Ajax 技術在Web 2.0中占據(jù)了主導地位。然而,由于Ajax技術的應用將一部分邏輯處理從服務器 端轉移到了客戶端,這種方式雖然減輕了服務器的壓力,但也暴露了更多的接口,導致增加 了許多針對Web應用程序的安全威脅,其中嚴重程度最高的就是跨站腳本攻擊,又稱XSS攻 擊。由國際開源安全組織公布的十種最嚴重的Web應用程序安全漏洞排行榜中可知,跨站腳 本攻擊一直處于前三的位置。比如前幾年出現(xiàn)的"熊貓燒香"病毒,就是利用跨站腳本攻擊 的方式對用戶進行攻擊。在Web 1.0的時代,跨站腳本攻擊就已經(jīng)被世界各地的安全機構密 切關注,而到了Web 2.0時代后,Ajax已經(jīng)成為主流的技術,跨站腳本攻擊與Ajax相結合,出 現(xiàn)了新的特點,可在用戶毫不知情的情況下進行攻擊,其威脅性更大。就目前而言,采取較 多的行為都是被動的防范措施,比如防火墻等。這對Web 1.0時代里的Web應用程序是可行 的,但這樣做明顯忽略了 Web應用程序級的安全問題,使之在高層面缺乏有效的防范方式。 對于Web應用程序級的安全,雖然很多學者進行了研究,但大多數(shù)的研究還停留在Web 1.0 的時代里,并沒有對異步傳輸進行安全性的檢測。
[0004] 現(xiàn)有的XSS漏洞類型可分為3種基本類型:反射型XSS攻擊、存儲型XSS攻擊和基于 D0M的XSS攻擊。反射型XSS又稱非持久型XSS,這類攻擊方式是通過服務器的錯誤信息、或者 是檢索結果等手段將注入代碼"反射"回來,攻擊者構造一個包含注入代碼的惡意鏈接,并 通過某種方式將此惡意鏈接發(fā)送給受害者,受害者以為是正常的鏈接,并進行點擊訪問,則 注入腳本便會將服務器返回的數(shù)據(jù)傳輸?shù)焦粽叩姆掌魃?。存儲型XSS又稱持久型XSS, 這類攻擊方式與反射型XSS最大的不同在于,攻擊腳本將被永久性地存放在目標服務器的 數(shù)據(jù)庫和文件中,除非管理員發(fā)現(xiàn),并進行刪除后才能停止對網(wǎng)站瀏覽著的威脅;這類攻擊 多見于能留言或者評論的網(wǎng)站,攻擊者在留言或者評論的過程中,將惡意腳本連同正常的 信息一起注入到網(wǎng)站留言或評論區(qū)中,隨著信息被服務器上的數(shù)據(jù)庫存儲下來,惡意腳本 將會在瀏覽者進行訪問的時候被執(zhí)行,使受害者收到攻擊。基于DOM的XSS,這類攻擊方式并 不具有與存儲型和反射型一樣的特殊性行為模式,前兩種類型都是提取用戶控制的數(shù)據(jù)并 以危險的方式將這些數(shù)據(jù)返回給用戶,在第三類攻擊方式中,攻擊者是通過以下過程執(zhí)行 JavaScript的:首先攻擊者設個有注入JavaScript代碼的惡意URL,并發(fā)送給用戶,當 用戶進行訪問時,服務器返回HTML內(nèi)容,用戶瀏覽器會對HTML代碼解析成DOM樹結構,在這 過程中,注入代碼便會被解析出來,從而導致基于DOM的XSS攻擊出現(xiàn),攻擊者就有可能獲取 受害者電腦的重要權限。
[0005] 目前技術中,對XSS攻擊缺乏有效的檢測方法,也難以準確地檢測出Web頁面的XSS 漏洞,無法對XSS攻擊進行防范。
【發(fā)明內(nèi)容】
[0006] 為了解決上述的技術問題,本發(fā)明的目的是提供一種動態(tài)檢測XSS漏洞的方法。
[0007] 本發(fā)明解決其技術問題所采用的技術方案是: 一種動態(tài)檢測XSS漏洞的方法,包括: 51、 對Web頁面進行解析后獲得所有靜態(tài)URL和動態(tài)URL,建立初始URL集合; 52、 對初始URL集合進行解析處理后,獲得對應的網(wǎng)頁鏈接庫; 53、 依次對網(wǎng)頁鏈接庫中的網(wǎng)頁鏈接進行請求后,獲取請求到的頁面HTML代碼,進而根 據(jù)預設生成規(guī)則填充頁面的Form表單,生成一個有威脅性的請求,并提交到服務器; 54、 采用瀏覽器對生成的有威脅性的請求進行模擬訪問,進而檢測獲得XSS漏洞。
[0008] 進一步,所述步驟S1,包括: 511、 對Web頁面進行網(wǎng)絡爬蟲,對其頁面HTML代碼進行掃描后獲得所有靜態(tài)URL; 512、 對Web頁面的JavaScript腳本和通過JavaScript所添加的事件進行提取,將提取 到的代碼傳遞給JavaScript引擎進行編譯并執(zhí)行后,獲得所有動態(tài)URL; 513、 將所有靜態(tài)URL和動態(tài)URL存儲到哈希表中,作為初始URL集合。
[0009] 進一步,所述步驟S2,包括: 521、 逐一獲取初始URL集合中的每個URL并進行解析,依次判斷每個URL中是否存在 HTML請求; 522、 響應于URL中存在HTML請求的情況,獲取該HTML請求的頁面HTML代碼; 523、 對獲取的頁面HTML代碼進行解析后,提取獲得對應的網(wǎng)頁鏈接,并將其存儲到網(wǎng) 頁鏈接庫中; 524、 判斷初始URL集合中是否存在未處理的URL,若是,則返回執(zhí)行步驟S21,反之結束。 [0010] 進一步,所述步驟S3,包括: 531、 依次對網(wǎng)頁鏈接庫中的網(wǎng)頁鏈接進行請求后,獲取請求到的頁面HTML代碼; 532、 提取頁面HTML代碼的D0M樹中的所有表單元素; 533、 根據(jù)表單元素的屬性、頁面HTML代碼以及輸入?yún)^(qū)域的結構對象,計算哈希值; 534、 根據(jù)計算獲得的哈希值,關聯(lián)到預存在數(shù)據(jù)庫中的一自定義錯誤數(shù)據(jù)注入代碼 后,生成一個有威脅性的請求,并提交到服務器; S35、判斷網(wǎng)頁鏈接庫中的網(wǎng)頁鏈接是否請求完畢,若是,則結束,反之返回執(zhí)行步驟 S31〇
[0011]進一步,所述步驟S4,包括: 5411、 初始化模擬瀏覽器控件,響應于用戶輸入的有威脅性的請求的URL,向服務器發(fā) 送請求后,獲取服務器返回的相應的頁面; 5412、 采用廣度優(yōu)先算法,遍歷該頁面中Ajax應用的DOM狀態(tài),并使用增量的方式將獲 取的初始DOM狀態(tài)依次添加到狀態(tài)存儲隊列中,同時設定狀態(tài)深度為0; 5413、 對狀態(tài)存儲隊列依次進行出列操作,并采用模擬瀏覽器控件執(zhí)行各DOM狀態(tài)后, 判斷該狀態(tài)的狀態(tài)深度是否小于最大狀態(tài)深度,若是,則執(zhí)行步驟S414,反之結束; 5414、 獲取當前DOM狀態(tài)下的DOM結構中的JavaScript事件的元素結點,并依次觸發(fā)事 件,比較觸發(fā)事件前后DOM結構是否一樣,若不一樣則將觸發(fā)后的新的DOM狀態(tài)添加到狀態(tài) 存儲隊列中,同時執(zhí)行步驟S415; 5415、 獲取新的頁面HTML代碼,并判斷是否存在與錯誤數(shù)據(jù)注入代碼相對應的反饋數(shù) 據(jù),若是,則判斷存在XSS漏洞,反之,返回步驟S413繼續(xù)出列操作直到操作結束。
[0012]進一步,所述步驟S415中所述操作結束的條件為:狀態(tài)深度大于最大狀態(tài)深度或 者狀態(tài)存儲隊列為空。
[0013] 進一步,所述步驟S4,包括: 5421、 初始化模擬瀏覽器控件,響應于用戶輸入的有威脅性的請求的URL,向服務器發(fā) 送請求后,獲取服務器返回的相應的HTML代碼; 5422、 判斷獲得的HTML代碼中是否存在XHR的調用,若存在,則對該HTML代碼中的 JavaScript進行代碼匹配后獲得所有JavaScript文件名,并存儲到一集合中; 5423、 對該集合進行遍歷,將每個JavaScript文件名與預存的JavaScript文件特征庫 中存儲的文件名進行匹配,并對每個匹配失敗的JavaScript文件名,執(zhí)行步驟S424和步驟 S425; 5424、 從服務器下載該JavaScript文件名對應的JavaScript文件后,計算該 JavaScript文件的哈希值; 5425、 將計算獲得的哈希值與預存的JavaScript文件特征庫中存儲的哈希值進行匹 配,若匹配失敗,則獲取該JavaScript文件作為可能的XSS漏洞,反之,返回步驟S423繼續(xù)遍 歷直到遍歷結束。
[0014] 本發(fā)明的有益效果是:本發(fā)明提供了一種動態(tài)檢測XSS漏洞的方法,包括:對Web頁 面進行解析后獲得所有靜態(tài)URL和動態(tài)URL,建立初始URL集合;對初始URL集合進行解析處 理后,獲得對應的網(wǎng)頁鏈接庫;依次對網(wǎng)頁鏈接庫中的網(wǎng)頁鏈接進行請求后,獲取請求到的 頁面HTML代碼,進而根據(jù)預設生成規(guī)則填充頁面的Form表單,生成一個有威脅性的請求,并 提交到服務器;采用瀏覽器對生成的有威脅性的請求進行模擬訪問,進而檢測獲得XSS漏 洞。本方法可以準確、有效地檢測出Web頁面的XSS漏洞,而且檢測效率高,從而可為XSS提供 有效防范。
【附圖說明】
[0015] 下面結合附圖和實施例對本發(fā)明作進一步說明。
[0016] 圖1是本發(fā)明的一種動態(tài)檢測XSS漏洞的方法的流程圖; 圖2是本發(fā)明的一種動態(tài)檢測XSS漏洞的方法的實施例三的檢測時間對比圖。
【具體實施方式】
[0017] 參照圖1,本發(fā)明提供了一種動態(tài)檢測XSS漏洞的方法,包括: 5