文獻(xiàn)標(biāo)識(shí)碼:A
DOI: 10.19358/j.issn.2096-5133.2018.08.005
中文引用格式:吳斌,,趙力.基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測(cè)方法[J].信息技術(shù)與網(wǎng)絡(luò)安全,,2018,37(8):19-22.
0 引言
隨著互聯(lián)網(wǎng)的發(fā)展,,基于B/S架構(gòu)的Web應(yīng)用迅速普及,,包括應(yīng)用在政府、銀行,、運(yùn)營(yíng)商,、電商以及各大門(mén)戶(hù)網(wǎng)站。由于不同的Web系統(tǒng)研發(fā)人員水平差異,,在設(shè)計(jì)過(guò)程中難免對(duì)安全問(wèn)題欠缺考慮,,造成Web安全問(wèn)題頻發(fā)。常見(jiàn)的安全威脅有:SQL注入漏洞,、上傳文件漏洞,、提交表單漏洞、跨站腳本攻擊等,。入侵者在獲得Web系統(tǒng)漏洞后,,會(huì)通過(guò)上傳webshell來(lái)獲得Web服務(wù)器的操作權(quán)限。對(duì)于入侵者來(lái)說(shuō),,webshell就是一個(gè)后門(mén)程序,,通常是ASP、PHP,、JSP等網(wǎng)頁(yè)腳本,。入侵實(shí)施后,首先在網(wǎng)頁(yè)服務(wù)器的Web目錄下面放置腳本文件,,然后可以通過(guò)Web頁(yè)面對(duì)網(wǎng)站服務(wù)器進(jìn)行控制[2],。由于webshell操作不會(huì)在系統(tǒng)安全日志中留下記錄,并且與正常網(wǎng)頁(yè)文件混在一起,,一般管理員很難看出入侵痕跡[3],。
在Web安全檢測(cè)領(lǐng)域,由于缺少樣本,,很難建立精準(zhǔn)的監(jiān)督學(xué)習(xí)模型,,而無(wú)監(jiān)督學(xué)習(xí)會(huì)造成誤報(bào)率高的問(wèn)題,需要大量的安全工程師分析過(guò)濾機(jī)器學(xué)習(xí)的警告,,分析結(jié)果存在人工誤差,。由于Web攻擊方式多變,,傳統(tǒng)的預(yù)測(cè)方式難以應(yīng)對(duì)復(fù)雜的真實(shí)環(huán)境。本文利用深度學(xué)習(xí)提取特征完備性高的特點(diǎn),,結(jié)合半監(jiān)督學(xué)習(xí),,將機(jī)器學(xué)習(xí)應(yīng)用于webshell本地檢測(cè),使用github公開(kāi)樣本數(shù)據(jù)[4-5],,采用單分類(lèi)和增量學(xué)習(xí)方式,,不斷優(yōu)化模型,經(jīng)過(guò)多次試驗(yàn)效果證明,,本文方法能夠有效降低誤報(bào)率和提高檢測(cè)率,。
1 深度學(xué)習(xí)
在機(jī)器學(xué)習(xí)領(lǐng)域,學(xué)者公認(rèn)“數(shù)據(jù)和特征決定了機(jī)器學(xué)習(xí)的上限,,而模型和算法只是逼近這個(gè)上限而已”,。本文webshell檢測(cè)的測(cè)試數(shù)據(jù)來(lái)源于github上整理的webshell樣本,具有一定的代表性,。特征選擇使用卡方檢驗(yàn)和神經(jīng)網(wǎng)絡(luò)相結(jié)合,,先用卡方檢驗(yàn)選取前K個(gè)重要特征,過(guò)濾測(cè)試文本,,進(jìn)一步使用神經(jīng)網(wǎng)絡(luò)算法,,獲得每一個(gè)樣本的文本向量。
1.1 卡方檢驗(yàn)
卡方檢驗(yàn)是一種常見(jiàn)的特征選擇方法,。其基本思想是根據(jù)樣本數(shù)據(jù)推斷總體的分布與期望分布是否有顯著差異,,或者推斷兩個(gè)分類(lèi)變量是否相關(guān)。
一般可以設(shè)原假設(shè)為H0:觀察頻數(shù)與期望頻數(shù)沒(méi)有差異,,或者兩個(gè)變量相互獨(dú)立不相關(guān),。實(shí)際應(yīng)用中,先假設(shè)H0成立,,計(jì)算出χ2值,。根據(jù)χ2分布、χ2統(tǒng)計(jì)量以及自由度,,可以確定在H0成立的情況下獲得當(dāng)前統(tǒng)計(jì)量的概率P。如果P很小,,說(shuō)明觀察值與理論值的偏離程度大,,應(yīng)該拒絕原假設(shè)。否則不能拒絕原假設(shè),。
χ2的計(jì)算公式為:
其中,,A為實(shí)際值,T為理論值,。
在本文的github樣本中,,使用卡方檢驗(yàn)剔除與webshell攻擊相關(guān)性較小的詞,例如:“is”、“the”,、“是”等,。選取前500個(gè)特征詞,例如“shell”,、“package”等,。
1.2 神經(jīng)網(wǎng)絡(luò)
深度學(xué)習(xí)是機(jī)器學(xué)習(xí)的重要分支,目前深度學(xué)習(xí)在圖像,、語(yǔ)音,、自然語(yǔ)言等取得巨大突破。在文本分析領(lǐng)域,,word2vec[6]和doc2vec是深度學(xué)習(xí)的重要研究成果,,doc2vec與word2vec相似,只是word2vec在基于詞的語(yǔ)義分析基礎(chǔ)上,,添加基于上下文的語(yǔ)義分析能力,。
doc2vec是將詞表征為實(shí)數(shù)值向量的一種高效的算法模型,利用深度學(xué)習(xí)的思想,,構(gòu)建兩層神經(jīng)網(wǎng)絡(luò),,即輸入層-隱藏層-輸出層,通過(guò)訓(xùn)練,,把對(duì)文本內(nèi)容的處理簡(jiǎn)化為K維向量空間中的向量運(yùn)算,。其訓(xùn)練和預(yù)測(cè)過(guò)程如圖1所示。
圖 1 文檔向量學(xué)習(xí)框架圖
在本文的測(cè)試樣本中,,經(jīng)過(guò)卡方檢驗(yàn)篩選之后,,運(yùn)用doc2vec模型,訓(xùn)練得到樣本的文本向量:[-2.083 977 50×10-2,,-4.902 341 22×10-2,,-2.033 572 83×10-2,-7.650 934 16×10-2,,…],。
2 半監(jiān)督學(xué)習(xí)
傳統(tǒng)的機(jī)器學(xué)習(xí)通常分為有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)。有監(jiān)督學(xué)習(xí)是通過(guò)訓(xùn)練標(biāo)記的樣本,,盡可能正確地對(duì)訓(xùn)練之外的未標(biāo)記樣本進(jìn)行預(yù)測(cè),;無(wú)監(jiān)督學(xué)習(xí)是通過(guò)訓(xùn)練無(wú)標(biāo)記的樣本,以發(fā)現(xiàn)未標(biāo)記樣本之間的內(nèi)部特征,。半監(jiān)督學(xué)習(xí)是介于有監(jiān)督學(xué)習(xí)和無(wú)監(jiān)督學(xué)習(xí)之間的機(jī)器學(xué)習(xí)方式,,同時(shí)運(yùn)用標(biāo)記樣本和無(wú)標(biāo)記樣本,訓(xùn)練機(jī)器學(xué)習(xí)模型,。
在實(shí)際應(yīng)用中,,有標(biāo)記的webshell樣本數(shù)量極少,,人為手動(dòng)標(biāo)記代價(jià)大,少量有標(biāo)記的webshell樣本極其珍貴,,而樣本中未標(biāo)記的樣本大量存在,。本文的webshell檢測(cè)模型,由于正常樣本數(shù)量相對(duì)于webshell樣本數(shù)量占絕對(duì)優(yōu)勢(shì),,因此首先把未標(biāo)記的樣本全部當(dāng)作正常樣本,,使用無(wú)監(jiān)督方式訓(xùn)練單分類(lèi)SVDD模型;再運(yùn)用有標(biāo)記的樣本,,修正單分類(lèi)SVDD模型,,達(dá)到增量學(xué)習(xí)的目的。
本文充分運(yùn)用現(xiàn)有少量有標(biāo)記的webshell和大量無(wú)標(biāo)記的樣本數(shù)據(jù),,使用半監(jiān)督學(xué)習(xí),,利用先驗(yàn)單分類(lèi)SVDD模型信息和新的標(biāo)記樣本更新模型,一方面能夠繼承先前學(xué)習(xí)到的知識(shí),,讓整個(gè)學(xué)習(xí)具有可積累性,;另一方面可以實(shí)現(xiàn)在線學(xué)習(xí),不斷更新webshell檢測(cè)模型,。
2.1 單分類(lèi)SVDD模型
支持向量數(shù)據(jù)描述(Support Vector Domain Description,,SVDD)是由TAX D M J和DUIN R PW[7]提出并發(fā)展起來(lái)的一種單值分類(lèi)算法,標(biāo)準(zhǔn)的SVDD模型屬于無(wú)監(jiān)督學(xué)習(xí),,把要描述的對(duì)象作為一個(gè)整體,,建立一個(gè)封閉而緊湊的超球體,使得描述對(duì)象全部或盡可能多地包在這個(gè)球體內(nèi),。
圖 2 單分類(lèi)SVDD模型圖
假設(shè)訓(xùn)練數(shù)據(jù)集為SVDD的優(yōu)化目標(biāo)是在T中,,找到最小半徑R。最優(yōu)超球體的求解可以轉(zhuǎn)化為以下優(yōu)化問(wèn)題:
其中,,R為待求的球的最小半徑,,C為懲罰系數(shù),ξi為懲罰項(xiàng),,a為超球體的球心,。
訓(xùn)練結(jié)束后,需要判斷新的數(shù)據(jù)點(diǎn)Z是否屬于這個(gè)類(lèi),,即:
(z-a)T(z-a)≤R2 (3)
至此已經(jīng)用未標(biāo)記樣本訓(xùn)練了單分類(lèi)SVDD模型,,對(duì)于測(cè)試數(shù)據(jù)可以用該模型直接進(jìn)行判斷。但是未標(biāo)記樣本中存在少量的webshell攻擊樣本,,直接使用單分類(lèi)SVDD模型存在一定誤差。接下來(lái)使用標(biāo)記樣本,,通過(guò)有監(jiān)督學(xué)習(xí)方式增量訓(xùn)練SVDD模型,,修正已經(jīng)訓(xùn)練好的單分類(lèi)SVDD模型,。
2.2 增量學(xué)習(xí)SVDD模型
webshell攻擊方式多變,腳本更新速度快,,攻擊的特征也不是一成不變的,。使用當(dāng)前的webshell樣本訓(xùn)練單分類(lèi)SVDD模型,難以適應(yīng)webshell入侵方式不斷更新的現(xiàn)狀,。而增量學(xué)習(xí)是一種在線學(xué)習(xí)方式,,指的是一個(gè)學(xué)習(xí)系統(tǒng)能不斷地從新樣本中學(xué)習(xí)新的知識(shí),并能保存大部分以前已經(jīng)學(xué)習(xí)到的知識(shí),。準(zhǔn)確地說(shuō),,增量學(xué)習(xí)并不是一種模型,而是一種模型的訓(xùn)練更新方式,。
本文提出的增量學(xué)習(xí)SVDD模型,,在單分類(lèi)SVDD模型的基礎(chǔ)上,運(yùn)用有標(biāo)記的樣本,,更新單分類(lèi)SVDD模型,,達(dá)到增量學(xué)習(xí)的目的。在這個(gè)過(guò)程中,,以前處理過(guò)的大部分樣本不需要重復(fù)處理,,只選取作為支持向量的樣本,結(jié)合新的有標(biāo)記的樣本,,重新學(xué)習(xí)并更新SVDD模型,,一旦學(xué)習(xí)完成之后,訓(xùn)練的樣本被丟棄,。學(xué)習(xí)系統(tǒng)沒(méi)有關(guān)于整個(gè)訓(xùn)練樣本的先驗(yàn)知識(shí),。
3 基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測(cè)算法
3.1 webshell檢測(cè)算法流程
基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測(cè)算法主要包含卡方檢驗(yàn)、深度學(xué)習(xí),、半監(jiān)督學(xué)習(xí),、單分類(lèi)SVDD、增量學(xué)習(xí)SVDD等,。其中算法結(jié)構(gòu)如圖3所示,。
3.2 webshell檢測(cè)算法描述
本文運(yùn)用深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)相關(guān)算法,對(duì)于有標(biāo)記樣本集{(X1,Y1),(X2,Y2),…,(Xn,Yn)},,其中Yi=為對(duì)應(yīng)樣本Xi=的標(biāo)記向量,,以及無(wú)標(biāo)記樣本{Z1,Z2,Z3,…,Zm}進(jìn)行webshell建模分析。其中webshell檢測(cè)算法具體流程如下:
(1)對(duì)有標(biāo)記樣本進(jìn)行分詞處理,,再用卡方檢驗(yàn)分析各個(gè)特征詞與樣本標(biāo)記之間的相關(guān)性,,選擇前K個(gè)重要特征詞作為篩選特征詞;
(2)對(duì)于未標(biāo)記樣本,,用(1)中獲取的篩選特征詞獲得未標(biāo)記樣本特征,;
圖 3 webshell檢測(cè)算法流程圖
(3)對(duì)于(2)中獲取的未標(biāo)記樣本特征,,使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練獲得各個(gè)未標(biāo)記樣本的文本向量及doc2vec;
(4)利用(3)中獲取的文本向量,,使用無(wú)監(jiān)督學(xué)習(xí)方法訓(xùn)練單分類(lèi)SVDD模型,,最小化超球體半徑,最大情況包含未標(biāo)記樣本,;
(5)對(duì)于新的標(biāo)記樣本,,運(yùn)用在線學(xué)習(xí)方式訓(xùn)練增量學(xué)習(xí)SVDD模型,修正單分類(lèi)SVDD模型,,提高現(xiàn)有模型的識(shí)別能力,。
4 實(shí)驗(yàn)與分析
為了驗(yàn)證本文中基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell算法檢測(cè)性能,使用github中數(shù)據(jù)進(jìn)行實(shí)驗(yàn),,數(shù)據(jù)樣本分布情況如下表1所示,。
表1數(shù)據(jù)的類(lèi)別分布表
4.1 數(shù)據(jù)預(yù)處理
原始的webshell訓(xùn)練樣本是直接在github上下載的webshell腳本文件,在進(jìn)行樣本訓(xùn)練之前,,需要進(jìn)行數(shù)據(jù)預(yù)處理,。為了獲得高質(zhì)量的特征集,在所有的數(shù)據(jù)集合中選取有標(biāo)記樣本作為卡方訓(xùn)練樣本,,其中選取增量訓(xùn)練集W1中50份樣本,,增量訓(xùn)練集W2中50份樣本,正常測(cè)試集W3中50份樣本,,webshell樣本集W4中50份樣本,,組合成200份有標(biāo)記卡方訓(xùn)練樣本。
經(jīng)過(guò)卡方檢驗(yàn)之后,,選取前500個(gè)特征作為樣本的重要特征,,其中前7個(gè)特征結(jié)果如表2所示。
表2前7個(gè)卡方檢驗(yàn)特征表
通過(guò)卡方檢驗(yàn)選擇的特征是與標(biāo)記樣本相關(guān)性較高的特征詞,。為簡(jiǎn)化樣本復(fù)雜程度,,需要進(jìn)一步使用卡方檢驗(yàn)獲取的前500個(gè)特征值,過(guò)濾初始訓(xùn)練集W0,。然后使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練過(guò)濾后的樣本,,獲取訓(xùn)練樣本的文本向量,即doc2vec,。其中最終獲得文本向量示例如下
X1=[-2.083 977 50×10-2,-4.902 341 22×10-2,-2.033 572 83×10-2,-7.650 934 16×10-2,…]
X2=[0.340 425 997 972,-0.016 084 445 640 4,
-0.757 030 189 037,0.497 053 474 188,…]
X3=[0.256 792 724 133,0.113 478 787 243,
-0.708 586 812 019,0.289 009 481 668,…]
4.2 實(shí)驗(yàn)結(jié)果和分析
在有少量有標(biāo)記樣本和大量無(wú)標(biāo)記樣本情況下,,半監(jiān)督學(xué)習(xí)是能夠同時(shí)兼顧訓(xùn)練樣本和提高訓(xùn)練結(jié)果的學(xué)習(xí)方法。在無(wú)監(jiān)督學(xué)習(xí)階段,,本文使用初始訓(xùn)練集W0獲得的文本向量訓(xùn)練單分類(lèi)SVDD模型M0,。在有監(jiān)督學(xué)習(xí)階段,首先在單分類(lèi)SVDD模型M0的基礎(chǔ)上,使用增量訓(xùn)練集W1訓(xùn)練增量SVDD模型M1,;然后在增量SVDD模型M1的基礎(chǔ)上,,使用增量訓(xùn)練集W2訓(xùn)練增量SVDD模型M2。對(duì)于每個(gè)模型,,均使用正常測(cè)試集W3和webshell樣本集W4樣本混合測(cè)試。對(duì)于本文的webshell檢測(cè)方法,,使用漏報(bào)率和誤報(bào)率來(lái)驗(yàn)證模型分類(lèi)效果,,測(cè)試結(jié)果如表3所示。
表3測(cè)試結(jié)果表
從實(shí)驗(yàn)結(jié)果可以看出,,對(duì)于相同的W3+W4測(cè)試樣本,,使用增量SVDD訓(xùn)練的模型在漏報(bào)率和誤報(bào)率上均優(yōu)于單分類(lèi)SVDD模型,并且使用增量樣本修正的次數(shù)越多,,模型的效果越好,。說(shuō)明基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)方法在webshell檢測(cè)中的優(yōu)越性,充分利用少量有標(biāo)記樣本,,使用在線學(xué)習(xí)方法訓(xùn)練增量SVDD模型,,不斷優(yōu)化最終模型,降低檢測(cè)的漏報(bào)率和誤報(bào)率,。
5 結(jié)論
經(jīng)過(guò)多次的實(shí)驗(yàn)結(jié)果可知,,本文提出的基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)webshell檢測(cè)方法,在webshell檢測(cè)中一定程度上改善了系統(tǒng)的性能,,有效降低了漏報(bào)率和誤報(bào)率,,并在增量學(xué)習(xí)框架下,通過(guò)不斷學(xué)習(xí)新增標(biāo)記樣本,,能夠持續(xù)優(yōu)化系統(tǒng),。在深度學(xué)習(xí)領(lǐng)域,本文使用文本向量的方式獲得樣本特征,,此后的重點(diǎn)研究方向在于如何獲取更有價(jià)值的樣本特征,。在半監(jiān)督學(xué)習(xí)領(lǐng)域,本文使用單分類(lèi)SVDD模型和增量SVDD模型,,此后的重點(diǎn)研究方向在于如何優(yōu)化模型提高漏報(bào)率和誤報(bào)率,。
參考文獻(xiàn)
[1] QUINLAN J R.C4.5:programs for machine learning[M].San Francisco:Morgan Kaufmann,1993.
[2] 胡建康,徐震,馬多賀,等.基于決策樹(shù)的Webshell檢測(cè)方法研究[J].網(wǎng)絡(luò)新媒體技術(shù).2012,1(6):15-19.
[3] 龍嘯,方勇,黃誠(chéng),等.Webshell研究綜述:檢測(cè)與逃逸之間的博弈[J].網(wǎng)絡(luò)空間安全,2018,9(1):62-68.
[4] https://github.com/tanjiti/webshellSample
[5] https://github.com/tennc/webshell
[6] MIKOLOV T, LE Q V, SUTSKEVER I.Exploiting similarities among languages for machine translation [J] arXiv, arXiv1309.4168,2013.
[7] TAX D M J, DUIN R P W.Support vector data description[J].Pattern Recognition Letters,1999,20(11-13):1191-1199.
(收稿日期:2018-07-10)
作者簡(jiǎn)介:
吳斌(1991-),通信作者,,男,,碩士,大數(shù)據(jù)分析師,,主要研究方向:數(shù)據(jù)挖掘,、機(jī)器學(xué)習(xí)。E-mail:[email protected],。
趙力(1990-),,女,,碩士,大數(shù)據(jù)分析師,,主要研究方向:數(shù)據(jù)挖掘,、機(jī)器學(xué)習(xí)。