李 苑,王國(guó)胤,李智星,王化明,周 政,姚鐘毓,梁馨元
(重慶郵電大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院 計(jì)算智能重慶市重點(diǎn)實(shí)驗(yàn)室 重慶 400065)
互聯(lián)網(wǎng)為人們提供了優(yōu)質(zhì)的工作與生活環(huán)境,但同時(shí)也給人們帶來(lái)了一定的安全隱患.WordPress SEO by Yoast插件在2015年被曝出有高危的SQL注入漏洞,該漏洞導(dǎo)致了大量敏感信息的泄露.2016年,2.7億的Gmail、Yahoo和Hotmail賬號(hào)遭到泄露,黑客將竊取得到的數(shù)據(jù)進(jìn)行交易.2017年,GitHub企業(yè)版被曝出具有SQL注入漏洞,本次漏洞的產(chǎn)生是由文件中內(nèi)置的對(duì)象關(guān)系映射造成的.
為了解決這些攻擊造成的威脅,越來(lái)越多的學(xué)者在網(wǎng)絡(luò)異常檢測(cè)這一領(lǐng)域開(kāi)展了科學(xué)研究.文獻(xiàn)[1]指出大多數(shù)的攻擊是通過(guò)惡意的統(tǒng)一資源定位符(unified resource locator,URL)所發(fā)出的請(qǐng)求造成的.Vishnu等人[2]采用機(jī)器學(xué)習(xí)方法如貝葉斯、支持向量機(jī)等來(lái)預(yù)測(cè)跨站腳本攻擊(XSS攻擊).文獻(xiàn)[3]利用人工審核的方式對(duì)一些PHP源代碼進(jìn)行分類(lèi).然而,現(xiàn)存的這些方法在研究的過(guò)程中大多數(shù)是使用人工特征工程進(jìn)行的,因此它們?nèi)匀挥幸恍﹩?wèn)題亟待解決.首先,人工選擇特征和一些先驗(yàn)知識(shí)的方式是無(wú)法適應(yīng)網(wǎng)絡(luò)的迅猛發(fā)展和極速演變的.例如在MySQL 5.0之后的版本中,/*!50000 select */中的select會(huì)被當(dāng)作是一個(gè)關(guān)鍵字來(lái)被執(zhí)行,而在MySQL 5.0以前的版本中,select是被當(dāng)作注釋而不被執(zhí)行的.其次,惡意代碼通常是隱藏在攻擊者發(fā)出的看似正常的請(qǐng)求中,但是現(xiàn)有的大多數(shù)基于機(jī)器學(xué)習(xí)的研究方法只能識(shí)別并判斷出這些網(wǎng)絡(luò)請(qǐng)求是否為異常,但無(wú)法對(duì)異常請(qǐng)求中的惡意代碼區(qū)域進(jìn)行定位.例如URL中/search.html?kw=../../../../winnt/win.ini $%$00.htm.它包含的“../”這一小部分是用于嘗試訪(fǎng)問(wèn)敏感系統(tǒng)文件路徑的.
文獻(xiàn)[4]在短文本分類(lèi)任務(wù)的研究工作中使用卷積神經(jīng)網(wǎng)絡(luò)進(jìn)行文本分類(lèi).文獻(xiàn)[5]嘗試使用聚類(lèi)、主成分分析和關(guān)聯(lián)規(guī)則挖掘?qū)θ罩具M(jìn)行分析來(lái)檢測(cè)網(wǎng)絡(luò)中的異常情況.隨著深度學(xué)習(xí)的迅猛發(fā)展,深度學(xué)習(xí)也被應(yīng)用于異常檢測(cè)中.文獻(xiàn)[6]將3個(gè)神經(jīng)網(wǎng)絡(luò)組合進(jìn)而對(duì)URL進(jìn)行分類(lèi)檢測(cè),他們首先使用第1個(gè)神經(jīng)網(wǎng)絡(luò)生成一些URL,隨后利用第2個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)對(duì)其進(jìn)行分類(lèi),最后利用第3個(gè)神經(jīng)網(wǎng)絡(luò)來(lái)檢驗(yàn)給定的URL是否為惡意的URL.文獻(xiàn)[7]提出了DeepLog方法,該方法結(jié)合深度學(xué)習(xí),可以從日志本身正常執(zhí)行的數(shù)據(jù)中進(jìn)行學(xué)習(xí),得到相應(yīng)的日志模式.面對(duì)復(fù)雜且多變的網(wǎng)絡(luò)環(huán)境,我們需要能夠有效監(jiān)測(cè)未知攻擊的方法.
Conneau[8]提出一個(gè)新的VD-CNN方法,該方法可以隨著網(wǎng)絡(luò)層深度的增加,利用小規(guī)模的卷積神經(jīng)網(wǎng)絡(luò)和池化操作來(lái)完成文本分類(lèi)的工作.卷積神經(jīng)網(wǎng)絡(luò)能夠進(jìn)行特征自學(xué)習(xí),可以有效地避免人工特征工程所帶來(lái)的弊端[9],但是這些方法無(wú)法對(duì)惡意代碼片段進(jìn)行定位.神經(jīng)網(wǎng)絡(luò)中的注意力機(jī)制最初是起源于人類(lèi)的視覺(jué)注意力機(jī)制[10],目前注意力機(jī)制被成功地應(yīng)用于很多任務(wù)中,例如閱讀理解[11]、摘要總結(jié)[12]和句子表示[13]等.Xu等人[14]提出了將卷積神經(jīng)網(wǎng)絡(luò)與長(zhǎng)短期記憶網(wǎng)絡(luò)(long-short term memory,LSTM)相結(jié)合使用的方法.
LIRL與文本均是由字符序列組成,并且包含語(yǔ)義信息,因此本文考慮將惡意URL檢測(cè)任務(wù)轉(zhuǎn)化成為一個(gè)文本分類(lèi)任務(wù),提出了一種基于序列注意力機(jī)制的卷積神經(jīng)網(wǎng)絡(luò)(sequential attention based CNN,SA-CNN).為了能夠有效地尋找到惡意代碼區(qū)域,我們?cè)诰矸e層與池化層中間引入一個(gè)新的注意力層.注意力層用來(lái)對(duì)單詞(token)的區(qū)分度進(jìn)行編碼.因?yàn)閻阂獯a通常是由較小區(qū)域內(nèi)的相鄰單詞構(gòu)成,所以這些相鄰的單詞之間往往又具有一些相似的區(qū)分度.因此,本文在注意力層又增加了一個(gè)外部語(yǔ)言模型,來(lái)對(duì)這些較小區(qū)域內(nèi)的相鄰單詞進(jìn)行建模分析.
進(jìn)行網(wǎng)頁(yè)瀏覽和網(wǎng)絡(luò)服務(wù)調(diào)用都需要使用到URL,因此很多攻擊者選擇了URL作為攻擊的入口.受文獻(xiàn)[4]的啟發(fā),本文提出一種全新的異常檢測(cè)方法:基于序列注意力機(jī)制的卷積神經(jīng)網(wǎng)絡(luò)模型.
區(qū)別于文獻(xiàn)[4,15]中的網(wǎng)絡(luò)結(jié)構(gòu),SA-CNN模型的結(jié)構(gòu)框架如圖1所示.它是由5層網(wǎng)絡(luò)結(jié)構(gòu)組成,分別為詞嵌入層、卷積層、注意力層、池化層和全連接層,其中還包括了一個(gè)特殊的注意力層.
圖1 SA-CNN結(jié)構(gòu)框架Fig.1 The framework of SA-CNN
1.3.1URL預(yù)處理 通常情況下,URL是由一個(gè)字符序列構(gòu)成的.本文定義了一組特殊字符,并使用它們作為劃分URL的依據(jù).利用空格對(duì)其分割,這些特殊字符集合為{() [ ] | @ + -=: /;,^ <>* ! ? { } # &.“”’ %}.根據(jù)這些特殊字符,所有的URL可以被劃分為一系列的單詞(token).我們以一條真實(shí)的URL解釋token劃分方式和char劃分方式的區(qū)別.
原始URL: /account/?action=file:∥/etc/passwd.
token劃分: / account / ? action=file: / / / etc / passwd.
char劃分: / a c c o u n t / ? a c t i o n=f i l e: / / / e t c / p a s s w d.
char劃分方式比較簡(jiǎn)單,它將一些具有意義的字符串拆開(kāi)了,比如“file”、“etc”、“passwd”.但是token劃分方式并未將這些字符分割開(kāi),保持了這些字符的連續(xù)性.
1.3.2詞嵌入層 為方便計(jì)算,集合當(dāng)中的每一條URL,即xi可以通過(guò)谷歌研發(fā)的word2vec模型[16]將單詞轉(zhuǎn)換為詞向量,即xi=[v1,v2,…,vk,…].本文所提出的SA-CNN采用的是word2vec中的CBOW模型.將訓(xùn)練得到的詞向量作為下一層的輸入.
1.3.3卷積層 卷積層接受詞嵌入層的詞向量作為輸入.一個(gè)卷積層中可以包含多個(gè)大小不同的滑動(dòng)窗口.使用這些滑動(dòng)窗口來(lái)提取特征并且以此方式來(lái)防止過(guò)擬合.每一個(gè)滑動(dòng)窗口對(duì)應(yīng)著一個(gè)卷積濾波器.H=[h1,h2,…,hk,…]表示的是不同大小的卷積濾波器.我們重新定義了一個(gè)連接符號(hào)⊕的操作,v1,k:m,k=v1,k⊕v2,k…⊕vm,k.假定卷積濾波器f,對(duì)應(yīng)的滑動(dòng)窗口大小為h,在xi中第k個(gè)特征是通過(guò)ci,k=Wf·(vi,k⊕vi,k+1⊕…⊕vi,k+h-1)+bf產(chǎn)生.將所有的特征連接起來(lái),可以得到一個(gè)特征圖ci=[ci,1⊕ci,2⊕…].
1.3.4注意力層 本文采用上下文注意力機(jī)制和語(yǔ)言模型(LSTM/ Markov)相結(jié)合的方式來(lái)進(jìn)行異常檢測(cè).注意力層位于卷積層與池化層之間.該模型可以給惡意代碼區(qū)域賦予更高的注意力值,以便于能夠有較大的可能性被池化層選擇處理,以備后續(xù)異常檢測(cè)使用.本文嘗試對(duì)當(dāng)前單詞的3個(gè)上下文(SA-CNN-3)和5個(gè)上下文(SA-CNN-5)使用序列注意力機(jī)制.此處以3個(gè)上下文為例說(shuō)明注意力層的工作原理.
為了驗(yàn)證本文所提出的SA-CNN模型的有效性,我們?cè)赥REC、20NG這兩個(gè)公開(kāi)短文數(shù)據(jù)集上和一個(gè)URL數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn).其中,URL數(shù)據(jù)集來(lái)自于知名互聯(lián)網(wǎng)安全公司,數(shù)據(jù)集信息總結(jié)如表1所示(其中CN表示類(lèi)別的數(shù)量).
表1 數(shù)據(jù)集信息匯總Tab.1 Summary of datasets 個(gè)
TREC[18]數(shù)據(jù)集是一個(gè)問(wèn)題分類(lèi)的數(shù)據(jù)集,它主要包含人、地點(diǎn)、數(shù)字等6個(gè)類(lèi)別的問(wèn)題.20NG數(shù)據(jù)集是著名的文本分類(lèi)數(shù)據(jù)集,本文從中選取了每個(gè)文檔的Subject這一項(xiàng)作為短文本分類(lèi)的數(shù)據(jù)進(jìn)行分析實(shí)驗(yàn).URL數(shù)據(jù)集是由正常的URL和本地文件包含、SQL注入、跨站腳本攻擊和命令注入攻擊這4種攻擊類(lèi)型共同組成.
詞嵌入的大小設(shè)定為128,卷積層使用的是多卷積核方式,卷積濾波器大小分別為3、4、5,且每種濾波器個(gè)數(shù)為64個(gè).批處理大小設(shè)定為32,epoch的數(shù)目設(shè)為200,采用dropout技術(shù)以防止過(guò)擬合產(chǎn)生.
SA-CNN與原始CNN[4]方法在URL數(shù)據(jù)集上效果基本持平;SA-CNN優(yōu)于機(jī)器學(xué)習(xí)方法中的DT和LR的效果.本文所提出的SA-CNN可以很好地定位惡意代碼區(qū)域,并對(duì)其進(jìn)行可視化展示,在該方面SA-CNN要遠(yuǎn)遠(yuǎn)優(yōu)于原始CNN[4]方法.
2.3.1token劃分和char劃分 圖2所示為原始CNN[4]和SA-CNN3(LSTM)在URL數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果.由于惡意URL在通常情況下僅僅是URL當(dāng)中的一小部分,而如果此時(shí)采用accuracy作為評(píng)估指標(biāo)并不適用,因此本文采用F1對(duì)URL的實(shí)驗(yàn)結(jié)果進(jìn)行評(píng)估.我們可以看到,使用token劃分方式的結(jié)果要優(yōu)于使用char劃分方式的結(jié)果.這說(shuō)明對(duì)URL檢測(cè)時(shí),使用token劃分的方式是行之有效的.相比于原始CNN[4]方法,SA-CNN在F1評(píng)估指標(biāo)[19]下沒(méi)有表現(xiàn)出較大的優(yōu)勢(shì),可能是原始的CNN[4]本身的性能就很高,極難對(duì)其進(jìn)行改進(jìn).
表2所示是SA-CNN在兩個(gè)短文本數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果, 表明SA-CNN的性能要優(yōu)于原始CNN方法[4].
圖2 惡意URL數(shù)據(jù)的F1結(jié)果Fig.2 TheF1on malicious URLs data
表2 在TREC和20NG上的實(shí)驗(yàn)結(jié)果Tab.2 Accuracies on TREC and 20NG %
圖3 SA-CNN 3種結(jié)構(gòu)token劃分結(jié)果Fig.3 The result of three stuctures on token division
我們也使用貝葉斯、邏輯斯特回歸、KNN、GBDT等方法在TREC和20NG數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)對(duì)比.相比于這些機(jī)器學(xué)習(xí)的方法,SA-CNN表現(xiàn)出更好的性能.這說(shuō)明序列注意力機(jī)制不僅在URL數(shù)據(jù)集上有效果,同樣在短文本數(shù)據(jù)集上也有良好的表現(xiàn).
2.3.2LSTM模型和Markov模型 針對(duì)SA-CNN模型本身,本文也進(jìn)行了相關(guān)研究和實(shí)驗(yàn).圖3為SA-CNN在token劃分方式下分別使用LSTM和Markov語(yǔ)言模型在URL數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果.從圖3中可知,SA-CNN-3(LSTM)更加適合使用token劃分方式進(jìn)行異常檢測(cè),它的F1值遠(yuǎn)高于SA-CNN-5(LSTM)和SA-CNN-3(Markov).考慮到URL的長(zhǎng)度限制和單詞之間的相關(guān)性,URL檢測(cè)任務(wù)推薦使用SA-CNN-3(LSTM).
2.3.3上下文長(zhǎng)度影響 表3所示SA-CNN在兩個(gè)短文本數(shù)據(jù)集上的實(shí)驗(yàn)結(jié)果,TREC數(shù)據(jù)集的平均長(zhǎng)度為10,20NG的平均長(zhǎng)度為5.我們由表3可以觀察到,SA-CNN-5(LSTM)在TREC數(shù)據(jù)上的表現(xiàn)優(yōu)于其他的方式,因此文本的平均長(zhǎng)度對(duì)于模型選擇是具有一定影響的.
結(jié)合上文所述的token劃分方式,影響URL異常檢測(cè)的結(jié)果除了劃分方式以外,URL的長(zhǎng)度也是一個(gè)可能的原因.當(dāng)URL的長(zhǎng)度較短時(shí),我們可以考慮使用SA-CNN-3(LSTM)來(lái)進(jìn)行異常檢測(cè).通過(guò)研究SA-CNN本身,我們可知SA-CNN-3(LSTM)和SA-CNN-5(LSTM)更適用于長(zhǎng)度稍長(zhǎng)的URL數(shù)據(jù)檢測(cè),并且兩個(gè)模型可以達(dá)到較好的檢測(cè)效果.當(dāng)URL長(zhǎng)度較短時(shí),URL本身也并不能為異常檢測(cè)提供較多的信息,因此也限制了模型對(duì)其進(jìn)行檢測(cè)的效果.所以不論是在異常檢測(cè)上,還是在文本分類(lèi)問(wèn)題上,我們都需要對(duì)文本的長(zhǎng)度進(jìn)行考慮,隨后再選擇合適的模型進(jìn)行嘗試.
表3 TREC和20NG的結(jié)果Tab.3 The result of TREC and 20NG %
2.3.4可視化結(jié)果分析 為了簡(jiǎn)單起見(jiàn),本文提供了一些具體例子來(lái)更加直觀地說(shuō)明結(jié)果.如圖4所示,顏色越深,則表示注意力的值越高.通過(guò)比較顏色深淺,我們可以很容易知道哪些部分是惡意代碼區(qū)域.如圖中第2條所示,本地包含文件攻擊嘗試通過(guò)代碼“../”訪(fǎng)問(wèn)服務(wù)器上的敏感文件.在第3條中的char(106)則是測(cè)試服務(wù)器是否可以執(zhí)行SQL函數(shù)的語(yǔ)句.由于passwd、script、 (;)和passw都是惡意的URL中具有攻擊性的部分,所以它們都具有很高的注意力值.而html 和 com11的注意力值較為低,因?yàn)樗鼈兪钦4a區(qū)域中的一部分.有一個(gè)很有趣的事實(shí)是:當(dāng)“.”這個(gè)token位于正常的URL中時(shí),它具有較低的注意力值,此時(shí)它的周?chē)莖o4xccc和html,惡意代碼區(qū)域的“.”則具有很高的注意力值.而此時(shí),它的上下文是“/”和“./”.這也就是說(shuō)由外部的語(yǔ)言模型(LSTM/Markov)所產(chǎn)生的上下文信息是有效且有意義的.
圖4 中文圖題惡意URL注意力值可視化結(jié)果Fig.4 Visualization of attention on malicious URLs
本文提出了一種基于序列注意力機(jī)制的卷積神經(jīng)網(wǎng)絡(luò)(SA-CNN)來(lái)檢測(cè)惡意URL.該方法不僅可以檢測(cè)URL是否為正常的,同時(shí)也可以幫助定位惡意代碼區(qū)域.在真實(shí)的URL數(shù)據(jù)集上的實(shí)驗(yàn)表明:(1) 本文所提出的劃分URL的方式是行之有效的.(2) SA-CNN具有極高的檢測(cè)率,同時(shí)可以成功定位惡意代碼區(qū)域.(3) SA-CNN在短文分類(lèi)任務(wù)中也是一個(gè)有效的方法.在未來(lái)的工作中,我們的研究將主要集中于兩個(gè)方面:首先,嘗試對(duì)更多類(lèi)型的攻擊進(jìn)行檢測(cè);其次是基于詞匯和注意力方面的研究.我們將針對(duì)如何對(duì)URL劃分進(jìn)行探索,該劃分能使它的每一塊具有全部功能的信息,而不是每塊只具有單獨(dú)的關(guān)鍵詞.