基于CNN-BiLSTM的恶意代码家族检测技术
2020-12-26王国栋芦天亮尹浩然张建岭
王国栋,芦天亮,尹浩然,张建岭
中国人民公安大学 信息技术与网络安全学院,北京100035
1 引言
随着互联网的迅速发展和普及,人们的生活和互联网越来越紧密地联系在一起,复杂的网络环境亟需净化,网络空间安全成为国家安全的重要一环。其中恶意代码是网络安全的重要威胁之一,恶意代码是指人为编写或设置的、对网络或系统会产生危害的代码,它非法侵入目标网络盗取信息和数据,对网络系统造成破坏。恶意代码包括计算机病毒、蠕虫、木马、僵尸网络、勒索软件等。近年来数量呈爆炸式增长的的恶意代码中,新型的恶意代码家族占很小一部分,大多数是由原来的家族中通过变异产生,通过对恶意代码家族的检测[1],可以实现对新增的恶意代码快速分类,有针对性地处理和防范。恶意样本识别检测技术方法通常可以分为静态检测技术、动态检测技术和混合检测技术。
静态检测是指并不实际运行样本,而是直接根据二进制样本或相应的反汇编代码的语法和结构进行分析。Liu 等人[2]使用静态分析技术将恶意代码转换为图像,把恶意代码的全局特征和局部特征相结合,通过将它们分组为块并使用新的视觉词袋模型来获取更具区分性和鲁棒性的特征描述符。Gibert等人[3]提出了一种文件不可知的深度学习方法,从可视化图像中提取的一组判别模式,最终将恶意代码有效地分组到对应各个恶意代码家族中去,实验比较证明了其相对于传统分类技术的优越性能。Su 等人[4]提出了一种轻量级方法来检测物联网环境中的DDos 恶意代码,提取恶意软件图像(即从恶意代码二进制文件转换而来的灰度图像),并利用轻型卷积神经网络对其家族进行分类。Zhao等人[5]提出了基于纹理可视化的深度学习恶意代码分类框架MalDeep,通过代码映射纹理划分和纹理提取,利用机器学习在图像纹理表示的新特征空间中研究恶意代码分类。Coull 等人[6]利用静态分析技术从单个字节嵌入到模型的端到端分析,通过解析和反汇编二进制将这些面向字节的激活与它们的原始语义联系起来,分析了恶意代码的特征。上述静态检测方法简单迅速,不需要占用很大的资源,但是只能用于检测已知的恶意代码家族,而且容易受到加壳、变形等方式的干扰而出现漏报和误报。
动态检测是指将样本在模拟环境中运行,根据样本对操作系统的资源调度等行为进行分析[7]。Kim 等人[8]使用序列比对算法(MSA)对API序列进行动态分析,实现了恶意软件检测和分类。Mohaisen等人[9]提出了一种仅与高级系统事件发生的顺序有关的系统。通过映射关系的简洁级联捕获执行动态跟踪,应用n-gram 文档分类技术来生成预测恶意软件家族的分类器。Boukhtouta等人[10]研究了恶意代码行为深度数据包检查和IP 数据包头分类的正面和负面,根据检测和归因准确性以及它们的复杂程度来预测,最后实现分类。Pektas 等人[11]跟踪观察文件系统、网络、注册表活动以及API 等恶意代码特征,通过应用机器学习算法来将运行行为构建特征向量,在分布式和可扩展的体系结构中对恶意代码样本进行分类,达到了较高的准确率。Hatada等人[12]对恶意代码的网络行为进行分类来确定恶意代码的新品种,恶意行为包括恶意代码特定功能和常规流量功能,应用聚类分析来生成分类器,实验结果证明了该方法在发现新品种恶意软件方面的有效性。Norouzi等人[13]将恶意代码行为执行历史XML 文件转换为合适的WEKA 工具输入,利用数据挖掘分类方法来检测恶意代码家族。上述动态检测方法可以识别出新型的恶意代码家族,能够及时随恶意代码的变化而变化,但需要耗费较长的时间和更多的资源。
混合检测方法是结合静态检测和动态检测的方法,首先通过静态方法提取恶意代码的基因特征,再通过动态检测方法识别恶意代码的混淆处理和未知的恶意操作。Xue等人[14]提出了一种基于概率评分和机器学习的分类方法,设置了概率阈值以连接静态分析和动态分析,加快了静态分析过程,而且通过动态分析似乎对模糊处理具有更大的适应性。Kang 等人[15]提出了一种基于word2vec 的机器学习方法,以较少的维数分析操作码和API 函数,使用Microsoft 恶意代码分类器进行分类。混合检测方法灵活多变,能根据具体恶意代码家族制定特殊的检测方式,但这种检测方式的需要耗费更大的资源,其复杂度和工作量导致混合检测不适用于具有一定规模检测。
面对现阶段恶意代码爆炸式的增长趋势,动态检测耗费的资源较大且比较费时,不可能同时对具有一定规模的恶意代码样本进行分析识别。本文提出了一种不同于传统机器学习[16-17]的基于CNN-BiLSTM 网络的静态恶意代码检测方法,首先利用B2M 图像转换技术将恶意代码可执行文件样本转换为灰阶图像得到图像数据集[18-19],然后通过构建CNN-BiLSTM网络模型对图像数据集进行训练,最后实现对四个恶意代码家族的恶意代码进行检测分类。此方法不需要直接运行恶意代码可执行文件,避免了恶意代码本身给计算机带来的危害,直接将恶意代码可执行文件转化为灰度图解决了传统静态检测方法提取特征速度慢且效率相对较低的问题。模型结合了卷积神经网络和双向长短期记忆网络,克服了卷积神经网络缺乏对上下文的全局关注[20-21]和双向长短期记忆网络缺乏对局部关注的不足,结合两者的优点从全局和局部对恶意代码特征进行学习训练,达到了更好的效果。
2 研究方法
2.1 基于CNN-BiLSTM 的恶意代码家族识别模型
恶意代码家族检测分类需要对恶意代码家族的特征基因进行有效的提取,并对特征进行训练和测试,最终实现恶意代码家族识别分类。本文通过分析现有恶意代码检测分类方法的不足,针对传统的恶意代码特征提取技术无法有效全面地提取恶意代码特征,传统的机器学习无法同时关注全局特征和局部特征,导致恶意代码家族识别分类准确率过低等问题,设计并实现了一种融合卷积神经网络和长短期记忆网络的模型,对恶意代码可执行文件可视化后的数据进行训练和测试,将得出的实验结果与传统机器学习分类方法做对比,验证该方法的有效性。本文提出的基于CNN-BiLSTM的恶意代码家族检测网络架构模型如图1所示。
此模型包含了四部分:恶意代码可视化、CNN的两个卷积层、双向长短时记忆神经网络和CNN 的两个全连接层。模型详细参数如表1 所示。首先使用B2M 技术将恶意代码转化成二阶灰度图,再将恶意代码特征灰度图经过数据预处理的填充之后变成256×256×1 的图片,输入模型经过两层卷积层之后变成64×64×50 的图片集,输入到双向长短时记忆神经网络中,最后经过全连接层分类后得到分类结果。
图1 CNN-BiLSTM模型架构
表1 模型参数
2.2 恶意代码可视化
恶意代码可执行文件中,有很多与恶意代码特征无关联的字符,如果直接从这些可执行文件中提取恶意代码特征,就需要处理可执行文件中的混淆代码,增加了工作量的同时有可能会降低测试的准确性,如果直接将可执行文件转化成灰度图,就可以全面迅速地对特征进行提取。本文将恶意代码的二进制可执行文件视为0~255 之间(包括0 和255)的8 位无符号整数序列。每个值都直接解释为像素的强度,其中0 为黑色,255 为白色。本文用B2M 算法读取恶意代码可执行文件,固定256为行宽向量,把可执行文件转化成二维矩阵。二维矩阵表示为灰度图像,二维矩阵中每个元素的范围为0~255,对应灰度图每个像素的取值,利用这样的方法把恶意代码转化为二阶灰度图。
2.3 卷积神经网络卷积层
卷积神经网络是一种前馈神经网络,它可以进行有监督学习和无监督学习,其中卷积层和池化层具有提取特征的功能。卷积层作为特征抽取器将数据集的恶意代码家族的特征矩阵分割成若干子矩阵,每个卷积层中所有的特征子矩阵与同一个权值矩阵(卷积核)做卷积运算,通过卷积运算对数据进行训练和学习来提取出图像的局部特征,卷积运算可以提取数据集中人类无法理解的恶意代码家族局部抽象特征,起到过滤作用。池化层在卷积层之后,池化层对卷积得来的特征进行筛查,减少特征数量来降低计算量,同时可以起到保留恶意代码家族特征以及防止过拟合的作用。
本文使用卷积神经网络对转换后的恶意代码灰度图数据集进行训练,模型使用Sigmoid 函数作为每一层的卷积层的激活函数,公式(1)为Sigmoid 函数的形式,公式(2)为公式(1)的导函数。Sigmoid函数的形状为S型,平滑且容易求导,它和正态分布函数的积分形式形状非常类似,在无法得知恶意代码家族类型的情况下,它是所有概率分布中最可能的表现形式,所以Sigmoid函数常常被选为激活函数。
2.4 双向长短期记忆网络(BiLSTM)
双向长短期记忆网络是一种双向的时间循环神经网络,通过对正向的时间序列和反向的时间序列进行训练,输出的数据包含上下文的信息。BiLSTM是为了解决LSTM 网络缺乏对上下文的联系而提出的一种神经网络。LSTM 是RNN 的一种特例,解决了RNN 在学习中存在梯度消失和梯度爆炸的问题,它使用梯度下降法使误差梯度随着事件的时间增加而消失,以达到提高准确度的效果。本质上BiLSTM 和LSTM 都属于循环神经网络。
循环神经网络(RNN)具有记忆性,神经元之间参数共享,因此在对序列的非线性特征进行学习时具有一定优势,通常用于处理序列数据的神经网络,循环神经网络的神经元结构如图2所示。
传统的RNN 只能有短期记忆,在神经网络深度加深(时间上或者空间上)的情况下会导致梯度消失以及梯度爆炸,如果通过门控制将短期的记忆与长期的记忆相结合,可以一定程度上解决了梯度消失的问题,这样的循环神经网络称为LSTM。LSTM 的神经元结构如图3所示。
图2 RNN神经元结构图
图3 LSTM神经元结构图
LSTM网络只能单向地从左到右进行训练和传递,但在实际运用中预测可能需要考虑前面输入和后面输入,这样结果才会更加准确。这个时候引入双向LSTM会得到更好的效果,双向LSTM 在输入序列上有两个LSTM互相连接,每一个输入的恶意代码特征都会从正向和反向经过循环神网络,为神经网络提供的上下文全局特征,更快而且更充分地学习训练。BiLSTM的神经元结构如图4所示。
图4 BiLSTM神经元结构图
2.5 卷积神经网络全连接层
模型的最后一个部分是卷积神经网络的两个全连接层,全连接层的每一个节点都与双向循环神经网络的所有节点相连,用来把卷积层和双向循环神经网络提取到的特征融合起来。因为本文的恶意代码家族分类模型属于多分类模型,且各个恶意代码家族的特征存在互斥,所以本文最后一层全连接层的输出值传递给softmax分类器进行分类。
本模型使用softmax 分类器来标准模型的输出,函数的形式为公式(3),其中θi和x 是列向量,可能被换成关于x 的函数fi(x)。通过softmax 函数可以使得P(i)的范围在[0,1]之间,在分类和回归问题中,通常θ是待求参数,通过寻找使得P(i)最大的θi作为最佳参数。公式(4)表示交叉熵损失函数,ai是预测模型的第i类恶意代码家族的置信度,qi表示该恶意代码样本属于哪个家族,如果样本为k,则qk=1 其他值为零。
3 实验结果与分析
3.1 恶意代码采样
恶意代码家族样本的有效采集是进行检测分类的基础,数据集搜集的质量和数量会直接影响训练模型的准确率和实验结果。本文实验搜集到的恶意代码样本实验数据集取自网络恶意样本库VirusShare,该样本库是国内外恶意代码研究的重要样本来源,搜集到的数据集包括ELF、Winexe、CryptoRansom和EK共4个家族4 418 个恶意可执行文件。将数据打好标签之后,在每一个恶意代码家族的可执行文件中抽取80%作为训练集,剩下的20%作为测试集。数据集组成由表2所示。
表2 恶意代码家族数据集组成
3.2 数据预处理
为了确保信息的完整性,本文对实验数据集中恶意代码可执行文件转化成的图片进行填充而不是截取,同时对可执行文件灰度图的前后进行填充。经过实验发现,模型选择的小于65 KB,大于20 KB 的恶意代码执行文件,本文以256 为行宽向量,由于卷积神经网络输入的图片必须统一固定大小,对长度向量小于等于256的灰度图使用0 字节对进行填充,使其生成256×256 的正方形灰度图。图5 显示了一些恶意代码可执行文件的镜像示例,从左上到右下分别来自EK、ELF、CryptoRansom和Winexe 家族。可以看出,同一家族的图像具有相似性。在本文中,使用B2M 方法可视化恶意代码家族二进制文件,这种方法能够更加全面地提取恶意代码的特征基因,从而获得更高的准确性。
3.3 恶意代码家族识别分类
在使用恶意代码可视化技术对恶意代码可执行文件转化为灰度图之后,将训练集的灰度图放入CNNBiLSTM模型中进行学习训练,再将测试集灰度图放入训练得到的模型进行检测分类,最后将使用本文训练模型及方法得到的结果与其他机器学习分类算法的结果进行比较。本文对每一种恶意代码家族都进行了测试,主要有四个衡量指标。
图5 恶意代码家族灰度图
TP:将正确类预测为正确类的个数;
TN:将错误类预测为错误类的个数;
FP:将错误类预测为正确类的个数;
FN:将正确类预测为错误类的个数。
准确率、正确率(Accuracy):指预测正确的样本比重。
精确率(Precision):指被模型预测正确的例子中的正确样本的比重。
召回率(Recall):指的是被预测为正确的例子占总正确例子的比重。
P和R指标可能会出现的矛盾的情况,这样就需要结合两者进行考虑,最常见的方法就是F1 值(又称为F1-Score)。
为了验证本文所提模型的有效性,将本文实验所得的结果与其他几种模型的实验结果相比较。如表3所示。
表3 模型检测结果对比 %
将数据集的恶意代码可执行文件进行转化成灰度图后,可以发现可视化之后的灰度图文件大小存在差异,并且同一系列中的某些恶意代码灰度图可能包含不同的纹理(例如,图6中的Winexe家族(左)和CryptoRansom家族(右)),为了检验这种情况是否会导致实验结果准确率的差异,本文将这些纹理非常不同的灰度图所对应的恶意代码可执行文件筛选出来做进一步分析。
图6 具有不同图标和纹理的灰度图
将四个恶意代码家族的灰度图数据集中将具有不同纹理的灰度图所对应的恶意代码可执行文件过滤出来后,对这一部分恶意代码可执行文件可能存在的加壳、变形等恶意代码混淆技术进行去壳、清洗处理,将得到的恶意代码可执行文件放回原恶意代码家族数据集中,经过灰度图映射技术得到新的恶意代码灰度图数据集。然后按照20%的测试集和80%的训练集进行划分,最后使用相同的机器学习模型对其进行分类测试。得到的结果如表4所示。
表4 新数据集模型检测结果对比 %
由表3 和表4 对比可知,恶意代码家族数据集中具有不同纹理的灰度图对测试的准确率具有一定的影响,在对具有不同纹理的灰度图对应的恶意代码可执行文件进行去壳和清洗处理之后,实验的准确率得到了提高。最后,在对表4各种机器学习算法对数据集测试结果对比可以看出,两种深度学习算法CNN和RNN对恶意代码家族检测分类的准确率、精确率和召回率都比SVM、Random Forest 和J48.trees 三个机器学习算法实现了更好的检测,其中,CNN算法检测准确率为87.13%较SVM、Random Forest 和J48.trees 三个机器学习算法分别提高了11.77、3.67和7.11个百分点,原因是CNN算法能够学习到恶意代码家族更深层次的特征,从而达到更高的准确率,结合了CNN 和RNN 两种算法形成的CNN-BiLSTM 算法结合两种算法的优点较两者达到了更好的效果。从F值上看,CNN-BiLSTM算法结合了两者在局部和全局关注上的优点达到了93.28%,较CNN和RNN算法分别提高了5.54和6.2个百分点,达到上述六种机器学习算法中最好效果。模型本文提出的CNNBiLSTM 网络在对恶意代码分类中相比于一些传统的机器学习算法准确率更高。
4 结论
本文针对传统特征提取方法在提取恶意代码特征过程中无意义的字符串影响特征提取效率且检测准确率过于依赖特征选择,传统机器学习无法同时从局部和全局对恶意代码特征进行学习训练等问题,提出一种将卷积神经网络和双向长短时记忆神经网络相结合对恶意代码家族进行分类的方法。利用B2M恶意代码可视化技术将恶意代码可执行文件转换为相对应的灰阶图像,再应用CNN-BiLSTM 模型从图像数据集中自动学习训练特征,最终实现对收集到的四种恶意代码家族进行检测和分类。在特征提取方面,这种方法相对于直接执行恶意代码可执行文件和人工提取恶意代码的特征基因,一定程度上避免了计算机受到恶意代码的损害,并且节省了大量的资源和时间。在分类检测方面,模型结合了卷积神经网络和双向长短时记忆神经网络的优点从局部和全局两个方面提取恶意代码家族特征,提高了检测分类的准确性。从实验的结果可以看出,在对相同恶意代码数据集进行分类和检测的情况下,与传统的机器学习方法相比,CNN-BiLSTM网络模型对恶意代码家族的检测分类具有更高的准确率,取得了更好的效果。