周愛君,努爾布力,艾 壯,肖中正
1.新疆大學 信息科學與工程學院,烏魯木齊830046
2.新疆大學 網絡中心,烏魯木齊830046
隨著互聯網的快速發展,Web應用系統越來越多,這也進一步滋生了黑色產業。黑客通過入侵網站,在網站植入大量的廣告推廣頁面或者其他鏈接,這無形中增加了網站性能風險,對用戶造成使用隱患。國家互聯網應急中心(National Internet Emergency Center,CNCERT)發布的《2019年上半年我國互聯網網絡安全態勢》中指出,CNCERT監測到我國境內有2.6萬個網站被惡意植入后門,近4萬個網站被篡改。根據Internet Live Status 2018年1月的數據[1],全球每天大概有100 618個網站被攻擊。360發布的《2017中國網站安全形勢分析報告》指出360網站衛士攔截漏洞攻擊中,WebShell排第二位,攔截高達21 615.1萬次。由于WebShell能夠實現對各種關鍵功能的遠程訪問,如執行任意命令查看和修改任意文件、提升訪問權限、發送垃圾郵件等,黑客通常會通過在網站植入WebShell,達到植入廣告、篡改頁面、控制Web服務等目的,因此WebShell的檢測及查殺就顯得尤為重要。WebShell常常隱藏在正常網站文件下,針對不同的網站編寫方法其檢測方法存在差異。W3Techs在2020年4月的調查報告中顯示,php是網站編寫中最常用的語言,使用率高達78.3%。本文考慮對php編寫的WebShell展開研究。
常見的WebShell檢測方法主要分為靜態檢測和動態檢測。由于動態檢測是通過檢測代碼執行過程中的流量變化、系統指令等敏感行為特征實現WebShell檢測的,且該方法系統資源占用大,檢測周期長,無法實現大批量檢測,甚至會對Web系統性能造成影響,本文考慮從靜態檢測方法展開研究。目前針對WebShell的靜態檢測方法主要專注于分類器的優化,而針對WebShell特征指標模型的研究相對較少。WebShell和普通Web頁面特征幾乎一致,容易逃避傳統防火墻和殺毒軟件的檢測。隨著各種反檢測特征混淆隱藏技術應用到WebShell上,使得WebShell的檢測難度進一步增加。傳統基于特征碼匹配的檢測方式很難及時檢測出新的變種。為避免WebShell中的加密、壓縮及混淆問題,通常將問題轉化為對WebShell編譯結果層opcode序列的研究。WebShell的opcode序列特征向量維度非常高,容易出現“維度災難”問題,因此尋求最具代表性的WebShell特征子空間有助于進一步提高WebShell檢測性能。
為了提高檢測模型的準確率,需要更好地利用樣本之間的聯系,本文考慮將近鄰成分分析[2]應用到WebShell特征處理過程中,通過樣本學習一種有效的距離測度方式,更好表示樣本間的相似度。近鄰成分分析的目的就是針對特定任務,根據樣本學習一種使得分類損失最小的距離測度方式,更好地表示樣本間的某種相似度。近年來,基于近鄰成分分析的特征處理方法已經在很多領域得到成功應用,包括語音識別、人臉識別等。借鑒其他領域,本文將近鄰成分分析應用到WebShell特征處理過程,實驗證明,相比傳統的WebShell靜態檢測方法,該算法的檢測效率、正確率更高,同時也能以一定概率檢測出新型的WebShell。
互聯網中網頁惡意代碼攻擊網絡事件給眾多的瀏覽用戶帶來了極大的危害,Web安全形勢變得越來越嚴峻,基于此種環境,國內外的學者們針對網頁惡意代碼的檢測方法進行了深入的研究。
2012年胡建康等人[3]提出基于決策樹的WebShell檢測方法,選取最長單詞、加解密函數、字符串操作、文本操作等16個特征作為分類方法,利用決策樹算法進行判斷,檢測的效率及準確率都比較高,但召回率還有提升的空間。Hagen等人利用統計學的方法,使用信息熵、最長單詞、重合指數、特征碼、文件壓縮比五種方法編寫了NeoPi[4]這款檢測工具,依據以上五個指標能發現可疑文件,但沒有給出相應閾值判斷文件是否為混淆文件。2014年Truong等人[5]利用統計學方法對WebShell使用的函數,比如惡意函數、命令執行函數等,對這些函數出現的頻率進行統計,根據統計分類來判斷是否是WebShell。2015年王超[6]通過使用針對WebShell監測的解析引擎,解析WebShell的行為,建立惡意行為庫,以此來分析是否為WebShell,但這類檢測方式需要大量的資源,部署實施難度較大;同年葉飛等人[7]提出基于支持向量機的WebShell黑盒檢測方法,通過分析WebShell的HTML特征,使用支持向量機(Support Vector Machine,SVM)方法進行檢測;2015年朱魏魏等人[8]提出基于NN-SVM的WebShell檢測方法,該方法是在NeoPi的6個特征的基礎上,使用NN-SVM算法進行檢測。2016年Thornton[9]開發了WebShell detector,由于其使用了非常多的特征庫,對WebShell檢測的準確率很高,但對混淆加密的準確率有待提高。2016年胡必偉[10]提出基于貝葉斯理論的WebShell檢測方法,該方法通過分析混淆加密的WebShell與正常WebShell的區別,再使用樸素貝葉斯分類進行檢測。2017年Tian等人[11]結合行為分析,檢測WebShell的通信特征,并測試不同的機器學習算法,最后利用Word2Vec進行文本特征提取,使用卷積神經網絡(Convolutional Neural Network,CNN)方法進行訓練檢測。2018年賈文超等人[12]提出采用隨機森林改進算法的WebShell檢測方法,該方法通過對比不同類型WebShell的特征構建特征庫,根據度量Fisher比對特征進行分類劃分,以此來提高決策樹的分類強度。
綜上所述,基于靜態WebShell檢測有各自的優點,也存在各自的不足,不難發現關于WebShell的特征研究,大多數停留在統計特征和腳本內容特征層面。隨著WebShell檢測工具的性能提升,攻擊者經常使用混淆加密的方法隱藏WebShell以躲避檢測。opcode是php腳本編譯后的中間語言,類似Java的ByteCode,機器通過opcode獲悉執行指令,處理提供的數據。由于opcode只關心操作指令,不關心函數名、定義等,可以有效地檢測一些加密、混淆的代碼。本文為解決混淆加密技術導致的檢測準確率低的問題,將從WebShell編譯結果層opcode序列展開研究。
特征空間中學習距離度量可以極大地提高分類器的性能,在實際應用中具有重要意義。近鄰成分分析就是一種與KNN相關聯的距離測度學習算法,通過最大化訓練數據中留一法(Leave One Out,LOO)分類精度來搜索線性變換矩陣,利用得到的低秩矩陣,將高維訓練數據嵌入低維空間。這種方法已經被應用在許多領域,例如文本分類、語音識別和面部識別。
劉叢山等人提出k近鄰元分析分類算法k-NCA,通過引入k近鄰思想實現文本分類器功能[13]。Nguyen等人提出了一種新的人臉識別距離度量學習方法——間接鄰域成分分析(Indirect Neighborhood Component Analysis,INCA)。INCA是一次性相似性學習和近鄰成分分析方法的結合,測試發現即使在非常低的維度上也能取得較好的結果[14]。Wang等人為可靠識別嘈雜的人臉圖像,引入一種新穎的空間平滑正則化器(Spatially Smooth Regularizer,SSR)改進了快速鄰域成分分析(Fast Neighborhood Component Analysis,FNCA)模型,從而建立了具有更高識別精度的FNCA-SSR模型[15]。Ferdinando等人探討了使用近鄰成分分析(Neighborhood Component Analysis,NCA)進行降維處理能增強心電圖(Electrocardiogram,ECG)對三種類型的情感識別性能[16]。Singhmiller等人將近鄰成分分析方法應用于語音識別器中的聲學建模,將高維聲學表示投影到低維空間中,提高了最近鄰分類器的分類精度[17]。Jin等人提出的具有NCA特征的增強樹模型能夠有效預測阿爾茨海默氏病不同階段,優于主成分分析(Principal Component Analysis,PCA)、序列前向選擇(Sequential Forward Selection,SFS)等特征選擇策略[18]。Malan等人將正則化近鄰成分分析的特征選擇算法應用于運動圖像的腦機接口信號分析中,增強了運動圖像信號的分類性能[19]。李雪晴等人提出基于近鄰元分析的半監督流行學習算法能夠充分利用樣本點的標簽信息[20]。Wang等人基于NCA提出一種新穎的貝葉斯度量學習算法,該算法在小型數據集或有錯誤標簽的訓練集中可學習可靠的度量標準[21]。
本文提出一種靜態的基于近鄰成分分析的WebShell特征處理方法,以字節碼向量庫作為樣本特征,使用近鄰成分分析算法構建opcode向量庫的低維測度空間,為樣本創造最佳分類距離。為避免NCA過于依賴總體訓練樣本,使用同樣根據距離作為分類標準的ReliefF特征選擇方法,從局部鄰域相似度的角度進一步優化特征提取性能,提高分類器檢測能力。
不同于其他的WebShell特征處理方法,本文提出一種靜態的基于近鄰成分分析的WebShell特征處理算法,使用WebShell的opcode序列特征,適合于不同種類的WebShell,且能夠有效避免混淆加密對檢測的干擾。另外,使用近鄰成分分析算法能夠在完成最大化分類準確率任務的同時實現特征降維,不僅能解決因opcode序列特征向量維度過高引起的“維度災難”問題,還能提升分類準確率。ReliefF算法的加入,可以進一步精簡特征,確保處理后的特征具有較高的類別區分能力,達到提高WebShell檢測結果的準確率的目的。
本文基于近鄰成分分析的WebShell特征處理算法的設計思路如圖1所示。WebShell特征處理分為兩個階段,php腳本處理和opcode文本向量處理。php腳本處理主要包括php去重,提取opcode操作碼,生成opcode文本向量。為避免重復樣本對訓練模型造成影響,采用MD5對收集到的php文件進行去重,刪除冗余文件。opcode是操作碼的縮寫,一條指令可以包含一個或多個操作碼。本文使用插件VLD進行源碼和opcode的轉換,將去重后得到的每一個php腳本經過詞法分析、語法分析、靜態編譯過程后最終得到一個opcode序列,如圖2所示。采用正則表達式的方式對齊opcode所在列,按序將每一個opcode保存下來。分別提取正樣本和負樣本的opcode序列,將結果分別保存在兩個文件下以便后續數據處理。為有效利用opcode序列的上下文關系,突出opcode序列片段的重要性,本文采用N-gram模型生成opcode詞袋。N-gram算法將一個語料片段出現的可能性歸結于它之前的n個語料片段,將opcode序列庫中所有的opcode序列分割成長度為n的語料片段,構成opcode詞袋。考慮到opcode序列片段在單個php腳本及整個php數據集中的重要程度,采用TF-IDF為opcode詞袋構建所需文本向量庫。TF-IDF算法通過詞頻(Term Frequency,TF)和逆向文件頻率(Inverse Document Frequency,IDF),即某一個opcode序列片段在給定某一php腳本對應的opcode序列中出現的次數,和該序列片段在所有php腳本對應的opcode序列中出現的頻率,來衡量一個opcode序列片段的重要性。

圖1 算法流程圖Fig.1 Algorithm flow chart

圖2 opcode提取過程Fig.2 opcode extraction process
opcode文本向量處理階段,主要解決opcode文本向量出現的“維數災難”問題。本文為避免樣本不均衡問題采用smote上采樣增強訓練樣本。近鄰成分分析是2005年Hinton等人提出的一種度量學習方法[2],目的是采用自適應的方法學習一個使KNN分類正確率盡可能高的距離度量,在距離學習過程中完成高維向低維的轉化。本文利用NCA可以獲得一個使得分類正確率高的低維空間。為進一步加強低維空間下特征的分類能力,緩解NCA過于依賴總體訓練樣本,忽略局部信息帶來的問題,本文借鑒了ReliefF計算近鄰距離評估特征分類價值的方法。對低維空間下的特征按照權重大小排序,找出最具類別區分能力的特征作為KNN分類器的輸入,預測模型分類結果。基于使用近鄰成分分析算法完成opcode文本向量處理這一過程在文中簡稱為NCA_ReliefF。NCA_ReliefF主要分為兩部分:構建低維空間和特征選擇。NCA_ReliefF通過最大化訓練集的留一法識別精度期望來學習變換矩陣,以完成低維空間的構建,通過比較特征權重完成特征選擇。
輸入:訓練數據集Xn×D,NCA特征提取保留的特征數量d(目標維數),ReliefF抽樣次數m,鄰居個數re_k,最終特征保留數量s,s 步驟1對訓練數據集Xn×D進行NCA特征提取,迭代次數選擇默認值100,返回低維矩陣Ad×D; 步驟2將訓練數據集Xn×D嵌入低維空間中,返回數據集 步驟3從Xn×d中隨機選擇一個樣本,找出re_k個同類近鄰樣本和re_k個不同類近鄰樣本; 步驟4更新每一個特征α的權值Wα; 步驟5重復步驟3~步驟4過程m次,返回特征權重向量W; 步驟6根據特征權值對特征進行從大到小排序。 輸出:輸出權值最大的前s個加權處理過的特征矩陣 步驟1和步驟2的目的是利用NCA算法迭代計算出一個低維矩陣Ad×D,將訓練集Xn×D由原本的D維空間轉化為d維(D>d),進而避免因“維數災難”導致的檢測準確率不高的問題;步驟3~步驟5的主要工作是利用ReliefF特征選擇方法計算出d維空間下各個特征對分類標簽的重要程度,最終得到一個長度為d的特征權重向量W;步驟6描述特征再選擇過程,先對權重向量W進行排序,再篩選出前s個分類價值最大的特征,以確保特征矩陣的輸入對分類結果有積極影響。 近鄰成分分析(NCA)算法采用迭代的方式自動化完成距離矩陣的測度學習,也是在這個過程中完成降維。給定n個帶標簽的樣本(x1,x2,…,xn)∈RD,相對應的類標為C1,C2,…,Cn。人們希望獲得使最近鄰分類效果最優的低維矩陣。由于數據的真實分布情況處于未知狀態,將問題轉化為求訓練數據上的留一化效果最優。限定馬氏距離變換矩陣Q是一個對稱半正定矩陣,即Q=ATA,那么兩個樣本之間的馬氏距離為: 式中,pij表示樣本點xi隨機選擇另外一個樣本點xj為近鄰,且最終xi繼承xj標簽Cj的概率。那么,將樣本點xi正確分類的概率為: 其中,Ci={j|Ci=Cj}。目標函數要使得正確分類點的數目最大,因此定義為: f(A)是一個連續可微的矩陣函數,算法就是要最大化目標函數。由于這是一個無約束優化問題,使用收斂速度快,內存消耗小的梯度下降算法LBFGS求出A。其梯度表達式如式(5)所示,其中xij=xi-xj。 最大化目標函數f(A)等同于最小化真實類別分布和隨機類別分布之間的L1范數。當A是d×D的非方陣,便可將樣本降到Rd空間。從NCA算法理論上看,其計算成本主要取決于最優化過程的梯度計算,即式(5),每一次迭代的計算復雜度為O(dDn2),由此可知,當數據集過大時,該算法的計算效率較低。由于參照樣本是隨機選擇的,在分類時很難體現局部信息的優勢,易導致分類結果不理想。 為緩解NCA過于依賴總體訓練樣本,忽略局部信息帶來的問題,使用ReliefF計算各個特征權值。ReliefF算法中特征和類別的相關性是基于特征對近距離樣本的區分能力。從訓練集中隨機選擇一個樣本xi,從和xi同類的樣本中尋找最近鄰樣本H,從和xi不同類的樣本中尋找最近鄰樣本M,若xi和H在特征?上的距離小于xi和M上的距離,則說明特征?對區分同類和不同類起正面作用,則增加特征?的權重;反之,則降低特征?的權重。將該過程重復m次,最后得到各個特征的平均權重。ReliefF算法偽代碼如下所示。 算法ReliefF 輸入:訓練集Xn×d,抽樣次數m,最近鄰樣本個數re_k。 輸出:d個特征的特征權重W。 步驟1置所有特征權重為0,W為空集。 步驟2fori=1 tom 從Xn×d中隨機選擇一個樣本xi; 從xi的同類樣本中找到re_k個最近鄰Hj,從不同類樣本集中找到re_k個最近鄰Mj(C),j=1,2,…,re_k; 步驟3forα=1 tod(all features) End Return當前特征權重向量W 步驟3是ReliefF算法的核心部分,其中diff(?,xi,Hj)表示計算樣本xi和最近鄰同類樣本Hj在特征?上的差,如式(6)所示: diff(?,xi,Mj(C))表示計算樣本xi和最近鄰非同類樣本Mj(C)在特征?上的差,Mj(C)表示類C?class(xi)中第j個最近鄰樣本。p(C)表示出現樣本標簽為C的概率,p(class(xi))表示出現樣本和xi同類的概率。WebShell檢測是二分類問題,此時: 將步驟3重復m次,最后輸出各個特征的平均權重。特征權重越大表示該特征分類能力越強,特征權重越小表示分類的能力越弱。通過對權重排序可將相關性強的特征保留,去除不相關的特征。 綜上,ReliefF能夠利用鄰域衡量各特征和類別的相關性,有效找出具有類別區分能力的特征。ReliefF算法的運行時間與樣本的抽樣次數m、特征數量d、樣本數量n相關,可得出結論,ReliefF的計算復雜度為Θ(dmn)。 本文將經過NCA特征提取得到的矩陣Ad×D作為變換矩陣,通過計算樣本Xn×D在空間Ad×D中的投影,得到一個d維空間的樣本Xn×D。將Xn×D作為ReliefF的輸入,此時ReliefF計算Xn×D中d個特征的權值,得到權重向量W。為增加局部信息的效能,對特征進行重新篩選,最終可得到一個s維的樣本,至此便完成了對整個數據集的預處理。為驗證特征處理的有效性,提高模型對WebShell的檢測性能,選擇準確率、召回率作為評價指標。 本實驗所用的計算機配置如下Intel?CoreTMi3-3227U CPU@1.9 GHz,8.00 GB內存,軟件開發環境為Windows10,編程語言是Python3,主要調用機器學習庫Sklearn。本文所使用的數據集,由Github收集項目經過MD5去重篩選后得到,由566個惡意WebShell和5 378個正常php腳本構成,如表1所示。隨機選取樣本集中80%樣本作為訓練集,用于生成檢測模型,剩余數據作為測試集,用于檢測模型的測試。 表1 WebShell樣本Table 1 WebShell sample 將去重后得到的php文件進行opcode編碼,每一個php文件經過編碼后得到一個opcode編碼串。用TFIDF構建詞向量模型,計算該詞組TF-IDF值,得到編譯結果層基于opcode序列的詞頻矩陣,將其作為特征向量。為提高整個模型的運行效率,選取出現頻數最高的1 000個片段生成詞袋模型,通過五折交叉驗證發現opcode序列片段長度n∈[]2,4時,分類準確率和召回率均超過95%,如圖3所示。 圖3 語法模型參數選擇Fig.3 Syntax model parameter selection 實驗中,將WebShell標記為1,正常樣本標記為0。分類結果混淆矩陣如表2所示。本文采用準確率、召回率、F1值3個指標評估特征選擇方法性能。 表2 分類結果混淆矩陣Table 2 Confusion matrix of classification results (1)準確率(acc):所有被正確判斷類別的測試樣本數量與測試樣本數量的比值。 (2)召回率(rec):所有被正確判斷為正常事件數量與所有正常事件數量的比值。 (3)F1值:分類問題的一個衡量指標,是精確率和召回率的調和平均數,能夠反映檢測的綜合效果。 實驗參數一共有4個,NCA降維空間維度d、ReliefF迭代次數m、ReliefF鄰居個數re_k和ReliefF的特征保留數量s。 NCA與ReliefF在計算過程中都采用了距離度量,在參數選擇過程中,本文選擇KNN分類器來衡量模型的檢測效果。近鄰計算中若k值選擇過小,得到的近鄰數過少,不僅會降低分類精度,也會放大噪聲數據的干擾;而如果k值選擇過大,對于訓練集中數據量較少的異常樣本在選擇k個近鄰的時候,容易將并不相似的數據包含進來,造成噪聲增加,導致分類效果的降低。本文采用五折交叉驗證選取恰當的k值,選擇k=5,在此情況下,KNN分類的召回率較高。 NCA降維過程中,提取的特征數量對最終分類結果有很大影響,模型僅需少量的樣本就可以得到較高的預測準確率。理想狀態下,期望選擇盡可能少的子特征,同時保證模型的效果不會顯著下降,類別分布盡可能地接近真實的類別分布。實驗對比了保留100維,200維,…,900維情況下的分類性能,如圖4所示。實驗表明,當提取特征為200時,分類準確率、召回率均超過98%,F1值超過93%。在此基礎上增加提取數量時,F1值明顯下降。為保證模型效果的前提下,最終選擇提取200個特征,d=200。 圖4 NCA特征提取數量對分類性能影響Fig.4 Influence of number of NCA feature extractions on classification performance 為進一步降低存儲空間,提高分類速率,采用ReliefF特征選擇方法進一步約減特征空間,獲得最優子空間。ReliefF算法的參數m、re_k、s的確定如下: (1)m值的實驗測定。s固定為100時,m取值范圍[1,1 000],從中均勻取出10個值,統計準確率、召回率、F1值。其中m=100時,準確率、召回率、F1值都超過了95%,召回率高達99%。 (2)re_k值的實驗測定。固定已經選擇的m值為100,n固定為100時,選取re_k=1,3,…,19等10種情況,如圖5所示。re_k對檢測結果的影響較小,當近鄰數量為9時,分類效果最佳,如表3所示。在此基礎上繼續增加近鄰數量,re_k=11時,檢測效率無顯著提升。 圖5 ReliefF近鄰數量對分類的影響Fig.5 Influence of number of ReliefF neighbors on classification performance (3)s的實驗測定。固定選擇好的m=100,re_k=9時,選取s=10,20,…,130,如圖6所示。統計準確率、召回率、F1值,結果如表4所示。分類性能隨著特征選擇數量的增加逐漸穩定,當s=70時,達到分類性能最佳,如表4所示。 圖6 特征數量s對分類的影響Fig.6 Influence of number of features s on classification performance 表4 特征數量s對分類性能的影響Table 4 Influence of number of features s on classification performance 綜上,ReliefF參數已確定,迭代次數m=100,鄰居數量re_k=9,特征保留數量s=70。在這組參數設置下,可將原本1 000維的空間縮小至70,且達到的分類效果最佳,準確率和召回率均超過95%,將該70維的子空間視為最優子空間。 現從準確率、召回率、F1值、運行時間四方面對基于決策樹(DT)、K近鄰(KNN)、隨機森林(RF)、支持向量機(SVM)、樸素貝葉斯(NB)五種分類器進行比較,結果如圖7所示。 圖7 不同分類算法對WebShell檢測性能的影響Fig.7 Influence of different classification algorithms on WebShell detection performance 在不同的評價標準上,有的分類器在某一方面表現非常優秀。由表5所示,K近鄰和隨機森林在準確率、召回率和F1值方面表現較佳,但考慮運行效率,基于KNN算法的WebShell檢測方法更有優勢。 表5 不同分類算法對WebShell檢測性能的影響Table 5 Influence of different classification algorithms on WebShell detection performance 本文提出的NCA_ReliefF特征處理方法能有效檢測WebShell樣本,且在一定程度上解決了NCA特征選擇方法易忽略局部信息的問題。實驗對比了文本向量特征、單獨使用NCA算法、單獨使用ReliefF算法和采用NCA_ReliefF算法四種處理特征方法對WebsShell檢測模型的影響。由表6可知,NCA_ReliefF綜合了NCA和ReliefF兩種算法的優點,在保證準確率的同時提高了召回率,準確率達到96%,召回率達到95%。 表6 特征處理方法對比結果統計Table 6 Comparison results statistics of feature processing methods 特征降維方法分為特征選擇和特征提取兩種,目前常用的特征提取方法有主成分分析(Principal Component Analysis,PCA)、獨立成分分析(Independent Component Analysis,ICA)、等距特征映射(Isometric Mapping,ISOMAP)。常用的特征選擇方法有互信息、相關系數、卡方檢驗。表7對比了特征維度保持在70維時,不同特征處理方法的檢測效果。由表可知,特征提取的三種方法的召回率和準確率均超過93%,其中PCA耗時最短,僅需4 s。特征選擇的三種方法在召回率上表現欠佳,不超過90%。其中卡方檢驗耗時最短,運行時間不超過3 s。本文提出的NCA_ReliefF特征處理方法在準確率、召回率和F1值上都優于以上特征處理方法,但其運行時間較長。 表7 常見特征處理方法的檢測結果統計Table 7 Test results statistics of common feature processing methods 表8 對比了最新提出的WebShell檢測模型,即基于多層感知器的檢測模型[22]、組合層面基于Fisher特征選擇和隨機森林的檢測模型[23]和本文基于近鄰成分分析的檢測模型。三種模型都是基于編譯結果層完成檢測任務。綜合對比,基于多層感知器的檢測模型能得到一個維度小的子空間,縮短了模型檢測時間,但準確率和召回率均低于95%。組合層面基于Fisher特征選擇和隨機森林的WebShell檢測模型整體性能最佳,其準確率和F1值均超過94%,但其特征數量較大,數據存在冗余,增加了模型的計算量。理想的WebShell檢測模型是準確找出所有的異常樣本,其對召回率的期望值較高。本文提出的基于近鄰成分分析的檢測模型NCA和ReliefF方法的結合,在保證準確率的同時能有效提高WebShell檢測的召回率。 表8 各種模型檢測結果統計Table 8 Test results statistics of various models 本文為解決WebShell樣本的特征維度過高、檢測效果差的問題,提出了一種基于近鄰成分分析算法的WebShell特征處理算法。該算法從源碼編譯結果層出發,通過NCA自動化學習字節碼序列特征的投影矩陣,在保留全局信息的同時完成高維特征空間的約減。為避免過于依賴總體訓練樣本,采用ReliefF特征選擇方法從局部信息的角度進一步優化特征處理性能。實驗結果表明,該算法能夠減少數據維數,且在保證準確率的情況下,有效提高WebShell檢測的召回率。由于NCA降維算法采用留一驗證法,計算成本較大,如何減少NCA時間復雜度,是下一步的研究重點。2.2 近鄰成分分析





2.3 ReliefF算法



3 實驗結果及分析
3.1 實驗數據


3.2 評估準則




3.3 參數選擇






3.4 實驗結果及分析



4 結束語