一種可動態判斷xss漏洞的自動化檢測系統的制作方法
【專利摘要】一種可動態判斷XSS漏洞的自動化檢測系統,該系統由爬蟲模塊、動態漏洞檢測模塊以及用戶交互界面組成。該軟件系統引入了含有瀏覽器內核的庫,可以模擬瀏覽器行為解析JavaScript和加載Ajax以得到頁面中隱藏式注入點和交互點,并且通過靜態分析頁面結構找到非常規的Web提交請求方式。相比傳統靜態方法和不含有動態判斷模塊的方法大大提高了注入點識別的覆蓋率。對注入點的測試使用黑盒方法,無需考慮服務器的內部邏輯,提交攻擊向量后,通過模擬瀏覽器行為檢測頁面是否有異常情況出現,即能夠檢測瀏覽器是否執行了網頁腳本,就可直接判斷出當前注入點是否有漏洞,且更加準確。此外,該系統完全采用Python語言開發,具有易于維護和進行二次開發的特點。
【專利說明】
-種可動態判斷XSS漏洞的自動化檢測系統
技術領域
[0001] 本發明設及一種可動態判斷XSS漏桐的自動化檢測系統,屬于計算機軟件領域。
【背景技術】
[0002] 近年來,隨著Web應用的廣泛使用,Web安全問題也日益突出。OWASP公布的2013年 十大Web應用安全風險中,跨站腳本漏桐XSS(化OSS Site Scripting)名列第S,運表明XSS 漏桐已成為當前各類網站需共同面對的常見的安全風險之一。
[0003] XSS漏桐的產生是由于來自用戶的不可信數據被應用程序在沒有進行驗證,W及 反射回瀏覽器而沒有進行編碼或轉義的情況下進行了處理,導致瀏覽器引擎執行了代碼 時。很多網站在開發過程中忽略了必要的輸入驗證,缺乏足夠的安全性,運樣的網站就很容 易被跨站腳本攻擊。通常攻擊者會將惡意腳本提交到存在XSS漏桐的Web頁面,當客戶端用 戶瀏覽該頁面時,腳本會被瀏覽器自動解析執行,達到掛馬、釣魚、盜取用戶Cookie、劫持用 戶Web行為等目的,因此,對XSS漏桐的檢測是非常必要的。
[0004] 一般地,Web頁面中可能存在XSS漏桐的地方稱為注入點。如何在大量頁面中找到 潛在的注入點并進行檢測是防范XSS漏桐的關鍵之一,同時也是一項繁雜的工作。在網站內 容日益豐富的今天,人工檢測注入點顯然是不現實的,而需要盡可能采用自動化方法。網絡 爬蟲對于基于網絡的自動化測試工具是重要的基礎功能,它可W從一個起始ML開始,通過 分析網頁的內容,運用相關算法找到新的U化并不斷地循環抓取網頁,直到滿足一定的結束 條件,從而獲取大量的頁面W尋找注入點。找到注入點后,測試工具再構造攻擊測試請求發 送給目標站點,并根據目標站點的回應信息來判斷是否存在漏桐。
[0005] 目前針對自動化XSS漏桐檢測工具的研究還不是很充足,傳統的方法均是W靜態 爬蟲爬取頁面,通過獲取目標站點的目錄結構、對各個頁面的源碼進行解析,將其中的表單 信息提取出來,W達到尋找注入點的目的。然而,當下網頁提供給用戶輸入的方式多種多 樣,格式也越來越復雜,有些注入點需要通過用戶操作,如點擊某個按鈕,使瀏覽器解析 化vaScript或加載Ajax才能生成,有些注入點則不能通過簡單的正則查找,需要深度解析 網頁結構才能找到其提交方式。傳統爬蟲功能單一,對網頁分析不夠透徹,也很難解析 化vaScript或加載Ajax,從而對真正的注入點覆蓋率很小。同時在頁面解析時,傳統爬蟲還 需要提取整個表單內容,獲取表單的屬性W分析向服務器提交數據的方式才能提交攻擊向 量,比較復雜,并且在漏桐檢測方面不能動態地分析目標站點的回應信息,因此未必能判斷 出XSS漏桐是否存在。
[0006] 綜上所述,為了更好地進行自動化檢測,本發明對傳統爬蟲在漏桐檢測中的爬取 頁面、提取注入點,進行攻擊測試和分析結果四個步驟進行強化,并實現W下兩個方面的功 能:①能夠執行網頁腳本和深度解析網頁格式W得到頁面中隱藏式注入點和非格式化注入 點的爬蟲框架。②通動態分析的方式判斷XSS漏桐是否存在的高效方法,彌補了傳統方法的 缺陷。
[0007] 首先來看傳統方法的缺陷:
[000引①獲得注入點步驟:
[0009] 傳統方法在獲得注入點時,通常尋找服務器返回頁面中的表單進行測試。然而該 頁面中的請求,有些不通過表單提交,我們定義為非格式化注入點,如:
[0010] <input type = "text"id = "he3der_se3rch_hput"/〉
[0011] <input type = "button"onclick = "search($( '#header_search_input'). val 0)"/〉
[0012]該注入點的值的提交由化vaScript腳本編寫的search函數實現。
[0013] 還有些請求在該返回頁面中是找不到的,需要通過Ajax更新頁面內容才可W,我 們定義為隱藏注入點。傳統方法對于運樣的注入點處理非常困難,需要借助動態的方法來 實現。
[0014] ②測試和分析結果步驟:
[0015] 傳統方法的測試模塊根據提取到的參數向服務器提交攻擊向量
[0016] <sc;ript〉ale;rt("XSS") ;</sc;ript〉,請求報文格式如下:
[0017] GET/s?wd = <script>alertr'XSS'') ;</script>
[001 引 HTTP/1.1
[0019] Host:WWW.baidu.com
[0020] 之后傳統爬蟲對返回報文進行靜態分析,若服務器返回報文中含有未進行編碼或 轉義的提交參數,當前例子中即<3。1'1口1:〉日161'1:("乂55");</3(31'1口1:〉,則該腳本會被瀏覽器 引擎執行,說明存在漏桐。
[0021] 但實際上仍存在服務器對提交的參數轉義W后,腳本仍被瀏覽器執行的情況,如 假設服務器能將參數中的〈script〉刪除,那么只需提交如下語句:
[0022] GET/s?wd = <scri<script〉pt〉alert( 'XSS ')</script〉
[0023] HTTP/1.1
[0024] 化st:WWW.baidu.com
[00 巧]<3。1'191:〉被刪除后,提交的參數變為<3(31'191:〉日1日1'1:("乂55");</3(31'191:〉,仍然可 W輕松地繞過過濾,可見傳統方法未必能斷定XSS漏桐是否存在。
[0026] 因此,我們決定采用動態分析的方法,通過檢查Web應用程序運行時的行為來檢測 XSS漏桐。同時設計動態爬蟲框架,并且基于其特性,提出一種更有效的黑盒測試方法,彌補 傳統方法的缺陷,W完成本發明。
【發明內容】
[0027] 本發明的內容為:
[0028] ①提出了一個基于含有瀏覽器內核的爬蟲框架,其優勢在于分析頁面時,可W根 據注入點的特征而非簡單的表單提取來獲取頁面中非格式化注入點。并且通過瀏覽器內 核,自動模擬用戶行為來執行網頁中事件,W加載Ajax來得到頁面中隱藏注入點。
[0029] ②提出了一種通過提交攻擊向量,動態分析返回結果,來判斷XSS漏桐是否存在的 方法。該方法實現細節在下文中說明,由于方法本身特性,幾乎不存在誤報。
[0030] ③對相關框架和判斷方法進行了測試,驗證了其有效性。
[0031] 本系統通過動態分析更準確地檢測XSS漏桐,設計并實現了對注入點解析度更高 的爬蟲框架,并且通過用戶界面顯示整合過的檢測信息。
[0032] 為達到W上發明目的,經過研究討論和反復實踐,本軟件系統確定最終方案如下。
[0033] 1、系統總體設計
[0034] 本系統主要分為爬蟲模塊、檢測模塊、用戶界面模塊=大模塊,而運=大模塊又包 含了若干子模塊W實現核屯、功能,其中:
[0035] (1)爬蟲模塊強化了爬取頁面和提取注入點的步驟,該模塊使用化OSt.py作為瀏 覽器引擎,采用深度優先爬蟲,不斷地循環抓取網頁存入U化隊列,直到將同域名下的頁面 全部訪問完成,從而獲取大量的頁面W供檢測模塊進行檢測。用于使用了瀏覽器引擎提供 的API,該模塊可W將頁面動態加載完,并觸發頁面中的事件W獲取化vaSri邱t或Ajax生成 的新的U化存入U化隊列。對于單個頁面,爬蟲模塊采用Beauti化ISoup庫進行解析,通過分 析頁面結構提取非格式化注入點,并用數據結構化rm類和I噸Ut類保存注入點,用于之后的 測試。
[0036] (2)漏桐檢測模塊強化了進行攻擊測試和分析結果的步驟,該模塊包含多個自動 化動態檢測模塊對非格式化注入點和一般注入點進行攻擊向量提交,W及一個自動化動態 判斷模塊用于分析結果,它們同樣使用化OSt.py作為瀏覽器引擎。自動化動態檢測模塊對 化注入點采用的攻擊向量為經過設計后多種可W繞過XSS檢驗的攻擊向量(表1)。
[0037] 表1 一些經過設計的攻擊向量
[0mQl
[0039] 運些經過設計的攻擊向量提交后,執行結果交由自動化動態判斷模塊來判斷,它 能夠動態判斷頁面返回后的行為。首先,該系統借助了第=方服務器,如果攻擊向量中含有 對該服務器的請求(測試時采用的均為非惡意的請求),則系統會自動分析第=方服務器的 狀態,判斷返回頁面是否執行了運一請求,如果執行了,則注入點存在XSS漏桐。其次,該系 統通過調用瀏覽器內核的API,可W檢測網頁是否執行了化vaScript腳本。如果頁面會執行 了一個彈出提醒框的腳本,其內容為系統預先設定好的,則可W判斷出當前注入點是存在 漏桐的。相比傳統方法,該系統的檢測模塊對漏桐的判斷更加準確,幾乎不會出現誤報的現 象。
[0040] 2、運行環境
[0041 ] 本軟件系統完全由python語言在Windows 64位系統上編寫,可W在Windows 64位 系統上正常運行。
[0042] 3、軟件系統可根據實際情況改變的內容
[0043] 由于本系統具有較強的通用型,在設計之初就考慮到了對其它操作系統的支持。
[0044] 本項目核屯、庫包括re,pywebfuzz ,ghost,634,9751(16,97化,運些庫可^在所有主 流的操作系統上運行,因此可W很好的實現跨平臺移植。
【附圖說明】
[0045] 圖1系統總體架構(按模塊)
[0046] 圖2 URL處理模型設計
[0047] 圖3漏桐檢測流程設計
【具體實施方式】
[0048] 本系統的原理是基于化OSt.py的對服務器的黑盒測試,它由爬蟲模塊、漏桐檢測 模塊和用戶界面=個模塊組成。系統架構如圖1所示。
[0049] 4.1爬蟲模塊
[0050] 爬蟲模塊主要是對頁面進行探索,采用遞歸的深度優先算法挖掘同域名下的頁 面。
[0051] 在探索頁面時,還需要進行網頁的動態解析,將頁面動態加載完,并觸發頁面中的 事件W獲取化vaSricpt或Ajax生成的新的U化和注入點,其中的加載頁面由化OSt. py提供 的API完成。
[0052] 網頁加載完后,爬蟲會將新頁面的ML加入列表中。U化超鏈接一般存在于<a>標簽 的href屬性,對于HTML中的<a>標簽,其href屬性的值可W是任何有效文檔的相對或絕對 U化,包括片段標識符和化vaScript代碼段。一般用戶點擊<曰〉標簽中的內容時,瀏覽器除了 會跳轉到虹ef屬性指定的URL,也可能會執行化vaScript表達式、方法和函數的列表。
[0053] 本系統在分析 <曰〉標簽時,會針對不同情況對虹ef的值進行多種處理,如圖2所示, 將其轉換成一般ML的形式。若轉換后的U化不在列表中,將存儲至U化列表W用于之后的漏 桐檢測。
[0化4] 4.2漏桐檢測模塊
[0055] (1)提取注入點
[0化6] 本系統使用Python的Beautiful Soup庫來完成網頁解析。Beautiful Soup是一個 用Python寫的HTML/XML的解析器,它可W很好的處理不規范標記并生成剖析樹,并且提供 簡單又常用的導航,捜索W及修改剖析樹的操作。
[0057]由于目前的Web頁面變得越來越復雜,注入點的形式和位置也多種多樣,增加了檢 測的難度。首先,注入點可能隱藏的,需要用戶觸發頁面中的事件后才能生成,運是用傳統 靜態爬蟲技術很難實現的一點,而采用我們的系統,其動態爬蟲模塊可W自動模擬用戶行 為執行頁面中的事件,通過其瀏覽器內核解析腳本,得到事件執行后新的頁面DOM樹。其次, 注入點可能是非格式化的,由于網頁格式越來越多樣化,注入點可能不存在于表單中,也不 通過傳統的submit方式提交,而是點擊某個按鈕、通過化vaScript合成請求提交到服務器。 本系統的爬蟲模塊綜合考慮到運一點,分析總結了各種注入點和交互點的可能的特征并加 W判斷,如表1所述。因此,本系統的爬蟲分析模塊的功能擴大了對頁面中注入點識別的覆 蓋率。具體步驟如算法1描述。
[0化引
[0059] 通過算法1,我們可W對一般DOM結構中的非格式化注入點進行處理:
[0060] (IXinput type = "text"id = "header_search_input"/〉
[0061 ] <input type = "button"onclick = "search($( '#header_search_input '). val 0)"/〉
[0062] ②<input type = "text"id = "header_search_input"/〉
[0063] <divXinput type = "button"onclick="se曰rch($( '#he曰der_se曰rch_input') .val())"/Xdiv〉
[0064] 當然也包括復雜的情況如:
[0065] <divXinput type = "text"id = "header_search_input"/X/div〉
[0066] <div>
[0067] <divXinput type = "button"onclick="se曰rch($( '#he曰der_se曰rch_input') .val())"/X/div〉
[0068] <divXspan class = ^omeClass"〉Clickable</spanX/div〉
[0069] </div>
[0070] 此時注入點提取算法會判斷出第一個為i噸Ut注入點,第二個i噸Ut及span為交互 點,并將交互點作為列表連接到注入點,然后存儲到Input類中。通過漏桐檢測模塊可W測 試出哪個交互點可W將該注入點提交請求。
[0071] 通過表單提交的格式化注入點則存儲到化rm類中。
[0072] (2)自動化提交攻擊向量
[0073] 本系統使用化vaScript腳本對網頁進行動態的編輯,包括設置注入點的值為XSS 攻擊向量,提交請求至服務器,W及驗證函數的處理等等。
[0074] 表單有可能存在限制輸入長度,不允許一些非法字符等前端驗證,導致攻擊向量 不能提交。運些驗證事件存在于表單的屬性中,需要將運些屬性移除。
[0075] 之后對表單操作的具體步驟如算法2描述:
[0076]
[0077] (3)漏桐檢測
[007引本系統采用黑盒測試方法來檢測目標表單是否存在XSS漏桐。漏桐檢測的基本方 法是使用經過設計的攻擊向量來填寫表單并提交。該化eat Sheet包括多種可W繞過XSS檢 驗的攻擊向量,如表2所示。
[0079] 該系統的檢測模塊在提交攻擊向量請求后,動態判斷頁面返回后的行為。首先,該 系統借助了第=方服務器開展工作,如果攻擊向量中含有對該服務器的請求(測試時采用 的均為非惡意的請求),則系統會自動分析第=方服務器的狀態,判斷返回頁面是否執行了 運一請求。如果執行了,則認為該注入點存在XSS漏桐。其次,該系統通過調用瀏覽器內核的 API,可W檢測網頁是否執行了化vaScript腳本。如果頁面執行了一個彈出提醒框的腳本, 其內容為系統預先設定好的,則可W判斷出當前注入點是存在漏桐的。相比傳統方法,該系 統的檢測模塊對漏桐的判斷更加準確。漏桐檢測的執行過程如圖3所示。
[0080] 表 2
【主權項】
1. 一種可動態判斷XSS漏洞的自動化檢測系統,其特征在于:本系統主要分為爬蟲模 塊、檢測模塊、用戶界面模塊三大模塊,而這三大模塊又包含了若干子模塊以實現核心功 能,其中: (1) 爬蟲模塊強化了爬取頁面和提取注入點的步驟,該模塊使用Ghost.py作為瀏覽器 引擎,采用深度優先爬蟲,不斷地循環抓取網頁存入URL隊列,直到將同域名下的頁面全部 訪問完成,從而獲取大量的頁面以供檢測模塊進行檢測;用于使用了瀏覽器引擎提供的 API,該模塊可以將頁面動態加載完,并觸發頁面中的事件以獲取JavaSricpt或Ajax生成的 新的URL存入URL隊列;對于單個頁面,爬蟲模塊采用BeautifulSoup庫進行解析,通過分析 頁面結構提取非格式化注入點,并用數據結構Form類和Input類保存注入點,用于之后的測 試; (2) 漏洞檢測模塊強化了進行攻擊測試和分析結果的步驟,該模塊包含多個自動化動 態檢測模塊對非格式化注入點和一般注入點進行攻擊向量提交,以及一個自動化動態判斷 模塊用于分析結果,它們同樣使用Ghost.py作為瀏覽器引擎;自動化動態檢測模塊對化注 入點采用的攻擊向量為經過設計后多種可以繞過XSS檢驗的攻擊向量(表1); 表1一些經過設計的攻擊向量這些經過設計的攻擊向量提交后,執行結果交由自動化動態判斷模塊來判斷,它能夠 動態判斷頁面返回后的行為;首先,該系統借助了第三方服務器,如果攻擊向量中含有對該 服務器的請求(測試時采用的均為非惡意的請求),則系統會自動分析第三方服務器的狀 態,判斷返回頁面是否執行了這一請求,如果執行了,則注入點存在XSS漏洞;其次,該系統 通過調用瀏覽器內核的API,可以檢測網頁是否執行了 JavaScript腳本;如果頁面會執行了 一個彈出提醒框的腳本,其內容為系統預先設定好的,則可以判斷出當前注入點是存在漏 洞的;相比傳統方法,該系統的檢測模塊對漏洞的判斷更加準確,幾乎不會出現誤報的現 象。2. 根據權利要求1所述的一種可動態判斷XSS漏洞的自動化檢測系統,其特征在于:本 系統完全由python語言在Windows 64位系統上編寫,在Windows 64位系統上正常運行。3. 根據權利要求1所述的一種可動態判斷XSS漏洞的自動化檢測系統,其特征在于:本 系統的原理是基于Ghost.py的對服務器的黑盒測試,它由爬蟲模塊、漏洞檢測模塊和用戶 界面三個模塊組成; 爬蟲模塊 爬蟲模塊主要是對頁面進行探索,采用遞歸的深度優先算法挖掘同域名下的頁面; 在探索頁面時,還需要進行網頁的動態解析,將頁面動態加載完,并觸發頁面中的事件 以獲取JavaSricpt或Ajax生成的新的URL和注入點,其中的加載頁面由Ghost. py提供的API 完成; 網頁加載完后,爬蟲會將新頁面的URL加入列表中;URL超鏈接一般存在于<a>標簽的 href屬性,對于HTML中的<a>標簽,其href屬性的值可以是任何有效文檔的相對或絕對URL, 包括片段標識符和JavaScr ipt代碼段;一般用戶點擊<a>標簽中的內容時,瀏覽器除了會跳 轉到href屬性指定的URL,也可能會執行JavaScript表達式、方法和函數的列表; 本系統在分析<a>標簽時,會針對不同情況對href的值進行多種處理,將其轉換成一般 URL的形式;若轉換后的URL不在列表中,將存儲至URL列表以用于之后的漏洞檢測; 漏洞檢測模塊 (1)提取注入點 本系統使用Python的Beautiful Soup庫來完成網頁解析;Beautiful Soup是一個用 Python寫的HTML/XML的解析器,它可以很好的處理不規范標記并生成剖析樹,并且提供簡 單又常用的導航,搜索以及修改剖析樹的操作; 由于目前的Web頁面變得越來越復雜,注入點的形式和位置也多種多樣,增加了檢測的 難度;首先,注入點可能隱藏的,需要用戶觸發頁面中的事件后才能生成,這是用傳統靜態 爬蟲技術很難實現的一點,而采用我們的系統,其動態爬蟲模塊可以自動模擬用戶行為執 行頁面中的事件,通過其瀏覽器內核解析腳本,得到事件執行后新的頁面DOM樹;其次,注入 點可能是非格式化的,由于網頁格式越來越多樣化,注入點可能不存在于表單中,也不通過 傳統的submit方式提交,而是點擊某個按鈕、通過JavaScript合成請求提交到服務器;本系 統的爬蟲模塊綜合考慮到這一點,分析總結了各種注入點和交互點的可能的特征并加以判 斷,如表1所述;因此,本系統的爬蟲分析模塊的功能擴大了對頁面中注入點識別的覆蓋率; 具體步驟如算法1描述;通過算法1,我們可以對一股DOM結構中的非格式化注入點進行處理: ① 〈input type =''text〃id = 〃header_search_input〃/> 〈input type = 〃button〃onclick = 〃search($( ,#header_search_input,) .val〇)〃/> ② 〈input type =''text〃id = 〃header_search_input〃/> 〈divXinput type = 〃button〃onclick = 〃search($( ,#header_search_input,) .val ())VXdiv> 當然也包括復雜的情況如: <div>〈input type = 〃text〃id = 〃header_search_input〃/X/div> <div> 〈divXinput type = 〃button〃onclick = 〃search($( ,#header_search_input,) .val ())VX/div> 〈divXspan class = 〃SomeClass〃>Clickable〈/span>〈/div> </div> 此時注入點提取算法會判斷出第一個為input注入點,第二個input及span為交互點, 并將交互點作為列表連接到注入點,然后存儲到Input類中;通過漏洞檢測模塊可以測試出 哪個交互點可以將該注入點提交請求; 通過表單提交的格式化注入點則存儲到Form類中; (2) 自動化提交攻擊向量 本系統使用JavaScript腳本對網頁進行動態的編輯,包括設置注入點的值為XSS攻擊 向量,提交請求至服務器,以及驗證函數的處理等等; 表單有可能存在限制輸入長度,不允許一些非法字符等前端驗證,導致攻擊向量不能 提交;這些驗證事件存在于表單的屬性中,需要將這些屬性移除;之后對表單操作的具體步 驟如算法2描述:(3) 漏洞檢測 本系統采用黑盒測試方法來檢測目標表單是否存在XSS漏洞;漏洞檢測的基本方法是 使用經過設計的攻擊向量來填寫表單并提交;該Cheat Sheet包括多種可以繞過XSS檢驗的 攻擊向量,如表2所示; 該系統的檢測模塊在提交攻擊向量請求后,動態判斷頁面返回后的行為;首先,該系統 借助了第三方服務器開展工作,如果攻擊向量中含有對該服務器的請求(測試時采用的均 為非惡意的請求),則系統會自動分析第三方服務器的狀態,判斷返回頁面是否執行了這一 請求;如果執行了,則認為該注入點存在XSS漏洞;其次,該系統通過調用瀏覽器內核的API, 可以檢測網頁是否執行了 JavaScript腳本;如果頁面執行了一個彈出提醒框的腳本,其內 容為系統預先設定好的,則可以判斷出當前注入點是存在漏洞的;相比傳統方法,該系統的 檢測模塊對漏洞的判斷更加準確。
【文檔編號】G06F21/57GK106022135SQ201610099346
【公開日】2016年10月12日
【申請日】2016年2月23日
【發明人】王丹, 劉源, 趙文兵
【申請人】北京工業大學