一種基于模擬瀏覽器行為的xss漏洞檢測系統(tǒng)的制作方法
【技術領域】
[0001]本發(fā)明設及一種基于模擬瀏覽器行為的XSS漏洞檢測系統(tǒng),屬于計算機軟件跨站 腳本漏洞領域。
【背景技術】
[0002] 近年來,隨著Web應用的廣泛使用,Web安全問題也日益突出。0WASP公布的2013 年十大Web應用安全風險中,跨站腳本漏洞XSSKrossSiteScripting)名列第S,該表明 XSS漏洞已成為當前各類網(wǎng)站需共同面對的常見的安全風險之一。
[0003]XSS漏洞的產(chǎn)生是由于來自用戶的不可信數(shù)據(jù)被應用程序在沒有進行驗證,W及 反射回瀏覽器而沒有進行編碼或轉義的情況下進行了處理,導致瀏覽器引擎執(zhí)行了代碼 時。很多網(wǎng)站在開發(fā)過程中忽略了必要的輸入驗證,缺乏足夠的安全性,該樣的網(wǎng)站就很容 易被跨站腳本攻擊。通常攻擊者會將惡意腳本提交到存在XSS漏洞的Web頁面,當客戶端 用戶瀏覽該頁面時,腳本會被瀏覽器自動解析執(zhí)行,達到掛馬、釣魚、盜取用戶Cookie、劫持 用戶Web行為等目的,因此,對XSS漏洞的檢測是非常必要的。
[0004] -般地,Web頁面中可能存在XSS漏洞的地方稱為注入點。如何在大量頁面中找到 潛在的注入點并進行檢測是防范XSS漏洞的關鍵之一,同時也是一項繁雜的工作。在網(wǎng)站 內容日益豐富的今天,人工檢測注入點顯然是不現(xiàn)實的,而需要盡可能采用自動化方法。網(wǎng) 絡爬蟲對于基于網(wǎng)絡的自動化測試工具是重要的基礎功能,它可W從一個起始U化開始, 通過分析網(wǎng)頁的內容,運用相關算法找到新的U化并不斷地循環(huán)抓取網(wǎng)頁,直到滿足一定 的結束條件,從而獲取大量的頁面W尋找注入點。找到注入點后,測試工具再構造攻擊測試 請求發(fā)送給目標站點,并根據(jù)目標站點的回應信息來判斷是否存在漏洞。
[0005] 目前針對自動化XSS漏洞檢測工具的研究還不是很充足,傳統(tǒng)的方法均是W靜態(tài) 爬蟲爬取頁面,通過獲取目標站點的目錄結構、對各個頁面的源碼進行解析,將其中的表單 信息提取出來,W達到尋找注入點的目的。然而,注入點很可能隱藏在網(wǎng)頁的動態(tài)內容中, 需要通過用戶操作,如點擊某個按鈕,使瀏覽器解析化vaScript或加載Ajax才能生成。傳 統(tǒng)爬蟲由于無法模擬瀏覽器行為,很難解析化vaScript或加載Ajax,從而忽略了隱藏式注 入點。同時在頁面解析時,它們還需要提取整個表單內容,獲取表單的屬性W分析向服務器 提交數(shù)據(jù)的方式才能提交攻擊向量,比較復雜,并且在漏洞檢測方面不能動態(tài)地分析目標 站點的回應信息,因此未必能判斷出XSS漏洞是否存在。
【發(fā)明內容】
[0006]本發(fā)明采用動態(tài)分析,通過檢查Web應用程序運行時的行為來檢測XSS漏洞,設計 并實現(xiàn)了W化ost.py庫為基礎的爬蟲框架。該系統(tǒng)框架使用黑盒測試判斷XSS漏洞是否 存在的準確率更高。
[0007] 為達到W上發(fā)明目的,本發(fā)明采用的技術方案為一種基于模擬瀏覽器行為的XSS 漏洞檢測系統(tǒng),本系統(tǒng)完全由python語言在Windows64位系統(tǒng)上編寫,在Windows64位 系統(tǒng)上正常運行。同時,本系統(tǒng)具有較強的通用型且支持其它操作系統(tǒng)。
[0008] 本系統(tǒng)總體設計包括爬蟲模塊、漏洞檢測模塊兩大模塊;該兩大模塊又包含了若 干子模塊W實現(xiàn)核屯、功能,其中:
[0009] (1)爬蟲模塊包含頁面探索模塊和網(wǎng)頁解析模塊兩個子模塊,兩個子模塊共同使 用化ost.py作為瀏覽器引擎,共享U化列表并對其進行操作。頁面探索模塊實現(xiàn)探索頁面 對功能,而網(wǎng)頁解析模塊則實現(xiàn)網(wǎng)頁解析功能。頁面探索模塊使用遞歸的深度優(yōu)先爬蟲,不 斷地循環(huán)抓取網(wǎng)頁存入U化隊列,直到將同域名下的頁面全部訪問完成,從而獲取大量的 頁面W尋找注入點;網(wǎng)頁解析模塊從URL隊列中提取出頁面的URL鏈接,將頁面動態(tài)加載 完,并觸發(fā)頁面中的事件W獲取化vaSricpt或Ajax生成的新的U化和注入點。其中,新的 U化也會存入U化隊列,等待頁面探索模塊的訪問。
[0010] 網(wǎng)頁解析模塊實現(xiàn)功能的步驟包括,
[0011] 1)事件的捜集,尋找網(wǎng)頁中可能解析化vaScript和加載Ajax的點擊事件并觸 發(fā);
[0012] 2)U化捜集,將新的U化放入待訪問的U化列表用于探索頁面;
[001引如注入點捜集,用于之后的漏洞檢測。
[0014] (2)漏洞檢測模塊:該模塊包含自動檢測模塊和漏洞判斷模塊兩個子模塊,兩個 子模塊共同使用化ost.py作為瀏覽器引擎,自動檢測模塊對注入點自動填充攻擊向量,采 用的攻擊向量為RSnake提供的化eat化eet,它包括多種繞過XSS檢驗的攻擊向量。該些 經(jīng)過設計的攻擊向量提交后,執(zhí)行結果交由漏洞判斷模塊來判斷,如果存在漏洞的話,頁面 會執(zhí)行一個彈出提醒框的腳本,其內容為XSS,此時基于化ost.py引擎提供的wait_for_ aledO函數(shù)檢測是否有提醒框出現(xiàn),即可檢測網(wǎng)頁是否執(zhí)行了腳本,直接判斷出當前注入 點是否有漏洞。
[0015] 在探索頁面前,還需要進行網(wǎng)頁解析,將頁面動態(tài)加載完,并觸發(fā)頁面中的事件W 獲取化vaSricpt或Ajax生成的新的U化和注入點。其中的加載頁面由化ost.py提供的 API完成,
[0016] 本系統(tǒng)使用Python的BeautifulSoup庫來完成網(wǎng)頁解析。BeautifulSoup是一 個用Python寫的HTML/XML的解析器,用W處理不規(guī)范標記并生成剖析樹,并且提供簡單又 常用的導航,捜索W及修改剖析樹的操作。
[0017] 綜上所述,為了更好地進行自動化檢測,本系統(tǒng)實現(xiàn)了W下兩個方面的功能;①能 夠解析化vaScript和加載AjaxW得到頁面中隱藏式注入點的支持網(wǎng)絡爬蟲運行的框架。 ②通過提交攻擊向量W判斷XSS漏洞是否存在的高效方法。
[0018] 該核屯、庫包括re,pywebfuzz,曲ost,bs4,pySide,pyQt,該些庫在所有主流的操 作系統(tǒng)上運行,因此很好的實現(xiàn)跨平臺移植。
[0019] 該系統(tǒng)完全采用python語言開發(fā),具有易于維護和進行二次開發(fā)的特點,對XSS 漏洞的檢測與研究有非常重要的應用價值。
【附圖說明】
[0020] 圖1系統(tǒng)總體架構(按模塊)。
[0021] 圖2U化處理模型設計。
[0022] 圖3漏洞檢測流程設計。
【具體實施方式】
[0023] 本系統(tǒng)的原理是基于化ost.py的對服務器的黑盒測試,它由爬蟲模塊和漏洞檢 測模塊兩個部分組成。系統(tǒng)架構如圖1所示。
[0024] 1. 1爬蟲模塊
[0025] 爬蟲模塊實現(xiàn)探索頁面功能和網(wǎng)頁解析功能。探索頁面的爬蟲使用本文提出的遞 歸的深度優(yōu)先算法,僅挖掘同域名下的頁面。該算法描述如算法1所示。
[0026] 算法1.頁面探索的深度優(yōu)先遞歸算法
[0027] 輸入;起始網(wǎng)站U化
[002引輸出;W輸入U化為起點爬取到的所有同域名頁面U化
[0029] 1.設置最大深度MAX_DEPTH;
[0030] 2.設置當前深度depth=0;
[003。 3.如果當前深度大于最大深度,結束;否則,執(zhí)行步驟4 ;
[00礎 4.訪問當前U化;
[0033] 5.獲取頁面所有U化存入URL_List;
[0034] 6.如果URL_List為空,結束;否則執(zhí)行步驟7;
[003引將URL_List中下一個U化作為當前URL當前深度加1,執(zhí)行步驟3 ;
[0036] 在探索頁面前,還需要進行網(wǎng)頁解析,將頁面動態(tài)加載完,并觸發(fā)頁面中的事件W 獲取化vaSricpt或Ajax生成的新的U化和注入點。其中的加載頁面由化ost. py提供的 API完成,
[0037] 網(wǎng)頁解析主要完成S個功能,一是事件捜集,尋找網(wǎng)頁中可能解析JavaScript和 加載Ajax的點擊事件并觸發(fā);二是U化捜集,將新的U化放入待訪問的U化列表用于探索 頁面;=是注入點捜集,用于之后的漏洞檢測。
[0038] 本系統(tǒng)使用Python的Beautiful Soup庫來完成網(wǎng)頁解析。Beautiful Soup是一 個用Python寫的HTML/XML的解析器,它可W很好的處理不規(guī)范標記并生成剖析樹,并且提 供簡單又常用的導航,捜索W及修改剖析樹的操作。
[00測(1)觸發(fā)事件
[0040] 觸發(fā)事件時,使用Beauti化1 Soup庫捜索帶有事件屬性的標簽,之后用化ost. py模擬用戶點擊觸發(fā)事件。對事件進行點擊后可能使瀏覽器解析化vaScript和加載Ajax,產(chǎn) 生D0M元素的改變或者U化的跳轉,對此采取不同的方式應對。如果跳轉到新的U化,存儲 當前冊L并返回之前頁面即可,而產(chǎn)生D0M元素則需再次尋找是否出現(xiàn)了新的事件,直至不 再產(chǎn)生D0M元素為止,步驟如算法2描述:
[00