当前位置:首页 期刊杂志

基于深度学习的Webshell恶意代码检测方法研究

时间:2024-05-04

周子恒 李琳 赵叙 李凯

摘要:在当今现代化的世界中,人工智能逐渐被应用在各个领域之中,而深度学习就是人工智能的核心算法之一,近些年来也被广泛应用于网络安全领域,传统简单的通过人工定义规则集的检测方法逐渐被淘汰掉。而现在,如果将深度学习方法应用在检测Webshell中,不仅可以很好地提高准确率,而且和传统的机器学习方法相比,可以自动提取特征值,完成特征工程的过程更加智能化。因此基于深度学习来研究Webshell检测是近些年来一个得到持续关注的热点课题。该文主要针对使用PHP编写的Webshell进行检测,将深度学习方法和PHP文件操作码序列的特点进行结合,在构建的模型上训练测试数据集,最终可以获得相当高的准确率。

关键词:Webshell;操作码;词向量;长短记忆网络;深度学习

中图分类号:TP393        文献标识码:A

文章编号:1009-3044(2021)07-0180-04

Abstract: In todays modern world,artificial intelligence is gradually applied in various fields,deep learning is one of the core algorithm of artificial intelligence. And the deep learning methods have also been gradually applied in the field of network security. Therefore, the traditional simple detection method of manually defining rule sets is gradually eliminated. And now, applying the deep learning method to the detection of Webshell can not only improve the accuracy, but also, compared with the traditional machine learning method, can automatically extract features ,therefore, complete feature engineering more intelligently. As a result, it is a very hot topic to study Webshell detection based on deep learning. Then, this paper mainly tests Webshell written in PHP, We combine the deep learning method and the characteristics of PHP file opcode sequence, then train the test data set on the built models, and can obtain a high accuracy rate.

Key words:Webshell;opcode; word embedding; LSTM;deep learning

1 绪论

1.1项目背景及相关研究

Webshell是一種网络页面后门程序,也被称为木马,是一种Web管理工具,可以对web服务器进行操作。黑客往往利用各种漏洞上传自己编写的Webshell到Web服务器,从而对文件、数据库等进行管理。黑客可以对被植入Webshell的网站进行文件的上传和下载,调用相关系统命令等一系列恶意操作,更有甚者可以通过各种混淆的手段绕过WAF。Webshell极具隐蔽性,很难被发现,并且随着时间的推移,其种类得到了大量的扩充。根据脚本类型可以分为PHP木马、ASP木马、JSP木马和CGI木马;按照功能则可以将其分成大马、小马及一句话木马。各种Webshell的破坏性、隐藏性等都不容小觑,严重威胁着一个网站的安全,甚至在一些领域威胁到了国家安全。但目前大多数对于Webshell的检测都是基于规则集的检测方法,通过人工核定特征码、危险函数等来识别一种特定的Webshell,虽然这种方法查找起来速度较快,但是存在很高的出错率和遗漏率,在网站规模日益庞大的信息化时代,人工设定规则集的方式显然不能满足日益变化的Webshell种类。

近些年机器学习的兴起和在各个领域的应用,给Webshell的检测工作带来了新的思路,也有相当多的学者、科研机构进行了一定的研究。例如,2016年胡必伟提出基于贝叶斯的Webshell检测技术,同时还应用统计学检测方法,计算文件信息熵,并以此为依据确定文件是正常文件还是Webshell文件。同时在贾文超等人近期进行的研究中,采用了随机森林算法,提高决策树分类强度,降低了树间的相关度,达到了相当好的效果,同时根据其仿真实验得出的结果可以证明,该算法提高了Webshell检测的效率和准确率。在2018年,张涵等人在论文《基于多层神经网络的Webshell改进检测方法研究》中利用深度学习的卷积神经网络对Webshell进行了检测,利用词向量转换算法word2vec将经过预编译处理得到的中间代码进行转换,得到特征向量。最后,利用多层神经网络进行检测。实验结果证明,该方法与传统的机器学习算法相比,有效提高了准确率,降低了丢失率,减少了人工的操作,对未知Webshell的检测能力也得到了有效加强。

1.2研究内容

本文将主要解决深度学习在Webshell检测中的相关应用问题,计划利用深度学习理论智能提取恶意代码操作码序列特征并对分类模型进行相关研究。本文将PHP文件编译成操作码序列,利用循环神经网络(RNNs-LSTM)对Webshell检测进行模型搭建,其中还包含word2vec词向量转换、多层LSTM结构等。最后通过实验数据,比较出不同层次结构模型的表现,选择最佳的模型。

1.3论文结构

本文首先在第一章中对Webshell的相关概念及可能造成的威胁进行了介绍,同时也阐明了近些年来学界所做的相关研究,并表明我们做的研究方向和期望。

第二章中将介绍本文涉及的相关技术,主要包括深度学习的优势、PHP操作码序列获取,词向量等。

第三章则是介绍本文所提出的基于深度学习的Webshell检测模型。

第四章中调整模型层数,获取实验结果进行对比,找到最佳模型。

最后在第五章中,我们对全文进行了总结,对我们所提出的模型和结果进行了分析,总结了所提出技术的优缺点,并对未来进行了展望。

2相关技术及其研究

2.1深度学习自动化特征提取

对于机器学习系统而言,特征提取是尤为关键的,将对整个模型的架构和最终的结果产生相当大的影响。但是传统的机器学习又往往需要人工调整规则集,误差较大的同时可迁移性也很差,还浪费了大量的人力物力。而深度学习在大数据中分析自动获得所需的特征值,大大降低了人力的开销,同时提高了检测的准确性。因此具有相当好的效果,在各种领域中也得到了十分广泛的应用。

2.2 PHP操作码序列

PHP操作码(opcode)是一种底层的代码,类似于汇编指令,只不过该指令在PHP的Zend虚拟机中运行。执行PHP高级语言的代码时大致会经过如下几个步骤,如图1所示。

(1)词法分析,去掉注释、空格,识别出有意义的单词。

(2)语法分析,组合单词成符合文法的语句。

(3)将语句编译成一条条指令,即opcode。

(4)Zend虚拟机执行opcode,运行PHP脚本。

我们的样本是由PHP高级语言写成的,其中包含了各类关键字、标识符,单词类别繁杂,若是直接对其进行向量化处理,将会得到一个非常大的稀疏矩阵,从而造成资源浪费。我们可以将PHP高级语言写成的代码转换为一个较小的有限指令集,即PHP操作码,然后再对操作码进行向量化处理。

操作码可以通过VLD(VulcanLogicDisassembler)扩展获得。例如,cmd里运行命令“php -dvld.active=1 -dvld.execute=0 ./phpinfo.php”,可得到phpinfo.php的操作碼(图2中的op字段)。其中,“-dvld.active=1”表示启用扩展,“-dvld.execute=0”表示不执行该程序脚本。

下面对本地所有样本执行该命令(部分结果如图3所示)。第一列字段值为序号;第二列字段值为1表示是webshell文件,字段值为0表示是正常文件;第三列字段值为文件路径;第四列字段值为操作码;第五列字段值为操作码个数。这样就得到了所有样本的操作码序列,后续可以进行向量化。

2.3词向量

2.3.1基本概念

机器无法直接处理现实中的语言文字,故需要将他们数学化,而词向量就是语言文本数学化后的数据。简单地说,通过某种方法,将语言文本中的一个个文字单位转化成一个个向量,这些向量就称为词向量。

2.3.2 one-hot表示法

最简单的向量化方法。假如有句子“afriendinneedisafriendindeed”,对句子进行处理,对单词去重,形成一本字典,就有{“a”,“friend”,“in”,“need”,“is”,“indeed”},这个字典就作为输入。经过one-hot表示后,输出即为每个单词的向量表示,比如“friend”表示为[0,1,0,0,0,0],“need”表示为[0,0,0,1,0,0]。这种方法虽然简单,但能直观地让人明白向量化的过程,说明了单词是如何数学化的。

2.3.3 基于频率的词向量

基于频率的词向量表示方法主要有CountVector、TF-IDFVector、Co-OccurenceVector。

CountVector是对句子中出现的单词进行计数,从而生成一张二维表来表示向量化后的结果。表头为字典,字典对所有文档(及整个语料库)进行去重;每一行代表一个文档。比如,现有两个文档,D1=“Heishandsome”,D2=“Heishandsome,veryhandsome”。字典为{“He”,“is”,“handsome”,“very”},生成二维表如表1。

这一方法只是简单的计数,对于一些特殊的词汇,例如“is”“and”等在日常使用中经常出现,使用高频,但显然不表示重要意义。对这些词计数实质上加大了它们的重要性,这并不合理。

TF-IDF方法则引入了逆文档频率的概念。逆文档频率IDF=log(N/n)。N为文档总数,n代表某个单词在多少个文档中出现过。对于常用词汇,更可能出现在各种文档中,IDF的值降低了这一类词的权重。 TF即为某个词在某个特定文档里出现的次数,TF与IDF的乘积就作为词汇最终的权重,表示其重要性,相比纯计数更加合理。

Co-OccurenceVector还将上下文内容考虑了进来。举例如下,现有句子“Heisaveryhandsomeboy.Heisclever”。引入概念contextwindow表示上下文范围,假定contextwindow=2,那么与very共现的单词即为[“is”,“a”,“handsome”,“boy”]。取该句子的字典,下面构建共现矩阵,如表2所示。看看He这一行是怎么得到的:He出现了两次,第一次与它共现的单词为[“is”,“a”],第二次与它共线的单词为[“handsome”,“boy”,“is”,“clever”],故“is”出现了两次,除“He”“very”外,其余单词出现次数均为1。

共现矩阵的词向量包含了上下文语义信息,相比前面两种方法更优秀。

2.3.4基于预测的词向量

基于频率的词向量表示方法主要有连续词袋模型(CBOW,continuesbagofwords)、跳字模型(Skip-Gram)。之前介绍的三种词向量都有一个共同的缺点,即一旦单词数目非常多后,矩阵会变得庞大而稀疏,造成资源浪费,处理也更加麻烦。CBOW和Skip-Gram与上述模型有相似之处,都可以包含上下文信息;不同的是,它们通过构建神经网络的方式对向量降维,达到了压缩词向量的效果,使词向量的表示更加紧密。

2.3.5word2vec工具

word2vec是Google发布的一个工具,其中就包含了上述的跳字模型和连续词袋模型,它使用方便,可以使我们快速地将单词向量化,然后让机器来读取数据。

使用该工具只需一句话:model=gensim.models.Word2Vec(sentences,min_count=1),第一个参数是训练语料,第二个参数指小于该数的单词会被剔除,第三个参数是神经网络的隐藏层单元数,默认为100。

2.4本章小结

本章首先从深度学习和传统的机器学习相比,在提取特征方面的优势出发,着重介绍了PHP操作码的获取和在Webshell检测中的应用以及词向量的相关概念。

3基于深度学习的Webshell检测模型的设计

3.1 RNNs-LSTM模型

长短期记忆模型LSTM(Longshort-termmemory)是一种特殊的循环神经网络。它能够在较长序列数据中起作用,使数据有更长距离的依赖性,解决长序列的梯度消失和梯度爆炸问题。

LSTM的输入有三个,细胞状态Ct-1、隐层状态ht-1、输入向量Xt;输出有两个,细胞状态Ct、隐层状态ht。细胞状态的信息会一直在上面的一条线上传递,隐层状态的信息一直在下面的一条线上传递,它们之间会有一些交互,即隐层状态的信息会通过门结构传递到上层,从而对细胞状态施加影响。

中间框部分即为门结构。σ代表sigmoid函数,它的输出在0到1之间;tanh是双曲正切函数,它的输出在-1到1之间。门结构包括了遗忘门、更新门、输出门。遗忘门对上一节点传来的输入进行选择性遗忘;更新门获得新的输入带来的信息并进行选择性记忆,保留部分信息;输出门决定哪些数据将作为当前状态的输出。

3.2本章小结

本章简要介绍了长短期记忆模型LSTM及其门结构。

4实验结果测试及分析

4.1实验环境

Windows10下使用Python3.6.8运行,使用的IDE为VisualStudioCode

4.2 实验模型及测试结果

使用LSTM模型进行测试。

样本操作码利用word2vec全部向量化后就可以作为检测模型的输入了。我们使用keras进行建模。keras在TensorFlow的基础上又封装了一层,使用方便,很适合用来做实验。

model = Sequential()

model.add(LSTM(128, dropout=0.2, recurrent_dropout=0.2))

model.add(Dense(1, activation='sigmoid'))

model.compile(loss='binary_crossentropy',

optimizer='adam',

metrics=['accuracy'])

print('now training....')

model.fit(x_train, y_train, epochs=100, batch_size=32)

Sequential用来插入神经网络层。add创建了一个单层的LSTM模型,其中包含128个神经元。dropou=0.2规定了每次训练随机丢失20%的权重,用于防止过拟合,从而增加模型的泛化能力。sigmoid函数用作神经网络的激活函数,常用于二分类问题,它能将任何一个实数映射到(0,1)的区间里,可以用于将数据变成一个0-1分布。compile用于配置训练时使用的损失函数、优化器、准确率评测标准。model.fit()开始训练,参数epochs=100,即把所有訓练数据完整地迭代100遍,最终得到了0.95的准确率,如图5所示。

4.3 结果比对及分析

增加模型层数,使用两层和三层的LSTM模型进行训练和测试,结果如表3所示。

从上述结果中可以发现,并不是LSTM模型的层数越多越好,两层、三层模型的测试准确率都不如单层模型理想,三层LSTM的准确率不到0.90,相比单层低了约0.5。导致这一现象的原因可能是梯度消失,当网络层数加深时,程序在反复学习过程中找到最佳权值以获取最佳输出,梯度的反向传播导致权值的连乘效应加强,梯度效应消失,对结果造成影响。也可能是网络层数加深导致的过拟合。结果显示,当使用单层LSTM时,检测效果最好,此时准确率为0.95161。

4.4 本章小结

改变LSTM模型的层数大小进行了新的训练和测试,最终得出了检测结果的准确率与层数多少并不成正比的结论。较多的网络层数可能导致过拟合,从而检测结果不准确。

5总结及展望

本文在对Webshell操作码序列进行分析后,在已有的相关研究的基础之上,汲取了相关思想,较为创新性的提出了基于深度学习的神经网络模型,并将其与Webshell检测进行结合,最终的模型测试结果取得了不错的准确率,是切实有效的。

当然,本文所提出的模型和实验过程也存在一定的缺陷,例如测试的过程中,虽然已经选择了一定的实验数据,但是在当前庞大复杂的网络环境中,Webshell变化多端,存在各种不同的变种和类型。那么不可避免的,本文所提出的模型在对某些Webshell进行检测时不具有普适性,或许会检测失败。这也是我们未来的一个进行深入研究的方向,我们在未来会持续关注这个领域的相关研究和测试,在测试中不断完善本文所提出的模型,争取在更多的测试用例中都取得优良的结果,以使得我们的模型更具有普适性。

参考文献:

[1] 胡必伟.基于贝叶斯理论的Webshell检测方法研究[J].科技广场,2016(6):66-70.

[2] 张涵,薛质,施勇.基于多层神经网络的Webshell改进检测方法研究[J].通信技术,2019,52(1):179-183.

[3] YoonKim.ConvolutionalNeural Networks for Sentence Classfication[R].Neural and Evolutionary Computing,2014.

[4] He K M,ZhangX Y,Ren SQ,etal.Deep residual learning for image recognition[C]//2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR).June 27-30,2016,Las Vegas,NV,USA.IEEE,2016:770-778.

[5] He KM,SunJ.Convolutional neural networks at constrained time cost[C]//2015 IEEE Conference on Computer Vision and Pattern Recognition (CVPR).June7-12,2015,Boston,MA,USA.IEEE,2015:5353-5360.

[6] Behrens S,Hagen B. Web shell detection using NeoPI[EB/OL].(2012-04-13)[2017-11-6].

[7] 賈文超,戚兰兰,施凡,等.采用随机森林改进算法的WebShell检测方法[J].计算机应用研究,2018,35(5):1558-1561.

【通联编辑:代影】

免责声明

我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!