《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 通信與網(wǎng)絡(luò) > 設(shè)計應(yīng)用 > 基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測方法
基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測方法
吳斌,趙力
(北京網(wǎng)思科平科技有限公司,北京 100089)
摘要: 半監(jiān)督學(xué)習(xí)是一種重要的機器學(xué)習(xí)方法,能同時使用有標(biāo)記樣本和無標(biāo)記樣本進行學(xué)習(xí)。在webshell檢測領(lǐng)域,有標(biāo)記樣本少、形式靈活多變、易混淆,基于特征匹配的方式很難進行準(zhǔn)確檢測。針對標(biāo)記樣本較少的現(xiàn)狀,提出一種基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測方法,先使用卡方檢驗和深度學(xué)習(xí)方法獲取樣本的文本向量,然后分別使用單分類和增量學(xué)習(xí)方式訓(xùn)練,提高分類性能。使用github公開數(shù)據(jù)集進行訓(xùn)練和測試,實驗結(jié)果驗證該方法能夠有效改善webshell檢測的漏報率和誤報率。
中圖分類號:TP399
文獻標(biāo)識碼:A
DOI: 10.19358/j.issn.2096-5133.2018.08.005
中文引用格式:吳斌,趙力.基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測方法[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)用在政府、銀行、運營商、電商以及各大門戶網(wǎng)站。由于不同的Web系統(tǒng)研發(fā)人員水平差異,在設(shè)計過程中難免對安全問題欠缺考慮,造成Web安全問題頻發(fā)。常見的安全威脅有:SQL注入漏洞、上傳文件漏洞、提交表單漏洞、跨站腳本攻擊等。入侵者在獲得Web系統(tǒng)漏洞后,會通過上傳webshell來獲得Web服務(wù)器的操作權(quán)限。對于入侵者來說,webshell就是一個后門程序,通常是ASP、PHP、JSP等網(wǎng)頁腳本。入侵實施后,首先在網(wǎng)頁服務(wù)器的Web目錄下面放置腳本文件,然后可以通過Web頁面對網(wǎng)站服務(wù)器進行控制[2]。由于webshell操作不會在系統(tǒng)安全日志中留下記錄,并且與正常網(wǎng)頁文件混在一起,一般管理員很難看出入侵痕跡[3]

 

在Web安全檢測領(lǐng)域,由于缺少樣本,很難建立精準(zhǔn)的監(jiān)督學(xué)習(xí)模型,而無監(jiān)督學(xué)習(xí)會造成誤報率高的問題,需要大量的安全工程師分析過濾機器學(xué)習(xí)的警告,分析結(jié)果存在人工誤差。由于Web攻擊方式多變,傳統(tǒng)的預(yù)測方式難以應(yīng)對復(fù)雜的真實環(huán)境。本文利用深度學(xué)習(xí)提取特征完備性高的特點,結(jié)合半監(jiān)督學(xué)習(xí),將機器學(xué)習(xí)應(yīng)用于webshell本地檢測,使用github公開樣本數(shù)據(jù)[4-5],采用單分類增量學(xué)習(xí)方式,不斷優(yōu)化模型,經(jīng)過多次試驗效果證明,本文方法能夠有效降低誤報率和提高檢測率。

 

1 深度學(xué)習(xí)

 

在機器學(xué)習(xí)領(lǐng)域,學(xué)者公認“數(shù)據(jù)和特征決定了機器學(xué)習(xí)的上限,而模型和算法只是逼近這個上限而已”。本文webshell檢測的測試數(shù)據(jù)來源于github上整理的webshell樣本,具有一定的代表性。特征選擇使用卡方檢驗和神經(jīng)網(wǎng)絡(luò)相結(jié)合,先用卡方檢驗選取前K個重要特征,過濾測試文本,進一步使用神經(jīng)網(wǎng)絡(luò)算法,獲得每一個樣本的文本向量。

 

1.1 卡方檢驗

 

卡方檢驗是一種常見的特征選擇方法。其基本思想是根據(jù)樣本數(shù)據(jù)推斷總體的分布與期望分布是否有顯著差異,或者推斷兩個分類變量是否相關(guān)。

 

一般可以設(shè)原假設(shè)為H0:觀察頻數(shù)與期望頻數(shù)沒有差異,或者兩個變量相互獨立不相關(guān)。實際應(yīng)用中,先假設(shè)H0成立,計算出χ2值。根據(jù)χ2分布、χ2統(tǒng)計量以及自由度,可以確定在H0成立的情況下獲得當(dāng)前統(tǒng)計量的概率P。如果P很小,說明觀察值與理論值的偏離程度大,應(yīng)該拒絕原假設(shè)。否則不能拒絕原假設(shè)。

 

χ2的計算公式為:

 

1536574111(1).jpg

其中,A為實際值,T為理論值。

 

在本文的github樣本中,使用卡方檢驗剔除與webshell攻擊相關(guān)性較小的詞,例如:“is”、“the”、“是”等。選取前500個特征詞,例如“shell”、“package”等。

 

1.2 神經(jīng)網(wǎng)絡(luò)

 

深度學(xué)習(xí)是機器學(xué)習(xí)的重要分支,目前深度學(xué)習(xí)在圖像、語音、自然語言等取得巨大突破。在文本分析領(lǐng)域,word2vec[6]和doc2vec是深度學(xué)習(xí)的重要研究成果,doc2vec與word2vec相似,只是word2vec在基于詞的語義分析基礎(chǔ)上,添加基于上下文的語義分析能力。

doc2vec是將詞表征為實數(shù)值向量的一種高效的算法模型,利用深度學(xué)習(xí)的思想,構(gòu)建兩層神經(jīng)網(wǎng)絡(luò),即輸入層-隱藏層-輸出層,通過訓(xùn)練,把對文本內(nèi)容的處理簡化為K維向量空間中的向量運算。其訓(xùn)練和預(yù)測過程如圖1所示。

 

wb1_副本.jpg

 

圖 1   文檔向量學(xué)習(xí)框架圖

 

在本文的測試樣本中,經(jīng)過卡方檢驗篩選之后,運用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)的機器學(xué)習(xí)通常分為有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)。有監(jiān)督學(xué)習(xí)是通過訓(xùn)練標(biāo)記的樣本,盡可能正確地對訓(xùn)練之外的未標(biāo)記樣本進行預(yù)測;無監(jiān)督學(xué)習(xí)是通過訓(xùn)練無標(biāo)記的樣本,以發(fā)現(xiàn)未標(biāo)記樣本之間的內(nèi)部特征。半監(jiān)督學(xué)習(xí)是介于有監(jiān)督學(xué)習(xí)和無監(jiān)督學(xué)習(xí)之間的機器學(xué)習(xí)方式,同時運用標(biāo)記樣本和無標(biāo)記樣本,訓(xùn)練機器學(xué)習(xí)模型。

 

在實際應(yīng)用中,有標(biāo)記的webshell樣本數(shù)量極少,人為手動標(biāo)記代價大,少量有標(biāo)記的webshell樣本極其珍貴,而樣本中未標(biāo)記的樣本大量存在。本文的webshell檢測模型,由于正常樣本數(shù)量相對于webshell樣本數(shù)量占絕對優(yōu)勢,因此首先把未標(biāo)記的樣本全部當(dāng)作正常樣本,使用無監(jiān)督方式訓(xùn)練單分類SVDD模型;再運用有標(biāo)記的樣本,修正單分類SVDD模型,達到增量學(xué)習(xí)的目的。

 

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

 

2.1 單分類SVDD模型

 

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


微信截圖_20180911093448.png

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

 

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

 

 

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

 

至此已經(jīng)用未標(biāo)記樣本訓(xùn)練了單分類SVDD模型,對于測試數(shù)據(jù)可以用該模型直接進行判斷。但是未標(biāo)記樣本中存在少量的webshell攻擊樣本,直接使用單分類SVDD模型存在一定誤差。接下來使用標(biāo)記樣本,通過有監(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í)方式,指的是一個學(xué)習(xí)系統(tǒng)能不斷地從新樣本中學(xué)習(xí)新的知識,并能保存大部分以前已經(jīng)學(xué)習(xí)到的知識。準(zhǔn)確地說,增量學(xué)習(xí)并不是一種模型,而是一種模型的訓(xùn)練更新方式。

 

本文提出的增量學(xué)習(xí)SVDD模型,在單分類SVDD模型的基礎(chǔ)上,運用有標(biāo)記的樣本,更新單分類SVDD模型,達到增量學(xué)習(xí)的目的。在這個過程中,以前處理過的大部分樣本不需要重復(fù)處理,只選取作為支持向量的樣本,結(jié)合新的有標(biāo)記的樣本,重新學(xué)習(xí)并更新SVDD模型,一旦學(xué)習(xí)完成之后,訓(xùn)練的樣本被丟棄。學(xué)習(xí)系統(tǒng)沒有關(guān)于整個訓(xùn)練樣本的先驗知識。

 

3  基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測算法

 

3.1 webshell檢測算法流程

 

基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell檢測算法主要包含卡方檢驗、深度學(xué)習(xí)、半監(jiān)督學(xué)習(xí)、單分類SVDD、增量學(xué)習(xí)SVDD等。其中算法結(jié)構(gòu)如圖3所示。

 

3.2 webshell檢測算法描述

 

本文運用深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)相關(guān)算法,對于有標(biāo)記樣本集{(X1,Y1),(X2,Y2),…,(Xn,Yn)},其中Yi=微信截圖_20180911094128.png為對應(yīng)樣本Xi=微信截圖_20180911094135.png的標(biāo)記向量,以及無標(biāo)記樣本{Z1,Z2,Z3,…,Zm}進行webshell建模分析。其中webshell檢測算法具體流程如下:

(1)對有標(biāo)記樣本進行分詞處理,再用卡方檢驗分析各個特征詞與樣本標(biāo)記之間的相關(guān)性,選擇前K個重要特征詞作為篩選特征詞;

(2)對于未標(biāo)記樣本,用(1)中獲取的篩選特征詞獲得未標(biāo)記樣本特征;

 

wb4_副本.jpg

圖 3   webshell檢測算法流程圖


(3)對于(2)中獲取的未標(biāo)記樣本特征,使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練獲得各個未標(biāo)記樣本的文本向量及doc2vec;

(4)利用(3)中獲取的文本向量,使用無監(jiān)督學(xué)習(xí)方法訓(xùn)練單分類SVDD模型,最小化超球體半徑,最大情況包含未標(biāo)記樣本; 

(5)對于新的標(biāo)記樣本,運用在線學(xué)習(xí)方式訓(xùn)練增量學(xué)習(xí)SVDD模型,修正單分類SVDD模型,提高現(xiàn)有模型的識別能力。

 

4  實驗與分析

 

為了驗證本文中基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)的webshell算法檢測性能,使用github中數(shù)據(jù)進行實驗,數(shù)據(jù)樣本分布情況如下表1所示。

表1數(shù)據(jù)的類別分布表

微信截圖_20180911095059.png


4.1 數(shù)據(jù)預(yù)處理

 

原始的webshell訓(xùn)練樣本是直接在github上下載的webshell腳本文件,在進行樣本訓(xùn)練之前,需要進行數(shù)據(jù)預(yù)處理。為了獲得高質(zhì)量的特征集,在所有的數(shù)據(jù)集合中選取有標(biāo)記樣本作為卡方訓(xùn)練樣本,其中選取增量訓(xùn)練集W1中50份樣本,增量訓(xùn)練集W2中50份樣本,正常測試集W3中50份樣本,webshell樣本集W4中50份樣本,組合成200份有標(biāo)記卡方訓(xùn)練樣本。

經(jīng)過卡方檢驗之后,選取前500個特征作為樣本的重要特征,其中前7個特征結(jié)果如表2所示。

表2前7個卡方檢驗特征表

微信截圖_20180911095254.png


 通過卡方檢驗選擇的特征是與標(biāo)記樣本相關(guān)性較高的特征詞。為簡化樣本復(fù)雜程度,需要進一步使用卡方檢驗獲取的前500個特征值,過濾初始訓(xùn)練集W0。然后使用神經(jīng)網(wǎng)絡(luò)訓(xùn)練過濾后的樣本,獲取訓(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 實驗結(jié)果和分析

 

在有少量有標(biāo)記樣本和大量無標(biāo)記樣本情況下,半監(jiān)督學(xué)習(xí)是能夠同時兼顧訓(xùn)練樣本和提高訓(xùn)練結(jié)果的學(xué)習(xí)方法。在無監(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。對于每個模型,均使用正常測試集W3和webshell樣本集W4樣本混合測試。對于本文的webshell檢測方法,使用漏報率和誤報率來驗證模型分類效果,測試結(jié)果如表3所示。

表3測試結(jié)果表 

微信截圖_20180911095648.png


從實驗結(jié)果可以看出,對于相同的W3+W4測試樣本,使用增量SVDD訓(xùn)練的模型在漏報率和誤報率上均優(yōu)于單分類SVDD模型,并且使用增量樣本修正的次數(shù)越多,模型的效果越好。說明基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)方法在webshell檢測中的優(yōu)越性,充分利用少量有標(biāo)記樣本,使用在線學(xué)習(xí)方法訓(xùn)練增量SVDD模型,不斷優(yōu)化最終模型,降低檢測的漏報率和誤報率。

 

5  結(jié)論

 

經(jīng)過多次的實驗結(jié)果可知,本文提出的基于深度學(xué)習(xí)和半監(jiān)督學(xué)習(xí)webshell檢測方法,在webshell檢測中一定程度上改善了系統(tǒng)的性能,有效降低了漏報率和誤報率,并在增量學(xué)習(xí)框架下,通過不斷學(xué)習(xí)新增標(biāo)記樣本,能夠持續(xù)優(yōu)化系統(tǒng)。在深度學(xué)習(xí)領(lǐng)域,本文使用文本向量的方式獲得樣本特征,此后的重點研究方向在于如何獲取更有價值的樣本特征。在半監(jiān)督學(xué)習(xí)領(lǐng)域,本文使用單分類SVDD模型和增量SVDD模型,此后的重點研究方向在于如何優(yōu)化模型提高漏報率和誤報率。

 

參考文獻

 

 [1] QUINLAN J R.C4.5:programs for machine learning[M].San Francisco:Morgan Kaufmann,1993.

 

[2] 胡建康,徐震,馬多賀,等.基于決策樹的Webshell檢測方法研究[J].網(wǎng)絡(luò)新媒體技術(shù).2012,1(6):15-19.

 

[3] 龍嘯,方勇,黃誠,等.Webshell研究綜述:檢測與逃逸之間的博弈[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)

 

 

作者簡介:

 

吳斌(1991-),通信作者,男,碩士,大數(shù)據(jù)分析師,主要研究方向:數(shù)據(jù)挖掘、機器學(xué)習(xí)。E-mail:wubin@onescorpion.com。 

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

 

 


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