李源,王運(yùn)鵬,李濤,馬寶強(qiáng)
(四川大學(xué)網(wǎng)絡(luò)空間安全學(xué)院,四川 成都 610065)
隨著Web應(yīng)用的爆炸式增長,Web應(yīng)用系統(tǒng)遭受攻擊的事件越來越多,帶來的損失和影響也越來越大。據(jù)中國產(chǎn)業(yè)互聯(lián)網(wǎng)發(fā)展聯(lián)盟公布的《2019中國主機(jī)安全服務(wù)報告》[1]顯示,2019年中國境內(nèi)企業(yè)用戶服務(wù)器感染病毒木馬事件超過百萬起。其中Webshell惡意程序感染事件占73.27%。從攻擊者的角度看,植入Webshell是攻擊者進(jìn)行持續(xù)滲透的基礎(chǔ)和前提。因此,為了保障Web服務(wù)器的安全,Webshell檢測顯得尤為重要。Apache是目前應(yīng)用最普遍的Web應(yīng)用系統(tǒng)[2],在Web應(yīng)用方面具有最為廣泛的代表性,因此本文以Apache服務(wù)器上的Webshell檢測為研究和實(shí)驗(yàn)對象。
針對Webshell的檢測主要有3個研究方向:基于文本的靜態(tài)檢測方法、基于Web日志的事后檢測以及基于通信流量的檢測[3]。在基于文本的靜態(tài)Webshell檢測研究中,研究者主要從代碼層面上對惡意程序進(jìn)行檢測,常用的檢測方法是檢查程序中是否包含Webshell執(zhí)行時所需的系統(tǒng)函數(shù)[4],此方法檢測效率高,但難以識別經(jīng)過混淆加密后的Webshell。為了對抗混淆的Webshell惡意代碼,Ai等[5]提出使用PHP VLD插件獲得PHP程序編譯時產(chǎn)生的字節(jié)碼,并經(jīng)N-gram分詞后生成的執(zhí)行序列作為區(qū)分正常文件和Webshell文件的檢測特征,此模型對基于PHP語言的Webshell有較好的檢測效果,但對于其他語言編寫的Webshell,不能提取其編譯時的字節(jié)碼,因此無法檢測。崔艷鵬等[6]提出使用信息熵、最長單詞、重合指數(shù)、壓縮比等統(tǒng)計特征作為區(qū)分正常和惡意程序的特征,該方法能夠在一定限度上識別經(jīng)過加密混淆后的Webshell文件,但通常需要配合其他方法一同檢測以防止產(chǎn)生誤報。Li等[7]提出使用神經(jīng)網(wǎng)絡(luò)模型GRU代替人工提取特征,但該方法在對文件進(jìn)行分詞時并未考慮代碼經(jīng)過編后(如base64編碼)仍可能出現(xiàn)詞向量維度過大導(dǎo)致訓(xùn)練難度增加、效率降低的問題;基于Web日志的事后檢測是在攻擊發(fā)生后通過對Web應(yīng)用運(yùn)行日志進(jìn)行分析、溯源,以檢測Webshell通信行為[8],但由于Web日志本身屬于格式化處理后的文件,信息丟失較多,因而檢測效果有限;在基于通信流量的檢測研究上,研究者常采用對實(shí)時流量進(jìn)行捕獲分析來挖掘通信過程中可能存在的Webshell惡意流量。2018年,Yang等[9]采用基于4-gram分詞的SVM算法對數(shù)據(jù)包中的URL請求路徑和請求體進(jìn)行訓(xùn)練以識別數(shù)據(jù)包中的惡意流量;Zhang等[10]選擇使用CNN+LSTM神經(jīng)網(wǎng)絡(luò)組合模型對數(shù)據(jù)包整個請求包載荷的ASCII序列進(jìn)行訓(xùn)練生成分類模型,以實(shí)現(xiàn)對Webshell惡意流量的檢測,而由于在訓(xùn)練過程中加入過多與流量識別無關(guān)的信息,因此檢測效率不高。此外,這兩種基于通信流量的檢測方法均只能完成對正?;驉阂饬髁康亩诸悪z測,未能對Webshell惡意流量屬于何種攻擊類型做出判斷,不利于有針對性的Web防御和加固。
總的來說,以上3種檢測方法,難以高效、精確地對Webshell進(jìn)行檢測和分類,并不能有效阻止通信過程中Webshell行為所造成的危害。因此本文從Web通信流量出發(fā),以多源視角提取不同維度的靜態(tài)特征,并通過特征融合和算法集成的方式來挖掘網(wǎng)絡(luò)流量中可能存在的Webshell惡意通信行為。主要貢獻(xiàn)如下。
1) 提出了一種基于多特征融合的檢測方法,融合了不同維度的數(shù)據(jù)流特征,彌補(bǔ)了單一特征識別能力不足的問題,能夠在不同類型的Webshell的識別上都有較高的檢測能力,進(jìn)一步細(xì)化不同種類的Webshell攻擊。
2) 提出基于集成學(xué)習(xí)的Webshell分類模型,通過結(jié)合不同學(xué)習(xí)器各自的優(yōu)勢生成分類模型,降低模型在Webshell多分類情況下出現(xiàn)誤報的概率。
Webshell惡意流量檢測模型的總體框架如圖1所示,包括數(shù)據(jù)預(yù)處理、特征提取和異常檢測3個階段。
圖1 Webshell惡意流量檢測模型的總體框架Figure 1 Webshell malicious traffic detection model framework
(1)數(shù)據(jù)預(yù)處理
對采集到的原始流量進(jìn)行解析后依次過濾非正常響應(yīng)、媒體資源文件的數(shù)據(jù)包,并對通信過程中產(chǎn)生的分段數(shù)據(jù)包按五元組<源IP,源端口,目的IP,目的端口,協(xié)議>將相同的源和目的IP地址合并為一次的完整通信會話,并生成文本向量用于特征提取。
(2)特征提取
對原始流量進(jìn)行預(yù)處理得到的文本向量,從數(shù)據(jù)包元信息、數(shù)據(jù)包載荷內(nèi)容以及流量訪問行為3個維度提取特征,并將融合后的特征向量作為特征數(shù)據(jù)集。
(3)異常檢測
將融合后的特征數(shù)據(jù)集輸入至包含4個初級分類器和1個次級分類器的Stacking集成模型并保存模型參數(shù),通過模型對未知流量進(jìn)行識別分類,以實(shí)現(xiàn)對具體攻擊類型的分類。
數(shù)據(jù)預(yù)處理模塊主要由數(shù)據(jù)包解析、數(shù)據(jù)包分段重組、數(shù)據(jù)包解碼以及數(shù)據(jù)包過濾4部分組成。數(shù)據(jù)包解析主要完成對捕獲的二進(jìn)制流量按網(wǎng)絡(luò)協(xié)議進(jìn)行逐層解析,生成可讀的網(wǎng)絡(luò)封包的詳細(xì)信息以供特征提取階段使用;數(shù)據(jù)包分段重組主要完成對來自同一個數(shù)據(jù)包產(chǎn)生的分段數(shù)據(jù)包的重組;數(shù)據(jù)包解碼主要完成對編碼后的數(shù)據(jù)進(jìn)行數(shù)據(jù)還原;數(shù)據(jù)包過濾主要采用文件頭標(biāo)識來處理數(shù)據(jù)流中的多媒體資源文件,以避免其中的不可見字符對模型訓(xùn)練造成干擾。
2.2.1數(shù)據(jù)包解析
本文主要使用基于Python編程語言的數(shù)據(jù)包解析工具Scapy庫[11]對采集的網(wǎng)絡(luò)流量進(jìn)行處理。Scapy庫是一個功能強(qiáng)大的數(shù)據(jù)包處理工具,利用該工具可以輕松實(shí)現(xiàn)發(fā)送、嗅探、解析和偽造網(wǎng)絡(luò)數(shù)據(jù)包。本文使用Scapy解析并提取數(shù)據(jù)包字段(時間戳、請求類型、確認(rèn)號、序列號、源IP地址、目的IP地址、有效載荷、數(shù)據(jù)包大小等)。對取值為離散值的字段需要其進(jìn)行編碼,如請求類型字段為:GET、POST等,則對應(yīng)編碼為GET=1,POST=2。
2.2.2數(shù)據(jù)包分段重組
當(dāng)發(fā)送端發(fā)送的數(shù)據(jù)包長度大于通信雙方協(xié)商的每一個報文段所能承載的最大數(shù)據(jù)長度MSS(maximum segment size)時,需要對數(shù)據(jù)包進(jìn)行分段傳輸,產(chǎn)生多個具有完整首部的TCP報文段。為了在接收端將來自同一個數(shù)據(jù)包產(chǎn)生的多個報文段進(jìn)行重組還原,本文首先將捕獲到待重組報文段按照序列號由小到大排列得到[seqk1,seqk2,…, seqk n]。對于序列號為seqi的報文段,其TCP長度為TCP - payloadi,則下一個分片序列號為seqi+ TCP - payloadi。以此類推,可將所有來自相同數(shù)據(jù)包產(chǎn)生的報文段按順序拼接完成。
2.2.3數(shù)據(jù)包解碼
當(dāng)發(fā)送端發(fā)送請求包中的請求地址字段包含特殊字符時,根據(jù)RFC 3986協(xié)議[12]規(guī)定,需要在數(shù)據(jù)傳輸前對其進(jìn)行編碼,具體操作為使用百分號和對應(yīng)的ASCII值進(jìn)行替換。因此,對于經(jīng)過編碼后的請求地址字段內(nèi)容,如:“/index?id=shop%23name”,需要進(jìn)行解碼得到原始請求字段內(nèi)容為“index?id=shop#name”。
2.2.4數(shù)據(jù)包過濾
為了縮短模型在預(yù)處理階段所花的時間,同時避免數(shù)據(jù)流中的不可見字符影響模型訓(xùn)練效果,需要對采集到的網(wǎng)絡(luò)流量依據(jù)數(shù)據(jù)類型進(jìn)行過濾,其中一部分是頁面加載時的靜態(tài)資源文件(如html、js、css)等,另一部分主要是圖片、音視頻等非文本類型的數(shù)據(jù)。針對這兩部分?jǐn)?shù)據(jù),在數(shù)據(jù)包過濾時主要根據(jù)數(shù)據(jù)包中的請求資源定位符來過濾掉非PHP文件。但已有研究表明,存在將Webshell藏在圖片的末尾形成“圖片馬”以繞過目標(biāo)服務(wù)器防護(hù)設(shè)備檢查的攻擊手段,因此對于PNG、JPEG等格式的圖片文件,主要通過文件頭尾標(biāo)識符定位來處理。文件頭標(biāo)識符是以二進(jìn)制形式存于文件開頭一段區(qū)域的數(shù)據(jù),該數(shù)據(jù)對應(yīng)每一種文件類型。常見的多媒體資源文件同樣擁有獨(dú)一無二的文件頭信息,如PNG格式圖片的文件頭尾標(biāo)識符分別為0x89 50 4E 47 0D 0A 1A 0A和0x49 45 4E 44 AE 42 60 82。因此,通過識別數(shù)據(jù)流中的文件標(biāo)識符,進(jìn)而定位到多媒體資源文件的首尾并對其中部分進(jìn)行過濾,即可提取出插入文件末尾的Webshell,處理示意如圖2所示。
圖2 文件頭尾標(biāo)識符處理“圖片馬”Figure 2 Use file header-tail identifier to process “picture horse”
為了對不同類型的Webshell惡意流量進(jìn)行準(zhǔn)確識別,需要提取有關(guān)流量的各方面特征,并將其序列化表示輸入分類器中。按照業(yè)界對Webshell惡意程序的功能以及攻擊影響進(jìn)行劃分,可分為3種類型。
定義1簡單型Webshell程序,俗稱“一句話木馬”程序,指僅提供基本命令執(zhí)行功能的Webshell程序,代碼結(jié)構(gòu)簡單。
定義2文件上傳型Webshell程序,俗稱“小馬”程序,指功能單一且不包含命令執(zhí)行功能的惡意程序,通常作為跳板程序用于上傳其他惡意文件。
定義3網(wǎng)頁型Webshell程序,俗稱“大馬”程序,指具有人性化操作界面、包含多種攻擊手段的Webshell程序,代碼結(jié)構(gòu)復(fù)雜,功能多樣。
具體而言,簡單型Webshell程序通常不包含其他功能代碼,命令執(zhí)行時還需上傳完整的執(zhí)行代碼,并由攻擊者通過HTTP直連或Webshell客戶端進(jìn)行傳輸;文件上傳型Webshell程序通常被應(yīng)用在目標(biāo)服務(wù)器對上傳文件大小進(jìn)行限制時,首先被上傳至服務(wù)器作為跳板程序,進(jìn)而上傳其他包含惡意代碼的Webshell程序用以規(guī)避服務(wù)器審查;網(wǎng)頁型Webshell程序通常將所有的功能代碼整合到Webshell文件中,且包含大量頁面元素構(gòu)成操作界面。針對各類型Webshell程序工作原理的不同,本文主要從數(shù)據(jù)包元信息、載荷內(nèi)容和通信行為3個方面進(jìn)行特征提取,提取的主要特征如下。
2.3.1數(shù)據(jù)包元信息
數(shù)據(jù)包元信息是指通信雙方在進(jìn)行通信時需按照TCP/IP規(guī)定的方式構(gòu)造網(wǎng)絡(luò)數(shù)據(jù)包,這些字段可直接從解析后的數(shù)據(jù)包中采集得到,本文利用第三方工具Scapy完成對數(shù)據(jù)包的解析,主要提取本文需要的相關(guān)字段信息如下。
1) 請求包載荷長度:該字段反映了源主機(jī)向目標(biāo)主機(jī)發(fā)送請求報文時所攜帶的數(shù)據(jù)長度。在Webshell通信過程中,攻擊者在發(fā)送攻擊載荷時通常為了規(guī)避入侵檢測工具(IDS)等設(shè)備檢測,將請求載荷進(jìn)行混淆加密處理進(jìn)而導(dǎo)致載荷變長,因而當(dāng)網(wǎng)絡(luò)中出現(xiàn)較長請求載荷時則可能存在Webshell惡意通信行為。
2) 請求包請求參數(shù)個數(shù):該字段反映了攻擊者對請求載荷進(jìn)行變換處理后,攻擊載荷被分割為多段,最后在攻擊載荷到達(dá)目標(biāo)服務(wù)器后進(jìn)行重組,此過程需要多個請求參數(shù)用于存儲和拼接請求載荷,因而導(dǎo)致請求包中請求參數(shù)個數(shù)增加。
2.3.2載荷內(nèi)容特征
Webshell通信過程的本質(zhì)是發(fā)送命令和執(zhí)行命令,攻擊者發(fā)送給Webshell程序的危險命令通常存儲于數(shù)據(jù)包的有效載荷中,本文從請求、響應(yīng)包的有效載荷中提取以下特征。
1)請求包命令執(zhí)行函數(shù):在基于PHP腳本語言編寫的Webshell程序中,由于攻擊載荷需要通過PHP腳本語言進(jìn)行語法解析和編譯器執(zhí)行,因而PHP語言中涉及危險系統(tǒng)命令的執(zhí)行函數(shù)均可能成為攻擊者進(jìn)行遠(yuǎn)程命令執(zhí)行所調(diào)用的函數(shù)[13],如在冰蝎Webshell客戶端中,當(dāng)客戶端首次連接被植入PHP語言編寫的Webshell的受害服務(wù)器時,默認(rèn)會執(zhí)行phpinfo函數(shù)。表1給出PHP語言中的危險函數(shù)。
一般認(rèn)為,當(dāng)數(shù)據(jù)包請求載荷中出現(xiàn)了表1中的危險功能函數(shù),則在一定限度上認(rèn)為該網(wǎng)絡(luò)可能存在Webshell惡意通信行為。
表1 PHP語言中的危險功能函數(shù)Table 1 Unsafe PHP function details
2)請求包參數(shù)轉(zhuǎn)移概率系數(shù):狀態(tài)轉(zhuǎn)移概率[14]是描述模型在各個狀態(tài)間轉(zhuǎn)換的概率。在正常業(yè)務(wù)中,為了方便程序維護(hù),在各類表單請求參數(shù)時大多選取與業(yè)務(wù)相關(guān)且具有較高可讀性的參數(shù)。抽象成數(shù)學(xué)可以理解的語言,正常業(yè)務(wù)中的參數(shù)名轉(zhuǎn)移概率系數(shù)偏高,而在Webshell程序中程序變量名的選取較為隨機(jī),因此轉(zhuǎn)移概率系數(shù)偏低。計算一個字符串觀測序列的概率分布如式(1)所示。
其中,p(1x)表示字符串中每一個字符出現(xiàn)的概率。當(dāng)給定的字符串符合語言規(guī)律,則計算得到的轉(zhuǎn)移概率值較高,而不符合可讀性的概率則較低。因此,請求包中參數(shù)名的轉(zhuǎn)移概率系數(shù)大小可以作為區(qū)分正常流量與Webshell惡意流量的特征之一。
3)請求包載荷信息熵:信息熵的概念最初由香農(nóng)提出,用于研究傳輸信息中的信息量大小。請求包載荷信息熵值反映了請求報文中載荷內(nèi)容的混亂程度。在Webshell通信過程中,攻擊者往往對攻擊載荷進(jìn)行填充、加密等變換,導(dǎo)致載荷的字符空間混亂程度增加即信息熵增大,因而通過計算請求載荷的信息熵大小是否偏離正常水平可在一定限度上認(rèn)為該網(wǎng)絡(luò)中出現(xiàn)Webshell惡意通信行為。信息熵計算公式為
其中,L為請求包的載荷內(nèi)容,p L(i)為載荷中每個字符發(fā)生的概率。當(dāng)計算得到的信息熵值越大,則表明該載荷所包含的信息量越大,字符串呈現(xiàn)出無序、不確定性,因而被判定是攻擊載荷的可能性越高。
4) 響應(yīng)包title標(biāo)簽內(nèi)容:通過對大量樣本進(jìn)行分析,在網(wǎng)頁型Webshell程序中,由于這類惡意程序通常采用編程語言——HTML(hypertext markup language)來實(shí)現(xiàn)人性化操作界面,且在代碼的title標(biāo)簽內(nèi)包含該惡意程序的名稱(如WSO、b374k、r57等)。因此提取的響應(yīng)包中的title標(biāo)簽內(nèi)容,也可作為區(qū)別正常業(yè)務(wù)流量和Webshell惡意流量的特征之一。
5) 響應(yīng)包網(wǎng)頁標(biāo)簽個數(shù):正常業(yè)務(wù)通信的響應(yīng)包中通常包含動態(tài)腳本程序生成的頁面,頁面主要由HTML語言中的標(biāo)簽構(gòu)成。而簡單型Webshell程序通常只包含腳本語言(如PHP編程語言)編寫的惡意代碼,在遠(yuǎn)程執(zhí)行命令過程中響應(yīng)頁面不包含HTML標(biāo)簽。因此,當(dāng)網(wǎng)絡(luò)中出現(xiàn)不包含HTML標(biāo)簽的響應(yīng)內(nèi)容時,則可認(rèn)為網(wǎng)絡(luò)中可能存在Webshell惡意通信行為。
2.3.3 通信行為特征
正常HTTP請求與Webshell通信時存在明顯的行為差異,因?yàn)閃eb服務(wù)器中的正常業(yè)務(wù)均可被不同用戶訪問,但Webshell程序的資源訪問地址只由攻擊者可知,因而在訪問行為上呈現(xiàn)單一用戶短時間內(nèi)頻繁訪問現(xiàn)象。因此,本文從通信行為角度提取如下特征。
1) 頁面對外開放度:該特征反映了某一URL地址在一段時間內(nèi)被不同IP地址主機(jī)進(jìn)行訪問的程度。對于采用B/S架構(gòu)的Web應(yīng)用程序而言,當(dāng)正常業(yè)務(wù)被部署至互聯(lián)網(wǎng)中可被任何連接到互聯(lián)網(wǎng)中的主機(jī)進(jìn)行訪問,因而該正常頁面的對外訪問度較高。而對于被植入服務(wù)器中的Webshell程序而言,通常該后門程序的訪問地址只由攻擊者已知,因而該后門程序的頁面對外開放度水平較低。因此,某一頁面的對外開放度可作為區(qū)分正常業(yè)務(wù)和惡意后門頁面的特征之一。
2) 頁面訪問頻率:該特征反映了某一URL地址在一段時間內(nèi)被同一IP地址訪問的頻率大小。正常用戶訪問服務(wù)器上的資源文件時通常不會過長時間停留于單個頁面,且由于現(xiàn)在大部分正常頁面采用HTML配合JavaScript、CSS(cascading style sheets)等語言進(jìn)行頁面優(yōu)化,使得單次訪問中必不可少地有資源文件被訪問和下載。而攻擊者遠(yuǎn)程連接Webshell惡意程序過程中由于只需要接收命令和執(zhí)行命令,因而該Webshell頁面的訪問頻率高于正常水平。因此,某一頁面訪問頻率可作為區(qū)分正常業(yè)務(wù)訪問和Webshell惡意訪問的特征之一。
對上述提出的諸多特征,如果僅用單一學(xué)習(xí)器對特征構(gòu)成的特征矩陣進(jìn)行訓(xùn)練,由于各決策器在設(shè)計之初存在各自優(yōu)勢和缺點(diǎn),可能訓(xùn)練得到的分類器出現(xiàn)較高的偏差或方差的現(xiàn)象,并且在應(yīng)對未知樣本時泛化性能較差。集成學(xué)習(xí)在實(shí)際生產(chǎn)環(huán)境下發(fā)揮重要作用,通過結(jié)合多個模型力圖在海量數(shù)據(jù)中獲得多樣且準(zhǔn)確的模型[15]。并結(jié)合不同單一弱分類器在各類數(shù)據(jù)上的表現(xiàn)構(gòu)造出強(qiáng)分類器,以獲得高檢測率和低誤報率,并且能夠用于檢測未知的Webshell惡意流量。
本文采用基于Stacking集成策略來構(gòu)建分類模型,這是一種通用的通過訓(xùn)練分類器來結(jié)合個體分類器的方法。此時,個體分類器被稱為初級學(xué)習(xí)器,結(jié)合器被稱為次級分類器。在本文中,初級學(xué)習(xí)器應(yīng)該選取預(yù)測性能優(yōu)秀的機(jī)器學(xué)習(xí)模型,更重要的還需要保證模型間的多樣性[16],在分析個體學(xué)習(xí)器的單獨(dú)預(yù)測能力,并全面比較個體學(xué)習(xí)器的組合效果后,本文從基于Python的Scikit-learn庫[17]所提供的封裝分類器中選取了4種典型機(jī)器學(xué)習(xí)算法:邏輯回歸(LR,logistic regression)、樸素貝葉斯(NB,naive bayes)、支持向量機(jī)(SVM,support vector machine)、和多層感知機(jī)(MLP,multilayer perceptron)算法作為初級分類器,次級學(xué)習(xí)器一般選取穩(wěn)定性較好的簡單模型,起到整體提升模型性能的作用,本文選擇決策樹(DT,decision tree)算法作為次級分類器,并采用Stacking集成策略對各層學(xué)習(xí)器進(jìn)行結(jié)合。本文中相關(guān)算法及參數(shù)設(shè)置如下。
1) LR:這是一種基于距離分類超平面的離散選擇模型,具體如式(3)。
其用距離度量判斷該數(shù)據(jù)流是否為Webshell惡意流量的概率大小。在本文中懲罰項(xiàng)選擇L2,懲罰因子為1.0,損失函數(shù)優(yōu)化算法選擇坐標(biāo)軸下降法。
2) NB:對測試樣例x進(jìn)行分類時,學(xué)習(xí)算法可構(gòu)建概率模型來選取具有最大后驗(yàn)概率值的y作為輸出,如式(4):
3) SVM:SVM分類器主要借助核函數(shù)將特征向量映射到高維線性可分空間,并依靠邊界樣本來建立需要的分離曲線。本文選擇的核函數(shù)徑向基函數(shù)(RBF),其中懲罰系數(shù)C為1.0,誤差精度0.01。
4) MLP:一種前饋神經(jīng)網(wǎng)絡(luò),模型通過定義多個前向反饋的隱藏層來克服單個感知器的局限性,本文的反饋函數(shù)是基于符號的函數(shù)σ(x) =[1+e-x]-1,具體如式(5)。
其中,權(quán)重參數(shù)ω和偏置參數(shù)b可通過訓(xùn)練數(shù)據(jù)不斷訓(xùn)練得到。本文隱藏層數(shù)量為2,神經(jīng)元數(shù)量為50,使用擬牛頓方法(L-BFGS)來優(yōu)化模型參數(shù)權(quán)重,正則化項(xiàng)參數(shù)0.000 1。
5) DT:通過特征選擇算法從訓(xùn)練集中依次選擇最優(yōu)特征來建立分裂點(diǎn)并逐步迭代生成樹。常見的決策樹算法有ID3、C4.5和CART等。本文次級學(xué)習(xí)器選擇使用Gini系數(shù)用于特征選擇的CART算法,其中構(gòu)建樹的最大深度為6。
本文采用的基于Stacking集成策略實(shí)現(xiàn)方法如圖3所示,網(wǎng)絡(luò)輸入包含n個數(shù)據(jù)包的訓(xùn)練集D= {(xi,y i) ,i=1,2,…,n}和m個數(shù)據(jù)包的測試集T={(xj,y j),j=1,2,…,m},其中,xi和xj表示數(shù)據(jù)包的特征向量,yi和yj為該數(shù)據(jù)包的真實(shí)標(biāo)簽。為防止第一層初級分類器在訓(xùn)練集上訓(xùn)練模型導(dǎo)致過擬合問題,本文采用5折交叉驗(yàn)證方法對訓(xùn)練集隨機(jī)分成D1,D2,…,D5,定義Dk和表示第k折交叉驗(yàn)證的驗(yàn)證集和訓(xùn)練集,對于每一個初級分類器l(l= 1,2,3,4),數(shù)據(jù)集被用于生成訓(xùn)練模型對生成的模型在數(shù)據(jù)集Dk和測試集T上進(jìn)行預(yù)測得到對每輪交叉驗(yàn)證中驗(yàn)證集Dk的預(yù)測值sil按行進(jìn)行拼接生成用于次級分類器的訓(xùn)練樣本si=( (si1,…,si n),yi),對每輪交叉驗(yàn)證中測試集T的預(yù)測值sjl取平均值生成用于次級分類器的測試樣本最終利用l個初級分類器產(chǎn)生的訓(xùn)練集和測試集訓(xùn)練次級分類器得到最終的Webshell惡意流量集成模型。
圖3 基于Stacking集成策略的實(shí)現(xiàn)方法Figure 3 Implementation method of ensemble learning structure based on Stacking
本文實(shí)驗(yàn)在四川大學(xué)網(wǎng)絡(luò)靶場進(jìn)行。本文的數(shù)據(jù)集分為正常流量和惡意流量兩部分,并按照8:2的比例隨機(jī)劃分為訓(xùn)練集和測試集。其中惡意流量的獲取主要來自網(wǎng)絡(luò)開源倉庫Github中下載量最高的11個倉庫(如tennc/webshell、ysrc/webshell-sample等),約2 000個惡意樣本按圖4所示的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)部署后仿真采集得到。在采集到8萬條以上基于HTTP協(xié)議的惡意流量中,按照Webshell類型篩選出3萬條以上(不包括非正常響應(yīng)以及媒體資源文件)確定具有惡意行為特征的數(shù)據(jù)分組。其中,簡單型木馬流量約占18%,網(wǎng)頁型木馬流量約占80%,文件上傳型木馬流量約占1.1%。正常流量的獲取來源于某安全公司的業(yè)務(wù)流量,經(jīng)人工篩選后對數(shù)據(jù)打上正常標(biāo)簽。仿真數(shù)據(jù)集具體信息如表2所示。
表2 仿真數(shù)據(jù)集Table 2 Simulation dataset
圖4 數(shù)據(jù)仿真環(huán)境Figure 4 Simulation environment topology
由于進(jìn)行數(shù)據(jù)多分類實(shí)驗(yàn)的數(shù)據(jù)集為不平衡數(shù)據(jù)集,文件上傳型Webshell與簡單型Webshell、網(wǎng)頁型Webshell的樣本數(shù)量差距較大,為增加實(shí)驗(yàn)的合理性,在此采用SMOTE算法[18]進(jìn)行隨機(jī)采樣至各類別比例接近1:1。
本文采用準(zhǔn)確率(Accuracy)、精確率(Precision)、召回率(Recall)、F1值(F1-score)來評價二分類情況下分類器的性能,為了評估模型的檢測能力,首先定義二分類模型的預(yù)測結(jié)果與真實(shí)結(jié)果的4種情況。
(1)TP(true positive):預(yù)測當(dāng)前流量是Webshell惡意流量,且實(shí)際上是Webshell惡意流量。
(2)FN(false negative):預(yù)測當(dāng)前流量是正常流量,但實(shí)際上是Webshell惡意流量。
(3)FP(false positive):預(yù)測當(dāng)前流量是Webshell惡意流量,但實(shí)際上是正常流量。
(4)TN(true negative):預(yù)測當(dāng)前流量是正常流量,且實(shí)際是正常流量。
根據(jù)以上的判定結(jié)果,定義二分類下Webshell惡意流量檢測的評價指標(biāo)如下。
另外,由于本文需要對Webshell惡意流量的具體類別進(jìn)行判定,故將二分類情況下的混淆矩陣(confusion matrix)推廣至多分類,得到式(10)所示的混淆矩陣Ml×l。其中,l為待檢測類別,M ii表示預(yù)測當(dāng)前流量是第i個類別且實(shí)際上為第i個類別流量的個數(shù),Mij表示預(yù)測當(dāng)前流量是第i個類別但實(shí)際上是第j個類別流量的個數(shù),計算第i個類別的精確率[19]、召回率[19]和F1值如下所示。
實(shí)驗(yàn)預(yù)期要達(dá)到兩個分類:一是模型要能區(qū)分通信流量中的正常流量和惡意流量:二是模型能夠區(qū)分該惡意流量屬于何種類型的Webshell攻擊。本文主要從特征融合前后與現(xiàn)有同類研究方法兩方面進(jìn)行評估,另外為證明分類器的有效性,在實(shí)驗(yàn)過程中選擇了XGBoost、GBDT、AdaBoost等常見集成學(xué)習(xí)算法進(jìn)行對比。
實(shí)驗(yàn)1同類研究方法對比
第一組實(shí)驗(yàn)對比同類型研究中基于通信流量的Webshell惡意檢測的各方面性能指標(biāo),由于文獻(xiàn)[9-10]中并未對惡意流量屬于何種攻擊類型做深入研究,故實(shí)驗(yàn)主要針對正常惡意流量二分類情況進(jìn)行對比。為避免實(shí)驗(yàn)數(shù)據(jù)劃分不合理導(dǎo)致實(shí)驗(yàn)結(jié)果的偶然性,本文采用十折交叉驗(yàn)證對模型進(jìn)行評估,實(shí)驗(yàn)最終的性能指標(biāo)取交叉驗(yàn)證結(jié)果的平均值,如圖5所示。
圖5 不同方法模型比較結(jié)果Figure 5 Comparison result of different method models
實(shí)驗(yàn)結(jié)果表明,在相同的數(shù)據(jù)集下,本文提出的方法在正確率、精確率、ROC曲線的AUC面積以及F1指標(biāo)上均達(dá)到最優(yōu),分別為98.65%、99.25%、99.07%、98.33%。這說明本文提出的方法能夠更準(zhǔn)確地檢測Webshell惡意流量,并且模型更加穩(wěn)定。召回率僅比文獻(xiàn)[9]低0.4%,比文獻(xiàn)[10]低1.8%。
除此之外,本文還對比了同類研究方法中的模型訓(xùn)練以及模型檢測所需要的時間開銷。其中,一個完整的Webshell惡意流量檢測系統(tǒng)的檢測時間主要包括兩個部分。①使用Scapy等工具捕獲并解析未知網(wǎng)絡(luò)數(shù)據(jù)包;②訓(xùn)練生成的模型對流量數(shù)據(jù)進(jìn)行檢測。本文統(tǒng)一使用Scapy對數(shù)據(jù)包進(jìn)行捕獲并解析,同時使用文獻(xiàn)[9-10]對原始數(shù)據(jù)集的20%數(shù)據(jù)進(jìn)行檢測,平均消耗時間對比如表3所示。
表3 平均消耗時間對比Table 3 Average elapsed time comparison
由表3可知,本文提出的方法與文獻(xiàn)[9]采用的CNN+LSTM構(gòu)建分類模型相比,在訓(xùn)練時間和檢測時間上減少了95.73%和86.14%。此外,在設(shè)置序列長度為1 500,與文獻(xiàn)[10]中采用4-gram+SVM算法相比,在訓(xùn)練時間和檢測時間上減少了70.87%和99.51%。因此,本文提出的方法可大幅降低檢測器的訓(xùn)練和檢測時間,滿足實(shí)際應(yīng)用中快速檢測的要求。
實(shí)驗(yàn)2特征融合前后對比
第二組實(shí)驗(yàn)對比特征經(jīng)過融合前后在不同類型的Webshell惡意流量上的識別效果。在實(shí)驗(yàn)中選用數(shù)據(jù)集的80%數(shù)據(jù)進(jìn)行訓(xùn)練,20%的數(shù)據(jù)進(jìn)行測試。同時,按照特征數(shù)據(jù)包元信息、數(shù)據(jù)包載荷內(nèi)容以及流量訪問行為3個維度分為3組特征子集,并設(shè)置3組對比實(shí)驗(yàn)分別為:未經(jīng)過融合的第1組特征,只融合第1、2組特征,融合第1、2、3組特征。本實(shí)驗(yàn)的目的是驗(yàn)證本文提出的方法在改善單一特征對不同類型的Webshell惡意流量識別能力和模型魯棒性上的提升,識別結(jié)果如圖6~圖8所示。
圖6 不同特征融合方案對簡單型Webshell識別效果對比Figure 6 Effect of different feature fusion schemes on simple Webshell
圖8 不同特征融合方案對網(wǎng)頁型Webshell識別效果對比Figure 8 Effect of different feature fusion schemes onweb-based Webshell
圖7 不同特征融合方案對文件上傳型Webshell識別效果對比Figure 7 Effect of different feature fusion schemes on file-upload Webshell
實(shí)驗(yàn)結(jié)果表明,本文提出的多特征融合方法在識別不同類型的Webshell惡意流量上都要優(yōu)于未經(jīng)過特征融合以及特征融合不充分的情況,各類型識別精確率分別為95.66%、97.61%和90.86%。其中,對網(wǎng)頁型Webshell惡意流量的識別上效果提升明顯,精確率平均提升27.99%。這是因?yàn)榫W(wǎng)頁型Webshell惡意程序本質(zhì)上仍然為一個Web應(yīng)用,因而相較于具有較強(qiáng)特征的簡單型和文件上傳型,惡意流量上更容易被單一分類器識別為正常業(yè)務(wù)流量最終導(dǎo)致誤報。而本文通過集成的方式構(gòu)建分類模型,在一定限度上提高了分類準(zhǔn)確率,能夠更加有效地識別網(wǎng)頁型Webshell惡意流量。
實(shí)驗(yàn)3不同集成算法對比
第三組實(shí)驗(yàn)是對比不同集成學(xué)習(xí)算法在融合后的特征空間下的分類效果。在實(shí)驗(yàn)中選定常見的集成學(xué)習(xí)模型:XGBoost、GBDT、AdaBoost算法與本文采用基于Stacking框架生成的分類模型進(jìn)行比較。本實(shí)驗(yàn)的目的是驗(yàn)證基于Stacking框架的集成學(xué)習(xí)分類模型相比其他采用集成學(xué)習(xí)算法在多類型Webshell流量識別上,能夠取得更好的分類性能,實(shí)驗(yàn)結(jié)果如圖9~圖11所示。
圖9 不同集成學(xué)習(xí)算法對簡單型Webshell識別效果對比Figure 9 Effect of different ensemble algorithms on simple Webshell
圖10 不同集成學(xué)習(xí)算法對文件上傳型Webshell識別效果對比Figure 10 Effect of different ensemble algorithms on file-upload Webshell
圖11 不同集成學(xué)習(xí)算法對網(wǎng)頁型Webshell識別效果對比Figure 11 Effect of different ensemble algorithms on web-based Webshell
實(shí)驗(yàn)結(jié)果表明,在識別簡單Webshell惡意流量上,本文提出的算法在精確率和F1值上都要優(yōu)于其他3種集成學(xué)習(xí)算法,達(dá)到95.66%和93.99%,召回率比采用XGBoost算法低1.34%,為92.37%。在識別文件上傳型Webshell惡意流量上,本文算法在精確率、召回率和F1值上整體優(yōu)于其他3種集成學(xué)習(xí)算法,達(dá)到97.61%、98.3%、97.95%。在識別網(wǎng)頁型Webshell惡意流量上,本文提出的算法在召回率和F1值上都要優(yōu)于其他3種集成學(xué)習(xí)算法,達(dá)到94.14%和92.47%,而精確率比采用XGBoost算法高2.44%,為90.86%。因此在整體的識別效果上,采用Stacking算法構(gòu)建的分類模型相比其他基于集成算法在每個分類上的表現(xiàn)更加穩(wěn)定。
本文提出了一種基于多特征融合的Webshell檢測方法,用來檢測網(wǎng)絡(luò)通信過程中可能存在的Webshell惡意流量,該方法從數(shù)據(jù)包元信息、數(shù)據(jù)包載荷內(nèi)容以及流量訪問行為等提取流量特征,并將融合后的特征輸入基于集成學(xué)習(xí)策略的分類模型中檢測Webshell惡意流量。實(shí)驗(yàn)結(jié)果表明,該方法不僅在正常與惡意流量的二分類上取得不錯效果,同時也能對惡意流量屬于何種Webshell攻擊做細(xì)分,為Web應(yīng)用的進(jìn)一步加固和防御提供精確的支撐。這一研究成果彌補(bǔ)了現(xiàn)有方法中未對惡意流量屬于何種攻擊類型進(jìn)行研究的不足,以及訓(xùn)練和檢測效率低的問題。