周 穎 胡 勇
(四川大學電子信息學院 成都 610065) (304941296@qq.com)
根據(jù)2017年Trustwave《2017全球安全報告》顯示,99.7%的Web應用都有安全漏洞[1].Webshell以動態(tài)腳本形式存在,攻擊者可以利用檢測到的安全漏洞將其上傳到受到威脅的Web服務器,以便遠程執(zhí)行任意命令,獲取并提升管理權限[2],達到滲透入侵的目的.為逃避檢測,經常對其加密混淆處理,使得Webshell的形式靈活多變,然而大多數(shù)安全產品僅通過建立惡意代碼集合特征,基于特征匹配的方法實現(xiàn)檢測,這會出現(xiàn)覆蓋不全、準確率降低等問題.因此,本文針對Webshell特征混淆技術將統(tǒng)計學檢測結果的數(shù)值作為樣本特征,提出基于關聯(lián)分析的Webshell檢測方法,建立特征頻繁項集獲得關聯(lián)規(guī)則,利用算法實現(xiàn)檢測并提高準確率.
Webshell的運作流程可理解為入侵者通過瀏覽器以HTTP協(xié)議訪問Web服務器上的接口文件.根據(jù)攻擊者編寫惡意代碼從一句話Webshel到可實現(xiàn)數(shù)據(jù)庫操作、文件上傳下載等功能型Webshell,可從惡意代碼量和其實現(xiàn)功能性實現(xiàn)檢測.文獻[3]通過選取頁面結構特征和文本特征利用SVM分類方法實現(xiàn)檢測,該方法在檢測未變異處理的Webshell上有較高的檢測率,但由于特征選取僅僅只針對前端頁面代碼特征,對功能型或混淆后的Webshell的檢測率有待驗證;文獻[4]通過提取Webshell腳本文本特征和部分操作函數(shù)調用特征,采用矩陣分解模型量化特征值,獲得相應的評分矩陣與待檢測矩陣實現(xiàn)檢測,能一定概率完成對未知頁面的預測,但檢測中選取的特征過多,在數(shù)據(jù)處理時存在過擬合情況,影響檢測結果,并且僅從文本上取特征對混淆后的Webshell檢測準確率低.因此,本文針對Webshell的混淆性采用多種統(tǒng)計學特征作為檢測樣本特征,提出基于關聯(lián)分析的Webshell檢測模型,能快速建立特征庫并有效檢測混淆技術處理后的Webshell,在降低成本的同時提高檢測的效率和準確率.
目前,Webshell檢測工具還是以特征匹配掃描方式為主,這不僅依賴特征庫建立是否全面可靠,而且不能有效檢測各種特征混淆方法隱藏處理后的Webshell.因此,需針對Webshell特征混淆技術采取相應的對策,有效提取其特征數(shù)據(jù).Webshell主要有以下幾種混淆特征的方法[5]:
1) 使用加解密技術.對Webshell中的特征數(shù)據(jù)預先進行加密,待執(zhí)行時再動態(tài)解密,加密后的參數(shù)一般比正常參數(shù)長度更長,因此可從加解密函數(shù)以及參數(shù)特征進行檢測.
2) 無用信息插入.例如在PHP編寫環(huán)境中插入注釋不影響代碼正常執(zhí)行但會影響查殺,因此在處理此類特征提取時,應去掉類似注釋等無用信息以減小干擾.
3) 字符串連接技術.功能型Webshell執(zhí)行調用后臺系統(tǒng)組件時,可通過拆分組件名稱、在字符串中插入或替換特殊字符等方式來避免被檢測到調用相關組件.因此,可預先對調用組件、函數(shù)和字符處理相關函數(shù)進行檢測.
4) 化整為散技術.關鍵函數(shù)或參數(shù)過于集中時特征表現(xiàn)明顯,易被檢測.但若將完整頁面拆分,降低關鍵函數(shù)參數(shù)的集中出現(xiàn)頻次,再用如include包含指令整合,則可逃避檢測.因此,檢測該類Webshell時,需載入頁面相關文件后再檢測.
5) 多重編碼技術.類似于代碼加密,通過自定義函數(shù)加密、多次編碼特征數(shù)據(jù)實現(xiàn)混淆干擾.因此對于此類惡意樣本需先多次解碼后再檢測.
針對Webshell的混淆技術,本文就混淆后的Webshell提取以下特征[6]進行檢測:
1) 重合指數(shù)
重合指數(shù)可用于衡量文件代碼是否被加密或混淆過,通常Webshell在使用加密混淆技術后變得雜亂,從腳本代碼上看,Webshell也常包含二進制或者十六進制序列,因此計算混淆后的文件中擴展ASCII碼(254個字符)的重合指數(shù),指數(shù)值越低,是Webshell的可能性越大.若設一個長度為n的密文字符串X中,2個隨機元素相同概率為
(1)
其中,i為任意字符,Z為字符種類數(shù),P即為該密文字符的重合指數(shù).
2) 信息熵
通過使用ASCII碼表衡量文件的不確定性.編碼變形后,Webshell含有大量特殊字符、隨機內容等會產生更多的ASCII碼,此時計算得到的熵值比正常樣本大,并可衡量Webshell區(qū)別于正常文件的不確定性.信息熵計算公式如下:
(2)
(3)
其中,n為ASCII碼,且不等于127(127為空格字符,沒有實際意義,不納入計算),Xn為第n位ASCII碼在該文件中出現(xiàn)的次數(shù),S為總字符數(shù).
3) 最長字符串
最長字符串為文件中最長不間斷的字符串.經過Webshell偽造處理后的代碼可生成無空格間斷的長字符串,這明顯有別于正常編碼存儲方式,因此,一般樣本文件中含有特別長的字符串時可作為檢測特征之一.
4) 文件壓縮比
文件壓縮比為壓縮后文件大小與原始文件大小之比.實質在于消除特定字符的分配不均,經編碼后的Webshell消除了非編碼字符,表現(xiàn)為更小的分布不均衡,此時的壓縮比的值大于正常文件.
5) 基于特征庫匹配
參考主流特征庫匹配檢測如eval,exec等常用函數(shù)、已知特征碼等,選用準確性和實用性較高的幾種.目前使用較多的D盾[7]通過惡意字符串特征庫進行特征匹配檢測Webshell;河馬Webshell[8]通過結合傳統(tǒng)特征庫和云端大數(shù)據(jù)雙引擎查殺技術實現(xiàn)檢測.
基于關聯(lián)分析的檢測模型是一種無監(jiān)督的機器學習過程,最早是由Agrawal等人[9-10]提出,通過分析數(shù)據(jù)集,挖掘出所選特征潛在的關聯(lián)規(guī)則.通過對已標記樣本數(shù)據(jù)學習,設定項集的支持度、置信度得到關聯(lián)規(guī)則,數(shù)據(jù)庫中包含(支持)項集的事務的數(shù)目稱為項集X的支持度計數(shù),記為
σ(X)=|{ti|X?ti,ti∈T}|,
(4)
其中,T為事務的集,ti為某個特定項集,用于衡量關聯(lián)規(guī)則在整個數(shù)據(jù)集中統(tǒng)計的重要性;關聯(lián)規(guī)則X→Y的置信度代表Y在包含X的事務中出現(xiàn)的頻繁程度為
(5)
用于衡量關聯(lián)規(guī)則的可信度.
基于關聯(lián)分析的檢測模型如圖1所示:
圖1 Webshell檢測模型框架
首先收集獲取數(shù)據(jù)樣本,針對樣本Webshell的混淆技術采用上述5類特征進行提取,并生成相應的特征庫;然后采用關聯(lián)分析中的Apriori算法和FP-Growth算法訓練樣本;最后使用該分類器對混淆后的Webshell進行分類生成相應的關聯(lián)規(guī)則,并輸出檢測結果.
Apriori算法是一種同時滿足最小支持度閾值和最小置信度閾值的關聯(lián)規(guī)則挖掘算法.Apriori算法使用頻繁項集的先驗知識,通過逐層搜索的迭代方法探索項集度.在Webshell的檢測中,可以通過關聯(lián)分析得到多個特征結果的關聯(lián)規(guī)則,避免某一個檢測結果對檢測的誤判或遺漏.由于各特征值都表明了一個檢測樣本為Webshell的可能性,而關聯(lián)分析法無法直接對數(shù)值進行分類,因此編寫Java程序對選取的特征的數(shù)值進行定義描述,根據(jù)特征結果劃分描述范圍,使得數(shù)值集中的特征在同一類描述中,對訓練樣本和測試樣本的數(shù)據(jù)按照同樣的標準進行分組.Apriori算法通過掃描事務記錄會找出所有頻繁項集,并記為第1類,再利用第1類項集根據(jù)設置的支持度篩選出滿足要求的其他4類集合的項集.在這個過程中不斷獲取新的數(shù)據(jù)集合,并重新掃描計數(shù),直到不能再找出任何頻繁項集為止.最后根據(jù)找出的所有頻繁項集得到符合要求的強規(guī)則度,即為檢測Webshell的關聯(lián)規(guī)則.本文利用求得的關聯(lián)規(guī)則,判斷被檢測文件是否為Webshell.
在Apriori算法中一個較為明顯的缺陷在于對每個潛在的頻繁項集都會掃描數(shù)據(jù)集判定并重新計數(shù)[11],Han等人[12]提出的FP-Growth算法基于Apriori算法,采用構建FP樹,并從FP樹中挖掘頻繁項集,大大減少掃描次數(shù),提高算法速度.本文為對比這2種算法運行速率,還采用FP-Growth算法將相同樣本存儲在稱為FP樹的緊湊數(shù)據(jù)結構中,F(xiàn)P代表頻繁模式,通過鏈接來連接相關聯(lián)的特征,被連接起的元素看成一個鏈表.在FP樹中,一個元素項可在一棵樹中出現(xiàn)多次,在FP樹中存儲項集出現(xiàn)的頻率,即在檢測中記錄單個特征出現(xiàn)的頻次并與另一特征相關聯(lián),出現(xiàn)相似元素集合時則共享樹的一部分,完全不同時樹出現(xiàn)分叉,最終通過訓練學習獲得Webshell的FP檢測結構樹,樹中存儲符合閾值的關聯(lián)規(guī)則.本文將用這2種關聯(lián)分析方法實現(xiàn)對Webshell的檢測,并選取相同樣本對2種算法進行對比.
Webshell一般有ASP,PHP,JSP等網頁文件形式,由于編寫相似且實現(xiàn)功能類似,對應的檢測模型也一致,故選擇使用率較高的開發(fā)語言PHP編寫的Webshell腳本作為實驗數(shù)據(jù).本文搜集了465個惡意PHPWebshell樣本和968個正常PHP頁面樣本作為本次實驗數(shù)據(jù),把搜集到的所有樣本分為5份,任選4份進行機器學習,并檢測余下樣本,根據(jù)平均結果評估模型的檢測能力.
本文使用開源工具NeoPI[13]量化每個樣本特征,表1列出樣本中部分Webshell量化值.
由于利用Weka采用關聯(lián)分析對樣本進行樣本數(shù)據(jù)處理時,算法無法直接對數(shù)值進行處理分析,需對數(shù)值進行定義描述,因此本文將5種特征值的大小分別按高、中、低3類進行定義描述,表2列出Webshell樣本在特征描述對應的數(shù)值范圍.
表1 部分Webshell特征量化值
表2 Webshell樣本特征值范圍定義描述
為了測試2種關聯(lián)分析法的性能,實驗從數(shù)據(jù)集中提取同樣數(shù)量的樣本數(shù),分別用Apriori算法和FP-Growth算法生成相應的檢測規(guī)則,從生成檢測規(guī)則的時間和正確率進行比較,結果如表3所示.從表3可以看出,在處理相同樣本數(shù)據(jù)的情況下,2種算法在檢測正確率方面相差不大,但在生成規(guī)則時間上FP-Growth算法有明顯的提升,體現(xiàn)了其在頻繁集上的優(yōu)化.
表3 Apriori算法和FP-Growth算法的比較結果
為了更準確地評估關聯(lián)分析法檢測的準確率,本文還采用準確率、召回率、F值評測[14]進行評估.準確率是指正確檢測出Webshell的數(shù)量占所有檢測樣本的比例;召回率是指正確檢測出Webshell數(shù)量占所有Webshell數(shù)量的比例.對應的結果分類情況如表4所示:
表4 預測結果分類
具體計算公式如下:0代表False(Negative),1代表True(Negative),TN代表實際結果為True但預測結果為Negative.預測的準確度為
(6)
召回率為
(7)
F值為
(8)
顯然準確率、召回率、F值越高檢測結果越好.
將處理好的樣本與機器學習工具Weka3.8進行實驗,選擇相應的算法規(guī)則與現(xiàn)有的2種檢測工具的準確率進行對比,實驗結果如表5所示:
表5 Webshell的準確率、召回率及F值預測結果 %
從實驗結果可以看出,關聯(lián)分析法在準確率、召回率、F值評測的結果較其他2種檢測工具更好,說明利用該方法進行Webshell的檢測是有效的.
本文針對Webshell特征混淆,采用關聯(lián)分析法對Webshell進行檢測,可以準確快速地檢測出惡意Webshell,并通過在同類檢測工具的分析比較中表現(xiàn)出了較好的性能.但由于樣本選取數(shù)量有限,在2種關聯(lián)方法生成關聯(lián)規(guī)則的效率上對比不夠明顯,同時還應考慮訓練樣本數(shù)量的增加對算法模型生成速度也有一定的影響,在機器學習算法上可以對關聯(lián)分類候選頻繁項集進行篩選,減少頻繁項集生成遍歷次數(shù),也可以縮小待掃描集合范圍,降低算法時間復雜度,提升檢測模型的性能,并且僅依靠樣本數(shù)據(jù)和自身數(shù)據(jù)的建立不能滿足新的防護要求,需要進一步研究有關檢測的優(yōu)化方法.
[1]Trustwava. 2017 Trustwave Global Security Report[EBOL]. 2017 [2018-02-15]. https:www.trustware.comResourcesLibraryDocuments2017Trustware-Global-Securiby-Report
[2]Starov O, Dahse J, Ahmad S S, et al. No honor among thieves: A large-scale analysis of malicious Web shells[C]Proc of Int Conf on World Wide Web. 2016: 1021-1032
[3]葉飛, 龔儉, 楊望. 基于支持向量機的Webshell黑盒檢測[J]. 南京航空航天大學學報, 2015, 47(6): 924-930
[4]Dai H, Dai H, Dai H. A matrix decomposition based Webshell detection method[C]Proc of Int Conf on Cryptography, Security and Privacy. New York: ACM, 2017: 66-70
[5]潘杰. 基于機器學習的Webshell檢測關鍵技術研究[D]. 天津: 中國民航大學計算機學院, 2015: 16-17
[6]馬艷發(fā). 基于WAF入侵檢測和變異WebShell檢測算法的Web安全研究[D]. 天津: 天津理工大學, 2016: 13-15
[7]D盾. D盾_Web查殺[EBOL]. [2018-02-15]. http:www.d99net.net
[8]河馬Webshell. Webshell.pub[EBOL].[2018-02-15]. http:www.webshell.pub
[9]Agrawal R, Srikant R. Fast algorithms for mining association rules in large databases[C]Proc of Int Conf on Very Large Data Bases. San Francisco: Morgan Kaufmann, 1994: 487-499
[10]Agrawal R, Imieliński T, Swami A. Mining assocation rules between sets of items in large databases[J]. AcmSigmod Record, 1993, 22(2): 207-216
[11]王文槿, 劉寶旭. 一種基于關聯(lián)規(guī)則挖掘的入侵檢測系統(tǒng)[J]. 核電子學與探測技術, 2015, 35(2): 119-123
[12]Han J, Pei J, Yin Y. Mining frequent patterns without candidate generation[J]. ACM SIGMOD Record, 1999, 29(2): 1-12
[13]NeoPI: Detection of Webshells using statistical methods[EBOL]. (2014-09-18) [2018-02-15]. https:github.comNeoPI
[14]李航. 統(tǒng)計學習方法[M]. 北京: 清華大學出版社, 2012
周穎
碩士研究生,主要研究方向為Web安全.
304941296@qq.com
胡勇
副教授,碩士生導師,主要研究方向為信息系統(tǒng)安全.
huyong@scu.edu.cn