几点基于Web日志的Webshell检测思路
摘要:?Web日志記錄了網(wǎng)站被訪問的情況,在Web安全的應(yīng)用中,Web日志常被用來(lái)進(jìn)行攻擊事件的回溯和取證。Webshell大多由網(wǎng)頁(yè)腳本語(yǔ)言編寫,常被入侵者用作對(duì)網(wǎng)站服務(wù)器操作的后門程序,網(wǎng)站被植入Webshell就說(shuō)明網(wǎng)站已被入侵。Webshell檢測(cè)手段常見的有運(yùn)行后門查殺工具,比如D盾,或者部署防護(hù)軟硬件對(duì)網(wǎng)站流量和本地文件進(jìn)行檢查,代價(jià)較大且對(duì)網(wǎng)站的訪問性能有影響。因此,結(jié)合作者這幾年做服務(wù)器入侵分析的一點(diǎn)經(jīng)驗(yàn),總結(jié)幾點(diǎn)基于Web日志的輕量級(jí)的Webshell檢測(cè)思路,通過(guò)對(duì)服務(wù)器日志文本文件進(jìn)行分析,發(fā)現(xiàn)被植入的Webshell。 本文有點(diǎn)學(xué)術(shù)化,主要是提出幾種簡(jiǎn)單易操作的思路。
1 Web日志與Webshell的關(guān)聯(lián)
Web日志是 Web 服務(wù)器(如IIS、Apache)記錄用戶訪問行為產(chǎn)生的文件,標(biāo)準(zhǔn)的Web日志是純文本格式,每行一條記錄,對(duì)應(yīng)客戶端瀏覽器對(duì)服務(wù)器
資源的一次訪問典型的日志包括來(lái)源地址、訪問日期、訪問時(shí)間、訪問URL等豐富的信息,對(duì)日志數(shù)據(jù)進(jìn)行分析,不僅可以檢測(cè)到可疑的漏洞攻擊行為,還可以提取特定時(shí)間段特定 IP 對(duì)應(yīng)用的訪問行為。
Web日志的格式雖略有不同,但記錄的內(nèi)容基本一致。這里以IIS服務(wù)器下W3C格式的日志為例,如圖1。
?
?
圖1 日志示例
本文實(shí)驗(yàn)數(shù)據(jù)來(lái)自一臺(tái)曾被入侵的IIS服務(wù)器脫敏后的日志文件,日志時(shí)間范圍為2013年6月-2014年6月,該服務(wù)器采用W3C日志格式,默認(rèn)記
錄字段如圖2。
圖2 日志文件實(shí)例
各字段說(shuō)明如下。
date:發(fā)出請(qǐng)求時(shí)候的日期。
time:發(fā)出請(qǐng)求時(shí)候的時(shí)間。
s-sitename:服務(wù)名,記錄當(dāng)記錄事件運(yùn)行于客戶端上的Internet服務(wù)的名稱和實(shí)例的編號(hào)。
s-ip:服務(wù)器的IP地址。
cs-method:請(qǐng)求中使用的HTTP方法,GET/POST。
cs-uri-stem:URI資源,記錄做為操作目標(biāo)的統(tǒng)一資源標(biāo)識(shí)符(URI),即訪問的頁(yè)面文件。
cs-uri-query:URI查詢,記錄客戶嘗試執(zhí)行的查詢,只有動(dòng)態(tài)頁(yè)面需要URI查詢,如果有則記錄,沒有則以連接符-表示。即訪問網(wǎng)址的附帶參數(shù)。
s-port:為服務(wù)配置的服務(wù)器端口號(hào)。
cs-username:用戶名,訪問服務(wù)器的已經(jīng)過(guò)驗(yàn)證用戶的名稱,匿名用戶用連接符-表示。
c-ip:客戶端IP地址。
cs(User-Agent):用戶代理,客戶端瀏覽器、操作系統(tǒng)等情況。
sc-status:協(xié)議狀態(tài),記錄HTTP狀態(tài)代碼,200表示成功,403表示沒有權(quán)限,404表示找不到該頁(yè)面,具體說(shuō)明在下面。
sc-substatus:協(xié)議子狀態(tài),記錄HTTP子狀態(tài)代碼。
sc-win32-status:Win32狀態(tài),記錄Windows狀態(tài)代碼。
通過(guò)Web日志,我們可以知道在某一個(gè)時(shí)刻,某個(gè)訪客訪問了服務(wù)器的某個(gè)文件。經(jīng)過(guò)分析,Webshell的訪問特征通常包括特征文件名、特征參數(shù)
、訪問頻率、是否為孤立頁(yè)面等。說(shuō)明如表1所示。
上述特征皆可通過(guò)對(duì)Web日志條目進(jìn)行特征匹配和訪問頻率統(tǒng)計(jì)得到。
2 檢測(cè)思路的提出
本文對(duì)基于Web日志的Webshell檢測(cè)思路如下,在對(duì)日志文件進(jìn)行預(yù)處理后,分別對(duì)日志記錄進(jìn)行文本特征匹配、統(tǒng)計(jì)特征計(jì)算與文件關(guān)聯(lián)性分析,
最后對(duì)檢測(cè)結(jié)果匯總,列出疑似的Webshell文件。
?2.1日志預(yù)處理
基于檢測(cè)Webshell的目的,需要對(duì)原始的Web日志記錄進(jìn)行提取、分解、過(guò)濾、刪除和合并,再轉(zhuǎn)化成適合進(jìn)行程序處理的格式。
日志預(yù)處理的步驟如下,
1)? 數(shù)據(jù)清理
????? 首先,由于Webshell通常為腳本頁(yè)面,因此可刪除靜態(tài)的網(wǎng)站文件訪問記錄,如文件后綴為html、jpg、ico、css、js等,但需要注意,當(dāng)網(wǎng)站存在文件包含漏洞或服務(wù)器解析漏洞的時(shí)候,需要注意異常文件名或URL,如“bg.asp:.jpg”和“/databackup/1.asp/imges/page_1.html”,此類文件名或URL也能具備Webshell功能,因此需對(duì)此種情況建立特征庫(kù)進(jìn)行排除。其次,刪除日志記錄的多余字段,包括空字段以及和Webshell訪問無(wú)關(guān)的字段,比如s-sitename、sc-substatus和sc-win32-status。最后,需要?jiǎng)h除用戶訪問失敗的記錄,比如sc-status字段值為404,表示該文件不存在,此條記錄可以刪除,盡可能多得排除冗余日志記錄。
2)? 訪客識(shí)別
????? 訪客識(shí)別的目的是從每條日志記錄里把訪客和被訪問頁(yè)面關(guān)聯(lián)起來(lái),通常情況下可以通過(guò)cs-username、c-ip和cs(User-Agent)標(biāo)識(shí)一個(gè)訪客,網(wǎng)站未設(shè)置登錄功能時(shí),可以采用IP和User-Agent來(lái)標(biāo)識(shí)一個(gè)訪客。初步分析時(shí),可以認(rèn)為不同的IP地址代表不同的用戶,其次,在NAT(NetworkAddressTranslation,網(wǎng)絡(luò)地址轉(zhuǎn)換)技術(shù)普遍應(yīng)用的情況下,同一IP下可能存在多個(gè)用戶,這個(gè)時(shí)候可以結(jié)合User-Agent進(jìn)行判斷,User-Agent通常會(huì)因?yàn)椴僮飨到y(tǒng)版本和瀏覽器版本而有所變化。如果IP地址和User-Agent都一樣,也可以通過(guò)分析頁(yè)面訪問的規(guī)律來(lái)分析是否存在多個(gè)訪客。在訪客識(shí)別中,可以注意識(shí)別網(wǎng)絡(luò)爬蟲程序,如cs(User-Agent)字段為“Baiduspider”,可以認(rèn)為是百度爬蟲,在Webshell的檢測(cè)中,這里日志記錄可以排除。
3) 會(huì)話識(shí)別
??? 會(huì)話(session)識(shí)別的目的是為了分析訪客在瀏覽站點(diǎn)期間的一系列活動(dòng),比如訪客首先訪問了什么頁(yè)面,其次訪問了什么頁(yè)面,在某個(gè)頁(yè)面提交了某個(gè)參數(shù)。通過(guò)分析多個(gè)用戶的訪問序列和頁(yè)面停留時(shí)間,可以從日志中統(tǒng)計(jì)頁(yè)面的訪問頻率和判斷孤立頁(yè)面。
2.2文本特征匹配
通過(guò)本地搭建服務(wù)器環(huán)境,對(duì)大量Webshell頁(yè)面進(jìn)行訪問測(cè)試和記錄,建立Web日志的文本特征庫(kù),在所有文本信息中,主要提取Webshell在Web日志訪問中的URI資源(對(duì)應(yīng)字段cs-uri-stem)特征和URI查詢(對(duì)應(yīng)字段cs-uri-query)特征。特征示例如表2。?
???????????? 為了提高匹配覆蓋率,通常將一類靜態(tài)特征歸納成正則表達(dá)式的方式進(jìn)行匹配,例如正則表達(dá)式“0-9]{1,5}\.asp”表示匹配文件名為一到五位阿拉伯?dāng)?shù)字的后綴為asp的文件。除了基本的特征庫(kù)的檢測(cè),為提高Webshell文件的覆蓋面和對(duì)未知Webshell 的檢測(cè)能力,可采用支持向量機(jī)(Support Vector Machine,SVM)機(jī)器學(xué)習(xí)算法,通過(guò)對(duì)正常網(wǎng)站文件的訪問特征集和Webshell文件訪問特征集進(jìn)行訓(xùn)練,來(lái)提高從Web日志中檢測(cè)Webshell的能力。
?2.3基于統(tǒng)計(jì)特征的異常文件檢測(cè)
??????????????? 在統(tǒng)計(jì)特征中,主要考慮網(wǎng)頁(yè)文件的訪問頻率,訪問頻率指的是一個(gè)網(wǎng)頁(yè)文件在單位時(shí)間內(nèi)的訪問次數(shù),通常正常的網(wǎng)站頁(yè)面由于向訪客提供服務(wù)因此受眾較廣,所以訪問頻率相對(duì)較高。而Webshell是由攻擊者植入,通常只有攻擊者清楚訪問路徑,因此訪問頻率相對(duì)較低。值得注意的是,網(wǎng)站開始運(yùn)營(yíng)時(shí)就會(huì)存在一定數(shù)量的正常頁(yè)面,而Webshell通常在一段時(shí)間后才會(huì)出現(xiàn),因此統(tǒng)計(jì)和計(jì)算頁(yè)面訪問頻率的時(shí)候,針對(duì)某一頁(yè)面,要采用該頁(yè)面第一次被訪問到最后一次被訪問的時(shí)間段作為統(tǒng)計(jì)區(qū)間,然后計(jì)算單位時(shí)間內(nèi)的訪問次數(shù),得到訪問頻率。需要說(shuō)明的是,單憑訪問頻率特征,只能找出異常文件,無(wú)法確定一定是Webshell,一些正常頁(yè)面的訪問頻率也會(huì)較低,比如后臺(tái)管理頁(yè)面或者網(wǎng)站建設(shè)初期技術(shù)人員留下的測(cè)試頁(yè)面訪問頻率也較低。這里用f(A) 表示計(jì)算后的網(wǎng)站頁(yè)面A的訪問頻率,Tfirst(A)表示網(wǎng)站頁(yè)面A首次被訪問的時(shí)間,Tend(A) 表示網(wǎng)站頁(yè)面A最后一次被訪問的時(shí)間,COUNTFE(A)表示網(wǎng)站頁(yè)面A在時(shí)間Tfirst(A)到Tend(A)期間的被訪問次數(shù)。因此,網(wǎng)站頁(yè)面A的訪問頻率計(jì)算如下,
時(shí)間單位可根據(jù)需要選擇小時(shí)、天、星期、月等。
?2.4基于文件出入度的文件關(guān)聯(lián)性檢測(cè)
?????????????? 文件關(guān)聯(lián)性主要是指網(wǎng)頁(yè)文件之間是否有交互,即是否通過(guò)超鏈接關(guān)聯(lián)起來(lái)引導(dǎo)用戶訪問。而孤立文件通常是指沒有與其他頁(yè)面存在交互的頁(yè)面,一個(gè)網(wǎng)頁(yè)文件的入度衡量的是訪客是否從其他頁(yè)面跳轉(zhuǎn)到該頁(yè)面,同理,一個(gè)網(wǎng)頁(yè)文件的出度衡量的是訪客是否會(huì)從該頁(yè)面跳轉(zhuǎn)到其他頁(yè)面。正常網(wǎng)站頁(yè)面會(huì)互相鏈接,因此會(huì)有一定的出入度,而Webshell通常與其他網(wǎng)站頁(yè)面沒有超鏈接,通常出入度為0。需要注意的是,什么是孤立,與其他頁(yè)面的交互度為多少算孤立,都是相對(duì)的。而且,有的Webshell也會(huì)有一定的出入度,比如當(dāng)Webshell采用超鏈接列出網(wǎng)站目錄中的文件的時(shí)候,就會(huì)產(chǎn)生與其他頁(yè)面的交互。當(dāng)需要多個(gè)腳本協(xié)同作用的Webshell 也會(huì)產(chǎn)生交互。同樣,單憑文件出入度特征,只能找出異常文件,無(wú)法確定一定是Webshell,一些正常頁(yè)面的出入度也會(huì)較低,比如特意隱藏的獨(dú)立后臺(tái)管理頁(yè)面或者網(wǎng)站建設(shè)初期技術(shù)人員留下的獨(dú)立測(cè)試頁(yè)面出入度也較低。網(wǎng)頁(yè)文件相互鏈接示意圖如圖3所示。
圖3網(wǎng)頁(yè)文件鏈接示意
如上例所示,本文對(duì)上述網(wǎng)頁(yè)文件出入度的統(tǒng)計(jì)如下,
index.asp:出度為2,入度為1;
Article_Show.asp:出度為1,入度為1;
Photo_View.asp:出度為0,入度為1;
test.asp:出度為0,入度為0 ,判斷為孤立文件。
3 檢測(cè)方法可行性驗(yàn)證
?????? 本文的重點(diǎn)在于提出一種從Web日志中檢測(cè)Webshell的思路,找出可行的檢測(cè)方法。本章節(jié)通過(guò)對(duì)實(shí)際的被入侵站點(diǎn)的日志記錄進(jìn)行分析,通過(guò)對(duì)比正常網(wǎng)頁(yè)文件與Webshell在文本特征、統(tǒng)計(jì)特征和文件關(guān)聯(lián)性特征,對(duì)第2章節(jié)提出的檢測(cè)方法進(jìn)行可行性驗(yàn)證。首先要考慮的是對(duì)照組的設(shè)置,也就是正常文件組和Webshell文件組的選取,本文實(shí)驗(yàn)數(shù)據(jù)來(lái)自一臺(tái)曾被入侵的IIS服務(wù)器脫敏后的日志文件與Web目錄文件。首先采用基于本地文件特征的Webshell查殺工具“D盾Webshell查殺工具”,對(duì)測(cè)試的Web目錄文件進(jìn)行檢測(cè),檢測(cè)結(jié)果如圖5所示。
圖5 D盾查殺結(jié)果
???????????? 在“D盾Webshell查殺工具”檢測(cè)結(jié)果的基礎(chǔ)上,結(jié)合人工判斷,最終選取10個(gè)確定的Webshell文件作為Webshell文件組。然后對(duì)正常網(wǎng)頁(yè)文件,根據(jù)對(duì)網(wǎng)站目錄的分析,基于涵蓋不同目錄深度和頁(yè)面功能的考慮下,人工選取10個(gè)文件作為正常文件組。正常文件組和Webshell文件組選取情況如表3所示。?
?3.1文本特征對(duì)比
分別統(tǒng)計(jì)正常文件組和Webshell文件組的URI資源(對(duì)應(yīng)字段cs-uri-stem)特征和URI查詢(對(duì)應(yīng)字段cs-uri-query)特征,看是否有較為明顯的區(qū)別。
如表4所示。
由上圖可以知道,Webshell文件和正常網(wǎng)頁(yè)文件在日志中的訪問特征有較為明顯的區(qū)別,采用模式匹配和機(jī)器學(xué)習(xí)的方式進(jìn)行分類檢測(cè)思路可行,
且便于實(shí)施。
?3.2統(tǒng)計(jì)特征計(jì)算和對(duì)比
分別統(tǒng)計(jì)正常文件組和Webshell文件組的訪問頻率,看是否有較為明顯的區(qū)別。如表5所示。
通過(guò)對(duì)實(shí)驗(yàn)數(shù)據(jù)進(jìn)行分析,可得出如下結(jié)論。
?????? 1) 在目錄深度一致,和起始時(shí)間段較長(zhǎng)的情況下(以大于30天為判斷依據(jù)),正常網(wǎng)頁(yè)文件的訪問頻率明顯高于Webshell文件。
?????? 2) 目錄深度較高的正常網(wǎng)頁(yè)文件,index.asp在三級(jí)目錄下,訪問頻率也會(huì)較低,因此判斷是否為Webshell文件時(shí),要把訪問頻率和目錄深度結(jié)合起來(lái)進(jìn)行考慮。
?????? 3) 單從Webshell文件的訪問頻率來(lái)看,有的數(shù)據(jù)特征呈現(xiàn)訪問頻率較高,仔細(xì)分析日志發(fā)現(xiàn),該類Webshell往往是被攻擊者當(dāng)做一次性后門使用,起始階段只有1天,而且訪客單一,且有時(shí)攻擊者會(huì)對(duì)自己上傳的Webshell文件進(jìn)行自動(dòng)化的利用和掃描,導(dǎo)致較短時(shí)間內(nèi)出現(xiàn)大量訪問行為,呈現(xiàn)高頻訪問,特征,如bg.asp;.jpg。在這種情況下,僅憑借訪問頻率難以判斷。經(jīng)過(guò)分析和思考,為了準(zhǔn)確判斷此類Webshell,需要再結(jié)合文件的起始時(shí)間段和單位時(shí)間的獨(dú)立訪客數(shù)進(jìn)行綜合判斷,當(dāng)某個(gè)網(wǎng)頁(yè)文件的呈現(xiàn)起始時(shí)間段較短,單位時(shí)間獨(dú)立訪客數(shù)較少的特征時(shí),可首先判定為異常文件,再結(jié)合訪問頻率進(jìn)行分析。這樣便能有效解決誤報(bào)問題。通過(guò)測(cè)試數(shù)據(jù)可以看出,在基于Web日志進(jìn)行Webshell檢測(cè)的過(guò)程中,單憑網(wǎng)頁(yè)文件訪問頻率特征,誤報(bào)率較高。需要結(jié)合網(wǎng)頁(yè)文件目錄深度、起始時(shí)間段和單位時(shí)間獨(dú)立訪客數(shù)等特征進(jìn)行綜合判斷。而這3類特征,也可從Web日志中輕易得到。
綜上所述,基于訪問頻率計(jì)算與網(wǎng)頁(yè)文件目錄深度、起始時(shí)間段和單位時(shí)間獨(dú)立訪客數(shù)等特征相結(jié)合的Webshell檢測(cè)方法可行。
?
3.3頁(yè)面關(guān)聯(lián)性分析對(duì)比
分別統(tǒng)計(jì)正常文件組和Webshell文件組文件是否能從Web日志中發(fā)現(xiàn)多次出現(xiàn)的訪問序列,訪問序列反應(yīng)當(dāng)前頁(yè)面與網(wǎng)站其他頁(yè)面的關(guān)聯(lián)性,若無(wú),則判斷為孤立文件。如表6所示。
????????? 實(shí)驗(yàn)數(shù)據(jù)顯示,正常網(wǎng)頁(yè)文件通常存在互相關(guān)聯(lián),而Webshell文件通常不存在文件之前的關(guān)聯(lián),關(guān)聯(lián)性區(qū)分明顯。原因是正常網(wǎng)頁(yè)文件處于網(wǎng)站架構(gòu)設(shè)計(jì)會(huì)互相設(shè)置超鏈接,而Webshell文件往往是攻擊者通過(guò)網(wǎng)站漏洞直接上傳或者通過(guò)已存在的Webshell上傳到站點(diǎn)目錄下的。而通過(guò)對(duì)Web日志進(jìn)行分析發(fā)現(xiàn),Web日志中保留了曾經(jīng)存在過(guò)但是之后被刪除的Webshell的訪問記錄,使得通過(guò)Web日志檢測(cè)Webshell文件更加全面,彌補(bǔ)了本地Webshell文件檢測(cè)無(wú)法追溯歷史攻擊的不足。
???????? 綜上說(shuō)述,通過(guò)從Web日志中分析頁(yè)面關(guān)聯(lián)性來(lái)檢測(cè)異常文件或Webshell的方法可行。
?
4 結(jié)語(yǔ)
??????? 本文首先闡述了Web日志和Webshell的關(guān)聯(lián),然后提出了幾點(diǎn)基于Web日志檢測(cè)Webshell后門程序的檢測(cè)思路,從文本特征、統(tǒng)計(jì)特征和關(guān)聯(lián)性特征三個(gè)維度對(duì)正常網(wǎng)頁(yè)文件和Webshell文件進(jìn)行區(qū)分和判斷,在初期方法設(shè)計(jì)的基礎(chǔ)上,通過(guò)對(duì)實(shí)際的被入侵服務(wù)器的Web日志進(jìn)行實(shí)驗(yàn)和驗(yàn)證,發(fā)現(xiàn)并彌補(bǔ)了方法設(shè)計(jì)的疏漏,證明了上述幾點(diǎn)基于Web日志的Webshell檢測(cè)方法的可行性和有效性。
?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的几点基于Web日志的Webshell检测思路的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 账户逻辑漏洞
- 下一篇: PHP Deprecated: Func