◆戴夢杰 羅 穎 劉真巖 彭夕茈 張金全
?
用機(jī)器學(xué)習(xí)方法檢測基于PHP的web shell進(jìn)展回顧
◆戴夢杰 羅 穎 劉真巖 彭夕茈 張金全
(成都信息工程大學(xué)網(wǎng)絡(luò)空間安全學(xué)院 四川 610225)
本文簡述了web shell分類和基于PHP的web shell的變形及檢測方法,回顧了用機(jī)器學(xué)習(xí)方法檢測基于PHP的web shell的現(xiàn)狀,最后從樣本準(zhǔn)備、特征提取和實(shí)現(xiàn)方法等方面給出了提高機(jī)器學(xué)習(xí)算法檢測效果的改進(jìn)方向。
機(jī)器學(xué)習(xí);web shell;PHP
web shell又叫網(wǎng)站后門,是一種基于Web服務(wù)的程序,以網(wǎng)頁文件存在的命令執(zhí)行環(huán)境[1]。它原本是為網(wǎng)站管理者遠(yuǎn)程管理系統(tǒng)提供方便。但是,入侵者也可以通過網(wǎng)頁文件的代碼漏洞獲得上傳權(quán)限,再將包含后門的網(wǎng)頁文件上傳至服務(wù)器。
這種后門網(wǎng)頁文件與正常網(wǎng)頁具有相同的運(yùn)行環(huán)境和服務(wù)端口,都通過80端口進(jìn)行數(shù)據(jù)交換,加上各種用于反檢測特征技術(shù)應(yīng)用到后門網(wǎng)頁文件上,使得傳統(tǒng)基于特征碼匹配的檢測方式很難及時(shí)檢測出新的變種,因此能夠繞過很多防火墻。
根據(jù)web shell的大小和功能,可以將web shell分成大馬、小馬和一句話木馬。大馬功能全面,小馬體積小、隱蔽性強(qiáng),但所擁有的功能較少,通常只能用于文件上傳以及為數(shù)據(jù)庫提權(quán);一句話木馬是指僅有一行代碼完成的可動態(tài)接收腳本指令并執(zhí)行的腳本,多用于代碼執(zhí)行一些關(guān)鍵函數(shù),比如中國菜刀用的一句話PHP木馬 eval($_POST['pwd']);?>。攻擊者在發(fā)現(xiàn)漏洞后,往往先上傳一句話木馬,配合相關(guān)工具獲得更多權(quán)限,然后上傳大馬,實(shí)現(xiàn)對服務(wù)器的控制。
web開發(fā)語言有很多,常用到的包括ASP、JSP、Python、Perl和PHP等。與其他web開發(fā)語言相比,使用PHP進(jìn)行web開發(fā)具有高性能、可擴(kuò)展性、低成本等優(yōu)勢。因而被廣泛地用來開發(fā)網(wǎng)站。用PHP開發(fā)的網(wǎng)站,服務(wù)器也更適合運(yùn)行PHP的web shell。
web shell本質(zhì)上是可以執(zhí)行惡意功能的PHP代碼文件,其代碼結(jié)構(gòu)主要由數(shù)據(jù)傳遞和數(shù)據(jù)執(zhí)行兩部分組成[1]。比如一句話木馬 eval($_POST['pwd']);?>,數(shù)據(jù)執(zhí)行部分為eval(),數(shù)據(jù)傳遞部分為$_POST['pwd']。web shell為了逃避檢測,會對數(shù)據(jù)傳遞部分和數(shù)據(jù)執(zhí)行部分進(jìn)行修改。
另外,在形式上,為保證web shell不被服務(wù)器的管理員發(fā)現(xiàn),入侵者需要在上傳web shell的同時(shí)對其采取如下的一系列保護(hù)措施[2]。比如:在web shell代碼中插入一些注釋;對控制代碼(或數(shù)據(jù))在發(fā)送或使用前進(jìn)行加密,在運(yùn)行前再進(jìn)行解密;對特征函數(shù)或參數(shù)進(jìn)行多重編碼,使頁面存在的一些規(guī)律發(fā)生改變,降低被檢測到的概率;在不影響功能的前提下,入侵者將函數(shù)名、變量名、常量名等標(biāo)識進(jìn)行分拆,在使用的時(shí)候再將名字拼接起來以起到躲避檢測的作用等等。
百度安全web防護(hù)產(chǎn)品線負(fù)責(zé)人劉焱在其著作《Web安全之機(jī)器學(xué)習(xí)入門》中,提到了用樸素貝葉斯來進(jìn)行檢測。其中黑樣本從網(wǎng)上收集,白樣本來自WordPress源碼、PHPCMS源碼、phpMyAdmin源碼、PHP的一個(gè)框架YII的源碼和smarty源碼。對于樸素貝葉斯而言,需要假設(shè)樣本的特征各維度兩兩獨(dú)立。如果維度高,一個(gè)可能問題就是維度之間的獨(dú)立性會變差,造成樸素貝葉斯的假設(shè)不成立,從而不可行。
在其后的著作《web安全之深度學(xué)習(xí)實(shí)戰(zhàn)》中,作者使用了深度學(xué)習(xí)的MLP和CNN算法來實(shí)現(xiàn)web shell的檢測。其中,基于詞袋&TF-IDF模型的MLP準(zhǔn)確率和召回率綜合表現(xiàn)較佳,基于opcode序列模型的CNN準(zhǔn)確率較高。
石劉洋等提出了一個(gè)基于web日志的web shell檢測方法,該方法利用了支持向量機(jī)(SVM)模型,對日志記錄的字段數(shù)據(jù)進(jìn)行信息提取與分析處理,從文本特征、統(tǒng)計(jì)特征和負(fù)面關(guān)聯(lián)特征3個(gè)角度對正常網(wǎng)頁文件和web shell文件進(jìn)行區(qū)分和判斷,驗(yàn)證了方法的可行性和有效性。
變形的web shell無非是隱藏了執(zhí)行數(shù)據(jù)部分或者數(shù)據(jù)傳遞部分,不過無論怎么變形本質(zhì)上還是去調(diào)用eval、調(diào)用system、exec等命令執(zhí)行函數(shù)。杜海章等通過PHP擴(kuò)展來實(shí)現(xiàn)hook,hook這些PHP函數(shù)或語法結(jié)構(gòu)。不過web承受著大量的訪問請求,增加PHP擴(kuò)展的性能和穩(wěn)定性是一個(gè)嚴(yán)峻的考驗(yàn),另外在服務(wù)器比較多的公司存在推廣和部署成本問題。
Behrens等的檢測程序NeoPI針對5種常見web shell的混淆特征進(jìn)行檢測,包括:信息熵、最長單詞、重合指數(shù)、特征和壓縮比。該檢測方法可以完成一些變體的標(biāo)記,但沒有從惡意代碼的根本特征上解決web shell檢測問題,需要管理員人工分析以便做出是否web shell的決定。Luczko等的web shell Detector是一個(gè)PHP腳本,使用一個(gè)較大的web shell特征庫,可以用來識別PHP/cgi/asp/aspx的web shell,識別率高,但對于新的web shell,如果特征庫沒有及時(shí)更新,則不能檢測出來。
為了提高算法檢測的準(zhǔn)確性,可以從以下幾個(gè)方面進(jìn)行改進(jìn)。
(1)在樣本準(zhǔn)備方面,收集大量的基于PHP的web shell及各種變形,進(jìn)行合理的分類,減少不必要的重復(fù)。由于沒有統(tǒng)一的樣本庫,因而樣本的來源各異,樣本數(shù)量的差異也很大。一些研究者是從github網(wǎng)站下載別人準(zhǔn)備的黑樣本,一些研究者沒有說明樣本來源。比如,朱魏魏等采集了420個(gè)web shell和從CMS中提取的480個(gè)正常PHP頁面作為實(shí)驗(yàn)數(shù)據(jù)。戴樺等使用了1200個(gè)不存在Web Shell 的PHP頁面和447個(gè)存在web Shell的PHP頁面。Truong Dinh Tu等用了12982正常頁面和169web shell頁面。
由于在機(jī)器學(xué)習(xí)中,持有大量的數(shù)據(jù)是非常重要的。在下載網(wǎng)上的web shell樣本的同時(shí),需要對樣本進(jìn)行分類,同時(shí)去掉重復(fù)的樣本,因?yàn)橹貜?fù)的代碼會影響數(shù)據(jù)出現(xiàn)的頻率。確?,F(xiàn)有的web shell類型在訓(xùn)練樣本中都存在,尤其是web shell的各種變形文件。如果對樣本進(jìn)行合理分類,包含到現(xiàn)有每一個(gè)已知類型的web shell變形,應(yīng)該有助于算法的準(zhǔn)確性。
(2)在特征提取方面,研究者廣泛使用機(jī)器學(xué)習(xí)的詞袋和TF-IDF模型。該模型直接作為web shell檢測,有研究者提出了異義。詞袋&TF-IDF模型提取的特征,可以作為參考特征之一,但在專業(yè)的安全人員看來不夠好,同時(shí)詞袋&TF-IDF模型沒有考慮詞語出現(xiàn)的位置。在信息安全中,詞條出現(xiàn)在文檔的不同位置時(shí),對文檔的區(qū)分度的貢獻(xiàn)大小是不一樣的。又如,TF&IDF模型沒有考慮到特征項(xiàng)在類間和類內(nèi)的分布情況。另外,在web shell檢測中,詞頻的意義和作用與通常的自然語言處理也不盡相同。
結(jié)合PHP的特性,在特征提取階段,對常規(guī)的詞袋&TF-IDF模型進(jìn)行修改,使之更適合完成web shell的檢測,包括詞條出現(xiàn)的位置、詞頻的意義在web shell檢測中的作用。緊密結(jié)合web shell程序的特征,提高算法分類的準(zhǔn)確度。
(3)在實(shí)現(xiàn)上,只有少數(shù)研究者在使用機(jī)器學(xué)習(xí)進(jìn)行web shell檢測時(shí),考慮了web shell的PHP特性,尤其是動態(tài)特性。在現(xiàn)有檢測PHP的web shell的方法中,機(jī)器學(xué)習(xí)方法更多是針對web shell的靜態(tài)特征進(jìn)行的。實(shí)際上,PHP網(wǎng)頁包括靜態(tài)特性和動態(tài)特性。在靜態(tài)特征方面,基于PHP的web shell與使用其他腳本語言在語法等方面有一定差異性。在PHP代碼執(zhí)行過程中,由于PHP是解釋型語言,代碼需要被翻譯成字節(jié)碼后由ZEND引擎進(jìn)行解析執(zhí)行。只有少數(shù)研究者簡單的利用了字節(jié)碼進(jìn)行web shell的檢測。在研究PHP的內(nèi)核實(shí)現(xiàn)機(jī)制和PHP擴(kuò)展的基礎(chǔ)上,深挖web shell的原理和執(zhí)行機(jī)制,結(jié)合機(jī)器學(xué)習(xí)進(jìn)行檢測。這樣可以把PHP的這些特點(diǎn)和機(jī)器學(xué)習(xí)結(jié)合起來進(jìn)行web shell的檢測。
本文回顧了機(jī)器學(xué)習(xí)用于檢測用PHP語言編寫的webshell的現(xiàn)狀,并結(jié)合機(jī)器學(xué)習(xí)算法檢測web shell的特點(diǎn),給出了提高檢測準(zhǔn)確度的改進(jìn)方向。
[1]杜海章,方勇.PHP web shell實(shí)時(shí)動態(tài)檢測[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2014(12):120-121.
[2]戴樺,李景,盧新岱,孫歆.智能檢測web Shell的機(jī)器學(xué)習(xí)算法[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào),2017,3(4):51-57.
[3]劉焱.Web安全之機(jī)器學(xué)習(xí)入門[M].機(jī)械工業(yè)出版社,2017.9.
[4]劉焱.Web安全之深度學(xué)習(xí)實(shí)戰(zhàn)[M].機(jī)械工業(yè)出版社,2017.12.
[5]石劉洋,方勇.基于Web日志的web shell檢測方法研究[J].信息安全研究,2016,2(1):66-73.
[6]朱魏魏,胡勇.基于NN_SVM的webshell檢測方法[J].通信與信息技術(shù),2015(2):55-58.
[7]Truong Dinh Tu,Cheng Guang,Guo Xiaojun,Pan Wubin. Evil-hunter:a novel web shell detection system base-d on scoring scheme[J].Journal of Southeast University(Engli-sh Edition),Vo1.30,No.3,pp. 278-284.
[8]Behrens S,Hagen B. Web shell detection using NeoPI. http://resources. infosec- institute.com/web-shell-detection/.
[9]王亞麗.webshell 查殺逃逸技術(shù)研究[J].網(wǎng)絡(luò)安全技術(shù)與應(yīng)用,2017,(9):75-76.
[10]龍嘯,方勇,黃誠,劉亮.webshell研究綜述:檢測與逃逸之間的博弈[J].網(wǎng)絡(luò)空間安全,2018,9(1):62-68.
網(wǎng)絡(luò)安全技術(shù)與應(yīng)用2019年5期