許丹丹 徐 洋 張思聰 付子爔
(貴州師范大學(xué)貴州省信息與計算科學(xué)重點實驗室 貴州 貴陽 550001)
近年來,Web安全形勢日益嚴峻,政府和企業(yè)網(wǎng)站頻繁發(fā)生的安全事件,對其聲譽和利益造成了巨大的損失。在互聯(lián)網(wǎng)+時代,實體經(jīng)濟與互聯(lián)網(wǎng)融為一體,在線視頻、電子商務(wù)均采用了Web應(yīng)用,大量的個人隱私數(shù)據(jù)通過Web應(yīng)用程序被傳送和處理。Web應(yīng)用程序作為人們?nèi)粘I钪胁荒苋鄙俚囊徊糠郑诮o人們帶來方便的同時,其自身存在的漏洞也讓用戶暴露于危險之中[1]。跨站腳本(Cross Site Scripting, XSS)是眾多Web安全漏洞中具有極大影響力和危害力的一種漏洞攻擊,近年來一直排列于Web應(yīng)用安全漏洞的前三名。攻擊者利用網(wǎng)站中存在的XSS漏洞,將含有惡意的代碼腳本注入到網(wǎng)頁中,當(dāng)使用者瀏覽該頁面或進行單擊操作時,它將觸發(fā)惡意代碼、實現(xiàn)cookie盜取、網(wǎng)絡(luò)釣魚欺騙、會話劫持等攻擊行為。因此,對跨站腳本的攻擊檢測極其重要。
李潔等[2]針對文檔對象模型(Document object model,DOM)漏洞進行了研究,提出了一種基于動態(tài)污點傳播模型的DOM型XSS漏洞檢測算法。谷家騰等[3]提出了基于動態(tài)分析的XSS漏洞檢測模型。Wang等[4]提出了一個檢測新的技術(shù)攻擊模式,基于HTML5和CROS屬性規(guī)則在瀏覽器設(shè)計一個過濾器來檢測XSS攻擊,并提供了一個系統(tǒng)模型判斷被攔截的請求是否為惡意。Nunan等[5]應(yīng)用網(wǎng)頁的自動分類方法對XSS攻擊進行檢測,其基于URL和網(wǎng)頁文檔的特征分類。Wang等[6]提出了使用一種改進的N-gram模型來檢測社交網(wǎng)絡(luò)中的XSS攻擊。Vishnu等[7]提出了使用機器學(xué)習(xí)算法來預(yù)測XSS攻擊。張思聰?shù)萚8]提出了利用最大熵模型進行XSS攻擊檢測的方法。趙澄等[9]提出了基于支持向量機(Support Vector Machine,SVM)分類器的機器學(xué)習(xí)方法,對XSS攻擊進行檢測。
以上學(xué)者主要是利用了靜態(tài)分析、動態(tài)分析與機器學(xué)習(xí)方法對XSS攻擊進行檢測。但靜態(tài)分析方法很容易出現(xiàn)誤報和漏報的情況,且靜態(tài)分析具有耗時長、技術(shù)能力要求高的缺點。而動態(tài)分析方法具有特征碼的自動提取能力較弱且效率低的缺點。機器學(xué)習(xí)方法主要是依據(jù)統(tǒng)計特征實現(xiàn)對跨站腳本的分類,效果要比靜態(tài)分析與動態(tài)分析好,但是統(tǒng)計特征的提取需要豐富的實踐經(jīng)驗,且攻擊腳本的數(shù)量增大時,淺層的機器學(xué)習(xí)方法已經(jīng)不能很好地從大量的數(shù)據(jù)中對攻擊腳本和正常腳本進行分類。近年來,可以處理大量數(shù)據(jù)的深度學(xué)習(xí)方法在網(wǎng)絡(luò)安全領(lǐng)域逐漸應(yīng)用于實踐,張思聰?shù)萚10]提出了基于dCNN的入侵檢測方法,在入侵檢測中應(yīng)用了深度學(xué)習(xí)方法。foxscheduler[11]采用循環(huán)神經(jīng)網(wǎng)絡(luò)中的長短期記憶網(wǎng)絡(luò)(LSTM)模型做XSS攻擊檢測,證明了利用深度學(xué)習(xí)方法做XSS攻擊檢測的可行性。門控循環(huán)單元(Gated Recurrent Unit,GRU)比LSTM的結(jié)構(gòu)更簡單,訓(xùn)練時參數(shù)的數(shù)量也將減少,更容易收斂,不容易出現(xiàn)過擬合,計算代價低、運算速度快[12]。
本文提出了基于DCNN-GRU模型的深度學(xué)習(xí)方法進行跨站腳本攻擊檢測,使用 foxscheduler數(shù)據(jù)集[11]進行對比實驗。
深度卷積神經(jīng)網(wǎng)絡(luò)(DCNN)是最近幾年被高度使用的具有高效識別能力的卷積神經(jīng)網(wǎng)絡(luò),其自適應(yīng)能力與學(xué)習(xí)能力也很高,并且DCNN還可以共享局部權(quán)值[13],可以降低網(wǎng)絡(luò)的復(fù)雜度,被廣泛應(yīng)用于人臉特征識別、圖像分類、語音處理、行為認知等領(lǐng)域。一維DCNN工作原理為:每個輸出時間步都是利用輸入序列在時間維度上的一小段得到的。其網(wǎng)絡(luò)架構(gòu)包含一維卷積層、最大池化層、全局池化層或Flatten層,最后輸出層可用于分類。因為一維卷積能夠識別序列中部分模式,也就是說對每個序列段執(zhí)行相同的輸入變換,在句子中任意一個地方學(xué)到的模式隨后便能夠在其他地方被識別出來,這種特性就讓一維DCNN對時間平移來講有平移不變性。在解決某些序列問題時,實現(xiàn)的效果要比循環(huán)神經(jīng)網(wǎng)絡(luò)更好,計算代價通常更小。針對時序預(yù)測、文本分類等簡易問題,簡單的一維DCNN可以代替循環(huán)神經(jīng)網(wǎng)絡(luò),處理速度更快。
循環(huán)神經(jīng)網(wǎng)絡(luò)(Recurrent neural network, RNN)主要用來處理時序問題,即上文與下文具有相互依賴關(guān)系的問題,但是隨著距離逐步增大,RNN學(xué)習(xí)到連接較遠信息的能力就會降低,這個主要是針對具有長期依賴關(guān)系的問題,且隨著時間間隔的變大,梯度消失、梯度爆炸問題[14]就越容易出現(xiàn)。為了解決這兩個問題,提出門控機制,在學(xué)習(xí)時通過信息的積累速度進行管理,可以有選擇地將新學(xué)到的信息加入進去和將之前積累的無用信息遺忘,被稱為基于門控的循環(huán)神經(jīng)網(wǎng)絡(luò)(Gated RNN)[15]。LSTM與GRU 是最常用的基于門控的循環(huán)神經(jīng)網(wǎng)絡(luò)。LSTM的工作原理就是允許過去的信息稍后重新進入,從而解決梯度消失問題,其網(wǎng)絡(luò)是通過遺忘門、輸入門和輸出門這三個門控機制來控制信息傳遞的路徑[16],GRU的工作原理與LSTM相同,只是比LSTM少一個門控機制,其網(wǎng)絡(luò)中只有更新門與復(fù)位門,將LSTM中的輸入門與遺忘門簡化為一個門,稱為更新門。
XSS的關(guān)鍵詞具有很強的關(guān)聯(lián)性,體現(xiàn)了XSS攻擊腳本的依賴性。XSS攻擊檢測通常被當(dāng)作二分類問題,一維DCNN在處理時序問題時具有很快的速度,但是針對數(shù)據(jù)順序比較重要的序列數(shù)據(jù),效果不如RNN。RNN常用來解決時序方面的問題,可以很好地表達出下文與上文的代碼調(diào)用關(guān)系,且GRU作為RNN的改進模型具有更為簡單的內(nèi)部結(jié)構(gòu),參數(shù)更少,這樣可以使得內(nèi)部的計算更為簡單[17],簡化攻擊檢測的步驟,提高檢測效率。本文依據(jù)一維DCNN快速處理時序問題的能力與GRU模型可以處理上下文具有長期依賴關(guān)系問題的能力,將DCNN和GRU兩種深度學(xué)習(xí)模型相結(jié)合,提出了DCNN-GRU模型進行XSS攻擊檢測。
DCNN-GRU神經(jīng)網(wǎng)絡(luò)模型如圖1所示,首先通過卷積進行文本特征的提取,利用池化層把卷積特征整合,進行Dropout操作,避免發(fā)生過擬合,然后將特征放入GRU神經(jīng)網(wǎng)絡(luò)中進行訓(xùn)練,再把訓(xùn)練特征輸入全連接層中,利用Softmax完成分類處理。
圖1 DCNN-GRU模型圖
一維卷積層取卷積核的數(shù)量為64,長度為3,對1×530的詞向量進行步長為1的卷積操作,獲得64個相對應(yīng)的特征向量,即通過64個卷積核來獲取64個相應(yīng)的特征,所以這個卷積層的輸出為530×64。
一維池化層主要是對卷積層進行降維處理,壓縮數(shù)據(jù),減少參量,避免過擬合,同時其泛化能力可以得到提高。本文選擇了最大池化,最大池化可以降低卷積層參數(shù)誤差造成估計均值的偏移,池化層的窗口長度為2,所以在經(jīng)過池化層操作后,輸出數(shù)據(jù)為265×64矩陣。
Dropout層主要是在訓(xùn)練過程中每次更新訓(xùn)練參數(shù)時,依據(jù)一定的概率隨機斷開輸入神經(jīng)元,避免出現(xiàn)過擬合,本層的概率定為0.5。
GRU層是用來解決上下文長期依賴的問題,避免在卷積和池化操作后丟失上下文調(diào)用與傳遞的關(guān)系,在模型中的職責(zé)是保存時序信息,起到門控作用。GRU層的輸出維度為128,所以在經(jīng)過GRU層之后,就會輸出265×128矩陣。
Flatten層主要是完成從GRU層到全連接層的過度,輸入為265×128的矩陣經(jīng)過Flatten層就轉(zhuǎn)化成33 920維的特征向量。
輸出層利用Softmax實現(xiàn)分類任務(wù),把Flatten層輸出的33 920維的特征向量映射到兩個神經(jīng)元上進行分類。
當(dāng)前流行的優(yōu)化器主要有SGD、RMSProp、AdaDelta和ADAM。本文模型選用的優(yōu)化器為ADAM,它由Kingma等[18]提出,將AdaGrad與RMSProp的優(yōu)點相結(jié)合,其實現(xiàn)簡單、計算效率高、對內(nèi)存的需求小,梯度的伸縮變換不會影響參數(shù)的更新、可以自動調(diào)整學(xué)習(xí)率、適用于大規(guī)模數(shù)據(jù)場景等。
ADAM的算法表示:
(1)
實驗用到的損失函數(shù)為交叉熵損失函數(shù),它可以提供無偏估計,是使用最為廣泛的一個代理損失。在解決分類的問題時,為求解最小化問題而構(gòu)造出的代理損失函數(shù)表達式為:
(2)
式中:y∈(0,1)。本文用到的分類器是Softmax分類,其表達式為:
(3)
把含有任一實數(shù)的K維的x向量,壓縮到K維的實向量中,讓所有元素值都在(0,1)這個區(qū)間,且元素之和為1。
跨站腳本檢測過程包含獲取數(shù)據(jù)集、數(shù)據(jù)集分詞并向量化、量化后的數(shù)據(jù)預(yù)處理、模型訓(xùn)練、分類器分類等部分??缯灸_本攻擊檢測算法如算法1所示。
算法1跨站腳本攻擊檢測算法
1. word is “script”“alter” and other html word
2. datas is normal html request and cross-site attack script
3. i is a single sample of the test-data
4. for word in datas do
5. train word using the word2vec model
6. obtain data-set
7. process data-set obtain train-data and test-data
8. end for
9. train the DCNN-GRU model with train-data
10.for i in test-data do
11. detect i using the trained DCNN-GRU model
12. end for
本次實驗環(huán)境是在Windows 10操作系統(tǒng)中,處理器為Intel?CoreTMi5-8250U,8 GB內(nèi)存,顯卡為顯存2 GB的NVIDIA GeForce MX150環(huán)境下實現(xiàn)。實驗采用的語言為Python,框架為Keras,后端為TensorFlow。數(shù)據(jù)集采用文獻[11]中的數(shù)據(jù)集,約24萬條,包含4萬條從xssed爬取的用作正樣例的黑樣本和另外約20萬條無XSS攻擊的http請求用作負樣例。選取70%作為訓(xùn)練集,用于訓(xùn)練網(wǎng)絡(luò)模型,30%作為測試集用來驗證模型對XSS攻擊的檢測能力。
數(shù)據(jù)的處理由Word2vec提供,可以通過一個詞預(yù)測其周圍詞的Skip-gram模型,Skip-gram模型由輸入層、映射層和輸出層組成[19]。Skip-gram模型就是依據(jù)當(dāng)前的某個詞來預(yù)測其周圍詞的向量,通過Word2vec轉(zhuǎn)換后的詞向量不僅把詞表示成分布式的詞向量,而且還可以捕獲詞之間存在的相似關(guān)系,經(jīng)過代數(shù)運算就可以把類似單詞計算出。
圖3顯示了對一條跨站腳本攻擊數(shù)據(jù)進行特征提取的一個實例。用“0”替換數(shù)字,把超鏈接用“http//u”替換,進行范化處理。然后進行分詞操作,分詞原則為:引號內(nèi)包含的內(nèi)容,鏈接、標(biāo)簽<>、開頭、參數(shù)名、函數(shù)體等。文本經(jīng)過分詞后就可以轉(zhuǎn)化為深度學(xué)習(xí)要用到的向量,在這里應(yīng)用One-Hot編碼,一個詞表可以通過One-Hot編碼表示成稀疏向量,這個向量中除了詞的維度是1,其他的維度都是0。最后再量化處理,使用Word2vec模型進行訓(xùn)練,把稀疏向量轉(zhuǎn)化為嵌入式詞向量。從圖2中可以發(fā)現(xiàn)這條攻擊數(shù)據(jù)最終變成了一個詞向量,這個詞向量可以作為攻擊檢測模型的一個輸入。
圖2 Word2vec模型數(shù)據(jù)處理圖
準(zhǔn)確率表示被正確預(yù)測出來的真正例和真負例樣本占總樣本的比例,其計算公式為:
(4)
精確率表示真正例在實際檢測出來的正例中所占的比例,其計算公式為:
(5)
召回率表示正例樣本中被正確預(yù)測的概率,其計算公式為:
(6)
F1值是召回率與精確率的一個調(diào)和均值,是對召回率與精確率的一個綜合評價,其計算公式為:
(7)
式中:TP指將實際上是正例的樣本預(yù)測為正樣本;TN指將實際上是負例的樣本預(yù)測為負樣本;FP指將實際上是負例的樣本預(yù)測為正樣本(誤報);FN指將實際上是正例的樣本預(yù)測為負樣本(漏報)。
訓(xùn)練時將批尺寸的大小設(shè)定為512,每訓(xùn)練一個批次的數(shù)據(jù),就輸出當(dāng)前訓(xùn)練的損失值(Loss)與準(zhǔn)確率(ACC),訓(xùn)練完成后保存當(dāng)前的訓(xùn)練模型,在訓(xùn)練模型過程中存儲當(dāng)前訓(xùn)練網(wǎng)絡(luò)時設(shè)定的多項權(quán)重值,在測試環(huán)節(jié)可以通過加載模型直接使用。在訓(xùn)練階段,Loss與ACC的變動趨勢如圖3所示。
圖3 準(zhǔn)確率/損失值
可以看出,隨著訓(xùn)練批次接近80次,準(zhǔn)確率呈快速增長趨勢,損失值也以快速下降趨勢變化;當(dāng)訓(xùn)練批次大于120次時,準(zhǔn)確率和損失值的曲線變化逐步趨于平緩,準(zhǔn)確率保持在0.99之上,而損失值則低于0.03。
測試階段,通過加載在訓(xùn)練階段保存的包含有已設(shè)置好的多項權(quán)重值的模型文件,就可以用該模型進行測試。為了證明模型的檢測能力,隨機選取了五次測試結(jié)果作為樣本,測試準(zhǔn)確率、精確率、召回率和F1值如表1所示。
表1 DCNN-GRU模型測試結(jié)果(%)
為了驗證DCNN-GRU組合模型在檢測XSS攻擊時的檢測能力,將DCNN-GRU模型與單一的DCNN、LSTM、GRU模型進行比較。使用同樣的數(shù)據(jù)集完成對三個單一模型的訓(xùn)練與測試,并完成對這四個模型的訓(xùn)練結(jié)果與測試結(jié)果的對比,其結(jié)果如圖4所示??梢钥闯?,DCNN-GRU模型的準(zhǔn)確率明顯在各個訓(xùn)練批次上都高于其他三個模型,準(zhǔn)確率最終穩(wěn)定在0.99以上,其次是GRU模型,準(zhǔn)確率低于0.987,LSTM模型的準(zhǔn)確率低于0.985,最低的是DCNN模型,其準(zhǔn)確率在0.982。
圖4 準(zhǔn)確率對比圖
圖5是訓(xùn)練階段DCNN、GRU、LSTM和DCNN-GRU四個模型的損失值對比折線圖,可以看出,DCNN-GRU模型的損失值在各個訓(xùn)練批次上明顯低于其他三個模型,損失值最終穩(wěn)定于0.025,GRU模型與LSTM模型的損失值曲線圖在80批次后幾乎重合,損失值高于0.03,DCNN的損失值高于0.045。
圖5 損失值對比
表2的測試結(jié)果是隨機選出來的一組結(jié)果,同時增加了一組SVM的測試結(jié)果,可以看到DCNN-GRU模型的測試數(shù)據(jù)最高,表明DCNN-GRU模型的實驗結(jié)果最好。
表2 測試結(jié)果對比(%)
表3是訓(xùn)練時間的對比結(jié)果,可以看出,DCNN-GRU模型的訓(xùn)練時間更短,如果實驗環(huán)境的配置更高,將會進一步縮短訓(xùn)練時間,也能進一步提高檢測效率。
表3 訓(xùn)練時間對比
綜上所述, DCNN-GRU模型與DCNN、GRU、LSTM及SVM模型相比,不僅大大縮短了訓(xùn)練時間,其測試結(jié)果的準(zhǔn)確率、召回率、精確率也是最高的。
本文針對XSS的攻擊檢測提出了DCNN-GRU模型,采用Kears框架完成模型的搭建。利用一維DCNN模型在處理時序問題時的快速優(yōu)勢和GRU模型結(jié)構(gòu)簡單、易收斂、不容易出現(xiàn)過擬合且計算代價低的特點,將兩個模型相結(jié)合,提出的DCNN-GRU模型既可以提升檢測XSS攻擊的速度,又可以保證在檢測時充分考慮上下文相互依賴的問題,提高檢測的準(zhǔn)確率。通過使用 foxscheduler數(shù)據(jù)集進行的對比實驗表明,DCNN-GRU模型檢測效果明顯優(yōu)于傳統(tǒng)SVM模型和DCNN、GRU和LSTM三種深度學(xué)習(xí)模型。
本文只是使用DCNN-GRU模型針對XSS一種漏洞攻擊進行檢測,未來將研究DCNN-GRU模型對SQL注入、緩沖區(qū)溢出、跨站請求偽造等多種Web漏洞檢測的適用性。