基于多特征融合的Webshell恶意流量检测方法
2022-01-18李源王运鹏李涛马宝强
李源,王运鹏,李涛,马宝强
(四川大学网络空间安全学院,四川 成都 610065)
1 引言
随着Web应用的爆炸式增长,Web应用系统遭受攻击的事件越来越多,带来的损失和影响也越来越大。据中国产业互联网发展联盟公布的《2019中国主机安全服务报告》[1]显示,2019年中国境内企业用户服务器感染病毒木马事件超过百万起。其中Webshell恶意程序感染事件占73.27%。从攻击者的角度看,植入Webshell是攻击者进行持续渗透的基础和前提。因此,为了保障Web服务器的安全,Webshell检测显得尤为重要。Apache是目前应用最普遍的Web应用系统[2],在Web应用方面具有最为广泛的代表性,因此本文以Apache服务器上的Webshell检测为研究和实验对象。
针对Webshell的检测主要有3个研究方向:基于文本的静态检测方法、基于Web日志的事后检测以及基于通信流量的检测[3]。在基于文本的静态Webshell检测研究中,研究者主要从代码层面上对恶意程序进行检测,常用的检测方法是检查程序中是否包含Webshell执行时所需的系统函数[4],此方法检测效率高,但难以识别经过混淆加密后的Webshell。为了对抗混淆的Webshell恶意代码,Ai等[5]提出使用PHP VLD插件获得PHP程序编译时产生的字节码,并经N-gram分词后生成的执行序列作为区分正常文件和Webshell文件的检测特征,此模型对基于PHP语言的Webshell有较好的检测效果,但对于其他语言编写的Webshell,不能提取其编译时的字节码,因此无法检测。崔艳鹏等[6]提出使用信息熵、最长单词、重合指数、压缩比等统计特征作为区分正常和恶意程序的特征,该方法能够在一定限度上识别经过加密混淆后的Webshell文件,但通常需要配合其他方法一同检测以防止产生误报。Li等[7]提出使用神经网络模型GRU代替人工提取特征,但该方法在对文件进行分词时并未考虑代码经过编后(如base64编码)仍可能出现词向量维度过大导致训练难度增加、效率降低的问题;基于Web日志的事后检测是在攻击发生后通过对Web应用运行日志进行分析、溯源,以检测Webshell通信行为[8],但由于Web日志本身属于格式化处理后的文件,信息丢失较多,因而检测效果有限;在基于通信流量的检测研究上,研究者常采用对实时流量进行捕获分析来挖掘通信过程中可能存在的Webshell恶意流量。2018年,Yang等[9]采用基于4-gram分词的SVM算法对数据包中的URL请求路径和请求体进行训练以识别数据包中的恶意流量;Zhang等[10]选择使用CNN+LSTM神经网络组合模型对数据包整个请求包载荷的ASCII序列进行训练生成分类模型,以实现对Webshell恶意流量的检测,而由于在训练过程中加入过多与流量识别无关的信息,因此检测效率不高。此外,这两种基于通信流量的检测方法均只能完成对正常或恶意流量的二分类检测,未能对Webshell恶意流量属于何种攻击类型做出判断,不利于有针对性的Web防御和加固。
总的来说,以上3种检测方法,难以高效、精确地对Webshell进行检测和分类,并不能有效阻止通信过程中Webshell行为所造成的危害。因此本文从Web通信流量出发,以多源视角提取不同维度的静态特征,并通过特征融合和算法集成的方式来挖掘网络流量中可能存在的Webshell恶意通信行为。主要贡献如下。
1) 提出了一种基于多特征融合的检测方法,融合了不同维度的数据流特征,弥补了单一特征识别能力不足的问题,能够在不同类型的Webshell的识别上都有较高的检测能力,进一步细化不同种类的Webshell攻击。
2) 提出基于集成学习的Webshell分类模型,通过结合不同学习器各自的优势生成分类模型,降低模型在Webshell多分类情况下出现误报的概率。
2 多特征融合检测方法
2.1 检测框架
Webshell恶意流量检测模型的总体框架如图1所示,包括数据预处理、特征提取和异常检测3个阶段。
图1 Webshell恶意流量检测模型的总体框架Figure 1 Webshell malicious traffic detection model framework
(1)数据预处理
对采集到的原始流量进行解析后依次过滤非正常响应、媒体资源文件的数据包,并对通信过程中产生的分段数据包按五元组<源IP,源端口,目的IP,目的端口,协议>将相同的源和目的IP地址合并为一次的完整通信会话,并生成文本向量用于特征提取。
(2)特征提取
对原始流量进行预处理得到的文本向量,从数据包元信息、数据包载荷内容以及流量访问行为3个维度提取特征,并将融合后的特征向量作为特征数据集。
(3)异常检测
将融合后的特征数据集输入至包含4个初级分类器和1个次级分类器的Stacking集成模型并保存模型参数,通过模型对未知流量进行识别分类,以实现对具体攻击类型的分类。
2.2 数据预处理
数据预处理模块主要由数据包解析、数据包分段重组、数据包解码以及数据包过滤4部分组成。数据包解析主要完成对捕获的二进制流量按网络协议进行逐层解析,生成可读的网络封包的详细信息以供特征提取阶段使用;数据包分段重组主要完成对来自同一个数据包产生的分段数据包的重组;数据包解码主要完成对编码后的数据进行数据还原;数据包过滤主要采用文件头标识来处理数据流中的多媒体资源文件,以避免其中的不可见字符对模型训练造成干扰。
2.2.1数据包解析
本文主要使用基于Python编程语言的数据包解析工具Scapy库[11]对采集的网络流量进行处理。Scapy库是一个功能强大的数据包处理工具,利用该工具可以轻松实现发送、嗅探、解析和伪造网络数据包。本文使用Scapy解析并提取数据包字段(时间戳、请求类型、确认号、序列号、源IP地址、目的IP地址、有效载荷、数据包大小等)。对取值为离散值的字段需要其进行编码,如请求类型字段为:GET、POST等,则对应编码为GET=1,POST=2。
2.2.2数据包分段重组
当发送端发送的数据包长度大于通信双方协商的每一个报文段所能承载的最大数据长度MSS(maximum segment size)时,需要对数据包进行分段传输,产生多个具有完整首部的TCP报文段。为了在接收端将来自同一个数据包产生的多个报文段进行重组还原,本文首先将捕获到待重组报文段按照序列号由小到大排列得到[seqk1,seqk2,…, seqk n]。对于序列号为seqi的报文段,其TCP长度为TCP - payloadi,则下一个分片序列号为seqi+ TCP - payloadi。以此类推,可将所有来自相同数据包产生的报文段按顺序拼接完成。
2.2.3数据包解码
当发送端发送请求包中的请求地址字段包含特殊字符时,根据RFC 3986协议[12]规定,需要在数据传输前对其进行编码,具体操作为使用百分号和对应的ASCII值进行替换。因此,对于经过编码后的请求地址字段内容,如:“/index?id=shop%23name”,需要进行解码得到原始请求字段内容为“index?id=shop#name”。
2.2.4数据包过滤
为了缩短模型在预处理阶段所花的时间,同时避免数据流中的不可见字符影响模型训练效果,需要对采集到的网络流量依据数据类型进行过滤,其中一部分是页面加载时的静态资源文件(如html、js、css)等,另一部分主要是图片、音视频等非文本类型的数据。针对这两部分数据,在数据包过滤时主要根据数据包中的请求资源定位符来过滤掉非PHP文件。但已有研究表明,存在将Webshell藏在图片的末尾形成“图片马”以绕过目标服务器防护设备检查的攻击手段,因此对于PNG、JPEG等格式的图片文件,主要通过文件头尾标识符定位来处理。文件头标识符是以二进制形式存于文件开头一段区域的数据,该数据对应每一种文件类型。常见的多媒体资源文件同样拥有独一无二的文件头信息,如PNG格式图片的文件头尾标识符分别为0x89 50 4E 47 0D 0A 1A 0A和0x49 45 4E 44 AE 42 60 82。因此,通过识别数据流中的文件标识符,进而定位到多媒体资源文件的首尾并对其中部分进行过滤,即可提取出插入文件末尾的Webshell,处理示意如图2所示。
图2 文件头尾标识符处理“图片马”Figure 2 Use file header-tail identifier to process “picture horse”
2.3 特征提取
为了对不同类型的Webshell恶意流量进行准确识别,需要提取有关流量的各方面特征,并将其序列化表示输入分类器中。按照业界对Webshell恶意程序的功能以及攻击影响进行划分,可分为3种类型。
定义1简单型Webshell程序,俗称“一句话木马”程序,指仅提供基本命令执行功能的Webshell程序,代码结构简单。
定义2文件上传型Webshell程序,俗称“小马”程序,指功能单一且不包含命令执行功能的恶意程序,通常作为跳板程序用于上传其他恶意文件。
定义3网页型Webshell程序,俗称“大马”程序,指具有人性化操作界面、包含多种攻击手段的Webshell程序,代码结构复杂,功能多样。
具体而言,简单型Webshell程序通常不包含其他功能代码,命令执行时还需上传完整的执行代码,并由攻击者通过HTTP直连或Webshell客户端进行传输;文件上传型Webshell程序通常被应用在目标服务器对上传文件大小进行限制时,首先被上传至服务器作为跳板程序,进而上传其他包含恶意代码的Webshell程序用以规避服务器审查;网页型Webshell程序通常将所有的功能代码整合到Webshell文件中,且包含大量页面元素构成操作界面。针对各类型Webshell程序工作原理的不同,本文主要从数据包元信息、载荷内容和通信行为3个方面进行特征提取,提取的主要特征如下。
2.3.1数据包元信息
数据包元信息是指通信双方在进行通信时需按照TCP/IP规定的方式构造网络数据包,这些字段可直接从解析后的数据包中采集得到,本文利用第三方工具Scapy完成对数据包的解析,主要提取本文需要的相关字段信息如下。
1) 请求包载荷长度:该字段反映了源主机向目标主机发送请求报文时所携带的数据长度。在Webshell通信过程中,攻击者在发送攻击载荷时通常为了规避入侵检测工具(IDS)等设备检测,将请求载荷进行混淆加密处理进而导致载荷变长,因而当网络中出现较长请求载荷时则可能存在Webshell恶意通信行为。
2) 请求包请求参数个数:该字段反映了攻击者对请求载荷进行变换处理后,攻击载荷被分割为多段,最后在攻击载荷到达目标服务器后进行重组,此过程需要多个请求参数用于存储和拼接请求载荷,因而导致请求包中请求参数个数增加。
2.3.2载荷内容特征
Webshell通信过程的本质是发送命令和执行命令,攻击者发送给Webshell程序的危险命令通常存储于数据包的有效载荷中,本文从请求、响应包的有效载荷中提取以下特征。
1)请求包命令执行函数:在基于PHP脚本语言编写的Webshell程序中,由于攻击载荷需要通过PHP脚本语言进行语法解析和编译器执行,因而PHP语言中涉及危险系统命令的执行函数均可能成为攻击者进行远程命令执行所调用的函数[13],如在冰蝎Webshell客户端中,当客户端首次连接被植入PHP语言编写的Webshell的受害服务器时,默认会执行phpinfo函数。表1给出PHP语言中的危险函数。
一般认为,当数据包请求载荷中出现了表1中的危险功能函数,则在一定限度上认为该网络可能存在Webshell恶意通信行为。
表1 PHP语言中的危险功能函数Table 1 Unsafe PHP function details
2)请求包参数转移概率系数:状态转移概率[14]是描述模型在各个状态间转换的概率。在正常业务中,为了方便程序维护,在各类表单请求参数时大多选取与业务相关且具有较高可读性的参数。抽象成数学可以理解的语言,正常业务中的参数名转移概率系数偏高,而在Webshell程序中程序变量名的选取较为随机,因此转移概率系数偏低。计算一个字符串观测序列的概率分布如式(1)所示。
其中,p(1x)表示字符串中每一个字符出现的概率。当给定的字符串符合语言规律,则计算得到的转移概率值较高,而不符合可读性的概率则较低。因此,请求包中参数名的转移概率系数大小可以作为区分正常流量与Webshell恶意流量的特征之一。
3)请求包载荷信息熵:信息熵的概念最初由香农提出,用于研究传输信息中的信息量大小。请求包载荷信息熵值反映了请求报文中载荷内容的混乱程度。在Webshell通信过程中,攻击者往往对攻击载荷进行填充、加密等变换,导致载荷的字符空间混乱程度增加即信息熵增大,因而通过计算请求载荷的信息熵大小是否偏离正常水平可在一定限度上认为该网络中出现Webshell恶意通信行为。信息熵计算公式为
其中,L为请求包的载荷内容,p L(i)为载荷中每个字符发生的概率。当计算得到的信息熵值越大,则表明该载荷所包含的信息量越大,字符串呈现出无序、不确定性,因而被判定是攻击载荷的可能性越高。
4) 响应包title标签内容:通过对大量样本进行分析,在网页型Webshell程序中,由于这类恶意程序通常采用编程语言——HTML(hypertext markup language)来实现人性化操作界面,且在代码的title标签内包含该恶意程序的名称(如WSO、b374k、r57等)。因此提取的响应包中的title标签内容,也可作为区别正常业务流量和Webshell恶意流量的特征之一。
5) 响应包网页标签个数:正常业务通信的响应包中通常包含动态脚本程序生成的页面,页面主要由HTML语言中的标签构成。而简单型Webshell程序通常只包含脚本语言(如PHP编程语言)编写的恶意代码,在远程执行命令过程中响应页面不包含HTML标签。因此,当网络中出现不包含HTML标签的响应内容时,则可认为网络中可能存在Webshell恶意通信行为。
2.3.3 通信行为特征
正常HTTP请求与Webshell通信时存在明显的行为差异,因为Web服务器中的正常业务均可被不同用户访问,但Webshell程序的资源访问地址只由攻击者可知,因而在访问行为上呈现单一用户短时间内频繁访问现象。因此,本文从通信行为角度提取如下特征。
1) 页面对外开放度:该特征反映了某一URL地址在一段时间内被不同IP地址主机进行访问的程度。对于采用B/S架构的Web应用程序而言,当正常业务被部署至互联网中可被任何连接到互联网中的主机进行访问,因而该正常页面的对外访问度较高。而对于被植入服务器中的Webshell程序而言,通常该后门程序的访问地址只由攻击者已知,因而该后门程序的页面对外开放度水平较低。因此,某一页面的对外开放度可作为区分正常业务和恶意后门页面的特征之一。
2) 页面访问频率:该特征反映了某一URL地址在一段时间内被同一IP地址访问的频率大小。正常用户访问服务器上的资源文件时通常不会过长时间停留于单个页面,且由于现在大部分正常页面采用HTML配合JavaScript、CSS(cascading style sheets)等语言进行页面优化,使得单次访问中必不可少地有资源文件被访问和下载。而攻击者远程连接Webshell恶意程序过程中由于只需要接收命令和执行命令,因而该Webshell页面的访问频率高于正常水平。因此,某一页面访问频率可作为区分正常业务访问和Webshell恶意访问的特征之一。
2.4 集成学习检测模型
对上述提出的诸多特征,如果仅用单一学习器对特征构成的特征矩阵进行训练,由于各决策器在设计之初存在各自优势和缺点,可能训练得到的分类器出现较高的偏差或方差的现象,并且在应对未知样本时泛化性能较差。集成学习在实际生产环境下发挥重要作用,通过结合多个模型力图在海量数据中获得多样且准确的模型[15]。并结合不同单一弱分类器在各类数据上的表现构造出强分类器,以获得高检测率和低误报率,并且能够用于检测未知的Webshell恶意流量。
本文采用基于Stacking集成策略来构建分类模型,这是一种通用的通过训练分类器来结合个体分类器的方法。此时,个体分类器被称为初级学习器,结合器被称为次级分类器。在本文中,初级学习器应该选取预测性能优秀的机器学习模型,更重要的还需要保证模型间的多样性[16],在分析个体学习器的单独预测能力,并全面比较个体学习器的组合效果后,本文从基于Python的Scikit-learn库[17]所提供的封装分类器中选取了4种典型机器学习算法:逻辑回归(LR,logistic regression)、朴素贝叶斯(NB,naive bayes)、支持向量机(SVM,support vector machine)、和多层感知机(MLP,multilayer perceptron)算法作为初级分类器,次级学习器一般选取稳定性较好的简单模型,起到整体提升模型性能的作用,本文选择决策树(DT,decision tree)算法作为次级分类器,并采用Stacking集成策略对各层学习器进行结合。本文中相关算法及参数设置如下。
1) LR:这是一种基于距离分类超平面的离散选择模型,具体如式(3)。
其用距离度量判断该数据流是否为Webshell恶意流量的概率大小。在本文中惩罚项选择L2,惩罚因子为1.0,损失函数优化算法选择坐标轴下降法。
2) NB:对测试样例x进行分类时,学习算法可构建概率模型来选取具有最大后验概率值的y作为输出,如式(4):
3) SVM:SVM分类器主要借助核函数将特征向量映射到高维线性可分空间,并依靠边界样本来建立需要的分离曲线。本文选择的核函数径向基函数(RBF),其中惩罚系数C为1.0,误差精度0.01。
4) MLP:一种前馈神经网络,模型通过定义多个前向反馈的隐藏层来克服单个感知器的局限性,本文的反馈函数是基于符号的函数σ(x) =[1+e-x]-1,具体如式(5)。
其中,权重参数ω和偏置参数b可通过训练数据不断训练得到。本文隐藏层数量为2,神经元数量为50,使用拟牛顿方法(L-BFGS)来优化模型参数权重,正则化项参数0.000 1。
5) DT:通过特征选择算法从训练集中依次选择最优特征来建立分裂点并逐步迭代生成树。常见的决策树算法有ID3、C4.5和CART等。本文次级学习器选择使用Gini系数用于特征选择的CART算法,其中构建树的最大深度为6。
本文采用的基于Stacking集成策略实现方法如图3所示,网络输入包含n个数据包的训练集D= {(xi,y i) ,i=1,2,…,n}和m个数据包的测试集T={(xj,y j),j=1,2,…,m},其中,xi和xj表示数据包的特征向量,yi和yj为该数据包的真实标签。为防止第一层初级分类器在训练集上训练模型导致过拟合问题,本文采用5折交叉验证方法对训练集随机分成D1,D2,…,D5,定义Dk和表示第k折交叉验证的验证集和训练集,对于每一个初级分类器l(l= 1,2,3,4),数据集被用于生成训练模型对生成的模型在数据集Dk和测试集T上进行预测得到对每轮交叉验证中验证集Dk的预测值sil按行进行拼接生成用于次级分类器的训练样本si=( (si1,…,si n),yi),对每轮交叉验证中测试集T的预测值sjl取平均值生成用于次级分类器的测试样本最终利用l个初级分类器产生的训练集和测试集训练次级分类器得到最终的Webshell恶意流量集成模型。
图3 基于Stacking集成策略的实现方法Figure 3 Implementation method of ensemble learning structure based on Stacking
3 实验与分析
3.1 实验环境和实验数据
本文实验在四川大学网络靶场进行。本文的数据集分为正常流量和恶意流量两部分,并按照8:2的比例随机划分为训练集和测试集。其中恶意流量的获取主要来自网络开源仓库Github中下载量最高的11个仓库(如tennc/webshell、ysrc/webshell-sample等),约2 000个恶意样本按图4所示的网络拓扑结构部署后仿真采集得到。在采集到8万条以上基于HTTP协议的恶意流量中,按照Webshell类型筛选出3万条以上(不包括非正常响应以及媒体资源文件)确定具有恶意行为特征的数据分组。其中,简单型木马流量约占18%,网页型木马流量约占80%,文件上传型木马流量约占1.1%。正常流量的获取来源于某安全公司的业务流量,经人工筛选后对数据打上正常标签。仿真数据集具体信息如表2所示。
表2 仿真数据集Table 2 Simulation dataset
图4 数据仿真环境Figure 4 Simulation environment topology
由于进行数据多分类实验的数据集为不平衡数据集,文件上传型Webshell与简单型Webshell、网页型Webshell的样本数量差距较大,为增加实验的合理性,在此采用SMOTE算法[18]进行随机采样至各类别比例接近1:1。
3.2 评价标准
本文采用准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1值(F1-score)来评价二分类情况下分类器的性能,为了评估模型的检测能力,首先定义二分类模型的预测结果与真实结果的4种情况。
(1)TP(true positive):预测当前流量是Webshell恶意流量,且实际上是Webshell恶意流量。
(2)FN(false negative):预测当前流量是正常流量,但实际上是Webshell恶意流量。
(3)FP(false positive):预测当前流量是Webshell恶意流量,但实际上是正常流量。
(4)TN(true negative):预测当前流量是正常流量,且实际是正常流量。
根据以上的判定结果,定义二分类下Webshell恶意流量检测的评价指标如下。
另外,由于本文需要对Webshell恶意流量的具体类别进行判定,故将二分类情况下的混淆矩阵(confusion matrix)推广至多分类,得到式(10)所示的混淆矩阵Ml×l。其中,l为待检测类别,M ii表示预测当前流量是第i个类别且实际上为第i个类别流量的个数,Mij表示预测当前流量是第i个类别但实际上是第j个类别流量的个数,计算第i个类别的精确率[19]、召回率[19]和F1值如下所示。
3.3 实验结果分析
实验预期要达到两个分类:一是模型要能区分通信流量中的正常流量和恶意流量:二是模型能够区分该恶意流量属于何种类型的Webshell攻击。本文主要从特征融合前后与现有同类研究方法两方面进行评估,另外为证明分类器的有效性,在实验过程中选择了XGBoost、GBDT、AdaBoost等常见集成学习算法进行对比。
实验1同类研究方法对比
第一组实验对比同类型研究中基于通信流量的Webshell恶意检测的各方面性能指标,由于文献[9-10]中并未对恶意流量属于何种攻击类型做深入研究,故实验主要针对正常恶意流量二分类情况进行对比。为避免实验数据划分不合理导致实验结果的偶然性,本文采用十折交叉验证对模型进行评估,实验最终的性能指标取交叉验证结果的平均值,如图5所示。
图5 不同方法模型比较结果Figure 5 Comparison result of different method models
实验结果表明,在相同的数据集下,本文提出的方法在正确率、精确率、ROC曲线的AUC面积以及F1指标上均达到最优,分别为98.65%、99.25%、99.07%、98.33%。这说明本文提出的方法能够更准确地检测Webshell恶意流量,并且模型更加稳定。召回率仅比文献[9]低0.4%,比文献[10]低1.8%。
除此之外,本文还对比了同类研究方法中的模型训练以及模型检测所需要的时间开销。其中,一个完整的Webshell恶意流量检测系统的检测时间主要包括两个部分。①使用Scapy等工具捕获并解析未知网络数据包;②训练生成的模型对流量数据进行检测。本文统一使用Scapy对数据包进行捕获并解析,同时使用文献[9-10]对原始数据集的20%数据进行检测,平均消耗时间对比如表3所示。
表3 平均消耗时间对比Table 3 Average elapsed time comparison
由表3可知,本文提出的方法与文献[9]采用的CNN+LSTM构建分类模型相比,在训练时间和检测时间上减少了95.73%和86.14%。此外,在设置序列长度为1 500,与文献[10]中采用4-gram+SVM算法相比,在训练时间和检测时间上减少了70.87%和99.51%。因此,本文提出的方法可大幅降低检测器的训练和检测时间,满足实际应用中快速检测的要求。
实验2特征融合前后对比
第二组实验对比特征经过融合前后在不同类型的Webshell恶意流量上的识别效果。在实验中选用数据集的80%数据进行训练,20%的数据进行测试。同时,按照特征数据包元信息、数据包载荷内容以及流量访问行为3个维度分为3组特征子集,并设置3组对比实验分别为:未经过融合的第1组特征,只融合第1、2组特征,融合第1、2、3组特征。本实验的目的是验证本文提出的方法在改善单一特征对不同类型的Webshell恶意流量识别能力和模型鲁棒性上的提升,识别结果如图6~图8所示。
图6 不同特征融合方案对简单型Webshell识别效果对比Figure 6 Effect of different feature fusion schemes on simple Webshell
图8 不同特征融合方案对网页型Webshell识别效果对比Figure 8 Effect of different feature fusion schemes onweb-based Webshell
图7 不同特征融合方案对文件上传型Webshell识别效果对比Figure 7 Effect of different feature fusion schemes on file-upload Webshell
实验结果表明,本文提出的多特征融合方法在识别不同类型的Webshell恶意流量上都要优于未经过特征融合以及特征融合不充分的情况,各类型识别精确率分别为95.66%、97.61%和90.86%。其中,对网页型Webshell恶意流量的识别上效果提升明显,精确率平均提升27.99%。这是因为网页型Webshell恶意程序本质上仍然为一个Web应用,因而相较于具有较强特征的简单型和文件上传型,恶意流量上更容易被单一分类器识别为正常业务流量最终导致误报。而本文通过集成的方式构建分类模型,在一定限度上提高了分类准确率,能够更加有效地识别网页型Webshell恶意流量。
实验3不同集成算法对比
第三组实验是对比不同集成学习算法在融合后的特征空间下的分类效果。在实验中选定常见的集成学习模型:XGBoost、GBDT、AdaBoost算法与本文采用基于Stacking框架生成的分类模型进行比较。本实验的目的是验证基于Stacking框架的集成学习分类模型相比其他采用集成学习算法在多类型Webshell流量识别上,能够取得更好的分类性能,实验结果如图9~图11所示。
图9 不同集成学习算法对简单型Webshell识别效果对比Figure 9 Effect of different ensemble algorithms on simple Webshell
图10 不同集成学习算法对文件上传型Webshell识别效果对比Figure 10 Effect of different ensemble algorithms on file-upload Webshell
图11 不同集成学习算法对网页型Webshell识别效果对比Figure 11 Effect of different ensemble algorithms on web-based Webshell
实验结果表明,在识别简单Webshell恶意流量上,本文提出的算法在精确率和F1值上都要优于其他3种集成学习算法,达到95.66%和93.99%,召回率比采用XGBoost算法低1.34%,为92.37%。在识别文件上传型Webshell恶意流量上,本文算法在精确率、召回率和F1值上整体优于其他3种集成学习算法,达到97.61%、98.3%、97.95%。在识别网页型Webshell恶意流量上,本文提出的算法在召回率和F1值上都要优于其他3种集成学习算法,达到94.14%和92.47%,而精确率比采用XGBoost算法高2.44%,为90.86%。因此在整体的识别效果上,采用Stacking算法构建的分类模型相比其他基于集成算法在每个分类上的表现更加稳定。
4 结束语
本文提出了一种基于多特征融合的Webshell检测方法,用来检测网络通信过程中可能存在的Webshell恶意流量,该方法从数据包元信息、数据包载荷内容以及流量访问行为等提取流量特征,并将融合后的特征输入基于集成学习策略的分类模型中检测Webshell恶意流量。实验结果表明,该方法不仅在正常与恶意流量的二分类上取得不错效果,同时也能对恶意流量属于何种Webshell攻击做细分,为Web应用的进一步加固和防御提供精确的支撑。这一研究成果弥补了现有方法中未对恶意流量属于何种攻击类型进行研究的不足,以及训练和检测效率低的问题。