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