一种恶意代码家族的识别方法、装置、设备及存储介质

文档序号:32064976发布日期:2022-11-05 00:26阅读:90来源:国知局
一种恶意代码家族的识别方法、装置、设备及存储介质

1.本发明涉及互联网安全技术领域,具体涉及一种结合多通道映射特征图像与微调cnn的恶意代码家族识别方法、装置、设备及及存储介质。


背景技术:

2.近年来,恶意代码呈现快速发展的趋势,其变种数量多、传播速度快、影响范围广,传统的恶意代码检测方法已无法满足快速高效的要求。因此,对恶意代码及其变体进行分类,对于防御日益增长的恶意软件至关重要。
3.在传统代码分析方面,一般来说很难获得恶意程序的源代码,恶意代码变体数量的不断增加也给提取它们的特征码和更新数据库带来了困难。虽然静态分析的代码覆盖率高,但是随着软件复杂度的提升,静态分析的效率会降低,尤其是当恶意代码存在混淆技术等情形时,对所选取的静态特征具有较大的影响。另外一种分析方法是动态分析方法,虽然动态分析方法对恶意代码有较高的识别率,但是动态分析往往会因为执行环境与真实环境之间固有的缺陷,而忽略某些类型的恶意代码或容易被恶意样本所察觉,而且在处理大数据集时耗时且效率较低。
4.为提升恶意代码分类效率,可以使用神经网络对恶意代码进行分析。然而深度学习技术也还面临一些挑战,首先,收集和标注足够多数据的时间和资金代价较高,如使用广泛的imagenet图像数据集,其收集成本巨大,而且所标记的训练数据与未来的数据并不能保证有相同的特征空间,也不足以避免过拟合问题。其次,处理大量的恶意代码需要自动化的和健壮的检测方法。在大数据集下训练网络是十分耗时的,尤其是针对一个较深的网络,还可能出现由于训练方法不当导致训练不收敛的问题。第三,在恶意代码数据集中普遍存在数据不平衡的现象,恶意代码变体的数量在不同家族中有较大差距,样本较少的家族难以得到较好的分类效果。
5.图像化恶意代码特征分析方法已被证明有效,但是恶意代码图像化识别分类方法依然面临着一些问题,首先,如果使用诸如重采样、双三次插值等算法来压缩处理图像,可能会导致一些恶意代码的关键信息特征丢失。其次,与生活中的图像不同,恶意代码图像含有明显的噪声特征。
6.本发明利用同一家族恶意代码样本的共同特征对恶意代码进行检测可以加速恶意代码的分析,减少恶意代码分析数量,并且能在一定程度上减轻反恶意软件系统和恶意软件分析工作的负担。


技术实现要素:

7.本发明的目的是针对现有技术的不足,而提供一种针对恶意代码家族的识别方法、装置、设备及及存储介质。本发明识别方法不仅能提升识别的准确率和模型的鲁棒性,并能极大地减轻检测过程中特征工程的开销,解决因利用传统机器学习分析和检测恶意代码存在速度和效率低问题,尤其解决了特征图像缩放可能带来特征信息丢失的问题。
8.实现本发明目的的技术方案如下:
9.第一方面,本发明提供一种恶意代码家族的识别方法,包括如下步骤:
10.1)数据预处理:
11.分析恶意代码数据集中恶意代码家族样本,对恶意代码的原始二进制文件和反汇编文件进行分析,并提取出局部特征信息2-gram、汇编指令集信息opcode序列和可见字符信息string序列三种不同的静态特征,通过对每一种信息分析使得每一个恶意代码都得到三种不同长度的特征序列集合;
12.2)特征图像生成融合:
13.利用minhash变换算法将提取的三种不同长度的特征序列集合转化为含有对应三通道的rgb特征图像,以实现恶意代码特征图像的生成融合,并且能从不同角度反映恶意代码的空间特征;
14.3)基于微调后的卷积神经网络cnn的识别:
15.采用迁移学习的微调技术对repvgg网络模型进行微调,继而优化并缩短训练时长,该微调后的网络模型通过多个卷积层来达到能自动提取恶意代码的图像特征,同时满足恶意代码家族的识别任务。
16.进一步地,步骤1)数据预处理中所述局部特征信息2-gram提取,提取过程包括:
17.首先,依次将恶意代码.bytes文件中的每相邻两字节转换为像素点(x,y)坐标并存放到集合w1中,该集合中没有重复的元素;
18.然后,记录该坐标值出现的次数n_gram(x,y);
19.其次,由于在.bytes文件中,十六进制0x00和0xcc分别表示通常用于填充或分隔不同的内容和可执行文件中的中断,所以将这两个值对应的像素点坐标值置为0,即n_gram(0,0)=0,n_gram(204,204)=0;
20.最后,得到一个将w1中所有序列进行编码后的集合w1’
,该集合作为2-gram序列的特征集合。
21.进一步地,步骤1)数据预处理中所述汇编指令集信息opcode序列特征提取,根据统计的opcode出现的频率由低到高次序依次编码为整数1到255,其余的编码为整数0,提取过程包括:
22.①
提取:首先从恶意代码.asm文件中提取opcode序列;
23.②
分割:然后使用形如“loc_xxx”的字符串对opcode序列进行分割,分割后得到n段操作码序列,通过分割操作提取到更能准确表达出恶意代码特征的信息;
24.③
再提取:随后将所得到的n段操作码序列分别再依次提取连续的三个opcode存入w2中,并保证集合中的元素是唯一的;
25.④
编码:最后,得到一个将w2中所有序列进行编码后的集合w2’
,作为opcode序列特征集合。
26.进一步地,步骤1)数据预处理中所述可见字符信息string序列特征提取,先制定对可见字符和不可见字符的编码规则:
27.数字0~9编码为十进制数48~57;大写字母a~z编码为十进制数65~90;小写字母a~z编码为十进制数97~122;一些符号(如!,+,/,=)编码为十进制数32~47,58~64,91~96和123~126;其余不可见字符编码为十进制数0,按照以上编码规则可以得到所有可
见字符的编码,记为string_encode;
28.string序列特征提取过程包括:
29.①
提取:首先从恶意代码的.bytes文件中提取所有的字符序列string;
30.②
分割:然后使用不可见字符将string分割为n组字符串序列,即一串连续的可见字符作为一组字符串序列,并将其依次存入集合w3中;
31.③
编码:最后,将集合w3中所有字符串序列中的每个字符串依次根据string_encode进行编码得到集合w3’
,即作为string序列集合。
32.进一步地,步骤2)所述特征图像生成融合,具体是根据定义1-5,基于minhash的方法,根据杰卡德相似系数衡量两个集合的相似度,将w1’
,w2’
和w3’
分别映射到签名矩阵a-sign和变换为灰度图像,其过程如下;
33.2.1)首先将集合w1’
,w2’
和w3’
依次作为输入;
34.2.2)对集合中的所有元素都分别进行多次哈希运算,随后对第i个元素而言取其计算得到的最小哈希值作为签名矩阵a-sign的最终结果;
35.2.3)接着将得到的a-sign中的每一个h(x)值分配给x,y,z,其中x和y作为特征图像的坐标值信息,z作为特征图像中的像素值信息;
36.2.4)对于2-gram和opcode序列集合而言,先将其对应的a-sign中每一个值转换为二进制数,接着按二进制数每8位依次分配给x,y,z,最后进行取模运算;
37.2.5)对于string序列集合的a-sign中每一个值则做三次取模运算,将余数依次分配给x,y,z;
38.2.6)最后得到高度和宽度都为224的三个含有恶意代码特征的灰度图像:2-gram特征图像,opcode特征图像和string特征图像;
39.2.7)将这三张灰度图像的像素值分别对应彩色图像中的r,g,b通道,以此合成为一张rgb图像,该图像作为恶意代码特征图像;
40.所述定义1:h(x)表示一个可以将恶意代码特征集合s中的元素x映射成一个整数的哈希函数,一个良好的哈希函数能够把不同元素变换成不同的整数;
41.定义2:hmin(s,x)表示恶意代码特征集合s中的元素x经过h(x)变换后,该元素具有的最小h(x)值;
42.定义3:恶意代码特征集合a与恶意代码特征集合b的相似度为集合a和b中的所有元素分别经hmin(s,x)处理后最小h(x)值相等的概率,表示为:
43.jaccard(a,b)=p[hmin(a,x)=hmin(b,x)];
[0044]
定义4.:对恶意代码特征集合中的每一个元素x都可以得到其hmin(s,x)值,给定:
[0045]hi
(x)=(ax+b)%mod;
[0046]
其中hi(x)表示随机生成的自定义数量的k个h(x),i∈[1,k],a和b的值在[2242,2
32
]范围内随机产生,mod的值等于2
32

[0047]
基于以上这k个h(x)对恶意代码特征集合中的所有元素x可以求h(x)值:
[0048]
h1(xj),h2(xj),

,h
k-1
(xj),hk(xj);
[0049]
其中j∈[1,j],j表示为恶意代码特征集合中元素的总个数,由此,对恶意代码特征集合中的每一个元素x都可以得到其hmin(s,x)值,表示为:
[0050]
hmin(s,xj)=min{h1(xj),h2(xj),

,hk(xj)};
[0051]
定义5:a-sign是一个签名矩阵,用来存储恶意代码特征集合s中所有元素的hmin(s,x)值,给定:
[0052][0053]
其中,表示a-sign的长度,γ表示h(x)函数的个数,ε是对a-sign初始化为无穷大inf,恶意代码样本相同的hmin(s,x)值越多,意味着相似性越高。
[0054]
进一步的,步骤3)所述基于微调后的cnn的识别过程,包括:
[0055]
3.1)使用的repvgg网络模型主干部分对恶意代码特征图像进行特征提取;
[0056]
3.2)在repvgg结构的基础上将网络的输出修改为由全连接层(fc)和relu激活函数组成,从而适应恶意代码家族识别任务;
[0057]
3.3)随后迁移repvgg的基本网络结构和冻结部分低层权重,对较高层进行训练,使用微调后的cnn网络模型通过执行多个非线性变换,为每个恶意代码特征图像生成抽象表示,学习样本的特征属性,自动提取恶意代码的图像特征,确定目标代码所属的恶意代码家族。
[0058]
第二方面,本发明提供一种恶意代码家族的识别装置,包括:
[0059]
数据预处理模块:用于数据预处理,通过分析恶意代码数据集中恶意代码家族样本,对恶意代码的原始二进制文件和反汇编文件进行分析,并提取出局部特征信息2-gram、汇编指令集信息opcode序列和可见字符信息string序列三种不同的静态特征,通过对每一种信息分析使得每一个恶意代码都得到三种不同长度的特征序列集合;
[0060]
特征图像生成融合模块:用于特征图像生成融合,利用minhash变换算法将提取的三种不同长度的特征序列集合转化为含有对应三通道的rgb特征图像,以实现恶意代码特征图像的生成融合,并且能从不同角度反映恶意代码的空间特征;
[0061]
基于微调cnn的识别模块:用于基于微调cnn的识别,采用迁移学习的微调技术对repvgg网络模型进行微调,继而优化并缩短训练时长,该微调后的网络模型通过多个卷积层来达到能自动提取恶意代码的图像特征,同时满足恶意代码家族的识别任务。
[0062]
第三方面,本发明提供一种恶意代码家族的识别设备,包括存储器和处理器;所述存储器和所述处理器连接;
[0063]
所述存储器,用于存储计算机程序;
[0064]
所述处理器,包括中央处理器和图形核心处理器,用于在计算机程序被执行时,实现如上述第一方面中任一项所述的恶意代码家族的识别方法。
[0065]
第四方面,本发明提供一种存储有计算机可读指令的存储介质,所述计算机可读指令被一个或多个处理器执行时,使得一个或多个处理器执行如上述第一方面中任一项所述的恶意代码家族的识别方法。
[0066]
本发明产生的有益效果:
[0067]
1、本发明识别方法通过从多角度对恶意代码进行特征提取,提高了恶意代码识别的准确率。
[0068]
2、使用minhash变换算法对提取到的不同长度的特征序列进行归一化并生成多通道哈希映射的特征图像,这样既保留了同家族之间的相似性和不同家族之间的差异性,又避免了特征信息丢失,此外基于局部敏感哈希变换解决了特征图像缩放可能带来特征信息丢失的问题。
[0069]
3、基于迁移学习微调技术,采用改进的预训练网络repvgg(微调cnn)对恶意代码特征图像进行家族分类,一方面使其符合分类任务,另一方面以提高网络的健壮性和整体性能。
附图说明
[0070]
图1为实施例1提供的恶意代码家族识别方法的流程示意图;
[0071]
图2为实施例1中操作指令opcode序列特征提取过程图;
[0072]
图3为实施例1中某恶意代码的部分文本序列示例;
[0073]
图4为实施例1中可见字符string序列特征提取过程图;
[0074]
图5为实施例2提供的恶意代码家族识别装置的结构示意图;
[0075]
图6为实施例3提供的恶意代码家族识别设备的结构示意图。
具体实施例
[0076]
为了使本发明实施的目的、技术方案和优点更加清楚,下面通过具体的实施例详细阐明本发明的技术方案。
[0077]
实施例1
[0078]
一种恶意代码家族识别方法,如图1所示,包括
[0079]
1)数据预处理:
[0080]
分析恶意代码数据集中恶意代码家族样本,对恶意代码的原始二进制文件和反汇编文件进行分析,并提取出局部特征信息2-gram、汇编指令集信息opcode序列和可见字符信息string序列三种不同的静态特征,通过对每一种信息分析使得每一个恶意代码都得到三种不同长度的特征序列集合;
[0081]
2)特征图像生成融合:
[0082]
利用minhash变换算法将提取的三种不同长度的特征序列集合转化为含有对应三通道的rgb特征图像,以实现恶意代码特征图像的生成融合,并且能从不同角度反映恶意代码的空间特征;
[0083]
3)基于微调后的卷积神经网络cnn的识别:
[0084]
采用迁移学习的微调技术对repvgg网络模型进行微调,继而优化并缩短训练时长,该微调后的网络模型通过多个卷积层来达到能自动提取恶意代码的图像特征,同时满足恶意代码家族的识别任务。
[0085]
步骤1)数据预处理中,局部特征信息2-gram提取:
[0086]
首先,依次将恶意代码.bytes文件中的每相邻两字节转换为像素点(x,y)坐标并存放到集合w1中,该集合中没有重复的元素;
[0087]
然后,记录该坐标值出现的次数n_gram(x,y);
[0088]
其次,由于在.bytes文件中,十六进制0x00和0xcc分别表示通常用于填充或分隔不同的内容(如资源、片段等)和可执行文件中的中断,所以将这两个值对应的像素点坐标值置为0,即n_gram(0,0)=0,n_gram(204,204)=0;
[0089]
最后,得到一个将w1中所有序列进行编码后的集合w1’
,该集合作为2-gram序列的特征集合。
[0090]
步骤1)数据预处理中,汇编指令集信息opcode序列特征提取:在收集的opcode中,根据其含义和使用频度选取出一共有745种类型的opcode,如mov,push,jmp等,继而在这745种opcode中继续筛选出使用频率较高的255种opcode。因此,跟相对虚拟地址无关,根据统计的opcode出现的频率由低到高次序依次编码为整数1到255,其余的编码为整数0。
[0091]
一个恶意代码的opcode序列特征提取过程,如图2所示,主要有以下四个步骤:
[0092]

提取:首先从恶意代码.asm文件中提取opcode序列;
[0093]

分割:然后使用形如“loc_xxx”的字符串(如“loc_10001146”)对opcode序列进行分割,分割后得到n段操作码序列,通过分割操作提取到更能准确表达出恶意代码特征的信息;
[0094]

再提取:随后将所得到的n段操作码序列分别再依次提取连续的三个opcode存入w2中,并保证集合中的元素是唯一的;
[0095]

编码:最后,得到一个将w2中所有序列进行编码后的集合w2’
,作为opcode序列特征集合。
[0096]
步骤1)数据预处理中,可见字符信息string序列特征提取:可见字符string序列由ascii码表中95个可见字符组成,描述了恶意代码的文本特征。为便于特征提取和集合映射,制定对可见字符和不可见字符的编码规则:数字0~9编码为十进制数48~57;大写字母a~z编码为十进制数65~90;小写字母a~z编码为十进制数97~122;一些符号(如!,+,/,=)编码为十进制数32~47,58~64,91~96和123~126;其余不可见字符编码为十进制数0。按照以上编码规则可以得到所有可见字符的编码,记为string_encode。
[0097]
实施例针对图3从某个恶意代码样本的.bytes文件中提取string序列特征如图4所示,主要有以下三个步骤:
[0098]

提取:首先从恶意代码的.bytes文件中提取所有的字符序列string;
[0099]

分割:然后使用不可见字符将string分割为n组字符串序列,即一串连续的可见字符作为一组字符串序列,并将其依次存入集合w3中;
[0100]

编码:最后,将集合w3中所有字符串序列中的每个字符串依次根据string_encode进行编码得到集合w3’
,即作为string序列集合。
[0101]
步骤2)所述特征图像的生成融合,根据定义1-5,使用基于minhash的方法,根据杰卡德相似系数(jaccard)衡量两个集合的相似度,将w1’
,w2’
和w3’
映射到关于图像的签名矩阵,最终实现恶意代码识别过程中的特征图像生成融合。
[0102]
定义1:h(x)表示一个可以将恶意代码特征集合s中的元素x映射成一个整数的哈希函数,一个良好的哈希函数能够把不同元素变换成不同的整数。
[0103]
定义2:hmin(s,x)表示恶意代码特征集合s中的元素x经过h(x)变换后,该元素具有的最小h(x)值。
[0104]
定义3:恶意代码特征集合a与恶意代码特征集合b的相似度为集合a和b中的所有元素分别经hmin(s,x)处理后最小h(x)值相等的概率,表示为:
[0105]
jaccard(a,b)=p[hmin(a,x)=hmin(b,x)]
[0106]
定义4:对恶意代码特征集合中的每一个元素x都可以得到其hmin(s,x)值,给定:
[0107]hi
(x)=(ax+b)%mod
[0108]
其中hi(x)表示随机生成的自定义数量的k个h(x),i∈[1,k],a和b的值在[2242,232
]范围内随机产生,mod的值等于2
32

[0109]
基于以上这k个h(x)对恶意代码特征集合中的所有元素x可以求h(x)值:
[0110]
h1(xj),h2(xj),

,h
k-1
(xj),hk(xj)
[0111]
其中j∈[1,j],j表示为恶意代码特征集合中元素的总个数,由此,对恶意代码特征集合中的每一个元素x都可以得到其hmin(s,x)值,表示为:
[0112]
hmin(s,xj)=min{h1(xj),h2(xj),

,hk(xj)};
[0113]
定义5:a-sign是一个签名矩阵,用来存储恶意代码特征集合s中所有元素的hmin(s,x)值,给定:
[0114][0115]
其中,表示a-sign的长度,γ表示h(x)函数的个数,ε是对a-sign初始化为无穷大inf。恶意代码样本相同的hmin(s,x)值越多,意味着相似性越高。
[0116]
根据定义1-5,基于minhash将w1’
,w2’
和w3’
分别映射到签名矩阵a-sign和变换为灰度图像的过程如下:
[0117]
2.1)首先将集合w1’
,w2’
和w3’
依次作为输入;
[0118]
2.2)对集合中的所有元素都分别进行多次哈希运算,随后对第i个元素而言取其计算得到的最小hash值作为签名矩阵a-sign的最终结果;
[0119]
2.3)接着将得到的a-sign中的每一个h(x)值分配给x,y,z,其中x和y作为特征图像的坐标值信息,z作为特征图像中的像素值信息;
[0120]
2.4)对于2-gram和opcode序列集合而言,先将其对应的a-sign中每一个值转换为二进制数,接着按二进制数每8位依次分配给x,y,z,最后进行取模运算;
[0121]
2.5)对于string序列集合的a-sign中每一个值则做三次取模运算,将余数依次分配给x,y,z;
[0122]
2.6)最后得到高度和宽度都为224的三个含有恶意代码特征的灰度图像:2-gram特征图像,opcode特征图像和string特征图像;
[0123]
2.7)将这三张灰度图像的像素值分别对应彩色图像中的r,g,b通道,以此合成为一张rgb图像,该图像作为恶意代码特征图像。
[0124]
步骤3)所述基于微调后的cnn的识别过程,包括:
[0125]
3.1)使用的repvgg网络模型主干部分对恶意代码特征图像进行特征提取;
[0126]
3.2)在repvgg结构的基础上将网络的输出修改为由全连接层fc和relu激活函数组成,从而适应恶意代码家族识别任务;
[0127]
3.3)随后迁移repvgg的基本网络结构和冻结部分低层权重,对较高层进行训练。使用微调后的网络模型通过执行多个非线性变换,为每个恶意代码特征图像生成抽象表示,学习样本的特征属性,而无需手动提取特征。
[0128]
实施例1恶意代码家族识别方法,从多角度对恶意代码进行特征提取,提高了恶意代码识别的准确率。
[0129]
实施例2
[0130]
一种恶意代码家族识别装置,如图5所示,包括
[0131]
数据预处理模块:用于数据预处理,通过分析恶意代码数据集中恶意代码家族样本,对恶意代码的原始二进制文件和反汇编文件进行分析,并提取出局部特征信息2-gram、
汇编指令集信息opcode序列和可见字符信息string序列三种不同的静态特征,通过对每一种信息分析使得每一个恶意代码都得到三种不同长度的特征序列集合;
[0132]
特征图像生成融合模块:用于特征图像生成融合,利用minhash变换算法将提取的三种不同长度的特征序列集合转化为含有对应三通道的rgb特征图像,以实现恶意代码特征图像的生成融合,并且能从不同角度反映恶意代码的空间特征;
[0133]
基于微调cnn的识别模块:用于基于微调cnn的识别,采用迁移学习的微调技术对repvgg网络模型进行微调,继而优化并缩短训练时长,该微调后的网络模型通过多个卷积层来达到能自动提取恶意代码的图像特征,同时满足恶意代码家族的识别任务。
[0134]
实施例3
[0135]
一种恶意代码家族的识别设备,如图6所示,包括存储器和处理器;存储器和处理器连接;
[0136]
存储器,用于存储计算机程序;
[0137]
处理器,包括中央处理器和图形核心处理器,用于在计算机程序被执行时,实现实施例1的恶意代码家族的识别方法。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1