當前位置:
首頁 > 最新 > 基於機器學習的WebShell檢測方法與實現

基於機器學習的WebShell檢測方法與實現

一、概述

Webshell是攻擊者使用的惡意腳本,其目的是升級和維護對已經受到攻擊的WEB應用程序的持久訪問。Webshell本身不能攻擊或利用遠程漏洞,因此它始終是攻擊的第二步。

攻擊者可以利用常見的漏洞,如SQL注入、遠程文件包含(RFI)、FTP,甚至使用跨站點腳本(XSS)作為攻擊的一部分,以上傳惡意腳本。通用功能包括但不限於shell命令執行、代碼執行、資料庫枚舉和文件管理。


1.持續的遠程訪問

Webshell通常包含一個後門,允許攻擊者遠程訪問,並能在任何時候控制伺服器。這樣攻擊者省去了每次訪問攻擊伺服器需要利用漏洞的時間。攻擊者也可能選擇自己修復漏洞,以確保沒有其他人會利用該漏洞。這樣,攻擊者可以保持低調,避免與管理員進行任何交互。值得一提的是,一些流行的Webshell使用密碼驗證和其他技術來確保只有上傳Webshell的攻擊者才能訪問它。這些技術包括將腳本鎖定到特定的自定義HTTP頭、特定的cookie值、特定的IP地址或這些技術的組合。

2.特權升級

除非伺服器配置錯誤,否則webshell將在web伺服器的用戶許可權下運行,該用戶許可權有限的。通過使用webshell,攻擊者可以嘗試通過利用系統上的本地漏洞來執行許可權升級攻擊,以假定根許可權,在Linux和其他基於Unix的操作系統中,根許可權是「超級用戶」。通過訪問根帳戶,攻擊者基本上可以在系統上做任何事情,包括安裝軟體、更改許可權、添加和刪除用戶、竊取密碼、讀取電子郵件等等。

黑客在入侵一個網站後,通常會將asp或php後門文件與網站伺服器web目錄下正常的網頁文件混在一起,然後就可以使用瀏覽器來訪問asp或者php後門,得到一個命令執行環境,以達到控制網站伺服器的目的。Webshell一般有三種檢測方式:基於流量的方式、基於Agent模式、基於日誌分析模式。本文重點研究基於流量的webshell檢測。

整個流程,先是採集webshell數據,然後結合網路安全專家知識對webshell產生的流量和正常流量進行觀察研究、統計分析,挖掘出較好的能區分兩類流量的特徵,然後選用二分類演算法訓練模型,然後評估演算法性能做出參數調整等,最後將模型做工程化落地。文中會依次展開詳細說明。


在真實的環境中webshell樣本缺少,基本在數萬條的http流量中,都難有一條webshell所產生的流量。因此對於機器學習來說,高質量、多數量的的樣本將會是個挑戰。為了解決這個樣本難的棘手問題,我們特意模擬搭建了webshell入侵的環境,按照webshell的種類、攻擊的行為寫好自動化腳本,運行時產生大量webshell流量,使用網路嗅探工具(如Wireshark,Tcpdump等)收集了Webshell流量。 如圖1基本展示了整個數據採集的流程。

( 圖1)


webshell大致可分為以下三大類:

●一句話

該webshell通過工具菜刀進行連接,可實現的功能包括對文件的增刪修、資料庫的CRUD、命令執行。

●大馬

該webshell文件較大,包含的服務端代碼多。功能強大,除了包含對文件的增刪修、資料庫的CRUD、命令執行。還包括提權,內網掃描、反彈shell等功能。

●小馬

該webshell文件小,代碼量小。包含的功能比較單一,實現的功能為一個或兩個。主要為文件上傳或服務端執行文件下載、命令執行等功能。

在構建數據採集類型時,根據常見的webshell類型並結合執行命令進行劃分,如下所示:

是否需要登陸:

●direct:無需登陸,直接訪問即可。可實現的功能較多;

●login:需要密碼或賬戶進行登陸,又分為登陸前與登陸後(before/latter);

以是否需要登陸劃分完後開始以用戶行為進行劃分即操作類型。

操作類型:

●cmd:命令執行;

●file:文件操作;

●sql:資料庫操作。


流量採集搭建的整體環境如下圖2所示:

(圖2)

系統環境為Linux虛擬機,通過建立橋接模式與宿主伺服器完成網路數據交互。各類webshell運行的環境如下:

●PHP:phpstudy

●JSP:jspstudy

●ASP:Ajiu AspWebServer+Mysql

本地主機採用Wireshark對webshell的網路流量進行收集和保存。


●direct:

直接訪問的webshell,採用腳本的方式對其進行批量訪問,產生對webshell訪問的流量數據。對文件的操作、命令執行、資料庫操作的流量,採用手工錄入。

●login:

登陸型webshell,採用腳本進行登陸,運行selenium模塊實現模擬瀏覽器登陸webshell。解決因cookie驗證機制而無法成功登陸webshell的問題。對文件的操作、命令執行、資料庫操作的流量,採用手工錄入。

●cmd:

該webshell的利用方式,採用腳本的方式實現。根據腳本,實現不同系統命令的執行,獲取相應的結果。

●caidao:

菜刀型webshell的界面訪問及登陸採取腳本的方式來批量實現。


流量數據包命名規則為(webshell類型)_(操作),按照具體的類型和操作進行劃分,分開收集。保證流量數據的類型統一。


本地主機採用WireShark進行流量收集。


使用機器學習構建基於流量檢測模型,重要步驟是對webshell流量進行特徵挖掘分析。特徵工程要結合webshell的特點和相關的專家知識去挖掘。先根據webshell的行為特點總結了以下幾條webshell本身自帶的特徵。

(1)存在系統調用的命令執行函數,如eval、system、cmd_shell、assert等;

(2)存在系統調用的文件操作函數,如fopen、fwrite、readdir等;

(3)存在資料庫操作函數,調用系統自身的存儲過程來連接資料庫操作;

(4)具備很深的自身隱藏性、可偽裝性,可長期潛伏到web源碼中;

(5)衍生變種多,可通過自定義加解密函數、利用xor、字元串反轉、壓縮、截斷重組等方法來繞過檢測;

(6)訪問IP少,訪問次數少,頁面孤立,傳統防火牆無法進行攔截,無系統操作日誌;

(7)產生payload流量,在web日誌中有記錄產生。

流量檢測是為了區分正常訪問與webshell,因此也簡單的陳列下webshell與正常業務的網頁有何區別,如圖3所示:

(圖3)

3.1.1 特徵挖掘

根據特徵工程中,收集到的專家經驗知識,和實際的歷史數據統計分析後,下面開始我們的特徵分析。(註:過多技術細節披露較為敏感,因此僅枚舉部分特徵進行闡述)

基於關鍵詞的特徵

對於webshell本身的行為分析 ,它帶有對於系統調用、系統配置、資料庫、文件的操作動作,它的行為方式決定了它的數據流量中多帶參數具有一些明顯的特徵,另外再關鍵詞匹配之前先對流量進行decode操作。查閱各類webshell操作方式,以及觀察了所產生的數據流量進行統計分析後,共採集了部分關鍵詞羅列如圖4。經統計發現這些關鍵詞在正負樣本中出現的佔比十分懸殊,因此作為特徵是非常合適的。以下是正負樣本中關鍵詞出現次數的對比條形圖(如圖4),可以顯示出分布差異。

(圖4)

2.流量中get/post參數個數

經觀察發現,一般來說webshell get/post的參數個數比較少,可作為一個特徵。

3.流量中get/post的信息熵

一般請求都會向伺服器提交數據,webshell也不例外。但是,如果提交的數據經過加密或者編碼處理了,其熵就會變大。對於正常的web業務系統來說,如果向某一URI提交數據的熵明顯偏大於其他頁面,那麼該URI對應的源碼文件就比較可疑了。而一般做了加密通信的webshell提交數據的熵值會偏大,所以就可以檢測出來。例如如下對比:

正常頁面:」pid=12673&aut=false&type=low」

Webshell: 」ac=ferf234cDV3T234jyrFR3yu4F3rtDW2R354」

4.基於cookie的特徵提取

在正常的http訪問中,因為http訪問是無狀態的協議,伺服器也不會自動維護客戶的上下文信息,於是採用session來保存上下文信息。session是存儲在伺服器端的,為了降低伺服器存儲的成本於是當有http請求時,伺服器會返回一個cookie來記錄sessionID並保存在瀏覽器本地,下一次訪問時request中會攜帶cookie。cookie的內容主要包括:名字,值,過期時間,路徑和域。路徑與域一起構成cookie的作用範圍。據觀察分析,webShell所產生的cookie有的為空,有的雖然有鍵值對的結構但是基本數量非常少,且命名沒有實際的含義。所以提取這一特徵用來區分webShell和正常網站訪問。

另外從cookie角度思考,可以發現webshell的鍵值對會比較混亂,不像正常流量中的那麼有規律或是參數有實際可讀含義的。如下選取了一條webshell的Cookie,可以發現鍵值對的值比較混亂。因此選取鍵值對的熵值作為特徵。

Cookie:KCNLMSXUMLVECYYYBRTQ=DFCXBTJMTFLRLRAJHTQLDNOXSKXPZEIXJUFVNNTA

5.返回網頁結構相似度值

黑客在進行webshell提權攻擊的時候,通常是用已經有的webshell工具,比如拿大馬進行直接使用或者稍作修改。因此很多返回的頁面具有結構相似性,可以提取網頁結構相似度這一特徵進行比對。設計思路為,與已經採集的webshell產生的網頁結構相似度進行對比,用返回網頁結構相似度作為一個特徵。

6.網頁路徑層數

黑客在成功入侵一個網站,植入webshell網頁,通常需要這些後門軟體具有隱蔽性,因此網頁路徑會比較深,網頁藏匿的比較深,不易被正常瀏覽者發現。

7.訪問時間段

webshell和正常業務相比,瀏覽的時間是有差異的,黑客通常會選擇在正常流量稀少的時間進行訪問。因此抽出時間特徵作為一個維度。按照時間大類特徵,可以展開幾下幾種小類特徵, 一天中哪個時間段(hour_0-23) ,一周中星期幾(week_monday…),一年中哪個星期,一年中哪個季度,工作日、周末。

8.有無referer

在流量中,如果網頁沒有跳轉過來的上一頁網頁,那麼referer參數將為空。一般的小馬和一句話webshell鮮有跳轉關係,大馬登陸的首頁也和上一頁網頁沒有跳轉關係,因此選此特徵作為一種輔助判斷。

3.1.2 特徵提取

綜上分析,共提取了關鍵詞、網頁路徑結構層次數、cookie鍵值對數、返回網頁結構相似度、POST/GET熵值、cookie鍵值對熵值等多個特徵(註:過多技術細節披露較為敏感,因此僅枚舉部分特徵進行闡述)。並使用數據採集階段生成的數據作為數據源,生成機器學習模型特徵,之後將特徵做歸一化處理。其中正常流量60349條,webshell流量51070條。


選取了adboost、SVM、隨機森林、邏輯回歸四種演算法進模型訓練,其中正常流量60349條,webshell流量51070條。各模型訓練效果對比如下圖5所示。綜合考量到最小化演算法運行時間,和最大化可解釋性,在多個演算法檢測效果相似情況下,選擇隨機森林作為實際產品化使用的模型演算法。

(圖5)


基於機器學習的webshell檢測整體業務邏輯如下圖6所示,簡述如下:首先,從各種終端設備和第三方庫中導入數據進行特徵提取模型訓練;之後,將訓練好的模型部署到生產環境中對真實數據做檢測,對檢出產生告警信息;最後將檢出結果做人工確認,並將誤報數據重新導入訓練庫中定期重訓練模型。

(圖6)

4.2 技術選型

將基於機器學習的Webshell檢測部署到生產環境中,需要考慮大數據規模對模型的時效性、吞吐量等性能指標的影響。經多方考量,最終選用如下圖7所示的組件搭配作為產品化的技術選型。此方案結合了spark大數據處理的高效性,Kafka對數據流動的中高性能低延遲性,Hbase對對大規模數據集的實時讀性訪問性。採用下圖中技術架構,可保證大流量環境中對Webshell的檢測,和機器學習模型的自動優化。

(圖7)


本文介紹了基於機器學習檢測webshell的方法和落地實施中的一些技術組件選型。首先,基於機器學習的webshell檢測重點是需要結合安全專家知識設計提取出高效的模型特徵,只有較好的特徵構建才能保證模型在真實環境中的檢出效果。其次,對於機器學習模型訓練階段,數據一直是最重要的,而網路安全領域數據稀缺是普遍現象,我們在文中介紹了如何自動化構建webshell異常數據,保證模型的訓練數據量。最後,通過對比驗證了各演算法的檢測效果,並引入了人工審核確認流程保證在產品化階段可以對模型定期優化,提高檢測準確度。

在現有的樣本中,採取以上提到的特徵已經獲得了比較優秀的準確度。但除了上述方法,僅依據一條流量做特徵提取並進行結果預測,難免存在誤報情況。因此我們除了對單一一條流量信息特徵進行檢測,另外引入了需要一定量的數據積累統計後才能體現的特徵,以下先羅列部分:

● 對單個網頁的訪問頻率;

● 單個訪問網頁User-agent的差異性;

● 單個網頁在整個網頁圖結構中的出入度統計;

● 單個網頁結構與整體網頁結構的相似度對比;

這些特徵能從另一個視角體現webshell的特徵,但是對於單條數據並不能很好地體現。因此需要一定量和一定時間段的積累流量進行統計分析。基於階段統計信息融入到wehshell檢測模型特徵中,進行聯合分析,將會在下篇中我們會具體講解如何使用上述的幾個特徵,從樣本採集、工程設計、特徵工程、模型訓練等幾個方面具體闡述。敬請期待。也期待與大家進行技術交流。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

關於商業部署機器學習,這有一篇詳盡指南
CMU教授炮轟谷歌:一切都是商業計劃,機器學習原理停留在20年前!

TAG:機器學習 |