新聞中心
使用機(jī)器學(xué)習(xí)檢測(cè)PHP Webshell的研究實(shí)踐
Webshell知多少
Webshell是以PHP、ASP、JSP或CGI等網(wǎng)頁(yè)文件形式存在的一種代碼執(zhí)行環(huán)境。在網(wǎng)絡(luò)攻擊過(guò)程中,Webshell是一種常用的惡意腳本,攻擊者可以利用它在Web服務(wù)器上執(zhí)行系統(tǒng)命令、竊取數(shù)據(jù)等。在入侵網(wǎng)站過(guò)程中,攻擊者通常需要以各種方式獲取Webshell,從而獲得網(wǎng)站的控制權(quán),再進(jìn)行入侵。此外,攻擊者入侵內(nèi)網(wǎng)的肉雞后,為了維持可用的傳輸通道,也需要?jiǎng)?chuàng)建肉雞主動(dòng)連接攻擊者的反彈Webshell 。
Webshell具有隱蔽、便捷等特點(diǎn),由于PHP語(yǔ)法靈活,通過(guò)隱藏敏感函數(shù)、關(guān)鍵字替換和拆分、使用特殊字符等方式可以有效變形和混淆,從而繞過(guò)安全檢測(cè)。通??梢詫阂釽ebshell分類(lèi)為:
· 大馬
通常體積較大,包含較多功能,會(huì)調(diào)用系統(tǒng)的關(guān)鍵函數(shù),且會(huì)以代碼加密形式進(jìn)行隱藏。
· 小馬
通常體積較小,只包含文件上傳功能。
· 一句話木馬
基本框架不變,但代碼極短,通常只包含一行代碼。使用方便,可單獨(dú)作為一個(gè)文件或插入其他正常文件中,變形多,查殺難度高。
幾種檢測(cè)惡意Webshell的通用方法
· 特征檢測(cè)
傳統(tǒng)基于惡意特征的模式匹配和MD5檢測(cè)等手段,其優(yōu)點(diǎn)是成本低、速度快,其缺點(diǎn)是無(wú)法檢測(cè)未知威脅,容易被繞過(guò)。
· 統(tǒng)計(jì)分析
使用統(tǒng)計(jì)學(xué)方法,提取文件的關(guān)鍵特征,例如信息熵、特征代碼、最長(zhǎng)單詞、壓縮比、重合指數(shù)等,對(duì)其進(jìn)行識(shí)別與檢測(cè)。其優(yōu)點(diǎn)是對(duì)經(jīng)過(guò)混淆代碼或模糊編排的Webshell文件有良好的識(shí)別效果,其缺點(diǎn)是對(duì)“正?!蔽募休^多誤報(bào)和漏報(bào)。
· 流量特征檢測(cè)
提取網(wǎng)絡(luò)流量的元數(shù)據(jù),例如TCP/IP包頭信息、HTTP/DNS協(xié)議內(nèi)容、數(shù)據(jù)包描述字段、數(shù)據(jù)包個(gè)數(shù)、會(huì)話信息等;再基于元數(shù)據(jù)特征制定惡意Webshell規(guī)則,例如如果符合流量為上行、文件后綴異常、Payload中存在疑似攻擊內(nèi)容等元數(shù)據(jù)探針,則檢測(cè)命中。其優(yōu)點(diǎn)是部署簡(jiǎn)單、檢測(cè)迅速,其缺點(diǎn)是能力與規(guī)則成正比,漏報(bào)表現(xiàn)不穩(wěn)定,且對(duì)加密流量沒(méi)有高性能解決方案。
· 機(jī)器學(xué)習(xí)方法
基于SVM(支持向量機(jī))、貝葉斯算法、隨機(jī)森林等方法,選取合適的正常樣本和惡意樣本進(jìn)行降噪、向量化與隨機(jī)抽樣,對(duì)檢測(cè)模型不斷訓(xùn)練優(yōu)化,將樣本交給模型判斷。其優(yōu)點(diǎn)是具備不錯(cuò)的未知威脅檢測(cè)能力,其缺點(diǎn)是對(duì)樣本要求較高。
· 動(dòng)態(tài)語(yǔ)義檢測(cè)
無(wú)論Webshell代碼如何變形,其行為是不變的,可以通過(guò)代碼動(dòng)態(tài)模擬執(zhí)行和語(yǔ)義污點(diǎn)分析進(jìn)行檢測(cè),多采用RASP方式。其優(yōu)點(diǎn)是對(duì)精心設(shè)計(jì)的變形木馬檢出率高,其缺點(diǎn)是RASP需要串行部署,占用業(yè)務(wù)資源。
使用機(jī)器學(xué)習(xí)方法檢測(cè)PHP Webshell
在實(shí)際應(yīng)用中,每種檢測(cè)方法都有自身的優(yōu)劣,安全產(chǎn)品選擇適合場(chǎng)景的方法,通過(guò)取長(zhǎng)補(bǔ)短形成獨(dú)特的解決方案。此次主要介紹PHP類(lèi)Webshell,借助Scikit-learn(SKlearn)工具,采用機(jī)器學(xué)習(xí)相關(guān)方法進(jìn)行檢測(cè)的實(shí)踐。
1、AST和Opcode
AST(抽象語(yǔ)法樹(shù))是PHP 7引入的新特性。PHP收到請(qǐng)求或執(zhí)行命令時(shí),首先進(jìn)行詞法和語(yǔ)法分析,生成AST,再生成字節(jié)碼Opcode 。Opcode是一種PHP腳本編譯后的中間語(yǔ)言,與Java的Bytecode和.NET的MSL類(lèi)似。
在進(jìn)行樣本數(shù)據(jù)分析時(shí),如果直接使用PHP源碼進(jìn)行分析,由于其中包含混淆、花操作、注釋等無(wú)用內(nèi)容,會(huì)導(dǎo)致噪聲,效果變差。將PHP Webshell源碼轉(zhuǎn)化成AST或Opcode可執(zhí)行語(yǔ)句后,可降低噪聲。
AST
Opcode
2、使用Opcode關(guān)鍵詞進(jìn)行隨機(jī)森林訓(xùn)練
(1)安裝Opcode插件
例如,可在Windows平臺(tái)上使用VLD插件進(jìn)行轉(zhuǎn)換。
(2)Opcode提取&TF-IDF值計(jì)算
① 加載惡意樣本集;
② 編寫(xiě)提取和加載工具,將每個(gè)樣本的Opcode保存成字符串,把所有字符串寫(xiě)入list中;
③ 使用CountVectorizer函數(shù),將list內(nèi)容轉(zhuǎn)換成詞頻矩陣,為樣本打標(biāo)記(1);
④ 對(duì)白樣本重復(fù)以上操作,為樣本打標(biāo)記(0);
⑤ 將惡意樣本和白樣本提取出的詞頻矩陣整合到一起;
⑥ 使用TfidfTransformer函數(shù),把數(shù)值矩陣范化為T(mén)F-IDF值。
(3)隨機(jī)森林訓(xùn)練
經(jīng)過(guò)多重訓(xùn)練模型的對(duì)比,發(fā)現(xiàn)隨機(jī)森林訓(xùn)練效果最好。使用Train_Test_Split函數(shù)對(duì)所有訓(xùn)練樣本集進(jìn)行隨機(jī)抽樣,將關(guān)鍵詞、TF-IDF、標(biāo)記等特征送給訓(xùn)練模型,通過(guò)長(zhǎng)時(shí)間訓(xùn)練,讓模型能夠通過(guò)Opcode關(guān)鍵字判斷PHP Webshell是否存在惡意行為。
主要流程圖
在實(shí)踐中,一般搜集樣本檢出率達(dá)到97%以上,對(duì)變形偽裝樣本的檢出率也達(dá)到75%以上。
3、使用AST進(jìn)行圖像識(shí)別遷移學(xué)習(xí)訓(xùn)練
由于AST具備較多語(yǔ)法樹(shù)結(jié)構(gòu),相比Opcode分詞結(jié)構(gòu)不夠清晰,故使用關(guān)鍵詞進(jìn)行訓(xùn)練可能效果不佳。因此嘗試將AST轉(zhuǎn)換為二進(jìn)制文件,再進(jìn)一步轉(zhuǎn)換成圖像,利用圖像識(shí)別方法進(jìn)行訓(xùn)練。
(1)二進(jìn)制文件轉(zhuǎn)換
在訓(xùn)練中,提取AST語(yǔ)法樹(shù)后轉(zhuǎn)換為二進(jìn)制文件。二進(jìn)制文件中,每個(gè)字節(jié)范圍在00~FF之間,對(duì)應(yīng)灰度圖像素0~255 。將二進(jìn)制文件轉(zhuǎn)換為矩陣,該矩陣又可以轉(zhuǎn)換為一張灰度圖。
(2)CNN(Convolutional Neural Networks)圖像識(shí)別
雖然通過(guò)觀看很難區(qū)分惡意樣本與白樣本紋理上存在的細(xì)微差異,但借鑒目前較為成熟的CNN圖像識(shí)別算法進(jìn)行圖像分類(lèi)可以識(shí)別。
卷積神經(jīng)網(wǎng)絡(luò)(CNN)是一類(lèi)包含卷積計(jì)算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡(luò),是深度學(xué)習(xí)的代表算法之一。
卷積神經(jīng)網(wǎng)絡(luò)的組成包括:
· 輸入層(Input Layer)
用三維矩陣代表一張圖片,矩陣的長(zhǎng)寬代表圖片的大小,矩陣的深度代表圖像的色彩通道,黑白為1 。
· 卷積層(Convolution Layer)
卷積層的輸入是上一層神經(jīng)網(wǎng)絡(luò)的一小塊,它試圖對(duì)神經(jīng)網(wǎng)絡(luò)的每一小塊進(jìn)行更加深入的分析,得到抽象程度更高的特征。一般來(lái)說(shuō),通過(guò)卷積層處理后的結(jié)點(diǎn)矩陣深度會(huì)增加。
· 池化層(Pooling Layer)
不會(huì)改變?nèi)S矩陣的深度,但是能夠縮小矩陣的大小,達(dá)到減少參數(shù)的目的。可以看做是將一個(gè)分辨率較高的圖片轉(zhuǎn)化為分辨率較低的圖片的過(guò)程。
· 全連接層(Fully Connecced)
經(jīng)過(guò)多輪卷積和池化后,再經(jīng)過(guò)1-2個(gè)全連接層輸出??梢詫⒕矸e和池化層看做特征提取,由最后的全連接層進(jìn)行分類(lèi)。
· Softmax層
轉(zhuǎn)化為概率分布。
主要流程圖
在實(shí)踐中,上述方法對(duì)一般搜集樣本的檢出率只有70%左右,對(duì)變形偽裝樣本的檢出率更低至55%以下。
由此可以看出,因AST自身特點(diǎn),遷移學(xué)習(xí)方法的適用性不高,該方法可應(yīng)用于惡意文件和域名檢測(cè)等領(lǐng)域。
實(shí)踐小結(jié)
1、使用Opcode關(guān)鍵詞進(jìn)行PHP Webshell檢測(cè)具有較好效果;
2、使用AST進(jìn)行遷移學(xué)習(xí)適用性較低,采用基于AST的代碼動(dòng)態(tài)語(yǔ)義分析方法效果更好,且該方法同樣適用于JSP、ASP等協(xié)議下的Webshell 。
安博通應(yīng)用先進(jìn)的機(jī)器學(xué)習(xí)技術(shù),實(shí)現(xiàn)了PHP Webshell的檢測(cè),幫助用戶(hù)識(shí)別網(wǎng)絡(luò)安全領(lǐng)域的“偽裝者”。
自成立以來(lái),安博通始終堅(jiān)持自主研發(fā)、不斷創(chuàng)新,以原創(chuàng)的安全可視化技術(shù)為千行百業(yè)抵御各類(lèi)網(wǎng)絡(luò)安全威脅,為用戶(hù)持續(xù)創(chuàng)造網(wǎng)絡(luò)安全業(yè)務(wù)新體驗(yàn)。