一种基于注意力机制的恶意代码分类方法
技术领域
本发明涉及恶意代码的分类方法,具体的说是指一种基于注意力机制的恶意代码分类方法。
背景技术
对于二进制形式的恶意软件,当人类专家分析恶意软件时,他们主要关注代码执行的一系列恶意操作。通常,我们将研究其反汇编代码,这在某种程度上反映了程序的执行逻辑。我们通过研究反汇编代码来检测恶意软件,可以说,从二进制和反汇编代码的角度分析恶意软件是恶意软件检测领域的重要组成部分,大量学者从事了此类研究,并给出了良好的特征提取和模型构建方法。
但是,他们在处理二进制代码和反汇编代码时可能无法有效利用信息。例如,一些学者将二进制代码直接转换为固定长度的图片,但是没有证据表明这个数字是固定长度的。其他人则直接从反汇编代码中提取操作码以形成序列,这在某种程度上保留了序列信息,但会损失相当多的反汇编代码语义信息。我们知道,即使汇编语句的操作码相同,但操作数不同,汇编语句的含义仍可能会有很大差异。
目前,机器学习检测恶意代码方法通常包含传统机器学习方法和深度学习方法。传统机器学习方法主要包含随机森林、决策树、SVM、XGBoost等。深度学习方法主要包含全连接神经网络、卷积神经网络、时间序列神经网络等。但是,上述两种学习方法普遍存在分类准确率较低的问题。
发明内容
本发明提供的是一种基于注意力机制的恶意代码分类方法,其主要目的在于克服现有的恶意代码分类方法准确率较低的问题。
为了解决上述的技术问题,本发明采用如下的技术方案:
一种基于注意力机制的恶意代码分类方法,包括以下步骤:
S1、恶意软件分析:使用IDA Pro作为恶意代码的解析器,利用脚本构建一个自动解码器,解码后的每一个可执行代码将会形成两个文件,即一个Byte 文件和一个ASM文件,所述Byte文件中包含十六进制,用来表示解析的可执行代码,所述ASM文件包含反汇编语句,用来表示解析的可执行代码;
S2、特征提取:先从ASM文件中抽取反汇编语句,接着从Byte文件中抽取出反汇编语句相对应的十六进制数,并设定每条反汇编语句的长度,通过按照执行顺序抽取十六进制数,对照上述方法,就可以形成一个二维向量,作为模型的输入;
S3、构建ACNN识别模型:ACNN识别模型包含注意力机制和CNN机制,将二维向量输入ACNN识别模型进行恶意代码的识别分类。
进一步的,所述步骤S2中由于每条反汇编语句对应的十六进制数长度不同,因此,设定每条反汇编语句的长度为20,如果不够20,则补0;如果超过20,则截断。
进一步的,所述二维向量中横向表示汇编语句,纵向表示汇编语句执行顺序。
进一步的,所述ACNN识别模型包括输入层、注意力机制层、CNN层、全连接密集层和输出层;在输入层输入一个二维向量;接着,生成的向量被输入到注意力机制层,注意力机制层可以根据全局上下文为不同的输入值输出不同的得分值,即利用注意机制层获取关键汇编语句信息,该关键汇编语句信息在输入向量中以十六进制代码表示;之后,将得分值输入到CNN层中,CNN层被用于获取相邻的汇编语句特征,通常这些相邻的汇编语句会构成一组有意义的操作,这将作为区分恶意软件类别的重要基础;接着,全连接密集层用于学习CNN层的高层次特征;最后,输出层输出最后的分类结果。
更进一步的,所述注意力机制层采用多头注意力机制,所述多头注意力机制使用多组注意力,并将注意力的结果连接起来,通过使用多组注意力,可以提取更多的特征。
再进一步的,所述多头注意力机制中头部大小设置为8,头部数目设置为2。
更进一步的,所述CNN层中卷积层设置为3层卷积,每层的卷积核大小为 3,数量为100,并连接到大小为3的池化层。
更进一步的,所述二维向量的数据形状为(2000*20)。
更进一步的,所述注意力机制层用如下公式描述:
Attention(Q,K,V)=F(Q,K)V
在公式中,Q表示一个查询向量,(K,V)表示一组键值对,查询向量通过查询键值对,来获取向量的权重值。进一步分析该公式,另,
Q=(q1,q2,...,qn),AV=Attention(Q,K,V),则可设AV=(av1,av2,...,avn)。
avi表示的是qi在全局中的注意力值,也就是说,通过运用注意力机制,就可以获取每一个分量在全局中的权重值,该权重值表示了分量在全局中的重要程度。
由上述对本发明的描述可知,和现有技术相比,本发明具有如下优点:本发明充分利用了机器码(恶意软件的二进制代码)和汇编语句之间的对应关系,构造了横向表示汇编语句,纵向表示汇编语句执行顺序的二维输入向量,这种方法在特征提取中,经过验证是极其有效的。同时,本发明的识别模型构造方法充分利用了注意力机制原理,并借鉴CNN卷积核思想,经过对比,本发明的识别模型具有较高的拟合效率,分类的准确率得到了大幅度提升。
附图说明
图1为本发明的步骤示意图。
图2为本发明ACNN识别模型的示意图。
图3为九种恶意软件的分类及编号图。
图4为本发明的训练准确率图。
图5为本发明的训练损失率图。
具体实施方式
参照图1,一种基于注意力机制的恶意代码分类方法,包括以下步骤:
S1、恶意软件分析:使用IDA Pro作为恶意代码的解析器,利用脚本构建一个自动解码器,解码后的每一个可执行代码将会形成两个文件,即一个Byte 文件和一个ASM文件,所述Byte文件中包含十六进制,用来表示解析的可执行代码,所述ASM文件包含反汇编语句,用来表示解析的可执行代码;
S2、特征提取:先从ASM文件中抽取反汇编语句,接着从Byte文件中抽取出反汇编语句相对应的十六进制数,并设定每条反汇编语句的长度,由于每条反汇编语句对应的十六进制数长度不同,因此,设定每条反汇编语句的长度为 20,如果不够20,则补0;如果超过20,则截断;通过按照执行顺序抽取十六进制数,对照上述方法,就可以形成一个横向表示汇编语句,纵向表示汇编语句执行顺序的二维向量,作为模型的输入;
S3、构建ACNN识别模型:ACNN识别模型包含注意力机制和CNN机制,将二维向量输入ACNN识别模型进行恶意代码的识别分类。
参照图2,所述ACNN识别模型包括输入层、注意力机制层、CNN层、全连接密集层和输出层;在输入层输入一个数据形状为(2000*20)的二维向量;接着,生成的向量被输入到注意力机制层,注意力机制层可以根据全局上下文为不同的输入值输出不同的得分值,即利用注意机制层获取关键汇编语句信息,该关键汇编语句信息在输入向量中以十六进制代码表示;之后,将得分值输入到CNN层中,CNN层被用于获取相邻的汇编语句特征,通常这些相邻的汇编语句会构成一组有意义的操作,这将作为区分恶意软件类别的重要基础;接着,全连接密集层用于学习CNN层的高层次特征;最后,输出层输出最后的分类结果。
所述注意力机制层采用多头注意力机制,所述多头注意力机制使用多组注意力,并将注意力的结果连接起来,通过使用多组注意力,可以提取更多的特征。本发明中,多头注意力机制中头部大小设置为8,头部数目设置为2;所述 CNN层中卷积层设置为3层卷积,每层的卷积核大小为3,数量为100,并连接到大小为3的池化层。
所述注意力机制层用如下公式描述:
Attention(Q,K,V)=F(Q,K)V
在公式中,Q表示一个查询向量,(K,V)表示一组键值对,查询向量通过查询键值对,来获取向量的权重值。进一步分析该公式,另,
Q=(q1,q2,...,qn),AV=Attention(Q,K,V),则可设AV=(av1,av2,...,avn)。
avi表示的是qi在全局中的注意力值,也就是说,通过运用注意力机制,就可以获取每一个分量在全局中的权重值,该权重值表示了分量在全局中的重要程度。
为了证明本发明特征提取方法和ACNN识别模型的优异性,本发明进行了如下实验:我们从Microsoft 2015kaggle竞争中选择数据作为我们的数据集,他们的数据是窗口平台的恶意软件。IDA Pro解析后,Byte文件和ASM文件生成,它们共有10086个样本,分为9种不同类型的恶意软件,分别是Ramnit, Lollipop,Kelihos ver3,Vundo,Simda,Tracur,Kelihos ver1,Obfus-cator.ACY 和Gatak,每个类别的编号如图3所示。
我们基于注意力机制和CNN机制的ACNN识别模型设置参数如下:注意机制层采用多头注意模型,其中将头部大小设置为8,头部数目设置为2。卷积层设置为3层卷积,每层的卷积内核大小为3,数量为100,连接到大小为3的池化层。
经过200轮训练,其准确率达到了最高,如图4所示。经过200轮训练,其损失率达到最低,如图5所示。
从图4和图5可以看出,我们的ACNN识别模型收敛迅速,具有高精度和低损耗的优点。
为了验证我们的特征提取方法的有效性,我们设置了几套比较实验。然后,我们采用10倍交叉验证的方法,将数据库分成训练集和测试集,而后,我们计算这些测试集的平均分类准确率。
我们输入模型的数据是一个二维向量,其中水平行表示代表每个汇编语句的十六进制表示,垂直列表示代表汇编语句的顺序执行顺序。为了验证这种二维矢量形式更有效,我们设计了两种对比形式。一个是常用的一维数据,它是通过将二维矢量展平为一维矢量而生成的,数据形状为(6000,1)。另一个也是二维数据,仅小于我们提取的水平维度,我们提取20个水平维度,数据形状为(2000,20),对比二维数据的数据形状为为(2000,3)。使用LSTM模型和随机森林模型评估模型,测试结果如表1所示。
表1
在本实验中,我们首先将二维向量展平为一维向量,作为“随机森林”模型的输入,测试结果列于表1。
从表1可以看出,对于传统的Random Forest(随机森林)模型,不同特征提取方法下的分类精度为0.71,各种特征提取方法影响不大,这证明了我们的特征提取方法对传统的随机森林模型影响不大。对于LSTM模型,水平方向提取的维数越大,分类效果越好,最佳分类准确率在数据形状(2000,20)下达到 0.8725,这证明了对于深度学习模型,我们的特征提取方法有利于增强水平相关性,提高分类精度。
为了验证ACNN框架的有效性,我们建立了四个基线模型,即随机森林 (RandomForest)模型,双向LSTM(Bi-Lstm)模型,多头注意力机制(Multi-head attention)模型、深度神经网络(DNN)模型及其他模型进行比较,比较测试的结果如表2所示。
表2
从表2可以看出,我们基于注意机制和CNN机制相结合的ACNN (Attention+CNN)识别模型的分类精确度达到了0.9609。比多头注意力机制 (Multi-head attention)模型高出近5个百分点,比双向LSTM(Bi-Lstm)模型高出近9个百分点,比传统随机森林(RandomForest)模型高出近25个百分点。同时,ACNN模型远远领先于基于注意力机制的其他模型。
上述仅为本发明的具体实施方式,但本发明的设计构思并不局限于此,凡利用此构思对本发明进行非实质性的改动,均应属于侵犯本发明保护范围的行为。