幾點基于Web日志的Webshell檢測思路

peijian19 8年前發布 | 21K 次閱讀 Web服務器

來自: http://my.oschina.net/bluefly/blog/626132


1 Web日志與Webshell的關聯

Web日志是 Web 服務器(如IIS、Apache)記錄用戶訪問行為產生的文件,標準的 Web 日志是純文本格式,每行一條記錄,對應客戶端瀏覽器對服務器資源的一次訪問典型的日志包括來源地址、訪問日期、訪問時間、訪問 URL 等豐富的信息,對日志數據進行分析,不僅可以檢測到可疑的漏洞攻擊行為,還可以提取特定時間段特定 IP 對應用的訪問行為。

Web日志的格式雖略有不同,但記錄的內容基本一致。這里以IIS服務器下W3C格式的日志為例,如圖1。

圖1 日志示例

本文實驗數據來自一臺曾被入侵的IIS服務器脫敏后的日志文件,日志時間范圍為2013年6月-2014年6月,該服務器采用W3C日志格式,默認記錄字段如圖2。

圖2 日志文件實例

各字段說明如下。

date:發出請求時候的日期。

time:發出請求時候的時間。

s-sitename:服務名,記錄當記錄事件運行于客戶端上的Internet服務的名稱和實例的編號。

s-ip:服務器的IP地址。

cs-method:請求中使用的HTTP方法,GET/POST。

cs-uri-stem:URI資源,記錄做為操作目標的統一資源標識符(URI),即訪問的頁面文件。

cs-uri-query:URI查詢,記錄客戶嘗試執行的查詢,只有動態頁面需要URI查詢,如果有則記錄,沒有則以連接符-表示。即訪問網址的附帶參數。

s-port:為服務配置的服務器端口號。

cs-username:用戶名,訪問服務器的已經過驗證用戶的名稱,匿名用戶用連接符-表示。

c-ip:客戶端IP地址。

cs(User-Agent):用戶代理,客戶端瀏覽器、操作系統等情況。

sc-status:協議狀態,記錄HTTP狀態代碼,200表示成功,403表示沒有權限,404表示找不到該頁面,具體說明在下面。

sc-substatus:協議子狀態,記錄HTTP子狀態代碼。

sc-win32-status:Win32狀態,記錄Windows狀態代碼。

通過Web日志,我們可以知道在某一個時刻,某個訪客訪問了服務器的某個文件。經過分析,Webshell的訪問特征通常包括特征文件名、特征參數、訪問頻率、是否為孤立頁面等。說明如表1所示。


上述特征皆可通過對Web日志條目進行特征匹配和訪問頻率統計得到。

2 檢測思路的提出

本文對基于Web日志的Webshell檢測思路如下,在對日志文件進行預處理后,分別對日志記錄進行文本特征匹配、統計特征計算與文件關聯性分析,最后對檢測結果匯總,列出疑似的Webshell文件。

2.1日志預處理

基于檢測Webshell的目的,需要對原始的Web日志記錄進行提取、分解、過濾、刪除和合并,再轉化成適合進行程序處理的格式。

日志預處理的步驟如下,

1)        數據清理

首先,由于Webshell通常為腳本頁面,因此可刪除靜態的網站文件訪問記錄,如文件后綴為html、jpg、ico、css、js等,但需要注意,當網站存在文件包含漏洞或服務器解析漏洞的時候,需要注意異常文件名或URL,如“bg.asp:.jpg”和“/databackup/1.asp/imges/page_1.html”,此類文件名或URL也能具備Webshell功能,因此需對此種情況建立特征庫進行排除。

其次,刪除日志記錄的多余字段,包括空字段以及和Webshell訪問無關的字段,比如s-sitename、sc-substatus和sc-win32-status。

最后,需要刪除用戶訪問失敗的記錄,比如sc-status字段值為404,表示該文件不存在,此條記錄可以刪除,盡可能多得排除冗余日志記錄。

2)        訪客識別

訪客識別的目的是從每條日志記錄里把訪客和被訪問頁面關聯起來,通常情況下可以通過cs-username、c-ip和cs(User-Agent)標識一個訪客,網站未設置登錄功能時,可以采用IP和User-Agent來標識一個訪客。初步分析時,可以認為不同的IP地址代表不同的用戶,其次,在NAT(Network Address Translation,網絡地址轉換)技術普遍應用的情況下,同一IP下可能存在多個用戶,這個時候可以結合User-Agent進行判斷,User-Agent通常會因為操作系統版本和瀏覽器版本而有所變化。如果IP地址和User-Agent都一樣,也可以通過分析頁面訪問的規律來分析是否存在多個訪客。在訪客識別中,可以注意識別網絡爬蟲程序,如cs(User-Agent)字段為“Baiduspider”,可以認為是百度爬蟲,在Webshell的檢測中,這里日志記錄可以排除。

3)        會話識別

會話(session)識別的目的是為了分析訪客在瀏覽站點期間的一系列活動,比如訪客首先訪問了什么頁面,其次訪問了什么頁面,在某個頁面提交了某個參數。通過分析多個用戶的訪問序列和頁面停留時間,可以從日志中統計頁面的訪問頻率和判斷孤立頁面。

2.2文本特征匹配

通過本地搭建服務器環境,對大量Webshell頁面進行訪問測試和記錄,建立Web日志的文本特征庫

在所有文本信息中,主要提取Webshell在Web日志訪問中的URI資源(對應字段cs-uri-stem)特征和URI查詢(對應字段cs-uri-query)特征。特征示例如表2。


為了提高匹配覆蓋率,通常將一類靜態特征歸納成正則表達式的方式進行匹配,例如正則表達式“[0-9]{1,5}\.asp”表示匹配文件名為一到五位阿拉伯數字的后綴為asp的文件。

除了基本的特征庫的檢測,為提高Webshell文件的覆蓋面和對未知Webshell 的檢測能力,可采用支持向量機(Support Vector Machine,SVM)機器學習算法,通過對正常網站文件的訪問特征集和Webshell文件訪問特征集進行訓練,來提高從Web日志中檢測Webshell的能力。

2.3基于統計特征的異常文件檢測

在統計特征中,主要考慮網頁文件的訪問頻率,訪問頻率指的是一個網頁文件在單位時間內的訪問次數,通常正常的網站頁面由于向訪客提供服務因此受眾較廣,所以訪問頻率相對較高。而Webshell是由攻擊者植入,通常只有攻擊者清楚訪問路徑,因此訪問頻率相對較低。

值得注意的是,網站開始運營時就會存在一定數量的正常頁面,而Webshell通常在一段時間后才會出現,因此統計和計算頁面訪問頻率的時候,針對某一頁面,要采用該頁面第一次被訪問到最后一次被訪問的時間段作為統計區間,然后計算單位時間內的訪問次數,得到訪問頻率。需要說明的是,單憑訪問頻率特征,只能找出異常文件,無法確定一定是Webshell,一些正常頁面的訪問頻率也會較低,比如后臺管理頁面或者網站建設初期技術人員留下的測試頁面訪問頻率也較低。

這里用f(A) 表示計算后的網站頁面A的訪問頻率,Tfirst(A)表示網站頁面A首次被訪問的時間,Tend(A) 表示網站頁面A最后一次被訪問的時間,COUNTFE(A)表示網站頁面A在時間Tfirst(A)到Tend(A)期間的被訪問次數。

因此,網站頁面A的訪問頻率計算如下,

時間單位可根據需要選擇小時、天、星期、月等。

2.4基于文件出入度的文件關聯性檢測

文件關聯性主要是指網頁文件之間是否有交互,即是否通過超鏈接關聯起來引導用戶訪問。而孤立文件通常是指沒有與其他頁面存在交互的頁面,一個網頁文件的入度衡量的是訪客是否從其他頁面跳轉到該頁面,同理,一個網頁文件的出度衡量的是訪客是否會從該頁面跳轉到其他頁面。正常網站頁面會互相鏈接,因此會有一定的出入度,而Webshell通常與其他網站頁面沒有超鏈接,通常出入度為0。

需要注意的是,什么是孤立,與其他頁面的交互度為多少算孤立,都是相對的。而且,有的Webshell也會有一定的出入度,比如當Webshell采用超鏈接列出網站目錄中的文件的時候,就會產生與其他頁面的交互。當需要多個腳本協同作用的Webshell 也會產生交互。同樣,單憑文件出入度特征,只能找出異常文件,無法確定一定是Webshell,一些正常頁面的出入度也會較低,比如特意隱藏的獨立后臺管理頁面或者網站建設初期技術人員留下的獨立測試頁面出入度也較低。

網頁文件相互鏈接示意圖如圖3所示。

圖3網頁文件鏈接示意

如上例所示,本文對上述網頁文件出入度的統計如下,

index.asp:出度為2,入度為1;

Article_Show.asp:出度為1,入度為1;

Photo_View.asp:出度為0,入度為1;

test.asp:出度為0,入度為0 ,判斷為孤立文件。

3 檢測方法可行性驗證

本文的重點在于提出一種從Web日志中檢測Webshell的思路,找出可行的檢測方法。本章節通過對實際的被入侵站點的日志記錄進行分析,通過對比正常網頁文件與Webshell在文本特征、統計特征和文件關聯性特征,對第2章節提出的檢測方法進行可行性驗證。

首先要考慮的是對照組的設置,也就是正常文件組和Webshell文件組的選取,本文實驗數據來自一臺曾被入侵的IIS服務器脫敏后的日志文件與Web目錄文件。首先采用基于本地文件特征的Webshell查殺工具“D盾Webshell查殺工具”,對測試的Web目錄文件進行檢測,檢測結果如圖5所示。

圖5 D盾查殺結果

在“D盾Webshell查殺工具”檢測結果的基礎上,結合人工判斷,最終選取10個確定的Webshell文件作為Webshell文件組。

然后對正常網頁文件,根據對網站目錄的分析,基于涵蓋不同目錄深度和頁面功能的考慮下,人工選取10個文件作為正常文件組。

正常文件組和Webshell文件組選取情況如表3所示。


3.1文本特征對比

分別統計正常文件組和Webshell文件組的URI資源(對應字段cs-uri-stem)特征和URI查詢(對應字段cs-uri-query)特征,看是否有較為明顯的區別。如表4所示。


由上圖可以知道,Webshell文件和正常網頁文件在日志中的訪問特征有較為明顯的區別,采用模式匹配和機器學習的方式進行分類檢測思路可行,且便于實施。

3.2統計特征計算和對比

分別統計正常文件組和Webshell文件組的訪問頻率,看是否有較為明顯的區別。如表5所示。

通過對實驗數據進行分析,可得出如下結論。

1)        在目錄深度一致,和起始時間段較長的情況下(以大于30天為判斷依據),正常網頁文件的訪問頻率明顯高于Webshell文件。

2)        目錄深度較高的正常網頁文件,/bbs/zW7/index.asp在三級目錄下,訪問頻率也會較低,因此判斷是否為Webshell文件時,要把訪問頻率和目錄深度結合起來進行考慮。

3)        單從Webshell文件的訪問頻率來看,有的數據特征呈現訪問頻率較高,仔細分析日志發現,該類Webshell往往是被攻擊者當做一次性后門使用,起始階段只有1天,而且訪客單一,且有時攻擊者會對自己上傳的Webshell文件進行自動化的利用和掃描,導致較短時間內出現大量訪問行為,呈現高頻訪問特征,如bg.asp;.jpg。在這種情況下,僅憑借訪問頻率難以判斷。經過分析和思考,為了準確判斷此類Webshell,需要再結合文件的起始時間段和單位時間的獨立訪客數進行綜合判斷,當某個網頁文件的呈現起始時間段較短,單位時間獨立訪客數較少的特征時,可首先判定為異常文件,再結合訪問頻率進行分析。這樣便能有效解決誤報問題。

通過測試數據可以看出,在基于Web日志進行Webshell檢測的過程中,單憑網頁文件訪問頻率特征,誤報率較高。需要結合網頁文件目錄深度、起始時間段和單位時間獨立訪客數等特征進行綜合判斷。而這3類特征,也可從Web日志中輕易得到。

綜上所述,基于訪問頻率計算與網頁文件目錄深度、起始時間段和單位時間獨立訪客數等特征相結合的Webshell檢測方法可行。

3.3頁面關聯性分析對比

分別統計正常文件組和Webshell文件組文件是否能從Web日志中發現多次出現的訪問序列,訪問序列反應當前頁面與網站其他頁面的關聯性,若無,則判斷為孤立文件。如表6所示。

實驗數據顯示,正常網頁文件通常存在互相關聯,而Webshell文件通常不存在文件之前的關聯,關聯性區分明顯。原因是正常網頁文件處于網站架構設計會互相設置超鏈接,而Webshell文件往往是攻擊者通過網站漏洞直接上傳或者通過已存在的Webshell上傳到站點目錄下的。

而通過對Web日志進行分析發現,Web日志中保留了曾經存在過但是之后被刪除的Webshell的訪問記錄,使得通過Web日志檢測Webshell文件更加全面,彌補了本地Webshell文件檢測無法追溯歷史攻擊的不足。

綜上說述,通過從Web日志中分析頁面關聯性來檢測異常文件或Webshell的方法可行。

4 結語

本文首先闡述了Web日志和Webshell的關聯,然后提出了幾點基于Web日志檢測Webshell后門程序的檢測思路,從文本特征、統計特征和關聯性特征三個維度對正常網頁文件和Webshell文件進行區分和判斷,在初期方法設計的基礎上,通過對實際的被入侵服務器的Web日志進行實驗和驗證,發現并彌補了方法設計的疏漏,證明了上述幾點基于Web日志的Webshell檢測方法的可行性和有效性。

 本文由用戶 peijian19 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!