周愛(ài)君,努爾布力,艾 壯,肖中正
1.新疆大學(xué) 信息科學(xué)與工程學(xué)院,烏魯木齊830046
2.新疆大學(xué) 網(wǎng)絡(luò)中心,烏魯木齊830046
隨著互聯(lián)網(wǎng)的快速發(fā)展,Web應(yīng)用系統(tǒng)越來(lái)越多,這也進(jìn)一步滋生了黑色產(chǎn)業(yè)。黑客通過(guò)入侵網(wǎng)站,在網(wǎng)站植入大量的廣告推廣頁(yè)面或者其他鏈接,這無(wú)形中增加了網(wǎng)站性能風(fēng)險(xiǎn),對(duì)用戶(hù)造成使用隱患。國(guó)家互聯(lián)網(wǎng)應(yīng)急中心(National Internet Emergency Center,CNCERT)發(fā)布的《2019年上半年我國(guó)互聯(lián)網(wǎng)網(wǎng)絡(luò)安全態(tài)勢(shì)》中指出,CNCERT監(jiān)測(cè)到我國(guó)境內(nèi)有2.6萬(wàn)個(gè)網(wǎng)站被惡意植入后門(mén),近4萬(wàn)個(gè)網(wǎng)站被篡改。根據(jù)Internet Live Status 2018年1月的數(shù)據(jù)[1],全球每天大概有100 618個(gè)網(wǎng)站被攻擊。360發(fā)布的《2017中國(guó)網(wǎng)站安全形勢(shì)分析報(bào)告》指出360網(wǎng)站衛(wèi)士攔截漏洞攻擊中,WebShell排第二位,攔截高達(dá)21 615.1萬(wàn)次。由于WebShell能夠?qū)崿F(xiàn)對(duì)各種關(guān)鍵功能的遠(yuǎn)程訪問(wèn),如執(zhí)行任意命令查看和修改任意文件、提升訪問(wèn)權(quán)限、發(fā)送垃圾郵件等,黑客通常會(huì)通過(guò)在網(wǎng)站植入WebShell,達(dá)到植入廣告、篡改頁(yè)面、控制Web服務(wù)等目的,因此WebShell的檢測(cè)及查殺就顯得尤為重要。WebShell常常隱藏在正常網(wǎng)站文件下,針對(duì)不同的網(wǎng)站編寫(xiě)方法其檢測(cè)方法存在差異。W3Techs在2020年4月的調(diào)查報(bào)告中顯示,php是網(wǎng)站編寫(xiě)中最常用的語(yǔ)言,使用率高達(dá)78.3%。本文考慮對(duì)php編寫(xiě)的WebShell展開(kāi)研究。
常見(jiàn)的WebShell檢測(cè)方法主要分為靜態(tài)檢測(cè)和動(dòng)態(tài)檢測(cè)。由于動(dòng)態(tài)檢測(cè)是通過(guò)檢測(cè)代碼執(zhí)行過(guò)程中的流量變化、系統(tǒng)指令等敏感行為特征實(shí)現(xiàn)WebShell檢測(cè)的,且該方法系統(tǒng)資源占用大,檢測(cè)周期長(zhǎng),無(wú)法實(shí)現(xiàn)大批量檢測(cè),甚至?xí)?duì)Web系統(tǒng)性能造成影響,本文考慮從靜態(tài)檢測(cè)方法展開(kāi)研究。目前針對(duì)WebShell的靜態(tài)檢測(cè)方法主要專(zhuān)注于分類(lèi)器的優(yōu)化,而針對(duì)WebShell特征指標(biāo)模型的研究相對(duì)較少。WebShell和普通Web頁(yè)面特征幾乎一致,容易逃避傳統(tǒng)防火墻和殺毒軟件的檢測(cè)。隨著各種反檢測(cè)特征混淆隱藏技術(shù)應(yīng)用到WebShell上,使得WebShell的檢測(cè)難度進(jìn)一步增加。傳統(tǒng)基于特征碼匹配的檢測(cè)方式很難及時(shí)檢測(cè)出新的變種。為避免WebShell中的加密、壓縮及混淆問(wèn)題,通常將問(wèn)題轉(zhuǎn)化為對(duì)WebShell編譯結(jié)果層opcode序列的研究。WebShell的opcode序列特征向量維度非常高,容易出現(xiàn)“維度災(zāi)難”問(wèn)題,因此尋求最具代表性的WebShell特征子空間有助于進(jìn)一步提高WebShell檢測(cè)性能。
為了提高檢測(cè)模型的準(zhǔn)確率,需要更好地利用樣本之間的聯(lián)系,本文考慮將近鄰成分分析[2]應(yīng)用到WebShell特征處理過(guò)程中,通過(guò)樣本學(xué)習(xí)一種有效的距離測(cè)度方式,更好表示樣本間的相似度。近鄰成分分析的目的就是針對(duì)特定任務(wù),根據(jù)樣本學(xué)習(xí)一種使得分類(lèi)損失最小的距離測(cè)度方式,更好地表示樣本間的某種相似度。近年來(lái),基于近鄰成分分析的特征處理方法已經(jīng)在很多領(lǐng)域得到成功應(yīng)用,包括語(yǔ)音識(shí)別、人臉識(shí)別等。借鑒其他領(lǐng)域,本文將近鄰成分分析應(yīng)用到WebShell特征處理過(guò)程,實(shí)驗(yàn)證明,相比傳統(tǒng)的WebShell靜態(tài)檢測(cè)方法,該算法的檢測(cè)效率、正確率更高,同時(shí)也能以一定概率檢測(cè)出新型的WebShell。
互聯(lián)網(wǎng)中網(wǎng)頁(yè)惡意代碼攻擊網(wǎng)絡(luò)事件給眾多的瀏覽用戶(hù)帶來(lái)了極大的危害,Web安全形勢(shì)變得越來(lái)越嚴(yán)峻,基于此種環(huán)境,國(guó)內(nèi)外的學(xué)者們針對(duì)網(wǎng)頁(yè)惡意代碼的檢測(cè)方法進(jìn)行了深入的研究。
2012年胡建康等人[3]提出基于決策樹(shù)的WebShell檢測(cè)方法,選取最長(zhǎng)單詞、加解密函數(shù)、字符串操作、文本操作等16個(gè)特征作為分類(lèi)方法,利用決策樹(shù)算法進(jìn)行判斷,檢測(cè)的效率及準(zhǔn)確率都比較高,但召回率還有提升的空間。Hagen等人利用統(tǒng)計(jì)學(xué)的方法,使用信息熵、最長(zhǎng)單詞、重合指數(shù)、特征碼、文件壓縮比五種方法編寫(xiě)了NeoPi[4]這款檢測(cè)工具,依據(jù)以上五個(gè)指標(biāo)能發(fā)現(xiàn)可疑文件,但沒(méi)有給出相應(yīng)閾值判斷文件是否為混淆文件。2014年Truong等人[5]利用統(tǒng)計(jì)學(xué)方法對(duì)WebShell使用的函數(shù),比如惡意函數(shù)、命令執(zhí)行函數(shù)等,對(duì)這些函數(shù)出現(xiàn)的頻率進(jìn)行統(tǒng)計(jì),根據(jù)統(tǒng)計(jì)分類(lèi)來(lái)判斷是否是WebShell。2015年王超[6]通過(guò)使用針對(duì)WebShell監(jiān)測(cè)的解析引擎,解析WebShell的行為,建立惡意行為庫(kù),以此來(lái)分析是否為WebShell,但這類(lèi)檢測(cè)方式需要大量的資源,部署實(shí)施難度較大;同年葉飛等人[7]提出基于支持向量機(jī)的WebShell黑盒檢測(cè)方法,通過(guò)分析WebShell的HTML特征,使用支持向量機(jī)(Support Vector Machine,SVM)方法進(jìn)行檢測(cè);2015年朱魏魏等人[8]提出基于NN-SVM的WebShell檢測(cè)方法,該方法是在NeoPi的6個(gè)特征的基礎(chǔ)上,使用NN-SVM算法進(jìn)行檢測(cè)。2016年Thornton[9]開(kāi)發(fā)了WebShell detector,由于其使用了非常多的特征庫(kù),對(duì)WebShell檢測(cè)的準(zhǔn)確率很高,但對(duì)混淆加密的準(zhǔn)確率有待提高。2016年胡必偉[10]提出基于貝葉斯理論的WebShell檢測(cè)方法,該方法通過(guò)分析混淆加密的WebShell與正常WebShell的區(qū)別,再使用樸素貝葉斯分類(lèi)進(jìn)行檢測(cè)。2017年Tian等人[11]結(jié)合行為分析,檢測(cè)WebShell的通信特征,并測(cè)試不同的機(jī)器學(xué)習(xí)算法,最后利用Word2Vec進(jìn)行文本特征提取,使用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)方法進(jìn)行訓(xùn)練檢測(cè)。2018年賈文超等人[12]提出采用隨機(jī)森林改進(jìn)算法的WebShell檢測(cè)方法,該方法通過(guò)對(duì)比不同類(lèi)型WebShell的特征構(gòu)建特征庫(kù),根據(jù)度量Fisher比對(duì)特征進(jìn)行分類(lèi)劃分,以此來(lái)提高決策樹(shù)的分類(lèi)強(qiáng)度。
綜上所述,基于靜態(tài)WebShell檢測(cè)有各自的優(yōu)點(diǎn),也存在各自的不足,不難發(fā)現(xiàn)關(guān)于WebShell的特征研究,大多數(shù)停留在統(tǒng)計(jì)特征和腳本內(nèi)容特征層面。隨著WebShell檢測(cè)工具的性能提升,攻擊者經(jīng)常使用混淆加密的方法隱藏WebShell以躲避檢測(cè)。opcode是php腳本編譯后的中間語(yǔ)言,類(lèi)似Java的ByteCode,機(jī)器通過(guò)opcode獲悉執(zhí)行指令,處理提供的數(shù)據(jù)。由于opcode只關(guān)心操作指令,不關(guān)心函數(shù)名、定義等,可以有效地檢測(cè)一些加密、混淆的代碼。本文為解決混淆加密技術(shù)導(dǎo)致的檢測(cè)準(zhǔn)確率低的問(wèn)題,將從WebShell編譯結(jié)果層opcode序列展開(kāi)研究。
特征空間中學(xué)習(xí)距離度量可以極大地提高分類(lèi)器的性能,在實(shí)際應(yīng)用中具有重要意義。近鄰成分分析就是一種與KNN相關(guān)聯(lián)的距離測(cè)度學(xué)習(xí)算法,通過(guò)最大化訓(xùn)練數(shù)據(jù)中留一法(Leave One Out,LOO)分類(lèi)精度來(lái)搜索線(xiàn)性變換矩陣,利用得到的低秩矩陣,將高維訓(xùn)練數(shù)據(jù)嵌入低維空間。這種方法已經(jīng)被應(yīng)用在許多領(lǐng)域,例如文本分類(lèi)、語(yǔ)音識(shí)別和面部識(shí)別。
劉叢山等人提出k近鄰元分析分類(lèi)算法k-NCA,通過(guò)引入k近鄰思想實(shí)現(xiàn)文本分類(lèi)器功能[13]。Nguyen等人提出了一種新的人臉識(shí)別距離度量學(xué)習(xí)方法——間接鄰域成分分析(Indirect Neighborhood Component Analysis,INCA)。INCA是一次性相似性學(xué)習(xí)和近鄰成分分析方法的結(jié)合,測(cè)試發(fā)現(xiàn)即使在非常低的維度上也能取得較好的結(jié)果[14]。Wang等人為可靠識(shí)別嘈雜的人臉圖像,引入一種新穎的空間平滑正則化器(Spatially Smooth Regularizer,SSR)改進(jìn)了快速鄰域成分分析(Fast Neighborhood Component Analysis,F(xiàn)NCA)模型,從而建立了具有更高識(shí)別精度的FNCA-SSR模型[15]。Ferdinando等人探討了使用近鄰成分分析(Neighborhood Component Analysis,NCA)進(jìn)行降維處理能增強(qiáng)心電圖(Electrocardiogram,ECG)對(duì)三種類(lèi)型的情感識(shí)別性能[16]。Singhmiller等人將近鄰成分分析方法應(yīng)用于語(yǔ)音識(shí)別器中的聲學(xué)建模,將高維聲學(xué)表示投影到低維空間中,提高了最近鄰分類(lèi)器的分類(lèi)精度[17]。Jin等人提出的具有NCA特征的增強(qiáng)樹(shù)模型能夠有效預(yù)測(cè)阿爾茨海默氏病不同階段,優(yōu)于主成分分析(Principal Component Analysis,PCA)、序列前向選擇(Sequential Forward Selection,SFS)等特征選擇策略[18]。Malan等人將正則化近鄰成分分析的特征選擇算法應(yīng)用于運(yùn)動(dòng)圖像的腦機(jī)接口信號(hào)分析中,增強(qiáng)了運(yùn)動(dòng)圖像信號(hào)的分類(lèi)性能[19]。李雪晴等人提出基于近鄰元分析的半監(jiān)督流行學(xué)習(xí)算法能夠充分利用樣本點(diǎn)的標(biāo)簽信息[20]。Wang等人基于NCA提出一種新穎的貝葉斯度量學(xué)習(xí)算法,該算法在小型數(shù)據(jù)集或有錯(cuò)誤標(biāo)簽的訓(xùn)練集中可學(xué)習(xí)可靠的度量標(biāo)準(zhǔn)[21]。
本文提出一種靜態(tài)的基于近鄰成分分析的WebShell特征處理方法,以字節(jié)碼向量庫(kù)作為樣本特征,使用近鄰成分分析算法構(gòu)建opcode向量庫(kù)的低維測(cè)度空間,為樣本創(chuàng)造最佳分類(lèi)距離。為避免NCA過(guò)于依賴(lài)總體訓(xùn)練樣本,使用同樣根據(jù)距離作為分類(lèi)標(biāo)準(zhǔn)的ReliefF特征選擇方法,從局部鄰域相似度的角度進(jìn)一步優(yōu)化特征提取性能,提高分類(lèi)器檢測(cè)能力。
不同于其他的WebShell特征處理方法,本文提出一種靜態(tài)的基于近鄰成分分析的WebShell特征處理算法,使用WebShell的opcode序列特征,適合于不同種類(lèi)的WebShell,且能夠有效避免混淆加密對(duì)檢測(cè)的干擾。另外,使用近鄰成分分析算法能夠在完成最大化分類(lèi)準(zhǔn)確率任務(wù)的同時(shí)實(shí)現(xiàn)特征降維,不僅能解決因opcode序列特征向量維度過(guò)高引起的“維度災(zāi)難”問(wèn)題,還能提升分類(lèi)準(zhǔn)確率。ReliefF算法的加入,可以進(jìn)一步精簡(jiǎn)特征,確保處理后的特征具有較高的類(lèi)別區(qū)分能力,達(dá)到提高WebShell檢測(cè)結(jié)果的準(zhǔn)確率的目的。
本文基于近鄰成分分析的WebShell特征處理算法的設(shè)計(jì)思路如圖1所示。WebShell特征處理分為兩個(gè)階段,php腳本處理和opcode文本向量處理。php腳本處理主要包括php去重,提取opcode操作碼,生成opcode文本向量。為避免重復(fù)樣本對(duì)訓(xùn)練模型造成影響,采用MD5對(duì)收集到的php文件進(jìn)行去重,刪除冗余文件。opcode是操作碼的縮寫(xiě),一條指令可以包含一個(gè)或多個(gè)操作碼。本文使用插件VLD進(jìn)行源碼和opcode的轉(zhuǎn)換,將去重后得到的每一個(gè)php腳本經(jīng)過(guò)詞法分析、語(yǔ)法分析、靜態(tài)編譯過(guò)程后最終得到一個(gè)opcode序列,如圖2所示。采用正則表達(dá)式的方式對(duì)齊opcode所在列,按序?qū)⒚恳粋€(gè)opcode保存下來(lái)。分別提取正樣本和負(fù)樣本的opcode序列,將結(jié)果分別保存在兩個(gè)文件下以便后續(xù)數(shù)據(jù)處理。為有效利用opcode序列的上下文關(guān)系,突出opcode序列片段的重要性,本文采用N-gram模型生成opcode詞袋。N-gram算法將一個(gè)語(yǔ)料片段出現(xiàn)的可能性歸結(jié)于它之前的n個(gè)語(yǔ)料片段,將opcode序列庫(kù)中所有的opcode序列分割成長(zhǎng)度為n的語(yǔ)料片段,構(gòu)成opcode詞袋??紤]到opcode序列片段在單個(gè)php腳本及整個(gè)php數(shù)據(jù)集中的重要程度,采用TF-IDF為opcode詞袋構(gòu)建所需文本向量庫(kù)。TF-IDF算法通過(guò)詞頻(Term Frequency,TF)和逆向文件頻率(Inverse Document Frequency,IDF),即某一個(gè)opcode序列片段在給定某一php腳本對(duì)應(yīng)的opcode序列中出現(xiàn)的次數(shù),和該序列片段在所有php腳本對(duì)應(yīng)的opcode序列中出現(xiàn)的頻率,來(lái)衡量一個(gè)opcode序列片段的重要性。
圖1 算法流程圖Fig.1 Algorithm flow chart
圖2 opcode提取過(guò)程Fig.2 opcode extraction process
opcode文本向量處理階段,主要解決opcode文本向量出現(xiàn)的“維數(shù)災(zāi)難”問(wèn)題。本文為避免樣本不均衡問(wèn)題采用smote上采樣增強(qiáng)訓(xùn)練樣本。近鄰成分分析是2005年Hinton等人提出的一種度量學(xué)習(xí)方法[2],目的是采用自適應(yīng)的方法學(xué)習(xí)一個(gè)使KNN分類(lèi)正確率盡可能高的距離度量,在距離學(xué)習(xí)過(guò)程中完成高維向低維的轉(zhuǎn)化。本文利用NCA可以獲得一個(gè)使得分類(lèi)正確率高的低維空間。為進(jìn)一步加強(qiáng)低維空間下特征的分類(lèi)能力,緩解NCA過(guò)于依賴(lài)總體訓(xùn)練樣本,忽略局部信息帶來(lái)的問(wèn)題,本文借鑒了ReliefF計(jì)算近鄰距離評(píng)估特征分類(lèi)價(jià)值的方法。對(duì)低維空間下的特征按照權(quán)重大小排序,找出最具類(lèi)別區(qū)分能力的特征作為KNN分類(lèi)器的輸入,預(yù)測(cè)模型分類(lèi)結(jié)果?;谑褂媒彸煞址治鏊惴ㄍ瓿蒾pcode文本向量處理這一過(guò)程在文中簡(jiǎn)稱(chēng)為NCA_ReliefF。NCA_ReliefF主要分為兩部分:構(gòu)建低維空間和特征選擇。NCA_ReliefF通過(guò)最大化訓(xùn)練集的留一法識(shí)別精度期望來(lái)學(xué)習(xí)變換矩陣,以完成低維空間的構(gòu)建,通過(guò)比較特征權(quán)重完成特征選擇。
輸入:訓(xùn)練數(shù)據(jù)集Xn×D,NCA特征提取保留的特征數(shù)量d(目標(biāo)維數(shù)),ReliefF抽樣次數(shù)m,鄰居個(gè)數(shù)re_k,最終特征保留數(shù)量s,s 步驟1對(duì)訓(xùn)練數(shù)據(jù)集Xn×D進(jìn)行NCA特征提取,迭代次數(shù)選擇默認(rèn)值100,返回低維矩陣Ad×D; 步驟2將訓(xùn)練數(shù)據(jù)集Xn×D嵌入低維空間中,返回?cái)?shù)據(jù)集 步驟3從Xn×d中隨機(jī)選擇一個(gè)樣本,找出re_k個(gè)同類(lèi)近鄰樣本和re_k個(gè)不同類(lèi)近鄰樣本; 步驟4更新每一個(gè)特征α的權(quán)值Wα; 步驟5重復(fù)步驟3~步驟4過(guò)程m次,返回特征權(quán)重向量W; 步驟6根據(jù)特征權(quán)值對(duì)特征進(jìn)行從大到小排序。 輸出:輸出權(quán)值最大的前s個(gè)加權(quán)處理過(guò)的特征矩陣 步驟1和步驟2的目的是利用NCA算法迭代計(jì)算出一個(gè)低維矩陣Ad×D,將訓(xùn)練集Xn×D由原本的D維空間轉(zhuǎn)化為d維(D>d),進(jìn)而避免因“維數(shù)災(zāi)難”導(dǎo)致的檢測(cè)準(zhǔn)確率不高的問(wèn)題;步驟3~步驟5的主要工作是利用ReliefF特征選擇方法計(jì)算出d維空間下各個(gè)特征對(duì)分類(lèi)標(biāo)簽的重要程度,最終得到一個(gè)長(zhǎng)度為d的特征權(quán)重向量W;步驟6描述特征再選擇過(guò)程,先對(duì)權(quán)重向量W進(jìn)行排序,再篩選出前s個(gè)分類(lèi)價(jià)值最大的特征,以確保特征矩陣的輸入對(duì)分類(lèi)結(jié)果有積極影響。 近鄰成分分析(NCA)算法采用迭代的方式自動(dòng)化完成距離矩陣的測(cè)度學(xué)習(xí),也是在這個(gè)過(guò)程中完成降維。給定n個(gè)帶標(biāo)簽的樣本(x1,x2,…,xn)∈RD,相對(duì)應(yīng)的類(lèi)標(biāo)為C1,C2,…,Cn。人們希望獲得使最近鄰分類(lèi)效果最優(yōu)的低維矩陣。由于數(shù)據(jù)的真實(shí)分布情況處于未知狀態(tài),將問(wèn)題轉(zhuǎn)化為求訓(xùn)練數(shù)據(jù)上的留一化效果最優(yōu)。限定馬氏距離變換矩陣Q是一個(gè)對(duì)稱(chēng)半正定矩陣,即Q=ATA,那么兩個(gè)樣本之間的馬氏距離為: 式中,pij表示樣本點(diǎn)xi隨機(jī)選擇另外一個(gè)樣本點(diǎn)xj為近鄰,且最終xi繼承xj標(biāo)簽Cj的概率。那么,將樣本點(diǎn)xi正確分類(lèi)的概率為: 其中,Ci={j|Ci=Cj}。目標(biāo)函數(shù)要使得正確分類(lèi)點(diǎn)的數(shù)目最大,因此定義為: f(A)是一個(gè)連續(xù)可微的矩陣函數(shù),算法就是要最大化目標(biāo)函數(shù)。由于這是一個(gè)無(wú)約束優(yōu)化問(wèn)題,使用收斂速度快,內(nèi)存消耗小的梯度下降算法LBFGS求出A。其梯度表達(dá)式如式(5)所示,其中xij=xi-xj。 最大化目標(biāo)函數(shù)f(A)等同于最小化真實(shí)類(lèi)別分布和隨機(jī)類(lèi)別分布之間的L1范數(shù)。當(dāng)A是d×D的非方陣,便可將樣本降到Rd空間。從NCA算法理論上看,其計(jì)算成本主要取決于最優(yōu)化過(guò)程的梯度計(jì)算,即式(5),每一次迭代的計(jì)算復(fù)雜度為O(dDn2),由此可知,當(dāng)數(shù)據(jù)集過(guò)大時(shí),該算法的計(jì)算效率較低。由于參照樣本是隨機(jī)選擇的,在分類(lèi)時(shí)很難體現(xiàn)局部信息的優(yōu)勢(shì),易導(dǎo)致分類(lèi)結(jié)果不理想。 為緩解NCA過(guò)于依賴(lài)總體訓(xùn)練樣本,忽略局部信息帶來(lái)的問(wèn)題,使用ReliefF計(jì)算各個(gè)特征權(quán)值。ReliefF算法中特征和類(lèi)別的相關(guān)性是基于特征對(duì)近距離樣本的區(qū)分能力。從訓(xùn)練集中隨機(jī)選擇一個(gè)樣本xi,從和xi同類(lèi)的樣本中尋找最近鄰樣本H,從和xi不同類(lèi)的樣本中尋找最近鄰樣本M,若xi和H在特征?上的距離小于xi和M上的距離,則說(shuō)明特征?對(duì)區(qū)分同類(lèi)和不同類(lèi)起正面作用,則增加特征?的權(quán)重;反之,則降低特征?的權(quán)重。將該過(guò)程重復(fù)m次,最后得到各個(gè)特征的平均權(quán)重。ReliefF算法偽代碼如下所示。 算法ReliefF 輸入:訓(xùn)練集Xn×d,抽樣次數(shù)m,最近鄰樣本個(gè)數(shù)re_k。 輸出:d個(gè)特征的特征權(quán)重W。 步驟1置所有特征權(quán)重為0,W為空集。 步驟2fori=1 tom 從Xn×d中隨機(jī)選擇一個(gè)樣本xi; 從xi的同類(lèi)樣本中找到re_k個(gè)最近鄰Hj,從不同類(lèi)樣本集中找到re_k個(gè)最近鄰Mj(C),j=1,2,…,re_k; 步驟3forα=1 tod(all features) End Return當(dāng)前特征權(quán)重向量W 步驟3是ReliefF算法的核心部分,其中diff(?,xi,Hj)表示計(jì)算樣本xi和最近鄰?fù)?lèi)樣本Hj在特征?上的差,如式(6)所示: diff(?,xi,Mj(C))表示計(jì)算樣本xi和最近鄰非同類(lèi)樣本Mj(C)在特征?上的差,Mj(C)表示類(lèi)C?class(xi)中第j個(gè)最近鄰樣本。p(C)表示出現(xiàn)樣本標(biāo)簽為C的概率,p(class(xi))表示出現(xiàn)樣本和xi同類(lèi)的概率。WebShell檢測(cè)是二分類(lèi)問(wèn)題,此時(shí): 將步驟3重復(fù)m次,最后輸出各個(gè)特征的平均權(quán)重。特征權(quán)重越大表示該特征分類(lèi)能力越強(qiáng),特征權(quán)重越小表示分類(lèi)的能力越弱。通過(guò)對(duì)權(quán)重排序可將相關(guān)性強(qiáng)的特征保留,去除不相關(guān)的特征。 綜上,ReliefF能夠利用鄰域衡量各特征和類(lèi)別的相關(guān)性,有效找出具有類(lèi)別區(qū)分能力的特征。ReliefF算法的運(yùn)行時(shí)間與樣本的抽樣次數(shù)m、特征數(shù)量d、樣本數(shù)量n相關(guān),可得出結(jié)論,ReliefF的計(jì)算復(fù)雜度為Θ(dmn)。 本文將經(jīng)過(guò)NCA特征提取得到的矩陣Ad×D作為變換矩陣,通過(guò)計(jì)算樣本Xn×D在空間Ad×D中的投影,得到一個(gè)d維空間的樣本Xn×D。將Xn×D作為ReliefF的輸入,此時(shí)ReliefF計(jì)算Xn×D中d個(gè)特征的權(quán)值,得到權(quán)重向量W。為增加局部信息的效能,對(duì)特征進(jìn)行重新篩選,最終可得到一個(gè)s維的樣本,至此便完成了對(duì)整個(gè)數(shù)據(jù)集的預(yù)處理。為驗(yàn)證特征處理的有效性,提高模型對(duì)WebShell的檢測(cè)性能,選擇準(zhǔn)確率、召回率作為評(píng)價(jià)指標(biāo)。 本實(shí)驗(yàn)所用的計(jì)算機(jī)配置如下Intel?CoreTMi3-3227U CPU@1.9 GHz,8.00 GB內(nèi)存,軟件開(kāi)發(fā)環(huán)境為Windows10,編程語(yǔ)言是Python3,主要調(diào)用機(jī)器學(xué)習(xí)庫(kù)Sklearn。本文所使用的數(shù)據(jù)集,由Github收集項(xiàng)目經(jīng)過(guò)MD5去重篩選后得到,由566個(gè)惡意WebShell和5 378個(gè)正常php腳本構(gòu)成,如表1所示。隨機(jī)選取樣本集中80%樣本作為訓(xùn)練集,用于生成檢測(cè)模型,剩余數(shù)據(jù)作為測(cè)試集,用于檢測(cè)模型的測(cè)試。 表1 WebShell樣本Table 1 WebShell sample 將去重后得到的php文件進(jìn)行opcode編碼,每一個(gè)php文件經(jīng)過(guò)編碼后得到一個(gè)opcode編碼串。用TFIDF構(gòu)建詞向量模型,計(jì)算該詞組TF-IDF值,得到編譯結(jié)果層基于opcode序列的詞頻矩陣,將其作為特征向量。為提高整個(gè)模型的運(yùn)行效率,選取出現(xiàn)頻數(shù)最高的1 000個(gè)片段生成詞袋模型,通過(guò)五折交叉驗(yàn)證發(fā)現(xiàn)opcode序列片段長(zhǎng)度n∈[]2,4時(shí),分類(lèi)準(zhǔn)確率和召回率均超過(guò)95%,如圖3所示。 圖3 語(yǔ)法模型參數(shù)選擇Fig.3 Syntax model parameter selection 實(shí)驗(yàn)中,將WebShell標(biāo)記為1,正常樣本標(biāo)記為0。分類(lèi)結(jié)果混淆矩陣如表2所示。本文采用準(zhǔn)確率、召回率、F1值3個(gè)指標(biāo)評(píng)估特征選擇方法性能。 表2 分類(lèi)結(jié)果混淆矩陣Table 2 Confusion matrix of classification results (1)準(zhǔn)確率(acc):所有被正確判斷類(lèi)別的測(cè)試樣本數(shù)量與測(cè)試樣本數(shù)量的比值。 (2)召回率(rec):所有被正確判斷為正常事件數(shù)量與所有正常事件數(shù)量的比值。 (3)F1值:分類(lèi)問(wèn)題的一個(gè)衡量指標(biāo),是精確率和召回率的調(diào)和平均數(shù),能夠反映檢測(cè)的綜合效果。 實(shí)驗(yàn)參數(shù)一共有4個(gè),NCA降維空間維度d、ReliefF迭代次數(shù)m、ReliefF鄰居個(gè)數(shù)re_k和ReliefF的特征保留數(shù)量s。 NCA與ReliefF在計(jì)算過(guò)程中都采用了距離度量,在參數(shù)選擇過(guò)程中,本文選擇KNN分類(lèi)器來(lái)衡量模型的檢測(cè)效果。近鄰計(jì)算中若k值選擇過(guò)小,得到的近鄰數(shù)過(guò)少,不僅會(huì)降低分類(lèi)精度,也會(huì)放大噪聲數(shù)據(jù)的干擾;而如果k值選擇過(guò)大,對(duì)于訓(xùn)練集中數(shù)據(jù)量較少的異常樣本在選擇k個(gè)近鄰的時(shí)候,容易將并不相似的數(shù)據(jù)包含進(jìn)來(lái),造成噪聲增加,導(dǎo)致分類(lèi)效果的降低。本文采用五折交叉驗(yàn)證選取恰當(dāng)?shù)膋值,選擇k=5,在此情況下,KNN分類(lèi)的召回率較高。 NCA降維過(guò)程中,提取的特征數(shù)量對(duì)最終分類(lèi)結(jié)果有很大影響,模型僅需少量的樣本就可以得到較高的預(yù)測(cè)準(zhǔn)確率。理想狀態(tài)下,期望選擇盡可能少的子特征,同時(shí)保證模型的效果不會(huì)顯著下降,類(lèi)別分布盡可能地接近真實(shí)的類(lèi)別分布。實(shí)驗(yàn)對(duì)比了保留100維,200維,…,900維情況下的分類(lèi)性能,如圖4所示。實(shí)驗(yàn)表明,當(dāng)提取特征為200時(shí),分類(lèi)準(zhǔn)確率、召回率均超過(guò)98%,F(xiàn)1值超過(guò)93%。在此基礎(chǔ)上增加提取數(shù)量時(shí),F(xiàn)1值明顯下降。為保證模型效果的前提下,最終選擇提取200個(gè)特征,d=200。 圖4 NCA特征提取數(shù)量對(duì)分類(lèi)性能影響Fig.4 Influence of number of NCA feature extractions on classification performance 為進(jìn)一步降低存儲(chǔ)空間,提高分類(lèi)速率,采用ReliefF特征選擇方法進(jìn)一步約減特征空間,獲得最優(yōu)子空間。ReliefF算法的參數(shù)m、re_k、s的確定如下: (1)m值的實(shí)驗(yàn)測(cè)定。s固定為100時(shí),m取值范圍[1,1 000],從中均勻取出10個(gè)值,統(tǒng)計(jì)準(zhǔn)確率、召回率、F1值。其中m=100時(shí),準(zhǔn)確率、召回率、F1值都超過(guò)了95%,召回率高達(dá)99%。 (2)re_k值的實(shí)驗(yàn)測(cè)定。固定已經(jīng)選擇的m值為100,n固定為100時(shí),選取re_k=1,3,…,19等10種情況,如圖5所示。re_k對(duì)檢測(cè)結(jié)果的影響較小,當(dāng)近鄰數(shù)量為9時(shí),分類(lèi)效果最佳,如表3所示。在此基礎(chǔ)上繼續(xù)增加近鄰數(shù)量,re_k=11時(shí),檢測(cè)效率無(wú)顯著提升。 圖5 ReliefF近鄰數(shù)量對(duì)分類(lèi)的影響Fig.5 Influence of number of ReliefF neighbors on classification performance (3)s的實(shí)驗(yàn)測(cè)定。固定選擇好的m=100,re_k=9時(shí),選取s=10,20,…,130,如圖6所示。統(tǒng)計(jì)準(zhǔn)確率、召回率、F1值,結(jié)果如表4所示。分類(lèi)性能隨著特征選擇數(shù)量的增加逐漸穩(wěn)定,當(dāng)s=70時(shí),達(dá)到分類(lèi)性能最佳,如表4所示。 圖6 特征數(shù)量s對(duì)分類(lèi)的影響Fig.6 Influence of number of features s on classification performance 表4 特征數(shù)量s對(duì)分類(lèi)性能的影響Table 4 Influence of number of features s on classification performance 綜上,ReliefF參數(shù)已確定,迭代次數(shù)m=100,鄰居數(shù)量re_k=9,特征保留數(shù)量s=70。在這組參數(shù)設(shè)置下,可將原本1 000維的空間縮小至70,且達(dá)到的分類(lèi)效果最佳,準(zhǔn)確率和召回率均超過(guò)95%,將該70維的子空間視為最優(yōu)子空間。 現(xiàn)從準(zhǔn)確率、召回率、F1值、運(yùn)行時(shí)間四方面對(duì)基于決策樹(shù)(DT)、K近鄰(KNN)、隨機(jī)森林(RF)、支持向量機(jī)(SVM)、樸素貝葉斯(NB)五種分類(lèi)器進(jìn)行比較,結(jié)果如圖7所示。 圖7 不同分類(lèi)算法對(duì)WebShell檢測(cè)性能的影響Fig.7 Influence of different classification algorithms on WebShell detection performance 在不同的評(píng)價(jià)標(biāo)準(zhǔn)上,有的分類(lèi)器在某一方面表現(xiàn)非常優(yōu)秀。由表5所示,K近鄰和隨機(jī)森林在準(zhǔn)確率、召回率和F1值方面表現(xiàn)較佳,但考慮運(yùn)行效率,基于KNN算法的WebShell檢測(cè)方法更有優(yōu)勢(shì)。 表5 不同分類(lèi)算法對(duì)WebShell檢測(cè)性能的影響Table 5 Influence of different classification algorithms on WebShell detection performance 本文提出的NCA_ReliefF特征處理方法能有效檢測(cè)WebShell樣本,且在一定程度上解決了NCA特征選擇方法易忽略局部信息的問(wèn)題。實(shí)驗(yàn)對(duì)比了文本向量特征、單獨(dú)使用NCA算法、單獨(dú)使用ReliefF算法和采用NCA_ReliefF算法四種處理特征方法對(duì)WebsShell檢測(cè)模型的影響。由表6可知,NCA_ReliefF綜合了NCA和ReliefF兩種算法的優(yōu)點(diǎn),在保證準(zhǔn)確率的同時(shí)提高了召回率,準(zhǔn)確率達(dá)到96%,召回率達(dá)到95%。 表6 特征處理方法對(duì)比結(jié)果統(tǒng)計(jì)Table 6 Comparison results statistics of feature processing methods 特征降維方法分為特征選擇和特征提取兩種,目前常用的特征提取方法有主成分分析(Principal Component Analysis,PCA)、獨(dú)立成分分析(Independent Component Analysis,ICA)、等距特征映射(Isometric Mapping,ISOMAP)。常用的特征選擇方法有互信息、相關(guān)系數(shù)、卡方檢驗(yàn)。表7對(duì)比了特征維度保持在70維時(shí),不同特征處理方法的檢測(cè)效果。由表可知,特征提取的三種方法的召回率和準(zhǔn)確率均超過(guò)93%,其中PCA耗時(shí)最短,僅需4 s。特征選擇的三種方法在召回率上表現(xiàn)欠佳,不超過(guò)90%。其中卡方檢驗(yàn)耗時(shí)最短,運(yùn)行時(shí)間不超過(guò)3 s。本文提出的NCA_ReliefF特征處理方法在準(zhǔn)確率、召回率和F1值上都優(yōu)于以上特征處理方法,但其運(yùn)行時(shí)間較長(zhǎng)。 表7 常見(jiàn)特征處理方法的檢測(cè)結(jié)果統(tǒng)計(jì)Table 7 Test results statistics of common feature processing methods 表8 對(duì)比了最新提出的WebShell檢測(cè)模型,即基于多層感知器的檢測(cè)模型[22]、組合層面基于Fisher特征選擇和隨機(jī)森林的檢測(cè)模型[23]和本文基于近鄰成分分析的檢測(cè)模型。三種模型都是基于編譯結(jié)果層完成檢測(cè)任務(wù)。綜合對(duì)比,基于多層感知器的檢測(cè)模型能得到一個(gè)維度小的子空間,縮短了模型檢測(cè)時(shí)間,但準(zhǔn)確率和召回率均低于95%。組合層面基于Fisher特征選擇和隨機(jī)森林的WebShell檢測(cè)模型整體性能最佳,其準(zhǔn)確率和F1值均超過(guò)94%,但其特征數(shù)量較大,數(shù)據(jù)存在冗余,增加了模型的計(jì)算量。理想的WebShell檢測(cè)模型是準(zhǔn)確找出所有的異常樣本,其對(duì)召回率的期望值較高。本文提出的基于近鄰成分分析的檢測(cè)模型NCA和ReliefF方法的結(jié)合,在保證準(zhǔn)確率的同時(shí)能有效提高WebShell檢測(cè)的召回率。 表8 各種模型檢測(cè)結(jié)果統(tǒng)計(jì)Table 8 Test results statistics of various models 本文為解決WebShell樣本的特征維度過(guò)高、檢測(cè)效果差的問(wèn)題,提出了一種基于近鄰成分分析算法的WebShell特征處理算法。該算法從源碼編譯結(jié)果層出發(fā),通過(guò)NCA自動(dòng)化學(xué)習(xí)字節(jié)碼序列特征的投影矩陣,在保留全局信息的同時(shí)完成高維特征空間的約減。為避免過(guò)于依賴(lài)總體訓(xùn)練樣本,采用ReliefF特征選擇方法從局部信息的角度進(jìn)一步優(yōu)化特征處理性能。實(shí)驗(yàn)結(jié)果表明,該算法能夠減少數(shù)據(jù)維數(shù),且在保證準(zhǔn)確率的情況下,有效提高WebShell檢測(cè)的召回率。由于NCA降維算法采用留一驗(yàn)證法,計(jì)算成本較大,如何減少NCA時(shí)間復(fù)雜度,是下一步的研究重點(diǎn)。2.2 近鄰成分分析
2.3 ReliefF算法
3 實(shí)驗(yàn)結(jié)果及分析
3.1 實(shí)驗(yàn)數(shù)據(jù)
3.2 評(píng)估準(zhǔn)則
3.3 參數(shù)選擇
3.4 實(shí)驗(yàn)結(jié)果及分析
4 結(jié)束語(yǔ)