您好,登錄后才能下訂單哦!
基于機器學習的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流量。
webshell大致可分為以下三大類:
●一句話
該webshell通過工具菜刀進行連接,可實現的功能包括對文件的增刪修、數據庫的CRUD、命令執行。
●大馬
該webshell文件較大,包含的服務端代碼多。功能強大,除了包含對文件的增刪修、數據庫的CRUD、命令執行。還包括提權,內網掃描、反彈shell等功能。
●小馬
該webshell文件小,代碼量小。包含的功能比較單一,實現的功能為一個或兩個。主要為文件上傳或服務端執行文件下載、命令執行等功能。
在構建數據采集類型時,根據常見的webshell類型并結合執行命令進行劃分,如下所示:
是否需要登陸:
●direct:無需登陸,直接訪問即可。可實現的功能較多;
●login:需要密碼或賬戶進行登陸,又分為登陸前與登陸后(before/latter);
以是否需要登陸劃分完后開始以用戶行為進行劃分即操作類型。
操作類型:
●cmd:命令執行;
●file:文件操作;
●sql:數據庫操作。
流量采集搭建的整體環境:
系統環境為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.1.1 特征挖掘
根據特征工程中,收集到的專家經驗知識,和實際的歷史數據統計分析后,下面開始我們的特征分析。(注:過多技術細節披露較為敏感,因此僅枚舉部分特征進行闡述)
1.基于關鍵詞的特征
對于webshell本身的行為分析 ,它帶有對于系統調用、系統配置、數據庫、文件的操作動作,它的行為方式決定了它的數據流量中多帶參數具有一些明顯的特征,另外再關鍵詞匹配之前先對流量進行decode操作。查閱各類webshell操作方式,以及觀察了所產生的數據流量進行統計分析后,共采集了部分關鍵詞羅列如圖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所示。綜合考量到最小化算法運行時間,和最大化可解釋性,在多個算法檢測效果相似情況下,選擇隨機森林作為實際產品化使用的模型算法。
基于機器學習的webshell檢測整體業務邏輯如下圖6所示,簡述如下:首先,從各種終端設備和第三方庫中導入數據進行特征提取模型訓練;之后,將訓練好的模型部署到生產環境中對真實數據做檢測,對檢出產生告警信息;最后將檢出結果做人工確認,并將誤報數據重新導入訓練庫中定期重訓練模型。
4.2 技術選型
將基于機器學習的Webshell檢測部署到生產環境中,需要考慮大數據規模對模型的時效性、吞吐量等性能指標的影響。經多方考量,最終選用如下圖7所示的組件搭配作為產品化的技術選型。此方案結合了spark大數據處理的高效性,Kafka對數據流動的中高性能低延遲性,Hbase對對大規模數據集的實時讀性訪問性。采用下圖中技術架構,可保證大流量環境中對Webshell的檢測,和機器學習模型的自動優化。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。