发明内容
针对现有技术中对于恶意代码采用灰度化处理,从灰度图像的角度结合神经网络进行训练并得到实验结果,但由于灰度图像是单通道数据图像,其包含的恶意代码信息特征量少而且单一,造成在神经网络中难以与三通道数据图像相媲美的结果,所以在面对识别变种恶意代码时,存在着无法准确、高效、稳定识别出变种恶意代码的技术问题,本发明提供一种基于CBOW的恶意代码三通道可视化识别方法。
为了解决上述技术问题,本发明采用了如下的技术方案:
一种基于CBOW的恶意代码三通道可视化识别方法,包括以下步骤:
S1、恶意软件信息提取:对待判定的恶意软件通过脚本进行运行系统判断,通过反汇编脚本去除无用信息并生成所需的二进制文件、十六进制.Bytes文件和反汇编的.Asm文件;
S2、CBOW模型利用:对步骤S1提取出来的恶意代码文件,除二进制文件以外,将Bytes文件和Asm文件先进行过滤处理,然后再使用CBOW模型将Bytes文件和Asm文件中的信息由字节形式处理为十进制形式;
S3、恶意代码可视化处理:对步骤S1生成的二进制文件和步骤S2中利用CBOW模型处理过的Bytes文件和Asm文件运用可视化方法,将三种文件数据分别对应图像三种通道生成RGB型的恶意代码图像;
S4、基于Resnet残差网络模型的训练:利用步骤S3中得到的恶意代码图像以及对应的恶意软件数据集中的标签值组成新的数据集,输入到Resnet残差网络模型进行训练,得到成熟的恶意代码识别Resnet模型;
S5、识别模型分类系统构建:基于步骤S4训练得出的成熟恶意代码识别Resnet模型,搭建一个完整的恶意代码识别模型分类系统,完成输入待定恶意代码的正确分类识别。
进一步,所述步骤S1恶意软件信息提取具体包括:首先判断恶意软件是否为有效PE文件,对为有效PE文件的恶意软件通过IDAPro进行反汇编分析;分析完成后自动执行IDA自带的IDAPython脚本,一方面直接生成二进制文件,另一方面通过直接调用IDA自带的staticmain脚本函数生成反汇编的.Asm文件,再一方面通过调用Segment获取PE文件的所有段生成器,验证手段为Header后调整首地址到第二段去,以达到去掉头部的效果,循环到最后一段得到尾地址,调用savefile函数将首尾地址为参数得到十六进制.Bytes文件。
进一步,所述步骤S2中对Bytes文件的过滤处理具体包括:首先利用split函数过滤掉每一行磁盘地址;其次将过滤后的每一行字符以两个字节为单元进行判断,如果有连续并重复5个及以上的CC、FF或00字符,则进行舍弃;最后将处理后的字符单元写入数组以便CBOW模型调用;
所述步骤S2中对Asm文件的过滤处理具体包括:首先以bit的形式读取文件,定位到‘SUBROUTINE’和‘;Section2.’所在文件位置;其次利用循环取出两个位置之间的字符;之后利用split函数截取第6个字符之后的字符串同时采用match函数分别获取’(\s*)’、’loc_’、’sub_’以及’\\t*’所匹配到的字符,也就是汇编指令;最后将获取的汇编指令构成新的字符数组。
进一步,所述步骤S2中将Bytes文件中的信息由字节形式处理为十进制形式具体包括:首先使用前述的Bytes字符单元数组作为CBOW模型输入;然后以[00,01,…,FF]构成的256个字符组成字典放入Word2Vec进行训练,最后将模型返回值进行矩阵数据正则化(((数据-矩阵最小值)/(矩阵最大值-矩阵最小值))*255)使得返回值在0-255之间;
所述步骤S2中将Asm文件中的信息由字节形式处理为十进制形式具体包括:首先使用前述的汇编指令字符数组作为CBOW模型输入,其次以[AAA,ADD,AAM,…,XOR]常用的234个汇编指令集构成字典放入Word2Vec进行训练,之后将返回值进行矩阵数据正则化(((数据-矩阵最小值)/(矩阵最大值-矩阵最小值))*255)使得返回值在0-255之间,最后将返回值构成234×256的矩阵填充22×256个0,以构成256×256的矩阵。
进一步,所述步骤S3中二进制文件运用可视化方法生成第一通道的原理为:先将8位二进制数据转成16进制字符数据,接着将16进制字符数据转成10进制整数形式,之后根据指定宽度形成向量,取出文件前64KB,若文件小于64KB则在不足之处填充0,以此得出256*256的二维矩阵形成第一通道;
Bytes文件运用可视化方法生成第二通道的原理为:先去除恶意代码16进制文件中的模糊数据,接着用CBOW模型将去除模糊数据后更具有象征恶意代码的16进制文件中的字符向量化,之后取出文件前64KB,若文件小于64KB则在不足之处填充0,以此得出256*256的二维矩阵形成第二通道;
Asm文件运用可视化方法生成第三通道的原理为:先提取出Asm文件中的所有汇编指令,接着采用第二通道中的CBOW模型将汇编指令向量化,之后取出文件前64KB,若文件小于64KB则在不足之处填充0,以此得出256*256的二维矩阵形成第三通道。
进一步,所述第一通、第二通道和道第三通道中的数据通过Python中Image库中的fromarray函数生成256*256*3的RGB型恶意代码图像。
进一步,所述步骤S4中Resnet残差网络模型选用Resnet34网络模型结构。
进一步,所述步骤S5中恶意代码识别模型分类系统具体是将恶意软件信息提取、恶意代码可视化处理以及训练成熟的恶意代码识别Resnet模型进行集成,并对恶意代码识别Resnet模型识别的恶意代码家族号和各家族特征点进行说明并输出。
与现有技术相比,本发明提供的基于CBOW的恶意代码三通道可视化识别方法具有以下有益效果或优点:
1、提高恶意代码信息利用率:本发明在从恶意软件提取出恶意代码的过程中,使用了IDAPython处理脚本,一键提取二进制文件、Bytes文件以及Asm文件三种文件,因而提高了恶意代码信息特征利用率,从根本上降低了恶意代码识别的误差率;
2、避免可视化图像信息特征重复率:从恶意软件提取出的三种文件,从二进制角度来看具备着大规模信息特征重复问题;本发明在对三种文件处理过程中使用了自然语言处理模型中的连续词袋模型CBOW,该模型可以根据不同的词典将相同的字符转换成不同的向量,但向量之间依旧存在一定联系,因而提高了恶意代码特征信息的多样性,避免了可视化图像信息特征的重复率;
3、提高恶意代码可视化图像识别准确率:合理的图像生成方法是基于Resnet残差网络的恶意代码识别模型识别准确率高低的关键,以往处理方式为单通道灰度化处理以及三通道均值化处理,存在着特征信息有效性差、特征信息包含量少等问题;而本发明将提取出的三种恶意代码文件以三种不同的方法进行处理并生成可视化图像,能够将每一种文件生成的数据作为一种通道的需求,结合三种通道不一样的数据生成RGB图像放入Resnet网络进行训练,提高了恶意代码信息特征的利用率和恶意代码可视化图像识别准确率;
4、总之,本发明提供的方法充分利用RGB图像为三通道的优点,对每一个通道的数据进行不一样的定义,使得RGB图像具备更多的特征信息,提高了恶意代码识别模型的准确率,降低了恶意代码模型对变种恶意代码识别的误差率,保证了该恶意代码识别模型在不同系统的通用性。
具体实施方式
为了使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体图示,进一步阐述本发明。
请参考图1所示,本发明提供一种基于CBOW的恶意代码三通道可视化识别方法,包括以下步骤:
S1、恶意软件信息提取:对待判定的恶意软件通过脚本进行运行系统判断,通过反汇编脚本去除无用信息并生成所需的二进制文件、十六进制.Bytes文件和反汇编的.Asm文件;其中,所述通过脚本进行运行系统判断具体为:首先通过脚本判断恶意软件是否为PE文件,脚本原理在于利用GetModuleHandle函数获取软件DOS头的首地址;其次判断DOS头部中的E_lfanew字段值,根据字段值找到软件真正的PE头(Image_NT_Headers);最后判断该Headers中的Signature字符按值,如果为’5045’则是PE文件,反之则舍弃恶意软件;
S2、CBOW模型利用:对步骤S1提取出来的恶意代码文件,除二进制文件以外,将Bytes文件和Asm文件先进行过滤处理,然后再使用CBOW模型将Bytes文件和Asm文件中的信息由字节形式处理为十进制形式;
S3、恶意代码可视化处理:对步骤S1生成的二进制文件和步骤S2中利用CBOW模型处理过的Bytes文件和Asm文件运用可视化方法,将三种文件数据分别对应图像三种通道生成RGB型的恶意代码图像;
S4、基于Resnet残差网络模型的训练:利用步骤S3中得到的恶意代码图像以及对应的恶意软件数据集中的标签值组成新的数据集,输入到Resnet残差网络模型进行训练,得到成熟的恶意代码识别Resnet模型;
S5、识别模型分类系统构建:基于步骤S4训练得出的成熟恶意代码识别Resnet模型,搭建一个完整的恶意代码识别模型分类系统,完成输入待定恶意代码的正确分类识别。
作为具体实施例,请参考图2所示,本申请的PE文件逆向工作的目的是通过IDAPro生成出正常软件样本的Bytes文件和Asm文件。具体所述步骤S1恶意软件信息提取包括:首先判断恶意软件是否为有效PE文件,即判断(具体判断方法请参考前述步骤S1)PE文件是否符合要求,若不符合则舍去(数据收集的工作),对为有效PE文件的恶意软件(符合要求的PE样本)通过IDAPro进行反汇编分析;分析完成后自动执行IDA自带的IDAPython脚本(反汇编脚本),一方面直接生成二进制文件,另一方面通过直接调用IDA自带的staticmain脚本函数生成反汇编的.Asm文件,再一方面通过调用Segment获取PE文件的所有段生成器,验证手段为Header后调整首地址到第二段去,以达到去掉头部的效果,循环到最后一段得到尾地址,调用savefile函数将首尾地址为参数得到十六进制.Bytes文件。其中,Asm文件的生成是IDA自带的功能,可直接调用脚本函数生成,而Bytes文件的生成则需要自行编写脚本函数。具体处理过程可分为以下三部分:
第一、IDA分析:PE文件分可为32位和64位,而IDAPro的分析器也可分为32位和64位,即可与PE文件相对应。由于64位的IDA可以兼容32位PE文件,而32位的IDA无法兼容64位PE文件,因此,本申请统一使用64位的IDA。具体调用IDA的方式为使用Python代码在命令行执行相关命令。IDAPro自带文本模式的启动程序,占用的系统资源更少,并且无界面,较于图形模式的IDA更适合本申请,因此本申请通过IDA命令行方式来启动IDA对相关PE文件进行分析,分析完成后,则轮到IDAPython发挥作用。IDAPython是常用于IDA上的脚本文件类型,本质是Python,只是和IDA相结合,能够调用IDA的相关功能接口。IDA命令行模式的“-S”指令后跟脚本文件名即可在分析完PE文件后执行脚本代码,如下:
ida64wFilePath+"-A-S"+idcScriptFileName+""+EXEname
上面是在命令行执行的指令,通过Python的subprocess.Popen方法使其执行,这里的IDAPython脚本就是用于生成Asm文件和bytes文件。
第二、生成Asm文件:Asm文件的生成是IDA自带的一项功能,因此生成起来较为方便,IDAPython封装了调用IDA生成Asm文件的方法,脚本成功执行后,即可自动生成Asm文件。Asm文件本质上就是PE文件经过反汇编后得到的汇编代码,也就是所谓的汇编语言源程序。
第三、生成bytes文件:bytes文件的生成则无法直接调用IDA相关功能接口得到,需要通过idc脚本执行以下步骤操作:①、首先是去掉PE文件的头部(Header段),通过IDAPython的Segments方法可以获取PE文件所有段的生成器,而每个段又有相关函数可以获取其首尾地址,验证首段为Header后,将起始地址调整为第二个段的首地址,如果首段不为Header,则不用调整,从而得到了需要的首地址;②、接下来是得到尾地址,第一步已经得到了所有段的生成器,因此通过for循环得到最后一个段的尾地址,即是所需要的尾地址;③、最后是获取bytes文件,通过首尾地址作为相关参数,调用savefile函数,从而将PE文件的字节的十六形式保存到bytes文件中。
作为具体实施例,所述步骤S2中对Bytes文件的过滤处理具体包括:首先利用split函数过滤掉每一行磁盘地址;其次将过滤后的每一行字符以两个字节为单元进行判断,如果有连续并重复5个及以上的CC、FF或00字符,则进行舍弃;最后将处理后的字符单元写入数组以便CBOW模型调用;
所述步骤S2中对Asm文件的过滤处理具体包括:首先以bit的形式读取文件,定位到‘SUBROUTINE’和‘;Section2.’所在文件位置;其次利用循环取出两个位置之间的字符;之后利用split函数截取第6个字符之后的字符串同时采用match函数分别获取’(\s*)’、’loc_’、’sub_’以及’\\t*’所匹配到的字符,也就是汇编指令;最后将获取的汇编指令构成新的字符数组。
作为具体实施例,所述步骤S2中将Bytes文件中的信息由字节形式处理为十进制形式具体包括:首先使用前述的Bytes字符单元数组作为CBOW模型输入;然后以[00,01,…,FF]构成的256个字符组成字典放入Word2Vec进行训练,最后将模型返回值进行矩阵数据正则化(((数据-矩阵最小值)/(矩阵最大值-矩阵最小值))*255)使得返回值在0-255之间;
所述步骤S2中将Asm文件中的信息由字节形式处理为十进制形式具体包括:首先使用前述的汇编指令字符数组作为CBOW模型输入,其次以[AAA,ADD,AAM,…,XOR]常用的234个汇编指令集构成字典放入Word2Vec进行训练,之后将返回值进行矩阵数据正则化(((数据-矩阵最小值)/(矩阵最大值-矩阵最小值))*255)使得返回值在0-255之间,最后将返回值构成234×256的矩阵填充22×256个0,以构成256×256的矩阵。
作为具体实施例,所述CBOW模型结构如图3所示,连续词袋模型CBOW的作用是假设基于某中心词在文本序列前后的背景词来生成该中心词,例如在文本序列“the”“man”“loves”“his”“son”里,以“loves”作为中心词,且背景窗口大小为2时,连续词袋模型关心的是,给定背景词“the”“man”“his”“son”生成中心词“loves”的条件概率,也就是
P("loves"|"the","man","his","son").
因为连续词袋模型的背景词有多个,将这些背景词向量取平均,然后使用和跳字模型一样的方法来计算条件概率。设vi∈Rd和ui∈Rd分别表示词典中索引为i的词作为背景词和中心词的向量(注意符号的含义与跳字模型中的相反)。设中心词wc在词典中索引为c,背景词wo1,…,wo2m在词典中索引为o1,…o2m,那么给定背景词生成中心词的条件概率为:
为了让符号更加简单,记W
o={w
o1,…,w
o2m},且
那么上式(1)可简写成:
给定一个长度为T的文本序列,设时间步t的词为w(t),背景窗口大小为m。则连续词袋模型似然函数的背景词生成任一中心词概率为:
作为具体实施例,请参考图4所示,所述步骤S3中二进制文件运用可视化方法生成第一通道的原理为:先将8位二进制数据转成16进制字符数据,接着将16进制字符数据转成10进制整数形式,其值域为[0,255],对每一个文件进行文件大小的判断,之后根据指定宽度形成向量,取出文件前64KB用于生成图像,若文件小于64KB则在不足之处填充0,以此得出256*256的二维矩阵形成第一通道;
Bytes文件运用可视化方法生成第二通道的原理为:先去除恶意代码16进制文件中的模糊数据,接着用CBOW模型将去除模糊数据后更具有象征恶意代码的16进制文件中的字符向量化,之后取出文件前64KB用于生成图像,若文件小于64KB则在不足之处填充0,以此得出256*256的二维矩阵形成第二通道。其中,所谓的模糊信息就是包含了大量连续的相同字节0xCC,0xCC通常表示可执行文件中的一个中断,而连续的0xCC通常用于填充或对齐,这样的连续字节对于语义的理解是毫无意义的;除了0xCC之外,在软件样本中还经常看到连续的0x00,它们通常用于填充或分隔不同的内容(资源、片段等),这对于语义的理解同样是没有实际意义的。采用了自然语言处理方法word2vec中的CBOW,采用该模型将字符向量化的目的是为了在相同数据输入情况下得出同等重要但与第一通道不一样的特征信息,并进行文件大小处理判断取文件前64KB,最后就能得出256*256的二维矩阵;
Asm文件运用可视化方法生成第三通道的原理为:先提取出Asm文件中的所有汇编指令如pop、call、push等,接着采用第二通道中的CBOW模型将汇编指令向量化,其目的在于从最底层进行恶意代码特征分析,之后取出文件前64KB用于生成图像,若文件小于64KB则在不足之处填充0,以此得出256*256的二维矩阵形成第三通道。
作为具体实施例,所述第一通、第二通道和道第三通道中的数据通过Python中Image库中的fromarray函数生成256*256*3的RGB型恶意代码图像。
作为具体实施例,请参考图5所示,所述步骤S4中Resnet残差网络模型选用现有的Resnet34网络模型结构来实现,该网络模型结构的参数包括:第1层卷积为7×7×64个神经单元,第2到7层卷积为3×3×64个神经单元,第8到15层卷积为3×3×128个神经单元,第16到27层卷积为3×3×256个神经单元,第28到33层卷积为3×3×512个神经单元,第34层平均池化为3×3×64个神经单元。其中,该网络模型中残差单元的结构如图6所示,则残差单元结构表示为:
yl=h(xl)+F(xl,Wl) 式(4)
xl+1=f(yl) 式(5)
其中,xl和xl+1分别表示残差网络中的第I层残差单元的输入与输出,yl表示第I层残差单元总输出的值。简化上述公式,令所有分支中h(xl)=xl以及xl+1=yl,那么就会得到:
xl+1=xl+F(xl,Wl) 式(6)
则从浅层I到深层L的学习特征就可以表示为:
F(xi,Wi)表示第i层神经元输入xi与权重Wi的函数关系,结合链式法则可知,假设损失函数为loss,则反向传播的梯度公式可表示为:
其中,公式(7)中最右侧括号中的‘1’表示为当有短路机制时无损传播的梯度值,而
表示为经过带有权重的卷积层后残差梯度为多少。值不为-1,也就是能解决网络层数过深引发梯度消失的根本原因。
作为具体实施例,请参考图7所示,所述步骤S5中恶意代码识别模型分类系统主要实现上述步骤的集成使用,具体是将恶意软件信息提取、恶意代码可视化处理以及训练成熟的恶意代码识别Resnet模型进行集成,并对恶意代码识别Resnet模型识别的恶意代码家族号和各家族特征点进行说明并输出。本系统有识别单个软件和多个软件的选择功能,能对9种恶意代码家族进行准确分类的能力。
与现有技术相比,本发明提供的基于CBOW的恶意代码三通道可视化识别方法具有以下有益效果或优点:
1、提高恶意代码信息利用率:本发明在从恶意软件提取出恶意代码的过程中,使用了IDAPython处理脚本,一键提取二进制文件、Bytes文件以及Asm文件三种文件,因而提高了恶意代码信息特征利用率,从根本上降低了恶意代码识别的误差率;
2、避免可视化图像信息特征重复率:从恶意软件提取出的三种文件,从二进制角度来看具备着大规模信息特征重复问题;本发明在对三种文件处理过程中使用了自然语言处理模型中的连续词袋模型CBOW,该模型可以根据不同的词典将相同的字符转换成不同的向量,但向量之间依旧存在一定联系,因而提高了恶意代码特征信息的多样性,避免了可视化图像信息特征的重复率;
3、提高恶意代码可视化图像识别准确率:合理的图像生成方法是基于Resnet残差网络的恶意代码识别模型识别准确率高低的关键,以往处理方式为单通道灰度化处理以及三通道均值化处理,存在着特征信息有效性差、特征信息包含量少等问题;而本发明将提取出的三种恶意代码文件以三种不同的方法进行处理并生成可视化图像,能够将每一种文件生成的数据作为一种通道的需求,结合三种通道不一样的数据生成RGB图像放入Resnet网络进行训练,提高了恶意代码信息特征的利用率和恶意代码可视化图像识别准确率;
4、总之,本发明提供的方法充分利用RGB图像为三通道的优点,对每一个通道的数据进行不一样的定义,使得RGB图像具备更多的特征信息,提高了恶意代码识别模型的准确率,降低了恶意代码模型对变种恶意代码识别的误差率,保证了该恶意代码识别模型在不同系统的通用性。
最后说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的宗旨和范围,其均应涵盖在本发明的权利要求范围当中。