webshell 是 Web 攻擊中常見(jiàn)的一種木馬形式,目前主流的檢測(cè)方法都是基于 HTTP 請(qǐng)求和響應(yīng)流量的內(nèi)容特征,然而在 HTTPS 協(xié)議下,很多 webshell 檢測(cè)機(jī)制是無(wú)能為力的。冰蝎這類加密型 webshell 的出現(xiàn)更是增加了檢測(cè)難度,尤其是冰蝎3.0版本采用預(yù)共享密鑰機(jī)制,即使在 HTTP 場(chǎng)景中的檢測(cè)也是有一定難度的。
本文通過(guò)提取網(wǎng)絡(luò)流量中的若干特征,主要針對(duì)訪問(wèn)同一 HTTPS 網(wǎng)站的正常加密流量和 webshell 加密流量的分類進(jìn)行了探索,實(shí)現(xiàn)了在 HTTPS 加密流量中 webshell 通信流量的識(shí)別,無(wú)論對(duì)于冰蝎2.0還是3.0升級(jí)版,都能夠達(dá)到很好的識(shí)別效果。
一、背景
由于 Web 服務(wù)具有很強(qiáng)的便利性,已經(jīng)被越來(lái)越多地用于提供信息服務(wù),然而其中的數(shù)據(jù)和用戶信息也成為了很多不法分子獲利的目標(biāo)。webshell 是一種基于 Web 服務(wù)的后門(mén)程序,提供了對(duì)各種關(guān)鍵功能的遠(yuǎn)程訪問(wèn),例如執(zhí)行任意命令、遍歷文件目錄、查看和修改任意文件、提升訪問(wèn)權(quán)限等。所以如何有效地識(shí)別出 webshell 文件或通信是一個(gè)亟待解決的問(wèn)題。
目前較為成熟的 webshell 檢測(cè)方法一般有三種:日志檢測(cè)、文件檢測(cè)和流量檢測(cè),主流的檢測(cè)方式都必須由人工構(gòu)建字符特征作為輸入?yún)?shù),然而攻擊者可以通過(guò)對(duì) webshell 代碼進(jìn)行變形從而達(dá)到繞過(guò)檢測(cè)的目的,并且隨著越來(lái)越流行的加密型 webshell 的出現(xiàn)和 HTTPS 加密流量的廣泛使用,無(wú)疑給 webshell 檢測(cè)帶來(lái)了更大的挑戰(zhàn)。
本文利用流量檢測(cè)的方式并基于統(tǒng)計(jì)特征,聚焦于在 HTTPS 加密流量中識(shí)別出包含冰蝎在內(nèi)的 webshell 通信流量,分別從數(shù)據(jù)采集、特征提取、模型訓(xùn)練和預(yù)測(cè)、特征重要性分析等方面展開(kāi)闡述。
二、冰蝎3.0
冰蝎是目前比較流行的加密型 webshell 客戶端,它可以在通信過(guò)程中建立加密隧道,以躲避安全設(shè)備的檢測(cè)。近期發(fā)布的3.0版本,對(duì)通信流量產(chǎn)生影響的主要是密鑰交換方式的改變,其余都是一些功能上的改進(jìn)。除了對(duì)一些 bug 的修復(fù),涉及到流量變化的修改具體是:
去除動(dòng)態(tài)密鑰協(xié)商機(jī)制,采用預(yù)共享密鑰,全程無(wú)明文交互;
請(qǐng)求體增加了隨機(jī)冗余參數(shù),避免防護(hù)設(shè)備通過(guò)請(qǐng)求體大小識(shí)別請(qǐng)求。
三、webshell 加密流量檢測(cè)
1. 數(shù)據(jù)集
為了采集流量數(shù)據(jù),我們自建了一個(gè)網(wǎng)站,并且安裝使用了自簽名證書(shū),使得訪問(wèn)該網(wǎng)站的流量都是 TLS 加密的。所以無(wú)論是常見(jiàn)的非加密型 webshell 還是冰蝎這類加密型 webshell,訪問(wèn)該網(wǎng)站產(chǎn)生的都是 HTTPS 流量。
我們目前共收集了訪問(wèn)該網(wǎng)站的具有代表性的6種類型的流量數(shù)據(jù),分別是正常訪問(wèn)的流量、兩類頁(yè)面性 webshell 的流量和三類客戶端型 webshell 的流量,其中客戶端型包括使用量最大的中國(guó)菜刀和對(duì)流量進(jìn)行加密的冰蝎,近期也特別收集了新發(fā)布的冰蝎3.0的流量。
由于本文旨在研究訪問(wèn)同一 HTTPS 網(wǎng)站的正常加密流量和 webshell 加密流量的分類,所以將所有數(shù)據(jù)分為正常和 webshell 兩種類型,分別標(biāo)記為0和1。每種數(shù)據(jù)的標(biāo)簽和數(shù)量如表3.1所示,這里數(shù)據(jù)量的單位是數(shù)據(jù)包利用 Joy 解析之后雙向網(wǎng)絡(luò)流的數(shù)量。
表3.1 數(shù)據(jù)集的標(biāo)簽和數(shù)量統(tǒng)計(jì)列表
標(biāo)簽流量類型webshell 類型雙向流數(shù)
0正常非 webshell64
1頁(yè)面型頁(yè)面型No.126
1頁(yè)面型頁(yè)面型No.216
1客戶端型中國(guó)菜刀201622
1客戶端型冰蝎2.022
1客戶端型冰蝎3.024
2. 特征提取
調(diào)用 Joy 對(duì)數(shù)據(jù)包進(jìn)行解析,得到 json 格式的解析結(jié)果,經(jīng)過(guò)處理后提取出五種主要的數(shù)據(jù)元素,包含六百多維特征,分別是:
(1)數(shù)據(jù)流元特征
(2)數(shù)據(jù)包包長(zhǎng)序列
(3)數(shù)據(jù)包時(shí)間間隔特征
(4)數(shù)據(jù)包字節(jié)分布特征
(5)數(shù)據(jù)包 TLS 特征
據(jù)觀察,對(duì)訪問(wèn)同一 HTTPS 網(wǎng)站的 webshell 流量和正常流量作對(duì)比,具有如下表3.2中所列的幾個(gè)特點(diǎn)。
表3.2 訪問(wèn)同一 HTTPS 網(wǎng)站的 webshell 流量和正常流量對(duì)比
特征區(qū)別
TLS 特征完全相同
入流的包數(shù)量正常加密流量通常較多,而 webshell 一般較少
總熵正常加密流量一般會(huì)大 webshell 一個(gè)數(shù)量級(jí)
關(guān)于熵值,如果數(shù)據(jù)經(jīng)過(guò)加密或編碼處理,那么它的熵值就會(huì)變大,所以 webshell 在熵值特征上與正常流量的區(qū)別符合常理。
3. 模型訓(xùn)練和測(cè)試
使用 LightGBM 作為 webshell 流量識(shí)別分類模型,一些重要參數(shù)的設(shè)計(jì)如下:
learning_rate = 0.1
n_estimators = 200
colsample_bytree = 0.9
num_leaves = 7
subsample = 0.9
(1)在冰蝎3.0發(fā)布之前,我們已經(jīng)收集了表3.1中除冰蝎3.0之外的所有數(shù)據(jù),并做了一些研究,分別進(jìn)行了下面三個(gè)小實(shí)驗(yàn)。
實(shí)驗(yàn)一:使用所有流量,隨機(jī)選出20%作為測(cè)試集,剩余的隨機(jī)選出20%作為驗(yàn)證集,其他80%作為訓(xùn)練集,整體準(zhǔn)確率較高,實(shí)驗(yàn)結(jié)果顯示,測(cè)試集中只有一條流被分類錯(cuò)誤,準(zhǔn)確率為96.9%。
實(shí)驗(yàn)二:由于數(shù)據(jù)量較少很可能導(dǎo)致過(guò)擬合,所以進(jìn)行了交叉驗(yàn)證,預(yù)留出頁(yè)面型No.2的數(shù)據(jù)作為測(cè)試集,使用其余的數(shù)據(jù)作為訓(xùn)練集和驗(yàn)證集,實(shí)驗(yàn)結(jié)果顯示,16條數(shù)據(jù)流中預(yù)測(cè)正確的是15條,準(zhǔn)確率是93.7%。
實(shí)驗(yàn)三:由于冰蝎2.0是當(dāng)時(shí)數(shù)據(jù)集中唯一的加密型 webshell,所以單獨(dú)預(yù)留出冰蝎2.0的數(shù)據(jù)作為測(cè)試集,使用其余的數(shù)據(jù)作為訓(xùn)練集和驗(yàn)證集,實(shí)驗(yàn)結(jié)果顯示,22條數(shù)據(jù)流中預(yù)測(cè)正確的是18條,準(zhǔn)確率是81.8%。
從實(shí)驗(yàn)一和實(shí)驗(yàn)二可以看出,模型經(jīng)過(guò)訓(xùn)練之后,對(duì)訪問(wèn)同一 HTTPS 網(wǎng)站的正常流量和 webshell 流量具有較好的識(shí)別能力。實(shí)驗(yàn)三則證明了 webshell 本身是否是加密類型對(duì)模型的識(shí)別能力沒(méi)有任何影響,即使在加密型 webshell 并不存在于訓(xùn)練集中的情況下,模型依然能識(shí)別出冰蝎的流量。
(2)最近冰蝎發(fā)布3.0版本,雖然功能上的改進(jìn)對(duì)流量識(shí)別影響不大,但是我們想看看密鑰交換方式的改變對(duì)流量識(shí)別的影響,所以在前面實(shí)驗(yàn)的基礎(chǔ)上繼續(xù)研究。我們新收集了3.0版本的冰蝎訪問(wèn)自建 HTTPS 網(wǎng)站的流量,由于網(wǎng)站的 TLS 證書(shū)已經(jīng)發(fā)生變化,為了避免 TLS 相關(guān)特征對(duì)實(shí)驗(yàn)結(jié)果的影響,以下實(shí)驗(yàn)只使用了前四種數(shù)據(jù)元素,包含四百多維特征。
實(shí)驗(yàn)四:使用之前的所有數(shù)據(jù)進(jìn)行訓(xùn)練和驗(yàn)證,將冰蝎3.0流量作為測(cè)試集輸入訓(xùn)練好的模型中進(jìn)行測(cè)試,實(shí)驗(yàn)結(jié)果顯示,24條數(shù)據(jù)流中預(yù)測(cè)正確的是23條,準(zhǔn)確率是95.8%。
實(shí)驗(yàn)五:因?yàn)橹暗臄?shù)據(jù)中有冰蝎2.0產(chǎn)生的流量,為了避免不同版本冰蝎的相似性對(duì)實(shí)驗(yàn)結(jié)果造成的影響,去掉訓(xùn)練集中的冰蝎2.0數(shù)據(jù),讓訓(xùn)練集中不包含任何加密型 webshell 流量,還是使用冰蝎3.0的流量作為測(cè)試集,實(shí)驗(yàn)結(jié)果顯示,24條數(shù)據(jù)流中預(yù)測(cè)正確的是23條,準(zhǔn)確率是95.8%。
從實(shí)驗(yàn)四可以看出,在模型對(duì)訪問(wèn)同一 HTTPS 網(wǎng)站的正常流量和 webshell 流量具有識(shí)別能力的情況下,模型依然能夠識(shí)別新版本的冰蝎流量,也就是冰蝎3.0流量的出現(xiàn)并沒(méi)有影響模型的識(shí)別能力。實(shí)驗(yàn)五則證明了和實(shí)驗(yàn)三相同的結(jié)論,即 webshell 本身是否是加密類型對(duì)模型的識(shí)別能力沒(méi)有任何影響。
4. 特征重要性分析
如圖3.1所示,分別順序展示了五個(gè)實(shí)驗(yàn)的重要程度較高的10個(gè)特征,column 列表示特征所在的維度,importance 列表示特征重要程度,數(shù)值越大,重要程度越高,按降序排列。
圖3.1 五個(gè)實(shí)驗(yàn)的特征重要性
表3.1中觀察到的后兩個(gè)特征入流的包數(shù)量和總熵分別是第0維和第8維特征,由圖3.1可以看出,兩者都發(fā)揮了比較重要的作用,而 TLS 特征并沒(méi)有發(fā)揮任何作用,符合觀察到的特點(diǎn)。另外,雖然每次模型訓(xùn)練使用到的特征重要性不盡相同,但也可以發(fā)現(xiàn),一些重要的特征基本不變,只是特征重要程度有所變化。