幾點基於Web日誌的Webshell檢測思路

1 Web日誌與Webshell的關聯

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

Web日誌的格式雖略有不一樣,但記錄的內容基本一致。這裏以IIS服務器下W3C格式的日誌爲例,如圖1。 html

圖1 日誌示例 正則表達式

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

圖2 日誌文件實例 shell

各字段說明以下。 瀏覽器

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

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

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

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檢測方法的可行性和有效性。
相關文章
相關標籤/搜索