王林汝 姬艷
1 江蘇省互聯(lián)網(wǎng)行業(yè)管理服務(wù)中心;2 中國電信股份有限公司江蘇分公司
WebShell就是以網(wǎng)頁文件形式(如asp、jsp、php等類型)存在的一種命令執(zhí)行環(huán)境,通常將其認(rèn)為屬于一種網(wǎng)頁后門。這使得入侵者可以通過它來非法獲取服務(wù)器系統(tǒng)權(quán)限,進(jìn)而控制“肉雞”發(fā)起DDos攻擊,對網(wǎng)站內(nèi)容進(jìn)行篡改、在網(wǎng)頁上掛木馬病毒,作為隱藏自身的代理類服務(wù)器,對服務(wù)器內(nèi)部進(jìn)行掃描,對網(wǎng)頁植入暗鏈/黑鏈等等。
最近幾年,針對網(wǎng)站的隱蔽性攻擊(如被植入后門等)表現(xiàn)出逐年穩(wěn)定增長態(tài)勢,國家互聯(lián)網(wǎng)應(yīng)急響應(yīng)中心發(fā)布的《2016年中國互聯(lián)網(wǎng)網(wǎng)絡(luò)安全報(bào)告》中指出,2016 年,CNCERT/CC監(jiān)測發(fā)現(xiàn)約 4 萬個(gè) IP 地址對我國境內(nèi)82072 個(gè)網(wǎng)站被植入后門,其中政府網(wǎng)站有 2361 個(gè),占境內(nèi)被植入后門網(wǎng)站的 2.9%,網(wǎng)站數(shù)量較 2015 年增長 9.3%。
由于WebShell是使用HTTP協(xié)議進(jìn)行木馬上傳及惡意操作,與被控制的服務(wù)器之間的通信是遠(yuǎn)程通過80端口進(jìn)行傳遞,因此常規(guī)的防火墻很難以攔截此類攻擊。并且使用WebShell進(jìn)行攻擊通常不會在被入侵系統(tǒng)的日志當(dāng)中留下入侵痕跡,只會在網(wǎng)站的web日志當(dāng)中留下一些數(shù)據(jù)提交歷史記錄,因此通過對HTTP日志進(jìn)行分析來發(fā)現(xiàn)WebShell行為,是近期網(wǎng)絡(luò)安全研究的熱點(diǎn)。
目前WebShell檢測的方式主要分為靜態(tài)檢測和動態(tài)檢測兩方面[3]。當(dāng)黑客使用WebShell來入侵服務(wù)器時(shí),不管其操作是對文件進(jìn)行上傳或修改,都必然會有一個(gè)包含WebShell代碼的文件,因此從文件代碼入手,這是靜態(tài)特征檢測的思路;而當(dāng)WebShell運(yùn)行后,所有數(shù)據(jù)是通過HTTP協(xié)議進(jìn)行傳輸,因此可以從HTTP請求/響應(yīng)中可以找到蛛絲馬跡,這是動態(tài)特征檢測。
已有的研究工作當(dāng)中,靜態(tài)檢測通過匹配已知WebShell的文件特征(如特征碼、特征值、危險(xiǎn)函數(shù)等)來實(shí)現(xiàn)WebShell檢測方法,此類方法只能查找已知的WebShell,并且誤報(bào)率漏報(bào)率會比較高,若配置的規(guī)則完善,則可以有效減低誤報(bào)率,但是對于WebShell檢測的漏報(bào)率則會相應(yīng)提高。
而WebShell在代碼執(zhí)行當(dāng)中所具備的特征,則稱作動態(tài)特征。由于WebShell是通過HTTP協(xié)議進(jìn)行通信,因此提取WebShell特有的HTTP請求/響應(yīng)來形成特征庫,對所有的HTTP請求日志進(jìn)行匹配,這就是動態(tài)特征檢測。
此外,還有通過對服務(wù)器內(nèi)并部署的動態(tài)文件(如.php等)內(nèi)的代碼進(jìn)行語法檢測,根據(jù)對常用語言如php等采用掃描編譯等方式,對代碼和注釋進(jìn)行剝離,并對其中的變量、字符串、函數(shù)等語法結(jié)構(gòu)進(jìn)行歸類和分析,進(jìn)而來實(shí)現(xiàn)對于關(guān)鍵危險(xiǎn)函數(shù)的檢測發(fā)現(xiàn);通過此方式可以完美解決漏報(bào)的情況;但誤報(bào)上,仍存在問題。
已有的研究工作取得了一些科研成果,但存在以下不足:
(1)基于靜態(tài)特征的檢測方案當(dāng)中,存在漏報(bào)率高且誤報(bào)率高,無法及時(shí)發(fā)現(xiàn)0day型的WebShell,而且容易被代碼混淆等方法繞過等等系列問題,并且由于需要配合人工進(jìn)行二次檢測,因此對于大型網(wǎng)站的WebShell檢測而言需要的人力工作量很大;
(2)基于動態(tài)特征的檢測方案,存在部署代價(jià)高,制定的規(guī)則需要頻繁更新,并且無法發(fā)現(xiàn)經(jīng)過混淆的惡意代碼等缺點(diǎn);
(3)對于基于語法檢測的檢測方案,需要大量已知的后門數(shù)據(jù)進(jìn)行語法語義的分析訓(xùn)練,前期需要投入相當(dāng)程度的成本,并且對于未發(fā)現(xiàn)的0day類型的WebShell無法檢測發(fā)現(xiàn),也無法發(fā)現(xiàn)經(jīng)過混淆的惡意代碼。
作者目前在工作中面臨的實(shí)際問題是:
(1)如何處理海量的HTTP日志數(shù)據(jù);
(2)如何實(shí)現(xiàn)對已知的WebShell和0day入侵的及時(shí)發(fā)現(xiàn)。
針對問題1:通過使用分布式計(jì)算框架來實(shí)現(xiàn)對于海量HTTP日志數(shù)據(jù)的處理;
針對問題2:則通過提取已知WebShell的訪問參數(shù)進(jìn)行訓(xùn)練從而實(shí)現(xiàn)對已知WebShell進(jìn)行檢測,統(tǒng)計(jì)單位時(shí)間內(nèi)host的訪問行為特征從而實(shí)現(xiàn)對未發(fā)現(xiàn)的0day類型WebShell進(jìn)行檢測,并使用機(jī)器學(xué)習(xí)分類器根據(jù)提取的特征進(jìn)行訓(xùn)練,實(shí)現(xiàn)對WebShell的自動化實(shí)時(shí)檢測。
(1)訪問參數(shù)特征選擇
因?yàn)閻阂釽ebShell的請求參數(shù)通常將包含特定的惡意代碼或通過代碼混淆實(shí)現(xiàn)上傳惡意代碼或進(jìn)行操作,因此訪問特征參數(shù)將從惡意代碼匹配及代碼混淆度進(jìn)行檢測。對于請求參數(shù)字段(對于GET方式,參數(shù)為url中?后的字符串,對于POST字段而言,則為post字段),依據(jù)&符號將參數(shù)字符串切割為單個(gè)參數(shù),依據(jù)=符號將單個(gè)參數(shù)切割為key和value值。
1)惡意代碼命中特征:根據(jù)已知的惡意WebShell日志及正常的HTTP訪問日志,對日志內(nèi)每個(gè)key/每個(gè)value及其是否為WebShell攻擊進(jìn)行關(guān)聯(lián)分析,對關(guān)聯(lián)度超過指定閾值的key或value判斷為惡意代碼,并依據(jù)關(guān)聯(lián)程度及代碼邏輯分析,結(jié)合已知WebShell惡意代碼黑名單庫,建立高嫌疑惡意代碼庫及低嫌疑惡意代碼庫。當(dāng)有新的HTTP日志數(shù)據(jù)時(shí),分別檢測其中的訪問參數(shù)命中高嫌疑惡意代碼庫及低嫌疑惡意代碼庫的次數(shù),作為惡意代碼命中特征。
2)最大參數(shù)字符長度:正常的HTTP請求參數(shù)通常由有意義的字符構(gòu)成,字符長度不會太高。而WebShell的請求參數(shù)當(dāng)中通常包含隱藏在參數(shù)中上傳的文件代碼,最大字符長度可能會較高。
3)請求參數(shù)最大字符熵值:正常的HTTP請求參數(shù)由明文構(gòu)成,因此整體字符熵值較低。而通過代碼加密或代碼混淆的惡意代碼,加密后整體字符分布呈現(xiàn)隨機(jī)性,因此字符熵值較高。
4)字符重合指數(shù):計(jì)算每個(gè)參數(shù)的平均字符重合指數(shù),正常的HTTP訪問參數(shù)通常是由有意義的字符組成,平均字符重合指數(shù)接近6.5%。而通過混淆或加密的WebShell代碼字符分布比較隨機(jī),重合的字符較少,整體字符重合指數(shù)較低,接近隨機(jī)分布3.5%。
(2)訪問行為特征選擇
1)請求方式訪問占比:統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host的各類HTTP請求方式(如GET/POST等)的比例,正常的訪問行為下抓取網(wǎng)頁內(nèi)容當(dāng)中GET類型的訪問請求占比較高,而惡意WebShell請求由于需要上傳代碼或獲取數(shù)據(jù)庫內(nèi)容,其POST類型的訪問請求占比非常高。
2)總訪問次數(shù):統(tǒng)計(jì)單位時(shí)間類對于指定host的總訪問請求次數(shù),正常訪問行為當(dāng)中每分鐘的訪問次數(shù)穩(wěn)定在一個(gè)合理區(qū)間,而遭到WebShell攻擊入侵時(shí),短期內(nèi)將收到大量的非法訪問請求,總訪問次數(shù)將遠(yuǎn)高于正常值。
3)單IP訪問次數(shù)最大占比:統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host訪問當(dāng)中,所有源IP的訪問次數(shù)占比,得到來訪IP當(dāng)中訪問次數(shù)占比的最大值。在正常的HTTP訪問行為中,通常每個(gè)來訪IP的訪問次數(shù)較為平均。而惡意WebShell訪問當(dāng)中,源自攻擊者IP的單IP訪問次數(shù)很高,因此單IP訪問次數(shù)占比也很高。
4)動靜態(tài)文件訪問次數(shù)占比:統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host訪問當(dāng)中,目的URL所屬的類型比例。當(dāng)被訪問的URL包含動態(tài)文件后綴 ['‘jsp',‘php',‘a(chǎn)sp',‘a(chǎn)spx',‘cgi'],則認(rèn)為訪問了動態(tài)文件,否則則認(rèn)為該次訪問屬于訪問靜態(tài)文件。正常的HTTP訪問請求當(dāng)中,動態(tài)文件的訪問請求比例通常低于靜態(tài)文件的請求比例。但在WebShell請求當(dāng)中,對于動態(tài)文件的訪問占比遠(yuǎn)高于對靜態(tài)文件的訪問占比。
依據(jù)上述的場景分析和特征選擇,最終確定了一下8個(gè)特征作為后續(xù)機(jī)器學(xué)習(xí)訓(xùn)練所用參數(shù),如表1所示:
(1)特征量化
對于全量的HTTP日志數(shù)據(jù),將按目標(biāo)host分別進(jìn)行統(tǒng)計(jì),設(shè)定單位時(shí)間為1分鐘。
1)惡意代碼命中特征:分別使用高嫌疑惡意代碼庫及低嫌疑惡意代碼庫對請求參數(shù)數(shù)據(jù)進(jìn)行匹配,分別記錄高嫌疑

表1 檢測方案特征選擇表
2)最大參數(shù)字符長度:對于請求參數(shù)內(nèi)的多個(gè)參數(shù),計(jì)算其每個(gè)參數(shù)內(nèi)容字符長度data_length,并取其最大值max_data_length作為該項(xiàng)特征的值。若該項(xiàng)特征的數(shù)值越大,則屬于WebShell行為的可能性越高。
3)請求參數(shù)最大字符熵值:對于請求參數(shù)內(nèi)的多個(gè)參數(shù),分別按照公式(1)計(jì)算域名di的域名字符熵:

并取最大值max_entropy作為該項(xiàng)特征的值。若最大字符特征熵值越大,則屬于WebShell行為的可能性越高。
4)平均字符重合指數(shù):對于請求參數(shù)內(nèi)的多個(gè)參數(shù),分別計(jì)算每個(gè)參數(shù)的請求值的字符重合指數(shù),計(jì)算方式如下:如果英文的26個(gè)字母在文本中出現(xiàn)的概率分別為:p0,p1...p25,則該參數(shù)值的字符重合指數(shù)=p0^2+p1^2+p2^2...+p25^2;最終求的多個(gè)參數(shù)的字符重合指數(shù)并求其均值avg作為該項(xiàng)特征值。平均字符重合指數(shù)越高,則說明屬于正常訪問的可能程度越大。
5)請求方式訪問占比:統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host的GET類請求占比和POST類請求占比,類型的請求占比=該類型的請求次數(shù)/總訪問次數(shù)。正常的HTTP訪問請求當(dāng)中GET類型請求方式的占比高于POST類請求次數(shù)的占比,而在WebShell行為當(dāng)中,大部分的都是POST類型的請求,GET類型的請求占比較低。
6)總訪問次數(shù):統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host的訪問總次數(shù)sum_vivit_num;在正常的HTTP訪問行為中,通常每個(gè)惡意代碼命中次數(shù)High_evil_num和低嫌疑惡意代碼命中次數(shù)normal_evil_num作為特征。高嫌疑惡意代碼命中次數(shù)或低嫌疑惡意代碼命中次數(shù)越高,則說明該屬于WebShell行為的可能性越高。來訪IP的訪問次數(shù)較為平均。而惡意WebShell訪問當(dāng)中,源自攻擊者IP的單IP訪問次數(shù)很高,因此單IP訪問次數(shù)占比也很高。
7)單IP訪問次數(shù)最大占比:統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host內(nèi)每個(gè)IP的訪問次數(shù),單IP訪問次數(shù)占比=單IP訪問次數(shù)/總訪問次數(shù);并求出單IP訪問次數(shù)最大占比。在正常的HTTP訪問行為中,通常每個(gè)來訪IP的訪問次數(shù)較為平均。而惡意WebShell訪問當(dāng)中,源自攻擊者IP的單IP訪問次數(shù)很高,因此單IP訪問次數(shù)占比也很高。
8)動靜態(tài)文件訪問次數(shù)占比:統(tǒng)計(jì)單位時(shí)間內(nèi)對于指定host內(nèi)目的URL所屬的類型比例。當(dāng)目的URL當(dāng)中包含動態(tài)文件后綴 [‘jsp', ‘php', ‘a(chǎn)sp', ‘a(chǎn)spx', ‘cgi'],則動態(tài)文件訪問次數(shù)+1,否則靜態(tài)文件訪問次數(shù)+1;訪問次數(shù)占比=動/靜態(tài)文件次數(shù)÷總訪問次數(shù)。正常的HTTP訪問請求當(dāng)中,動態(tài)文件的訪問請求比例通常低于靜態(tài)文件的請求比例。但在WebShell請求當(dāng)中,對于動態(tài)文件的訪問占比遠(yuǎn)高于對靜態(tài)文件的訪問占比。
(2)算法模型的選擇
本次選擇的分類算法模型是隨機(jī)森林模型。隨機(jī)森林顧名思義,是用隨機(jī)的方式建立一個(gè)森林,森林里面有很多的決策樹組成,隨機(jī)森林的每一棵決策樹之間是沒有關(guān)聯(lián)的;在得到森林之后,當(dāng)有一個(gè)新的輸入樣本進(jìn)入的時(shí)候,就讓森林中的每一棵決策樹分別進(jìn)行一下判斷,看看這個(gè)樣本應(yīng)該屬于哪一類(對于分類算法),然后看看哪一類被選擇最多,就預(yù)測這個(gè)樣本為那一類,隨機(jī)森林算法對于多維特征的數(shù)據(jù)集分類有很高的效率,運(yùn)行效率和準(zhǔn)確率較高,實(shí)現(xiàn)起來也比較簡單。
(3)整體方案流程
為了實(shí)現(xiàn)對已知WebShell行為的檢測,需要從已知的惡意WebShell數(shù)據(jù)當(dāng)中分析提取惡意代碼特征,并結(jié)合公開的WebShell訪問特征碼建立惡意代碼庫,并對HTTP日志數(shù)據(jù)進(jìn)行清洗過濾進(jìn)行計(jì)算,整體方案流程如圖1:

圖1 整體方案流程圖
整體方案分為4個(gè)階段:
1)數(shù)據(jù)清洗階段:數(shù)據(jù)清洗階段負(fù)責(zé)對HTTP日志數(shù)據(jù)進(jìn)行過濾和清洗,將符合篩選條件的HTTP日志按host和訪問單位時(shí)間進(jìn)行匯聚和統(tǒng)計(jì),方便后續(xù)特征提取階段。
2)特征提取階段:依據(jù)上述的兩大類共8個(gè)特征,對經(jīng)過數(shù)據(jù)清洗的HTTP日志進(jìn)行統(tǒng)計(jì)計(jì)算,將得到的特征值傳輸?shù)胶罄m(xù)階段當(dāng)中。
3)模型訓(xùn)練階段:采用已知的WebShell日志記錄及正常的HTTP訪問記錄提取到的特征值放入分類器進(jìn)行訓(xùn)練和調(diào)優(yōu),通過多種常用分類器模型的效果對比,選擇表現(xiàn)較優(yōu)的分類器模型作為最終檢測模型。
4)實(shí)時(shí)檢測階段:將單位時(shí)間內(nèi)的實(shí)時(shí)數(shù)據(jù)提取到的特征值放入訓(xùn)練好的模型進(jìn)行判斷,若檢測出告警,則依據(jù)訪問參數(shù)及IP訪問比例檢出惡意訪問IP,并將檢測結(jié)果進(jìn)行存儲和上報(bào)。
對江蘇省2017年10月某周的7天脫敏后host中包括gov.cn的HTTP日志數(shù)據(jù)來進(jìn)行檢測,數(shù)據(jù)總記錄條數(shù)約為2.23億條。收集的HTTP日志數(shù)據(jù)包括以下的字段,如表2所示:

表2 HTTP日志字段格式表
本方案抽取正常HTTP日志記錄50000條記錄和已知WebShell日志30000條記錄,共計(jì)80000條數(shù)據(jù)作為訓(xùn)練數(shù)據(jù)集;并在整體數(shù)據(jù)庫當(dāng)中隨機(jī)抽取10份數(shù)據(jù)樣本,每一份數(shù)據(jù)樣本包含5000個(gè)正常HTTP訪問記錄和3000個(gè)WebShell記錄,作為測試數(shù)據(jù)集。最后取10份 測試數(shù)據(jù)集的得分平均值,作為評判該模型性能的最終得分。
將訓(xùn)練得到的分類器和基于決策樹C4.5得到的分類器以及基于邏輯回歸的分類器從準(zhǔn)確率、召回率和F1分?jǐn)?shù)三方面進(jìn)行性能比對,如表3所示。
通過對7天共2.23億條host以Gov.cn為結(jié)尾的HTTP日志進(jìn)行檢測,過濾掉平均每分鐘訪問次數(shù)小于10條的非熱門訪問后,對余下的近2千萬條訪問記錄進(jìn)行檢測。共發(fā)現(xiàn)非法訪問行為14萬條,高嫌疑入侵IP七個(gè)。通過數(shù)據(jù)分析發(fā)現(xiàn),通常入侵者是采用程序自動實(shí)現(xiàn)漏洞掃描上傳代碼獲取服務(wù)器信息等工作,平均每分鐘的動態(tài)文件訪問次數(shù)超過3000次,動態(tài)文件訪問占比超過90%。

表3 分類器的性能比對表
通過對WebShell行為的分析,總結(jié)和提取和WebShell在實(shí)現(xiàn)過程呈現(xiàn)的8個(gè)特征,進(jìn)一步結(jié)合機(jī)器學(xué)習(xí)方法及大數(shù)據(jù)平臺實(shí)現(xiàn)了通過HTTP日志數(shù)據(jù)對已知類型和0day類型的WebShell的檢測方法。通過不同分類器模型的對比試驗(yàn)和使用真實(shí)的HTTP日志數(shù)據(jù)檢測的實(shí)驗(yàn)結(jié)果表明,本方法在對于海量的HTTP日志數(shù)據(jù)當(dāng)中發(fā)現(xiàn)WebShell行為具有實(shí)際應(yīng)用價(jià)值,下一步將對檢測出的WebShell行為進(jìn)行深度研判及溯源分析。