溫嵩杰,羅鵬宇,胥小波,2,范曉波
(1.中國電子科技網(wǎng)絡(luò)信息安全有限公司,四川 成都 610041;2.中國電子科技集團公司第三十研究所,四川 成都 610041)
隨著網(wǎng)絡(luò)應(yīng)用和互聯(lián)網(wǎng)技術(shù)的高速發(fā)展,生活更加便利的同時,也產(chǎn)生了大量的安全漏洞??缯灸_本(Cross-Site Scripting,XSS)攻擊是一種高危害、高影響力的網(wǎng)絡(luò)攻擊手段,廣受黑客、高級持續(xù)威脅(Advanced Persistent Threat,APT)組織的青睞。在web 發(fā)展初期,惡意攻擊者針對應(yīng)用層的web 弱點,通過向web 頁面插入惡意的超文本標(biāo)記語言(Hyper Text Markup Language,HTML)代碼,以達(dá)到竊漏cookie 和獲取用戶個人隱私等目的。在web 2.0 時期,當(dāng)用戶瀏覽web 頁面時,攻擊者僅通過掛馬等方式就可執(zhí)行其中的惡意HTML 代碼,就可以完成劫持會話記錄、偷取用戶訪問歷史信息等惡意操作。XSS的出現(xiàn)是web 安全史上的一個里程碑,近年來XSS 攻擊事件層出不窮。在2005年,一位名叫Samy的網(wǎng)友在全球最大的在線交友平臺——MySpace 中發(fā)布了一個XSS 蠕蟲攻擊事件,借助MySpace 網(wǎng)站自身存在的漏洞,在短短幾小時內(nèi),產(chǎn)生了大量的惡意數(shù)據(jù)和垃圾信息在MySpace上傳播,對網(wǎng)站和用戶造成了巨大的經(jīng)濟損失。在2009 年,推特(Twitter)遭遇了來自stalkDaily 網(wǎng)站的蠕蟲病毒傳襲擊,用戶一旦訪問該網(wǎng)站,電腦就會被感染,并會發(fā)送大量的Twitter 垃圾信息,以誘騙其他用戶訪問StalkDaily 網(wǎng)站來感染別的主機。在2011 年,在新浪微博又出現(xiàn)了一次比較大的XSS 漏洞攻擊,“中毒”的微博用戶會自動向自己的粉絲發(fā)送含毒的微博與私信,并自動關(guān)注一位名為hellosamy的用戶,粉絲點擊此惡意鏈接后會再次中毒,以此形成惡意循環(huán),此蠕蟲事件僅持續(xù)了16 分鐘,受影響的用戶就達(dá)數(shù)萬個。此次XSS攻擊事件利用了用戶間的人際關(guān)系,發(fā)布帶有誘惑性字樣的博文,引起別人關(guān)注并點擊,從而得到大范圍的傳播。每年的XSS 攻擊都會造成非常巨大的經(jīng)濟損失,目前已被列為危害最為嚴(yán)重的web 漏洞之一。
XSS 攻擊總體上可分為非持久型XSS 攻擊和持久型XSS 攻擊這兩種類型。非持久型的攻擊是一次性的,往往僅對當(dāng)前的頁面產(chǎn)生影響,而持久型的XSS 攻擊會把攻擊者的數(shù)據(jù)存儲在服務(wù)器端,因此整個攻擊行為將持續(xù)存在。XSS 攻擊從攻擊手段上大體可分為反射型、存儲型和文檔對象模型(Document Object Model,DOM)3 類:反射型是只經(jīng)過后端但不經(jīng)過數(shù)據(jù)庫的一種XSS 攻擊;存儲型XSS 攻擊是既經(jīng)過后端又經(jīng)過數(shù)據(jù)庫的一種攻擊;DOM 型是基于文檔對象的一種漏洞,可以通過統(tǒng)一資源定位符(Uniform Resource Location,URL)傳入?yún)?shù)去控制觸發(fā)條件。在以上3 類攻擊手段中,反射型XSS 攻擊尤為常見,存儲型XSS 攻擊具有較大的危害,DOM 型攻擊手段最為豐富。
為了防范XSS 攻擊,劉海等人[1]提出了一種新的防范XSS 攻擊的架構(gòu),該架構(gòu)采用服務(wù)器端、服務(wù)器代理和客戶端瀏覽器、網(wǎng)頁備份服務(wù)器合作的方式來共同防范XSS 攻擊,該方法不僅能夠防范XSS 攻擊類型,而且對于防止網(wǎng)頁的篡改有著一定的作用,但是由于XSS 攻擊的多樣性,需要人為的維護和改善策略,需要大量的人力。黃文鋒等人[2]提出了一種基于DOM 型的XSS 攻擊防范模型,通過在服務(wù)器端和客戶端合作防范XSS 攻擊,具體是在服務(wù)器端采用隨機數(shù)對DOM 動態(tài)寫入的每一個標(biāo)識元素進(jìn)行標(biāo)識,在客戶端修改腳本解析引擎以獲得更新后的HTML 文本,通過隨機數(shù)來標(biāo)識可信標(biāo)記與不可信標(biāo)記。此方法檢測速度快,檢測精度高,但由于設(shè)計初衷只檢測DOM 型的XSS 攻擊,因此缺乏對其余XSS 攻擊類型的檢測能力。楊美月等人[3]提出了使用機器學(xué)習(xí)技術(shù)識別web 中的XSS攻擊,首先對數(shù)據(jù)進(jìn)行預(yù)處理,其次利用doc2vec進(jìn)行特征提取,最后將特征提取的特征向量作為分類模型的輸入,并訓(xùn)練分類模型。當(dāng)攻擊數(shù)據(jù)分布較為均勻時,此方法的準(zhǔn)確率較高,但對數(shù)據(jù)集的依賴程度較大,對分布不均勻的數(shù)據(jù)集具有較低的識別性能。為了解決數(shù)據(jù)漂移和數(shù)據(jù)分布不均勻的問題,趙澄[4]提出了基于支持向量機(Support Vector Machines,SVM)分類器的XSS 攻擊檢測技術(shù),在大量分析XSS 攻擊樣本和正常樣本的基礎(chǔ)上,提出了代表性的五維特征并將這些特征向量化,然后進(jìn)行算法的訓(xùn)練與測試,通過深度特征到算法模型演練的技術(shù)來進(jìn)行XSS 攻擊識別,能夠有效識別常規(guī)XSS 攻擊及其部分未知和變形攻擊,但由于缺乏較為細(xì)致的數(shù)據(jù)預(yù)處理過程,以至于后續(xù)特征工程無法準(zhǔn)確提取出XSS 攻擊特征,導(dǎo)致后期維護需要不停的數(shù)據(jù)打標(biāo)、特征更新和算法迭代,極大地增加了人力成本。蔣華等人[5]提出了基于行為的XSS攻擊防范方法,該方法結(jié)合動態(tài)污點分析和超文本傳輸協(xié)議(HyperText Transfer Protocal,HTTP)請求分析處理,對應(yīng)用程序中的敏感數(shù)據(jù)進(jìn)行標(biāo)記并跟蹤,以防止XSS 蠕蟲的繁衍,能有效防止XSS 攻擊和0-day 蠕蟲的傳播,但該方法有一部分是手動的,還沒法達(dá)到自動化防范檢查的需求。為了解決自動化檢測等需求,張思聰?shù)热薣6]提出了基于最大熵模型的XSS 攻擊檢測模型。該模型首先通過輸入預(yù)處理模塊對原始輸入進(jìn)行規(guī)范化處理,其次由特征提取模塊將特征序列轉(zhuǎn)化成特征向量,并將特征向量交由最大熵分類器進(jìn)行分類,最后由結(jié)果處理模塊根據(jù)分類的結(jié)果進(jìn)行后續(xù)的處理,此方法在已知條件有限的情況下給出的分類結(jié)果較為準(zhǔn)確,但對存儲型XSS攻擊的檢測效果有待提高。馮倩等人[7]提出了基于Fuzzing的存儲型XSS 漏洞檢測技術(shù),使用遺傳算法來優(yōu)化攻擊樣本,將生成的XSS 攻擊樣本作為Fuzzing的測試用例,以此來提高測試用例的覆蓋率,此方法有效降低了存儲型XSS 攻擊的漏報率,但檢測面較小,無法有效地檢測反射型XSS 攻擊和DOM 型XSS 攻擊。錢麗[8]在研究XSS防御機制上,提出了過濾非法字符和字符轉(zhuǎn)義兩種手段,對用戶輸入的數(shù)據(jù)進(jìn)行嚴(yán)格規(guī)范檢測和字符轉(zhuǎn)義處理,只有符合數(shù)據(jù)規(guī)范和經(jīng)過字符轉(zhuǎn)義處理的輸入信息才被允許執(zhí)行。該防御方法在web 安全漏洞檢測過程中可有效識別一定的XSS 漏洞,但無法檢測新的XSS 變種攻擊。Salas 等人[9]提出的使用滲透測試的方式檢測XSS 漏洞,通過模擬XML格式的攻擊進(jìn)行滲透檢驗,對指定格式的XSS 攻擊具有較好的檢驗效果,但XSS 攻擊變幻豐富,此方法無法全量檢測與識別其余的XSS 惡意攻擊。Jim等人[10]提出了一種基于白名單和DOM 沙盒的安全策略,在客戶端通過修改瀏覽器的方式來支持并執(zhí)行安全策略,使得服務(wù)器端和客戶端合作防范XSS攻擊,此方法能有效抵御部分XSS 攻擊并提高防御精確率,卻缺乏后期及時性,無法及時響應(yīng)與攔截惡意攻擊。Nadji[11]提出了一種基于文檔結(jié)構(gòu)完整性的方法,通過修改客戶端腳本解釋引擎的方式來檢測XSS 攻擊,此方法具有較高的檢測率,但不便于配置與部署。
Web 安全和人們的生活息息相關(guān),在確保給網(wǎng)民帶來快捷服務(wù)的同時,理應(yīng)為網(wǎng)民的財產(chǎn)與隱私保駕護航。自從20 世紀(jì)第一個XSS 攻擊誕生至今,每年都會衍生出新的,且更具威脅的XSS 攻擊,給公司與個人造成了大量的財產(chǎn)損失。而現(xiàn)有的XSS攻擊防范模型無法及時響應(yīng)與部署,對不同類型的XSS 攻擊無法做到全量檢測與攔截。
針對以上問題,本文提出一種基于機器學(xué)習(xí)建模的XSS 攻擊防范檢測方法。該方法將海量數(shù)據(jù)經(jīng)過數(shù)據(jù)加工模塊轉(zhuǎn)換為規(guī)整數(shù)據(jù),并將安全攻防經(jīng)驗用于特征向量的構(gòu)造,然后用機器學(xué)習(xí)技術(shù)訓(xùn)練算法模型,以此對流量進(jìn)行全量、高效、精準(zhǔn)的識別與攔截,發(fā)掘網(wǎng)絡(luò)流量中的XSS 惡意攻擊。
數(shù)據(jù)加工是整個建模的第一步,這是因為現(xiàn)實網(wǎng)絡(luò)流量中充斥著大量的無用干擾信息,且數(shù)據(jù)參差不齊。攻擊者會發(fā)現(xiàn)系統(tǒng)中存在的漏洞,并通過各種復(fù)雜的編碼、轉(zhuǎn)義技術(shù)來混淆和躲避web 安全檢查。整體數(shù)據(jù)加工流程如圖1 所示。
圖1 數(shù)據(jù)加工流程
為了挖掘網(wǎng)絡(luò)流量中隱藏著的真正有意義的信息,通過數(shù)據(jù)加工模塊對原始數(shù)據(jù)進(jìn)行數(shù)據(jù)解析與加工,將混淆視聽的數(shù)據(jù)轉(zhuǎn)換成真正有價值的數(shù)據(jù)。數(shù)據(jù)滲透模塊中包含base64 處理、HTML 轉(zhuǎn)義字符處理、URL 解碼處理、干擾字符處理、HTML 注釋處理、特殊操作符處理等操作。
Base64[12]內(nèi)容是數(shù)據(jù)的一種編碼表示,有一定的加密作用,是網(wǎng)絡(luò)上最常見的用于傳輸8 Bit字節(jié)代碼的編碼方式之一。Base64 編碼可用于在HTTP 環(huán)境下傳遞較長的標(biāo)識信息,在web 攻防中,攻擊者使用Base64 來將URL 中一個較長的標(biāo)識符編碼為一個字符串,用作HTTP 表單中的參數(shù),采用Base64 編碼具有不可讀性,即所編碼的XSS 攻擊數(shù)據(jù)不會直接被安全人員用肉眼所識別。字符轉(zhuǎn)義[13]也稱字符實體,在HTML 中像“<”和“>”這類符號已經(jīng)用來表示HTML 標(biāo)簽,因此不能直接當(dāng)作文本中的符號來使用。為了在HTML 文本中使用這些符號,就需要定義它的轉(zhuǎn)義字符串,且有些字符在ASCII 字符集中沒有定義,也需要使用轉(zhuǎn)義字符串來表示。攻擊者利用了轉(zhuǎn)義字符的原理,當(dāng)需要隱蔽自己的攻擊意圖時會在URL 中隱藏HTML標(biāo)簽,用“"”等字符進(jìn)行HTML的“<”關(guān)鍵符號替代,來迷惑web 安全人員。在互聯(lián)網(wǎng)上傳送URL 只能采用ASCII 字符集,即只能使用英文字母、阿拉伯?dāng)?shù)字和某些標(biāo)點符號,如果包含中文等其余字符時,就需要再使用編碼。攻擊者利用了URL 編解碼原理,將惡意代碼通過URL 編碼[14]后進(jìn)行隱蔽混淆,以逃過web 安全檢索。除了編碼轉(zhuǎn)義等混淆手段,攻擊者也會在URL 中加入干擾字符和注釋信息等,起到蒙蔽視聽的作用。
特征工程是把數(shù)據(jù)加工模塊清洗好的規(guī)整數(shù)據(jù)進(jìn)行加工處理,轉(zhuǎn)換為機器模型可識別的向量化指標(biāo)數(shù)據(jù)。特征工程作為銜接數(shù)據(jù)加工和算法模型的中間橋梁,是整個算法建模流程的重中之重,好的特征工程能夠有效提煉出正常樣本和惡意樣本的差異所在,幫助機器學(xué)習(xí)模型做出正確的抉擇,有效提高模型的檢測性能。
本文將特征分為常規(guī)特征、字符統(tǒng)計特征、特定模式特征和特殊字符特征四大類,共19 個特征。特征分類如圖2 所示。
圖2 特征工程分類
其中信息熵[15]常被用來作為一個系統(tǒng)的信息含量的量化指標(biāo),用于表示一段信息的混雜程度。常見的XSS 攻擊信息中包含的字符種類較多且字符混雜程度較高,信息熵偏高,用信息熵特征能較好地識別出XSS 攻擊,信息熵計算公式:
式中:x為隨機變量;p(x)為輸出概率函數(shù);H(X)為信息熵值。
統(tǒng)計特征用于表示XSS 攻擊信息中某類特殊關(guān)鍵詞[16]的出現(xiàn)頻數(shù)。XSS 攻擊中往往帶有某類特定的惡意關(guān)鍵詞用于惡意函數(shù)或惡意代碼的鏈接傳遞作用,而正常的URL 信息中很少帶有此類關(guān)鍵詞,所以關(guān)鍵詞信息作為一個特征,能很好地區(qū)分正常URL 信息和XSS 攻擊信息,但若單一憑借關(guān)鍵詞的出現(xiàn)頻率來認(rèn)證XSS 攻擊,模型會有較高的誤報率。為了解決高誤報問題,通過反復(fù)地對大量正反樣例進(jìn)行觀察與取證,使特征在涵蓋關(guān)鍵詞信息的同時,會為關(guān)鍵詞設(shè)計其前后特定模式的字符順序,當(dāng)僅出現(xiàn)某單一關(guān)鍵詞時并不會觸發(fā)此類特征,關(guān)鍵詞正則匹配公式:
在URL 信息中會包含一些攻擊者精心構(gòu)造和編排的特定字符,其中局部單一的字符串不具有XSS 攻擊的威脅。當(dāng)其前后字符遵循特定的出現(xiàn)順序時即具備觸發(fā)惡意攻擊,比如JAVASCRIPT 模式的XSS 攻擊,此模式以形式的字符作結(jié)尾,中間以其余字符填充并整體混淆在URL信息中,這種特定模式的字符串用肉眼難以區(qū)分出其危害,本文使用正則匹配發(fā)掘此類字符:
并通過特定模式特征統(tǒng)計其出現(xiàn)頻數(shù),檢測流程如圖3 所示。
圖3 特定模式檢測流程
算法模型是把特征工程加工好的特征進(jìn)行巧妙組合,通過高階決策指標(biāo)對高緯特征進(jìn)行融合、分類并給出最終結(jié)果指示的過程。安全算法模型有別于傳統(tǒng)的入侵檢測系統(tǒng)(Intrusion Detection Systems,IDS)規(guī)則[17],傳統(tǒng)的IDS 規(guī)則通過專業(yè)知識區(qū)分惡意網(wǎng)絡(luò)攻擊,并基于手工和經(jīng)驗的方式來維護檢測規(guī)則和維持檢測性能。IDS 規(guī)則局限于人為經(jīng)驗和繁瑣的工程步驟,而算法模型則通過構(gòu)建復(fù)雜的決策邏輯,發(fā)掘數(shù)據(jù)中真正有用的關(guān)聯(lián)信息,在減輕人工靜態(tài)工作強度的同時可有效提高檢測效率。通常而言,算法模型具有較低的維護成本和較高的檢測準(zhǔn)確率,在安全評估和安全決策方面具有較好的應(yīng)用前景。
本文采用機器學(xué)習(xí)決策樹[18]分類算法進(jìn)行算法建模。決策樹是一種從根節(jié)點開始對數(shù)據(jù)集進(jìn)行測試劃分,并將不同數(shù)據(jù)測試結(jié)果最終劃分成不同葉子節(jié)點的樹狀結(jié)構(gòu)的方法,本質(zhì)上是通過一系列復(fù)雜規(guī)則對數(shù)據(jù)進(jìn)行分類的過程。對于給定的數(shù)據(jù)樣本集合,決策樹C4.5 使用信息增益率來選擇分裂屬性,屬性A的信息增益表達(dá)式:
式中:訓(xùn)練集S通過屬性A劃分為n個子數(shù)據(jù)集,|Si|表示第i個子數(shù)據(jù)集中樣本的數(shù)量,|S|表示在屬性劃分之前的數(shù)據(jù)樣本總量,通過屬性A劃分樣本集之后的信息增益和信息增益率為:
類型為連續(xù)型的屬性進(jìn)行離散化處理,對屬性B的具體取值進(jìn)行升序排列后得到序列:
式中:為屬性B的具體取值。
在序列D中的N-1 種二分方法求得二分閾值:
閾值Tj將數(shù)據(jù)集劃分為兩個子集,并通過計算其信息增益選取N-1 種信息增益最大的分割方式作為屬性B的劃分結(jié)果:
式中:E(S)代表數(shù)據(jù)集進(jìn)行屬性劃分之前的信息熵、(S)代表數(shù)據(jù)集按照屬性B進(jìn)行數(shù)據(jù)劃分之后的信息熵。
決策樹的決策運營邏輯如圖4 所示。
圖4 決策樹運營邏輯
為了防止過擬合的問題,決策樹C4.5 采用一種自頂向下的剪枝方法,通過評價一個葉子節(jié)點在剪枝前與剪枝后對樣本誤判率的高與低,來決定此葉子節(jié)點是否具備剪枝的必要。對于一個覆蓋了m個樣本、e個錯誤樣本的葉子節(jié)點,該葉子節(jié)點的樣本劃分誤判率是,其中p表示懲罰因子。對于一棵有n個葉子節(jié)點的決策樹,其誤判率為:
式中:ei為樹結(jié)構(gòu)中第i個葉子節(jié)點的錯誤樣本數(shù);mi為樹結(jié)構(gòu)中第i個葉子節(jié)點的樣本總數(shù);pn為樹結(jié)構(gòu)中全部葉子節(jié)點的懲罰因子。對于二分類子樹的誤判次數(shù)就是伯努利分布,即可估算出子樹對于誤判次數(shù)的均值和標(biāo)準(zhǔn)差為:
去掉原先的葉子節(jié)點,將子樹替換為新的二分類葉子結(jié)點后,其誤判次數(shù)也滿足伯努利分布,新葉子節(jié)點的誤判率和誤判次數(shù)均值為:
當(dāng)子樹的誤判次數(shù)均值和標(biāo)準(zhǔn)差之和大于對應(yīng)葉子節(jié)點的誤判均值時,則進(jìn)行剪枝操作,剪枝后在整體樹結(jié)構(gòu)中原子樹替換為新的葉子節(jié)點。剪枝條件為:
決策樹是一種白盒模型,對數(shù)據(jù)量的依賴程度較小,且模型的決策邏輯具有可觀測性,相較于其他黑盒模型算法而言,決策樹算法具有更強的可解釋性。決策樹的算法流程如圖5 所示。
圖5 決策樹算法流程
模型訓(xùn)練數(shù)據(jù)集通過網(wǎng)絡(luò)開源共享、公司安全團隊積累、互聯(lián)網(wǎng)流量渠道采集,由共計420 萬條數(shù)據(jù)組成,并在安全數(shù)據(jù)分析專家的指導(dǎo)下進(jìn)行修正和核實整個數(shù)據(jù)集的標(biāo)注評判。數(shù)據(jù)集由330 萬白樣本和90萬黑樣本組成。將整體樣本集按照7∶3分別劃分成用于模型訓(xùn)練和用于模型驗證的數(shù)據(jù)集,模型采用2 分類的方式進(jìn)行結(jié)果評判,并采集線上流量數(shù)據(jù)進(jìn)行模型分析測試,通過準(zhǔn)確率和召回率等評判指標(biāo)來進(jìn)行模型的修正與回溯。通過比較不同方法的性能,得到了如表1 所示的結(jié)果。
表1 不同評估方法的性能比較
如表1 所示,基于機器學(xué)習(xí)建模的XSS 攻擊防范檢測具有較高的準(zhǔn)確率,在提煉IDS 規(guī)則特征的同時,能較好地融合安全專家的業(yè)務(wù)經(jīng)驗知識。本文模型能夠從海量信息中高效準(zhǔn)確發(fā)掘攻擊信息,具有很強的衍生性能,且可維護性強,能有效地降低人力維護成本,在高效運營的同時能及時發(fā)掘攻擊者的真實意圖,并為安全分析人員提供更好的指示,使他們能夠更好地維護網(wǎng)絡(luò)安全環(huán)境。
本文研究了基于機器學(xué)習(xí)建模的XSS 攻擊防范檢測模型,在網(wǎng)絡(luò)流量安全智能檢測領(lǐng)域引入機器學(xué)習(xí)技術(shù),實現(xiàn)了對網(wǎng)絡(luò)流量中跨站腳本攻擊的智能化檢測。通過分析現(xiàn)有檢測方式對XSS 攻擊檢測的不足,并結(jié)合XSS 攻擊靈活多變、混淆復(fù)雜等特點,提出了一種基于安全專家經(jīng)驗學(xué)習(xí)、業(yè)務(wù)信息特征加工和機器學(xué)習(xí)算法建模的檢測方式,能很好地識別并檢測網(wǎng)絡(luò)中的真實XSS 攻擊,解決了傳統(tǒng)檢測方式中誤報高、效率低的難題。此檢測方式能更好地檢測、響應(yīng)和攔截危險網(wǎng)絡(luò)攻擊,具有準(zhǔn)確率高、泛化性強、維護性高的特點,利于即時檢測已知XSS 攻擊和即時發(fā)現(xiàn)未知XSS 威脅,有助于更好地保障網(wǎng)絡(luò)安全生態(tài)環(huán)境。