《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信與網(wǎng)絡(luò) > 設(shè)計(jì)應(yīng)用 > 基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測(cè)方法
基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測(cè)方法
吳斌,趙力
(北京網(wǎng)思科平科技有限公司,北京 100089)
摘要: 半監(jiān)督學(xué)習(xí)是一種重要的機(jī)器學(xué)習(xí)方法,能同時(shí)使用有標(biāo)記樣本和無(wú)標(biāo)記樣本進(jìn)行學(xué)習(xí)。在webshell檢測(cè)領(lǐng)域,有標(biāo)記樣本少、形式靈活多變、易混淆,基于特征匹配的方式很難進(jìn)行準(zhǔn)確檢測(cè)。針對(duì)標(biāo)記樣本較少的現(xiàn)狀,提出一種基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測(cè)方法,先使用卡方檢驗(yàn)和深度學(xué)習(xí)方法獲取樣本的文本向量,然后分別使用單分類和增量學(xué)習(xí)方式訓(xùn)練,提高分類性能。使用github公開(kāi)數(shù)據(jù)集進(jìn)行訓(xùn)練和測(cè)試,實(shí)驗(yàn)結(jié)果驗(yàn)證該方法能夠有效改善webshell檢測(cè)的漏報(bào)率和誤報(bào)率。
中圖分類號(hào):TP399
文獻(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.
Webshell detection method based on deep learning and semi-supervised learning
Wu Bin,Zhao Li
(Beijing Onescorpion Technology Co.,Ltd.,Beijing 100089,China)
Abstract: Semi-supervised learning is an important machine learning method,which can use both labeled and unlabeled samples for learning.In the field of webshell detection,it is difficult to detect webshell accurately based on feature matching,because of few labeled samples,flexible forms and easy to be confused.A webshell detection method based on deep learning and semi-supervised learning is proposed in this paper,which firstly uses chi-square test and deep learning method to obtain the document vector of samples,and then uses one-class classification and incremental learning method respectively to improve classification performance.The open source data set in github is used for training and testing,and the experimental results show that this method could improve the rate of flase negative and false positive of webshell detection effectively.
Key words : deep learning;semi-supervised learning;webshell detection;one-class classification;incremental learning

0      引言

 

隨著互聯(lián)網(wǎng)的發(fā)展,基于B/S架構(gòu)的Web應(yīng)用迅速普及,包括應(yīng)用在政府、銀行、運(yùn)營(yíng)商、電商以及各大門戶網(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è)后門程序,通常是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],采用單分類增量學(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è)分類變量是否相關(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ì)算公式為:

 

1536574111(1).jpg

其中,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所示。

 

wb1_副本.jpg

 

圖 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)練單分類SVDD模型;再運(yùn)用有標(biāo)記的樣本,修正單分類SVDD模型,達(dá)到增量學(xué)習(xí)的目的。

 

本文充分運(yùn)用現(xiàn)有少量有標(biāo)記的webshell和大量無(wú)標(biāo)記的樣本數(shù)據(jù),使用半監(jiān)督學(xué)習(xí),利用先驗(yàn)單分類SVDD模型信息和新的標(biāo)記樣本更新模型,一方面能夠繼承先前學(xué)習(xí)到的知識(shí),讓整個(gè)學(xué)習(xí)具有可積累性;另一方面可以實(shí)現(xiàn)在線學(xué)習(xí),不斷更新webshell檢測(cè)模型。

 

2.1 單分類SVDD模型

 

支持向量數(shù)據(jù)描述(Support Vector Domain Description,SVDD)是由TAX D M J和DUIN R PW[7]提出并發(fā)展起來(lái)的一種單值分類算法,標(biāo)準(zhǔn)的SVDD模型屬于無(wú)監(jiān)督學(xué)習(xí),把要描述的對(duì)象作為一個(gè)整體,建立一個(gè)封閉而緊湊的超球體,使得描述對(duì)象全部或盡可能多地包在這個(gè)球體內(nèi)。

 

 

wb3_副本.jpg

圖 2   單分類SVDD模型圖


假設(shè)訓(xùn)練數(shù)據(jù)集為微信截圖_20180911093419.pngSVDD的優(yōu)化目標(biāo)是在T中,找到最小半徑R。最優(yōu)超球體的求解可以轉(zhuǎn)化為以下優(yōu)化問(wèn)題:


微信截圖_20180911093448.png

其中,R為待求的球的最小半徑,C為懲罰系數(shù),ξi為懲罰項(xiàng),a為超球體的球心。

 

訓(xùn)練結(jié)束后,需要判斷新的數(shù)據(jù)點(diǎn)Z是否屬于這個(gè)類,即:

 

 

(z-a)T(z-a)≤R2                               (3)

 

至此已經(jīng)用未標(biāo)記樣本訓(xùn)練了單分類SVDD模型,對(duì)于測(cè)試數(shù)據(jù)可以用該模型直接進(jìn)行判斷。但是未標(biāo)記樣本中存在少量的webshell攻擊樣本,直接使用單分類SVDD模型存在一定誤差。接下來(lái)使用標(biāo)記樣本,通過(guò)有監(jiān)督學(xué)習(xí)方式增量訓(xùn)練SVDD模型,修正已經(jīng)訓(xùn)練好的單分類SVDD模型。

 

2.2 增量學(xué)習(xí)SVDD模型

 

webshell攻擊方式多變,腳本更新速度快,攻擊的特征也不是一成不變的。使用當(dāng)前的webshell樣本訓(xùn)練單分類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模型,在單分類SVDD模型的基礎(chǔ)上,運(yùn)用有標(biāo)記的樣本,更新單分類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í)、單分類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=微信截圖_20180911094128.png為對(duì)應(yīng)樣本Xi=微信截圖_20180911094135.png的標(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)記樣本特征;

 

wb4_副本.jpg

圖 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)練單分類SVDD模型,最小化超球體半徑,最大情況包含未標(biāo)記樣本; 

(5)對(duì)于新的標(biāo)記樣本,運(yùn)用在線學(xué)習(xí)方式訓(xùn)練增量學(xué)習(xí)SVDD模型,修正單分類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ù)的類別分布表

微信截圖_20180911095059.png


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)特征表

微信截圖_20180911095254.png


 通過(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)練單分類SVDD模型M0。在有監(jiān)督學(xué)習(xí)階段,首先在單分類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)證模型分類效果,測(cè)試結(jié)果如表3所示。

表3測(cè)試結(jié)果表 

微信截圖_20180911095648.png


從實(shí)驗(yàn)結(jié)果可以看出,對(duì)于相同的W3+W4測(cè)試樣本,使用增量SVDD訓(xùn)練的模型在漏報(bào)率和誤報(bào)率上均優(yōu)于單分類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)域,本文使用單分類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] 胡建康,徐震,馬多賀,等.基于決策樹的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:wubin@onescorpion.com。 

趙力(1990-),女,碩士,大數(shù)據(jù)分析師,主要研究方向:數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)。

 

 


此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。