張昊祎
摘? ?要:論文提出了一種語義分析和神經(jīng)網(wǎng)絡(luò)模型相結(jié)合的WebShell檢測(cè)方法,通過對(duì)預(yù)編譯后腳本文件進(jìn)行語義分析,基于抽象語法樹獲取腳本文件的行為特征;基于BP神經(jīng)網(wǎng)絡(luò)對(duì)樣本進(jìn)行有監(jiān)督學(xué)習(xí),得到可用于未知樣本的檢測(cè)模型。不同于現(xiàn)有基于語義分析的檢測(cè)方法,論文提出的方法無需人工定義惡意行為,從而有效屏蔽各類逃逸技術(shù)的干擾。實(shí)驗(yàn)證明,論文提出的WebShell檢測(cè)方法具有較高的準(zhǔn)確率和召回率。
關(guān)鍵詞:BP神經(jīng)網(wǎng)絡(luò);語義分析;WebShell;入侵檢測(cè);Web安全
中圖分類號(hào):TP309.5? ? ? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A
A method for WebShell detection based on semantics analysis and neural network
Zhang Haoyi
(School of Electronics Engineering and Computer Science Peking University, Beijing 100871)
Abstract: This paper proposes a WebShell detection method combining semantic analysis and neural network. Through semantic analysis of pre-compiled script files, the behavior characteristics of script files are obtained based on abstract syntax tree. Classifier model can be trained based on back propagation neural network that can be used for unknown samples. Different from the existing detection methods based on semantic analysis, the proposed method does not need to manually define malicious behavior, thus effectively shielding the interference of various escaping technologies. The experiment proves that the WebShell detection method proposed in this paper has higher accuracy and recall rate.
Key words: BP neural network; semantic analysis; WebShell; intrusion detection; Web security
1 引言
隨著Internet的迅速發(fā)展和Web技術(shù)在各行業(yè)的廣泛應(yīng)用,Web安全逐漸成為信息安全領(lǐng)域最重要的攻防戰(zhàn)場(chǎng)之一。WebShell是一種常見的Web攻擊技術(shù),由攻擊者通過文件上傳、SQL注入等攻擊手段植入Web應(yīng)用內(nèi),常用于權(quán)限維持、數(shù)據(jù)竊取、內(nèi)網(wǎng)探測(cè)等攻擊目的。根據(jù)知道創(chuàng)宇于2019年上半年發(fā)布的《2018年度網(wǎng)絡(luò)安全態(tài)勢(shì)報(bào)告》,掃描器和網(wǎng)站后門(即WebShell)已成為攻擊者最常用的Web攻擊技術(shù),共占比79%。因此,快速、準(zhǔn)確地進(jìn)行WebShell的檢測(cè)在安全防守端尤為重要。
2? WebShell
WebShell是基于Web腳本語言開發(fā)的,可由Web服務(wù)器解析和執(zhí)行的一類惡意腳本。通過植入WebShell,攻擊者可以相對(duì)隱蔽地對(duì)服務(wù)器進(jìn)行遠(yuǎn)程控制,對(duì)Web安全乃至內(nèi)網(wǎng)安全都會(huì)造成極大威脅。WebShell的行為和目的主要包括四個(gè)方面。
信息嗅探:以嗅探Web運(yùn)行環(huán)境信息、主機(jī)信息、數(shù)據(jù)庫信息、IDC網(wǎng)絡(luò)信息為目的,將收集到的各類信息回顯在頁面中或通過其它渠道反饋給攻擊者,攻擊者可以將收集到的信息用于下一步的入侵中。
權(quán)限維持:攻擊者可以通過HTTP請(qǐng)求的參數(shù)(包括GET/POST參數(shù)、Cookie、Header等)傳遞命令,由WebShell以Web應(yīng)用運(yùn)行權(quán)限執(zhí)行命令,是一種攻擊成功后較隱蔽的權(quán)限維持手段。此外,攻擊者還可以通過各種反彈Shell手法獲取到交互式Shell,利用系統(tǒng)本地內(nèi)核漏洞進(jìn)行提權(quán)。
數(shù)據(jù)竊取和篡改:嗅探到數(shù)據(jù)庫連接方式等配置信息后,攻擊者可以利用WebShell竊取或篡改數(shù)據(jù)庫內(nèi)的敏感信息。
網(wǎng)絡(luò)代理:攻擊者可以利用WebShell建立TCP/IP網(wǎng)絡(luò)隧道,用于嗅探、掃描IDC網(wǎng)絡(luò)和進(jìn)一步的內(nèi)網(wǎng)滲透,例如著名的reGeorg工具就利用了WebShell建立SOCKS5隧道。
3 WebShell檢測(cè)逃逸技術(shù)
通過對(duì)大量WebShell樣本進(jìn)行分析,以及對(duì)黑客論壇中的WebShell逃逸技術(shù)進(jìn)行總結(jié),可以將WebShell逃逸技術(shù)進(jìn)行分類。
3.1 字符串編碼與構(gòu)造
簡(jiǎn)單的WebShell靜態(tài)檢測(cè)技術(shù)的主要思路是關(guān)鍵函數(shù)關(guān)鍵詞匹配,WebShell開發(fā)者可以通過對(duì)函數(shù)字符串中的敏感詞進(jìn)行編碼,在運(yùn)行時(shí)再進(jìn)行解碼,從而逃避關(guān)鍵詞匹配檢測(cè)。常見的編碼方式為大多數(shù)語言內(nèi)置支持的Base64、Rot13等編碼。此外,還可對(duì)字符串進(jìn)行混淆,包括亂序、移位、邏輯運(yùn)算后,在運(yùn)行時(shí)重新構(gòu)造。
3.2 代碼混淆
基于統(tǒng)計(jì)學(xué)的檢測(cè)方法對(duì)腳本文件的統(tǒng)計(jì)指標(biāo)進(jìn)行提取,包括文件字符長度、信息熵、重合因子等。為了使WebShell的這些指標(biāo)與正常頁面文件保持一致,WebShell開發(fā)者常在腳本內(nèi)加入大量看似正常的無效代碼、HTML內(nèi)容等進(jìn)行混淆。
3.3 利用反射機(jī)制
絕大多數(shù)Web語言,包括ASP、PHP、JSP等均提供反射或序列化機(jī)制,WebShell開發(fā)者可以利用反射機(jī)制逃避關(guān)鍵類名/方法名/屬性名等特征匹配,再配合上述字符串編碼與構(gòu)造技術(shù),WebShell將在不出現(xiàn)任何關(guān)鍵詞的情況下執(zhí)行敏感操作。
3.4 文件包含
通過將WebShell拆分成多個(gè)較小的文本或圖片文件,再通過文件包含進(jìn)行匯總。將惡意執(zhí)行的語句拆分到不同文件中,可以避免在一個(gè)WebShell文件中出現(xiàn)大量特征,從而干擾WebShell檢測(cè)結(jié)果。
3.5 流量加密
基于流量的WebShell檢測(cè)提取攻擊者和WebShell通信時(shí)的流量特征,為了隱藏HTTP請(qǐng)求中下發(fā)的指令關(guān)鍵詞,可以利用加密或編碼技術(shù)對(duì)請(qǐng)求參數(shù)進(jìn)行加密,從而逃避這類檢測(cè)。而隨著信息熵等指標(biāo)在檢測(cè)中的應(yīng)用,流量加密的方式也在不斷發(fā)生變化。
3.6 隱蔽通道
與流量加密類似的,為了逃逸基于流量的檢測(cè)方法,攻擊者可以通過隱蔽通道傳遞執(zhí)行信息。例如,將指令隱藏在腳本文件名中,調(diào)用時(shí)并不直接傳遞指令,而在WebShell內(nèi)根據(jù)腳本文件名執(zhí)行指令。同時(shí),還可以利用HTTP會(huì)話機(jī)制,將指令隱藏在會(huì)話屬性中,從而實(shí)現(xiàn)指令下發(fā)的隱蔽通道。
4 相關(guān)研究
與其他安全防御領(lǐng)域類似,根據(jù)WebShell的檢測(cè)和防御手段的介入階段不同,可以分為事前預(yù)警、事中檢測(cè)、事后追溯三種。對(duì)WebShell的檢測(cè)防御思路主要分為基于文件的檢測(cè)、基于流量的檢測(cè)、基于行為的檢測(cè)和基于日志的檢測(cè)等。其中,基于文件的檢測(cè)是在WebShell剛被植入時(shí),通過對(duì)文件屬性、內(nèi)容、關(guān)鍵字等進(jìn)行靜態(tài)分析判斷是否為WebShell,屬于事前預(yù)警;基于流量的檢測(cè)是從攻擊者與WebShell的交互流量中提取特征并進(jìn)行判斷,基于行為的檢測(cè)是在WebShell運(yùn)行時(shí)對(duì)其異常行為進(jìn)行分析,這兩類均屬于事中檢測(cè);而基于日志的檢測(cè)是對(duì)Web日志進(jìn)行全局分析,發(fā)現(xiàn)正常訪問日志與WebShell訪問日志的差異,從而判斷是否已經(jīng)遭受了WebShell攻擊并定位WebShell,屬于事后追溯。
基于文件的檢測(cè)是利用WebShell與正常頁面文件在哈希值、屬性、文本關(guān)鍵詞、統(tǒng)計(jì)指標(biāo)等方面的差異,對(duì)WebShell進(jìn)行靜態(tài)檢測(cè)的技術(shù)。一種思路是對(duì)所有流通的WebShell樣本進(jìn)行收集,計(jì)算文件哈希形成WebShell指紋庫,如WebShell Detector工具,自稱可以達(dá)到99%的識(shí)別率。這種方法需要長期的人工維護(hù)樣本庫,而且可以非常容易地進(jìn)行繞過(增加任意無效代碼即可)??椎聫V等在[1]中提出基于局部敏感散列算法的檢測(cè)方法,可以一定程度上避免局部修改和混淆造成的繞過情況。國內(nèi)著名的WebShell檢測(cè)工具D盾通過在文件內(nèi)查找惡意函數(shù)等方式進(jìn)行檢測(cè),這有可能被字符串編碼構(gòu)造等混淆技術(shù)繞過。針對(duì)常見WebShell檢測(cè)逃逸技術(shù),NeoPI[2]通過提取信息熵、最長單詞、重合指數(shù)、壓縮比等特征,可以有效判斷出樣本是否采用了混淆和逃逸。戴樺等在[3]中提出基于矩陣分解算法的檢測(cè)方法,賈文超等在[4]中提出基于隨機(jī)森林算法的檢測(cè)方法,胡必偉等在[5]中提出基于樸素貝葉斯的檢測(cè)方法,均采用了功能函數(shù)、重合指數(shù)、信息熵、最長單詞、壓縮比等文本特征和統(tǒng)計(jì)指標(biāo)作為樣本特征,取得了較好的檢測(cè)效果。但由于上述方法樣本特征需要人工參與設(shè)置和選擇,對(duì)于0Day型的WebShell檢測(cè)能力仍屬未知。易楠等在[6]中提出了基于語義分析的WebShell檢測(cè)方法,突破性地提出利用AST和人工定義風(fēng)險(xiǎn)特征庫提取污點(diǎn)子樹,計(jì)算文件危險(xiǎn)程度,再通過人工設(shè)置閾值的方式進(jìn)行定性判斷。
攻擊者在與WebShell通信時(shí)的參數(shù)關(guān)鍵詞、訪問行為統(tǒng)計(jì)指標(biāo)、信息熵、頁面關(guān)聯(lián)性等方面存在差異,基于流量的檢測(cè)技術(shù)就是對(duì)這些差異進(jìn)行分析,提取特征并通過一定算法進(jìn)行分類。
基于行為的檢測(cè)利用WebShell在活動(dòng)時(shí)對(duì)系統(tǒng)執(zhí)行的行為與正常頁面文件的差異性進(jìn)行檢測(cè)。根據(jù)WebShell檢測(cè)中對(duì)WebShell目的的分析,WebShell常會(huì)在運(yùn)行時(shí)出現(xiàn)文件讀寫行為、網(wǎng)絡(luò)監(jiān)聽行為、數(shù)據(jù)庫連接行為等。采用Hook技術(shù)、RASP等可以對(duì)WebShell運(yùn)行時(shí)的行為進(jìn)行收集,并采用一定規(guī)則或算法進(jìn)行檢測(cè)。
基于日志的檢測(cè)是從Web日志的文本特征、統(tǒng)計(jì)特征、響應(yīng)頁面特征等方面提取特征,對(duì)正常業(yè)務(wù)訪問日志進(jìn)行建模,從而利用無監(jiān)督聚類等方式對(duì)WebShell訪問請(qǐng)求進(jìn)行檢測(cè)。
當(dāng)WebShell已經(jīng)被攻擊者訪問時(shí)安全性將變得不可控,可能在一次請(qǐng)求后即建立了更為隱蔽的C&C連接或造成了一定的損失。本文認(rèn)為安全防御應(yīng)該盡可能早地介入攻擊鏈條中,因此本文提出的檢測(cè)方法屬于事前預(yù)警類檢測(cè)。在特征提取階段即獲得抽象層面的行為特征,對(duì)上述字符串編碼與構(gòu)造、代碼混淆、利用反射機(jī)制、文件包含等形成降維打擊,可以有效對(duì)抗已知的檢測(cè)逃逸技術(shù);采用BP神經(jīng)網(wǎng)絡(luò)建設(shè)WebShell檢測(cè)分類模型。與[6]中提出的基于語義分析的檢測(cè)方式不同,本文的檢測(cè)方法并非只針對(duì)PHP語言,兼容性較強(qiáng);且無需人工定義和維護(hù)風(fēng)險(xiǎn)特征庫。
5 基于抽象語法樹的特征提取
抽象語法樹(Abstract Syntax Tree,AST)是編程語言的抽象語法結(jié)構(gòu)的樹狀表現(xiàn)形式,作為編譯器后端的輸入,不依賴于具體的文法和語言的細(xì)節(jié)。通過對(duì)抽象語法樹進(jìn)行分析,可以獲得對(duì)代碼語義層面的理解。抽象語法樹的生成過程包括詞法分析和語法分析兩個(gè)步驟,其中詞法分析是將代碼字符流轉(zhuǎn)變?yōu)闃?biāo)記(Token)的過程,語法分析是根據(jù)標(biāo)記集合構(gòu)造抽象語法樹的過程。
以Python為例,下面一段代碼與其生成的抽象語法樹為:
import os;os.system(cmd)
Module(body=[
Import(names=[
alias(name='os', asname=None),
]),
Expr(value=Call(func=Attribute(value=Name(id='os', ctx=Load()), attr='system', ctx=Load()), args=[
Name(id='cmd', ctx=Load()),
], keywords=[], starargs=None, kwargs=None)),
])
由于WebShell的編寫有很大的可變性,為了逃逸檢測(cè)可以采取多種方式對(duì)代碼本身進(jìn)行混淆,如果僅在文本層面提取WebShell特征,則會(huì)陷入極大的被動(dòng),造成大量的漏報(bào)。因此,通過對(duì)WebShell文本進(jìn)行語義分析,從語義角度獲取代碼行為意圖,對(duì)各類逃逸技術(shù)進(jìn)行降維打擊,從而獲得相對(duì)穩(wěn)定的WebShell特征。
綜合各種編程語言的抽象語法樹定義,樹節(jié)點(diǎn)主要包括聲明(Statement)、表達(dá)式(Expression)、注釋(Comment)、定義(Declaration)、類型(Type)等。為了最大程度地屏蔽代碼混淆等對(duì)特征提取結(jié)果的影響,從提取WebShell實(shí)際行為的目的出發(fā),本文認(rèn)為只有函數(shù)調(diào)用表達(dá)式有實(shí)際意義,而外部庫引用、變量定義、類/方法定義、注釋等節(jié)點(diǎn)信息沒有參考意義。函數(shù)調(diào)用表達(dá)式包括調(diào)用類、調(diào)用方法、調(diào)用參數(shù)三部分組成,其中調(diào)用類指函數(shù)調(diào)用主體類型,調(diào)用方法指調(diào)用的具體函數(shù),調(diào)用參數(shù)指調(diào)用函數(shù)時(shí)傳入的參數(shù),如下所示:
os.system(cmd)
Expr(value=Call(func=Attribute(value=Name(id='os', ctx=Load()), attr='system', ctx=Load()), args=[
Name(id='cmd', ctx=Load()),
], keywords=[], starargs=None, kwargs=None)
由于WebShell可以對(duì)語言內(nèi)置類和方法進(jìn)行重新封裝和重載,為了獲取實(shí)際調(diào)用類和方法,在抽象語法樹遍歷節(jié)點(diǎn)時(shí)對(duì)內(nèi)部或外部引用的自定義類型和方法的調(diào)用進(jìn)行遞歸追溯,最大程度上保證函數(shù)調(diào)用特征提取的完整性和一致性。由于WebShell編寫和逃逸技術(shù)應(yīng)用不盡相同,安全函數(shù)調(diào)用和危險(xiǎn)函數(shù)調(diào)用的次數(shù)和順序與WebShell實(shí)際行為沒有必然聯(lián)系,因此本文認(rèn)為在抽象語法樹遍歷時(shí),同一類方法的調(diào)用次數(shù)不影響該函數(shù)調(diào)用的權(quán)重;不同類方法的調(diào)用順序與其實(shí)際語義無關(guān)。此外,類名、變量名等應(yīng)解析為對(duì)應(yīng)的全限定名(Fully Qualified Name,F(xiàn)QN),以獲取其明確唯一的類型表示。通過抽象語法樹的生成和遍歷解析,可以得到該腳本文件內(nèi)的函數(shù)調(diào)用的無序不重復(fù)的函數(shù)調(diào)用集合。以JSP語言為例,抽取的函數(shù)調(diào)用集合如圖1所示。
采用詞集模型(Set of Words)對(duì)提取出來的函數(shù)調(diào)用集合進(jìn)行向量化,獲取函數(shù)調(diào)用字典及樣本的向量化表示。給定樣本集,將其中所有出現(xiàn)過的函數(shù)調(diào)用整合為一個(gè)詞匯表L(Lexicon),對(duì)于任意樣本,的函數(shù)調(diào)用集為,那么該樣本向量化表示為。如果詞匯表中第個(gè)詞出現(xiàn)在中,那么該樣本此處的向量分量就為1,否則就為0,即:
,
至此,已通過解析抽象語法樹得到樣本集的特征向量化表示。
6 BP神經(jīng)網(wǎng)絡(luò)
誤差反向傳播(Back-Propagation,BP)神經(jīng)網(wǎng)絡(luò)是一種有監(jiān)督的,使用誤差反向傳播算法(BP Algorithm)迭代訓(xùn)練的多層前饋神經(jīng)網(wǎng)絡(luò)。各個(gè)特征分量之間存在無法預(yù)知的相互關(guān)聯(lián),與WebShell檢測(cè)結(jié)果間存在一定的非線性對(duì)應(yīng)關(guān)系,鑒于BP神經(jīng)網(wǎng)絡(luò)具體較強(qiáng)的非線性映射能力和泛化性能,本文采用BP神經(jīng)網(wǎng)絡(luò)來逼近這一對(duì)應(yīng)關(guān)系,從而獲得更好的WebShell檢測(cè)效果。
BP神經(jīng)網(wǎng)絡(luò)由輸入層、多個(gè)隱含層和輸出層組成,各層包含多個(gè)神經(jīng)元,相鄰層神經(jīng)元之間全部相互連接;每層神經(jīng)元接收上一層所有神經(jīng)元的輸出,使用連接系數(shù)和偏置量計(jì)算得到該神經(jīng)元的輸出結(jié)果。BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練包括正向傳播過程和誤差反向傳播過程:通過正向傳播過程,在輸入層輸入的特征向量經(jīng)過多個(gè)隱含層轉(zhuǎn)換,最終從輸出層獲得輸出結(jié)果,如果輸出與實(shí)際標(biāo)簽結(jié)果誤差不滿足期望,則進(jìn)入誤差反向傳播過程;誤差反向傳播過程中,利用梯度下降法由輸出層到輸入層的方向逐層調(diào)整各層神經(jīng)元的連接系數(shù)和偏置量等參數(shù),然后進(jìn)入下一次迭代。通過正向傳播和反向傳播過程的不斷迭代,調(diào)整網(wǎng)絡(luò)參數(shù)達(dá)到期望的輸出誤差。
為實(shí)現(xiàn)非線性映射的表達(dá)能力,在每個(gè)神經(jīng)元使用輸入、連接系數(shù)和偏置計(jì)算后,使用激活函數(shù)(Activation Function)對(duì)計(jì)算結(jié)果進(jìn)行非線性變換,常用的激活函數(shù)包括Sigmoid、Tanh、ReLU等。為量化評(píng)估神經(jīng)網(wǎng)絡(luò)的輸出與實(shí)際標(biāo)記之間的差距,使用損失函數(shù)(Loss Function)對(duì)輸出結(jié)果進(jìn)行計(jì)算。WebShell檢測(cè)的應(yīng)用場(chǎng)景屬于典型的二分類問題,常用的分類問題損失函數(shù)包括均方誤差(Mean Squared Error,MSE)損失函數(shù)、交叉熵(Cross Entropy)損失函數(shù)等。
7 WebShell檢測(cè)系統(tǒng)設(shè)計(jì)
基于BP神經(jīng)網(wǎng)絡(luò)的WebShell檢測(cè)為標(biāo)準(zhǔn)的有監(jiān)督學(xué)習(xí)的二分類任務(wù),結(jié)合抽象語法樹的提取過程,系統(tǒng)模型包括預(yù)處理模塊及特征提取模塊、模型訓(xùn)練模塊、WebShell檢測(cè)及告警輸出模塊三個(gè)基本模塊。檢測(cè)流程如圖2所示。
其中,預(yù)處理及特征提取模塊包含樣本預(yù)處理和特征提取兩個(gè)子模塊。樣本預(yù)處理子模塊用于對(duì)樣本中的異常字符進(jìn)行處理,防止樣本格式不規(guī)范對(duì)特征提取造成影響。此外,在樣本預(yù)處理子模塊中處理腳本文件的文件包含處理,將被包含的文件內(nèi)容整合在一個(gè)文件中,從而提取樣本最完整的特征,防止WebShell通過拆分成多個(gè)文件逃逸檢測(cè)。特征提取子模塊包括詞法分析、語法分析、函數(shù)調(diào)用提取、詞匯表生成及特征的向量化表示等處理過程。預(yù)處理及特征提取模塊工作流程如圖3所示。
告警輸出模塊采用高可讀性的方式對(duì)WebShell檢測(cè)結(jié)果進(jìn)行輸出。
8 實(shí)驗(yàn)與分析
8.1實(shí)驗(yàn)數(shù)據(jù)集
本文提出的檢測(cè)方法對(duì)各類語言開發(fā)的WebShell均適用。采用JSP語言編寫的WebShell樣本作為實(shí)驗(yàn)數(shù)據(jù)集,WebShell樣本來源為Github中WebShell收集比較全面的項(xiàng)目,共收集232個(gè)WebShell樣本;正常腳本樣本收集來源為開源的CMS Web項(xiàng)目,包括Jeewx、Tianti、Infoglue、Jeesite等,以及Github隨機(jī)爬取的JSP/JSPX,共收集415個(gè)正常腳本樣本。
8.2 效果評(píng)估
WebShell檢測(cè)屬于典型的二分類問題,對(duì)于這類問題,檢測(cè)結(jié)果可以表示為如表1所示的混淆矩陣。
WebShell檢測(cè)的準(zhǔn)確率,召回率。由于準(zhǔn)確率和召回率屬于互相矛盾的度量指標(biāo),為均衡表示W(wǎng)ebShell檢測(cè)模型的效果,使用度量表示模型的綜合性能,其中。對(duì)樣本進(jìn)行隨機(jī)取樣,取十次實(shí)驗(yàn)結(jié)果的平均值。
8.3 實(shí)驗(yàn)結(jié)果
通過本文所述方式對(duì)所有JSP/JSPX文件進(jìn)行語法分析和特征提取,首先利用org.apache.jasper.Jsp庫對(duì)樣本文件進(jìn)行預(yù)編譯,獲得等價(jià)的Java腳本;再利用com.github.javaparser相關(guān)庫進(jìn)行語法分析從而獲取抽象語法樹;對(duì)抽象語法樹進(jìn)行解析,獲取函數(shù)調(diào)用序列,并利用詞集模型進(jìn)行特征向量化,得到1418維特征向量。通過主成分分析(Principal Component Analysis,PCA)處理后,樣本的分布圖如圖4所示。
從圖4中可以看到,通過語法分析特征提取,WebShell可以相對(duì)明顯地區(qū)分于正常樣本。采用包含2個(gè)隱藏層的BP神經(jīng)網(wǎng)絡(luò)模型,隱藏層神經(jīng)元個(gè)數(shù)分別為200、50,損失函數(shù)為交叉熵(Cross Entropy)損失函數(shù),每一層之后使用線性整流單元(Rectified Linear Unit,ReLU)作為激活函數(shù)。實(shí)驗(yàn)結(jié)果平均模型準(zhǔn)確率為0.9909,召回率為0.9869,模型的綜合性能F1為0.9858。
基于神經(jīng)網(wǎng)絡(luò)分類器的實(shí)驗(yàn)指標(biāo)與其他WebShell檢測(cè)文獻(xiàn)的實(shí)驗(yàn)結(jié)果進(jìn)行對(duì)比,如表2所示。
從表2中可以看出,得益于基于語法分析的特征提取的完整性及BP神經(jīng)網(wǎng)絡(luò)較強(qiáng)的非線性映射能力,本文提出的WebShell檢測(cè)方法具有較高的準(zhǔn)確率和召回率。
9 結(jié)束語
本文對(duì)WebShell的行為目的和常見逃逸技術(shù)進(jìn)行了分析和闡述,為對(duì)抗WebShell逃逸技術(shù)對(duì)WebShell檢測(cè)造成的影響,提出基于抽象語法樹的WebShell特征提取方法;基于BP神經(jīng)網(wǎng)絡(luò)訓(xùn)練得到表達(dá)能力和泛化性能較佳的分類模型。區(qū)別于其它基于語義分析的WebShell檢測(cè)方法,本文提出的檢測(cè)方法無需人工定義風(fēng)險(xiǎn)特征庫和設(shè)置判定閾值。實(shí)驗(yàn)結(jié)果表明,本文提出的WebShell檢測(cè)方法具有較高的準(zhǔn)確率和召回率。
本文提出的WebShell檢測(cè)方法仍存在一些優(yōu)化點(diǎn):可基于抽象語法樹細(xì)化樣本特征,基于數(shù)據(jù)流的方式提取函數(shù)調(diào)用序列,從而利用卷積神經(jīng)網(wǎng)絡(luò)(Convolutional Neural Network,CNN)、注意力模型(Attention Model)等對(duì)WebShell的行為目的進(jìn)行更深入的建模;可以結(jié)合基于流量或基于行為的WebShell檢測(cè)技術(shù),將靜態(tài)分析結(jié)果與動(dòng)態(tài)執(zhí)行監(jiān)控結(jié)合起來,進(jìn)一步完善WebShell的特征,提高分類器的性能。
參考文獻(xiàn)
[1] 孔德廣,蔣朝惠,郭春,等.基于Simhash算法的Webshell檢測(cè)方法[J].通信技術(shù),2018.
[2] Tu T D,Guang C,Xiaojun G,et al.Webshell detection techniques in web applications[C]// 2014 5th International Conference on Computing, Communication and Networking Technologies (ICCCNT). IEEE Computer Society,2014.
[3] 戴樺,李景,盧新岱,等.智能檢測(cè)WebShell的機(jī)器學(xué)習(xí)算法[J].網(wǎng)絡(luò)與信息安全學(xué)報(bào), 2017(4):55-61.
[4] 賈文超,戚蘭蘭,施凡,等.采用隨機(jī)森林改進(jìn)算法的WebShell檢測(cè)方法[J].計(jì)算機(jī)應(yīng)用研究,2018, 35(5).
[5] 胡必偉.基于貝葉斯理論的Webshell檢測(cè)方法研究[J].科技廣場(chǎng),2016(6):66-70.
[6] 易楠,方勇,黃誠,等.基于語義分析的Webshell檢測(cè)技術(shù)研究[J].信息安全研究,2017(2).