具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了提升特征码提取的效率和准确性,本发明提供了一种特征码提取方法、装置、计算机设备和可读存储介质,在本发明提供的特征码提取方法中,对于待检测代码,以字节的方式读取二进制格式的待检测代码,形成原始字节序列,然后将原始字节序列进行进制转换,形成转换序列,并将转换序列输入至预设的深度学习模型,其中,该深度学习模型包括输入层、卷积层和输出层,输入层用于接收转换序列,卷积层用于提取转换序列的特征,输出层用于输出转换序列对应的类别,当输出层输出表征待检测代码属于恶意代码的恶意类别时,表明待检测代码属于恶意代码。针对恶意代码,提取上述深度学习模型卷积层的特征图,通过卷积层各个通道的特征值以及每个通道上的梯度值,计算得到热力图数据,该热力图数据用于表征原始字节序列中各字节对恶意类别的贡献分值,然后根据贡献分值确定待检测代码的特征码,实现了恶意代码特征码的提取。从中可以看出,在本发明提供的特征码提取方法中,将待检测代码转换为进行进制转换得到转换序列,输入深度学习模型,利用深度学习模型的自动化学习能力对待检测代码进行检测,针对恶意代码,利用上述深度学习模型可视化卷积层,通过热力图数据得到原始待检测代码中个字节对恶意类别的贡献分值,从而能够从贡献程度大的字节中确定待检测代码的特征码,因此,本发明提供的特征码提取方法,将二进制格式的待检测代码进行进制转换后形成转换序列再进一步进行处理,能够减小数据处理量,特征码提取过程无需人工干预,实现了特征码的自动提取,使得能够体现恶意代码的字节被作为特征码,本发明能够达到提升特征码提取的效率和准确性的目的。
关于本发明提供的特征码提取方法、装置、计算机设备和可读存储介质的具体实施例,将在下文中详细描述。
实施例一
本发明实施例提供了一种特征码提取方法,在一种使用场景下,通过该方法对未知的待检测代码进行检测,并当检测到待检测代码属于恶意代码时,提取该恶意代码的特征码;另一种使用场景下,通过该方法提取已知的恶意代码的特征码,或者也可以应用于其他场景中,无论在哪种使用场景下,通过该方法,均能够提升特征码提取的效率和准确性,具体地,该实施例提供的特征码提取方法包括如下的步骤S101至步骤S107。
步骤S101:读取二进制格式的待检测代码,形成原始字节序列。
可选地,当待检测代码为二进制格式时,直接以字节的方式读取二进制格式的待检测代码,当待检测代码不为二进制格式时,先将待检测代码的格式转化为二进制格式,然后再以字节的方式读取二进制格式的待检测代码。
其中,以字节的方式读取二进制格式的待检测代码,也即每次读取8位二进制数,形成原始字节序列,该原始字节序列中的每个单元为一个字节,8位二进制数。
步骤S102:将原始字节序列进行进制转换,形成转换序列。
在该步骤中,可选地,将每一个字节的二进制数据转换为十进制,形成转换序列,该转换序列中的每个单元为一个十进制数,例如一个转换序列为[12 5290 14 4 22……020]。或者,也可以将每一个字节的二进制数据转换为十六进制、八进制等,本申请对此并不进行限定。
步骤S103:将转换序列输入至预设的深度学习模型。
其中,深度学习模型包括输入层、卷积层和输出层,输入层用于接收转换序列,卷积层用于提取转换序列的特征,输出层用于输出转换序列对应的类别。
可选地,预设的深度学习模型通过训练样本训练得到,该训练样本包括恶意代码样本和非恶意代码样本(也即正常代码样本),使得深度学习模型能够学习到恶意代码和非恶意代码的深层特征,从而在将待检测代码输入至深度学习模型后,深度学习模型能够确定出其属于恶意代码或非恶意代码。该深度学习模块包括卷积层,卷积层能够提取输入层接收数据,也即转换序列的特征。
步骤S104:当输出层输出表征待检测代码属于恶意代码的恶意类别时,获取卷积层的特征图。
其中,卷积层包括多个通道。
如上文所述,将转换序列输入至预设的深度学习模型后,输出层能够输出转换序列对应的类别,该类别可包括恶意类别和非恶意类别,其中,恶意类别表征待检测代码属于恶意代码,非恶意类别表征待检测代码属于非恶意代码。当输出层输出恶意类别时,待检测代码属于恶意代码,此时获取卷积层的特征图,以用于后续步骤提取恶意代码的特征码。
步骤S105:确定每个通道上的梯度值。
可选地,卷积层包括n个通道,在上述步骤S104中,获取卷积层的特征图Fi(i=1,2…,n)。在该步骤S105占用,计算对应每个通道上的梯度值Gi(i=1,2…,n),具体梯度值Gi计算公式如下:
其中,y为深度学习模型的输出层输出的概率向量,该概率向量用于指示转换序列对应的某一类别的概率;H为第i通道的特征图Fi的高度,W为第i通道的特征图Fi的宽度,Ajk为第i通道的特征图Fi中的特征值,Z为第i通道的特征图Fi中特征值的总数,该梯度值Gi即对特征图Fi中每个特征值的偏导数求全局平均。
步骤S106:根据特征图和梯度值计算热力图数据。
其中,热力图数据包括用于表征原始字节序列中各字节对恶意类别的贡献分值。
可选地,在计算热力图数据时,可利用梯度值Gi对卷积层的特征图Fi进行加权,具体公式如下:
步骤S107:根据贡献分值确定待检测代码的特征码。
通过热力图数据heatmap可得到原始字节序列中各字节对恶意类别的贡献分值,其中,字节对恶意类别的贡献分值越大,表示该字节越能体现该恶意代码的特征,因此在该步骤中,可以将贡献分值大的字节作为待检测代码的特征码。
在该实施例提供的特征码提取方法中,以字节的方式读取二进制格式的待检测代码,并将其进行进制转换形成转换序列,然后将转换序列输入至预设的深度学习模型,其中,该深度学习模型包括用于提取转换序列的特征的卷积层,当通过深度学习模型检测到待检测代码属于恶意代码时,获取上述卷积层的特征图,并基于该特征图和每个通道上的梯度值计算热力图数据,该热力图数据包括用于表征原始字节序列中各字节对恶意类别的贡献分值,因而,通过各字节对恶意类别的贡献分值,能够确定原始字节序列中哪些字节更能表征该待检测代码,也即恶意代码的特征,最后根据贡献分值确定待检测代码的特征码,采用该实施例提供的特征码提取方法,无需人工干预,实现了特征码的自动提取,并且能够将体现恶意代码的字节被作为特征码,提升可特征码提取的效率和准确性。
可选地,在一种实施例中,热力图数据的数据长度小于转换序列的数据长度,根据贡献分值确定待检测代码的特征码的步骤包括:对热力图数据进行插值,得到等长热力图数据,其中,等长热力图数据的数据长度与转换序列的数据长度相等;在等长热力数据中,将连续的非零贡献分值作为一个贡献区域;判断贡献区域内的每个非零贡献分值是否大于贡献阈值;若贡献区域内的每个非零贡献分值均大于贡献阈值,则按照大小顺序获取贡献区域内的前若干个非零贡献分值作为目标分值;根据原始字节序列中目标分值对应的字节确定特征码。
具体地,通常情况下,转换序列输入至深度学习模型经卷积层计算后,得到的特征图中特征值的数量通常会小于转换序列的数据长度,因而根据该特征图和梯度值计算得到的热力图数据的数据长度也会小于转换序列的数据长度,对此,在该实施例中,先对热力图数据进行插值(该处可以采用现有技术中的任意插值方法),使得得到插值后的数据,也即等长热力图数据,与转换序列的数据长度相等,等长热力图数据中的贡献分值即为转换序列中每一个数对应的原始字节序列中字节的贡献分值。将等长热力图数据显示为热力图后,如图2所示,从热力图中可以看出部分高亮区域,该高亮区域对应等长热力图数据中连续的非零贡献分值,因此,在该等长热力数据中,将连续的非零贡献分值作为一个贡献区域,对应热力图中的高亮区域。当贡献区域为单个时,可直接按照大小顺序获取该贡献区域内前一个、两个或多个非零贡献分值作为目标分值;当贡献区域为多个时,判断贡献区域内的每个非零贡献分值是否大于贡献阈值,若贡献区域内的每个非零贡献分值均大于贡献阈值,表明该贡献区域所对应的原始字节序列中的字节对恶意代码的恶意贡献更大,进一步,按照大小顺序获取该类型贡献区域内前一个、两个或多个非零贡献分值作为目标分值,最后根据原始字节序列中目标分值对应的字节确定特征码。
采用该实施例提供的特征码的提取方法,对热力图数据进行插值得到等长热力图数据,使得等长热力图数据的贡献分值与转换序列中的每一个数一一对应,在等长热力图数据中确定贡献区域,实现对原始字节序列中恶意贡献集中字段的筛选,进一步,选择每个非零贡献分值均大于贡献阈值的贡献区域,实现了对集中字段的筛选,更进一步,在选择出的贡献区域中,选择较大的若干贡献分值作为目标分值,实现了集中字段中对字节的筛选,最终根据筛选出的字节确定特征码,通过上述逐步筛选的步骤,能够进一步提升特征码的准确性。
可选地,在一种实施例中,根据原始字节序列中目标分值对应的字节确定特征码的步骤包括:提取原始字节序列中目标分值对应的字节,得到特征片段;将特征片段进行进制转换,得到转换片段;确定转换片段的非零比率;判断非零比率是否大于预设比率阈值;若非零比率大于预设比率阈值,则将特征片段作为特征码。
具体地,将原始字节序列中目标分值对应的字节组合为特征片段,对特征片段进行转换表示后得到的转换片段进行非零比率的检测,等同地,也可对转换片段进行零比率的检测,或者,直接对转换片段中零的个数的检测等,无论哪种方式,目的在于将转换片段中非零数据数量满足要求的特征片段作为特征码,进一步提升特征码的准确性,提升特征码的有效性。
可选地,在一种实施例中,根据原始字节序列中目标分值对应的字节确定特征码的步骤包括:提取原始字节序列中目标分值对应的字节,得到特征片段;将特征片段进行进制转换,得到转换片段;确定转换片段的数据长度;判断数据长度是否在预设长度范围内;若数据长度在预设长度范围内,则将特征片段作为特征码。
具体地,将原始字节序列中目标分值对应的字节组合为特征片段,对特征片段进行转换表示后得到的转换片段进行长度的检测,将转换片段的数据长度满足要求的特征片段作为特征码,进一步提升特征码的准确性,提升特征码的有效性。
可选地,在一种实施例中,在确定特征码组后,特征码提取方法还包括:统计特征码组中,每种特征码的数量,其中,特征码组包括属于同一威胁类别的多个待检测代码的特征码;当特征码的数量大于预设数量阈值时,将特征码存储至特征码库。
具体地,对于属于同一威胁类别的多个恶意代码,针对每个恶意代码均可提取到特征码,将属于同一威胁类别的多个恶意代码的特征码定义为一个特征码组,在该特征码组中,部分特征码相同,部分特征码不同,将相同的特征码作为一个类别,统计每种特征码的数量,如果该特征码的数量大于预设数量阈值时,将特征码存储至特征码库,使得特征码库中的特征码能够较好的代表一类型威胁类别,从而在杀毒软件中,可利用特征码库中的特征码检测和查杀已知类型的恶意程序,提升恶意代码的检出率。
可选地,在一种实施例中,根据原始字节序列中目标分值对应的字节确定特征码的步骤包括:提取原始字节序列中目标分值对应的字节,得到特征片段;将特征片段进行进制转换,得到转换片段;确定转换片段的非零比率;判断非零比率是否大于预设比率阈值;若非零比率大于预设比率阈值,则确定转换片段的数据长度;判断数据长度是否在预设长度范围内;若数据长度在预设长度范围内,则将特征片段作为特征码,并统计该特征码对应的特征码组中,该特征码的数量,其中,该特征码对应的特征码组包括多个特征码,该多个特征码所在的待检测代码属于同一威胁类别,当统计得到的该特征码的数量大于预设数量阈值时,将该特征码存储至特征码库。
具体地,在该实施例中,先通过非零比率的检测和长度检测保证特征码的有效性,然后基于同一威胁类别的恶意代码的特征码进行统计量的筛选,提升特征码库检出恶意代码的检出率。
可选地,在一种实施例中,在将转换序列输入至预设的深度学习模型的步骤之前,特征码提取方法还包括:获取模型训练代码样本集,其中,模型训练代码样本集包括多个代码样本;以字节的方式读取代码样本,形成训练原始字节序列;将训练原始字节序列进行进制转换,形成训练转换序列;将训练转换序列作为初始深度学习模型的输入,将训练转换序列对应的代码类别作为初始深度学习模型的输出,对初始深度学习模型进行训练,以得到深度学习模型,其中,代码类别为恶意代码或非恶意代码,初始深度学习模型依次包括输入层、嵌入层、卷积层、平铺层和输出层。
具体地,在将转换序列输入至预设的深度学习模型之前,可通过训练得到该预设的深度学习模型,在该实施例提供的特征码提取方法中,还包括训练得到该预设的深度学习模型的步骤,具体地,将恶意代码和非恶意代码(也即正常代码)分别作为代码样本,形成模型训练代码样本集,利用模型训练代码样本集对初始深度学习模型进行训练,使得初始深度学习模型学习到恶意代码和非恶意代码的深度特征,成为深度学习模型,能够对待检测代码进行识别。针对每个代码样本,以处理待检测代码相同的处理方式,先以字节的方式读取二进制格式的代码样本,形成训练原始字节序列,然后将训练原始字节序列进行进制转换,形成训练转换序列,最后将训练转换序列作为初始深度学习模型的输入,将训练转换序列对应的代码类别(例如通过恶意代码得到的训练转换序列对应的代码类别为1,通过非恶意代码得到的训练转换序列对应的代码类别为0)作为初始深度学习模型的输出,实现对初始深度学习模型的训练。
可选地,在一种实施例中,在将训练原始字节序列进行进制转换,形成训练转换序列的步骤之后,将训练转换序列作为初始深度学习模型的输入的步骤之前,特征码提取方法还包括:计算训练转换序列的长度,得到第一序列长度;当第一序列长度大于预设序列长度阈值时,在训练转换序列的末尾进行裁剪,以得到标准训练转换序列,其中,标准训练转换序列的长度等于预设序列长度阈值;当第一序列长度小于预设序列长度阈值时,在训练转换序列的末尾进行补齐,以得到标准训练转换序列;其中,将训练转换序列作为初始深度学习模型的输入的步骤具体为:将标准训练转换序列作为初始深度学习模型的输入。
在将原始字节序列进行进制转换,形成转换序列的步骤之后,将转换序列输入至预设的深度学习模型的步骤之前,特征码提取方法还包括:计算转换序列的长度,得到第二序列长度;当第二序列长度大于预设序列长度阈值时,在转换序列的末尾进行裁剪,以得到标准转换序列,其中,标准转换序列的长度等于预设序列长度阈值;当第二序列长度小于预设序列长度阈值时,在转换序列的末尾进行补齐,以得到标准转换序列;其中,将转换序列输入至预设的深度学习模型的步骤具体为:将标准转换序列输入至预设的深度学习模型。
采用该实施例提供的特征码提取方法,将输入至初始深度学习模型的输入的训练转换序列和输入至预设的深度学习模型的转换序列,通过补齐或裁剪的方式转换为数据长度为预设序列长度阈值的转换序列,实现了数据格式的统一,提升深度学习模型的学习准确性,进一步提升深度学习模型识别恶意代码的准确性。在补齐或裁剪时,均在转换序列的末尾进行操作,避免在其他位置操作造成对转换序列的干扰,在转换序列的末尾进行操作能够保证信息的有效性和完备性。
实施例二
在上述实施例一的基础上,本发明实施例二提供了一种优选地特征码提取方法,部分技术特征可参照上述实施例一的相关描述。在该实施例中,针对已有的恶意代码数据集进行恶意代码的特征码的提取,图3为本发明实施例二提供的特征码提取方法的流程图,如图3所示,该实施例提供的特征码提取方法包括如下的步骤:
(1)生成器,包括下载器和处理器,通过生成器,完成对原始恶意代码数据集的下载和预处理,输出待训练的恶意代码集和待提取的恶意代码集。
(2)学习器,基于步骤(1)生成的待训练的恶意数据集和白样本数据集构建训练数据集,利用训练数据集对初始深度学习模型进行训练。
(3)提取器,利用步骤(2)训练后的深度学习模型,对步骤(1)生成的待提取的恶意代码集进行特征片段的提取。
(4)过滤器,对步骤(3)生成的特征片段集合进行过滤,筛选出符合条件的特征片段,形成特征码,存入数据库,以用于恶意代码的检测和查杀。
其中原始恶意代码数据集主要分为两种模式:1)所有恶意类别的样本混合构成,2)某单个恶意类别的样本构成。第一种模式即对所有恶意类别的恶意代码一起提取特征码,第二种模式即对单个恶意代码分别提取特征码。
关于上述(1)至(4)四个步骤,将在下文中详细描述。
针对步骤(1)的生成器:生成器主要包括两个部分,也即下载器和处理器,分别完成对原始恶意代码的下载和预处理。
其中,原始恶意代码数据集的字段表如下表1所示,原始恶意代码的数据库存储有对应原始恶意代码的md5值(唯一标识符)的源码,通过下载器,首先从原始恶意代码数据集中采样原始恶意代码的md5值,然后根据该md5值在数据库中下载对应的恶意代码。
表1原始恶意代码数据集字段表
字段英文名 |
字段中文名 |
ave |
恶意代码名 |
md5 |
唯一标识符 |
sha1 |
散列值 |
date |
日期 |
处理器的主要作用是对下载器下载后的恶意代码进行预处理,形成对应恶意代码的字节序列(以十进制表示),作为学习器和提取器的数据输入。例如,对应待提取的恶意代码集中的原始恶意代码xi,处理器包括主要步骤如下:
a)以字节的方式读取原始恶意代码xi,形成恶意代码的字节序列xj(也即原始字节序列);
b)将恶意代码的字节序列xj以十进制表示形成xk(也即转换序列),如xk=[77 90144 22……0 20],并统计序列xk的数据长度为m;
c)根据预设序列长度阈值L对序列xk的后端进行补齐或裁剪,形成序列xL(也即标准转换序列),具体地,如果m>L,则裁剪序列xk,反之,对序列xk进行补0;
对应待训练的恶意代码集中的原始恶意代码,也采用上述步骤a)至步骤c)相同的处理的方式进行处理,即可得到待训练的恶意代码集和待提取的恶意代码集。
针对步骤(2)的学习器:学习器的主要作用是基于步骤(1)输出的训练数据集,对初始深度学习模型进行训练,使得初始深度学习模型能够自动化地学习恶意代码的特征,得到可用的模型即为深度学习模型。
初始深度学习模型可采用LSTM、Gated-CNN等结构实现,如图4所示,在一种初始深度学习模型中,包括输入层(Input)、嵌入层(Embedding)、Gated-CNN卷积层、平铺层(Flatten)和输出层(也即全连接层,Dense)。
其中,输入层主要将生成器生成的训练数据集输入初始深度学习模型;嵌入层又叫表示层,嵌入层的参数由初始深度学习模型自动学习得到,主要负责将输入的十进制序列转换为可进行卷积等操作的矩阵形式。以one-hot转换方法为例,即将十进制序列中每个十进制数字转化为只有对应位为1,其他均为0的向量,如序列[77 90 144 22……0 20]转换为:
Gated-CNN卷积层主要作为特征提取器,自动化地学习输入恶意代码之间的共性特征。可选地,Gated-CNN卷积层包括两个CNN卷积层,卷积层之间是并行的状态,分别对输入进行卷积,将第一卷积层的结果输入sigmoid激活函数,与第二卷积层的结果进行乘积运算后输出。例如,第一卷积层的输出为向量A,第二卷积层的输出为向量B,则Gated-CNN卷积层的输出为向量H,则对应的公式为:H=σ(A)*B。其中,由于恶意代码的十进制序列一般较长,为了避免网络结构过深,建议前几层Gated-CNN的核长度(kernel_size)和步长(strides)设置较大,比如kernel_size=200,strides=100等。
平铺层主要将卷积后的特征向量进行平铺,转化为一维的向量。
全连接层主要对平铺后的一维向量进一步学习,并预测输出不同的分类结果。
模型训练部分主要包括批量输入训练数据,反复优化迭代模型,直到训练误差和准确率达到可接受的程度,输出最优模型,该最优模型也即上述实施例一中的深度学习模型。
针对步骤(3)的提取器:提取器的主要作用是基于学习器输出的最优模型,利用深度学习模型的可视化技术对生成器生成的待提取的恶意代码集进行特征片段的提取。在提取特征片段时,将待提取的恶意代码集中的十进制序列输入最优深度学习模型,获取最后一层卷积层的输出特征图Fi(i=1,2…,n),其中n表示卷积层的通道数,并计算对应每个通道上的梯度值Gi(i=1,2…,n),其中,Gi的具体计算公式可参考上述的计算公式,该处不再赘述。然后根据卷积层的输出特征图和梯度值计算热力图数据heatmap。在计算解热力图数据heatmap时,利用梯度值Gi对卷积层的输出特征图Fi进行加权,具体公式也可参考上文,该处不再赘述。在对卷积层进行可视化时,基于热力图数据heatmap和十进制序列,显示原始恶意代码中不同区域对模型输出恶意类别的贡献分值,设十进制序列的长度为L1,具体地,利用插值的方法将上述热力图数据heatmap的大小调整至L1,生成新的heatmap1,即等长热力图数据;将等长热力图数据heatmap1与十进制序列进行比对,heatmap1中不同的值即代表原始字节序列中不同十进制数对应的字节属于恶意特征片段的得分score(也即贡献分值),得分score值越大表示恶意的程度越重。
例如,卷积层的通道数n为3,最优模型所获取的特征图Fi=[F1,F2,F3],求解的梯度值Gi=[G1,G2,G3],十进制序列的数据长度L1=20,则确定贡献区域的步骤包括:
步骤1:根据特征图Fi=[F1,F2,F3]和梯度值Gi=[G1,G2,G3]进行加权平均,得到热力图数据heatmap,其中,
F1={0 0.22 0.221 0.225 0.224 0 0 0 0 0.2 0.21 0.22 0 0},
F2={0 0.19 0.2 0.225 0.223 0 0 0 0 0.19 0.2 0.22 0 0},
F3={0 0.09 0.1 0.12 0 0 0 0 0 0.2 0.22 0.19 0},
G1=0.2,G2=0.1,G3=0.3,
加权平均后,得到的heatmap={0 0.045 0.0314 0.0345 0.0224 0 0 0 00.03970.0427 0.043 0.019 0}
步骤2:利用插值的方法将步骤1生成的heatmap调整至L1=20,保持与十进制序列的数据长度一致,得到得分图heatmap1(也即等长热力图数据),其中,
heatmap1={0 0 0 0.01 0.045 0.0314 0.0345 0.0224 0 0 0 0 0.03970.0427 0.0430.019 0.018 0.06 0 0}
步骤3:得分图heatmap1中不同的值代表着原始字节序列不同字节属于恶意特征的得分,将连续的非0得分作为一个区域(也即贡献区域),每个区域包括多个非零得分,其中,对于上述heatmap1,包括两个区域,一个区域包括5个非零得分,分别为0.01,0.045,0.0314,0.0345和0.0224,另一个区域包括6个非零得分,分别为0.0397,0.0427,0.043,0.019,0.018和0.06。
在确定贡献区域后,首先对贡献区域中的每个得分进行归一化处理:
其中,score为贡献区域中的一个得分值,max为贡献区域中的最大得分值,min为贡献区域中的最小得分值,score′为归一化后的得分。
在经过上述归一化处理后,利用阈值threshold对贡献区域进行进一步筛选,如果贡献区域中的每个score′均大于threshold,则保留该贡献区域,反之舍弃。
针对保留的贡献区域,对其包括的得分进行排序,选出Top-K的得分作为目标分值,选取原始字节序列中目标分值对应的字节作为特征片段输出。
针对步骤(4)的过滤器:过滤器的主要作用是基于提取器输出的特征片段,依次对特征片段对应的十进制片段的非零比率、长度和数量进行检验和过滤,保证特征片段的准确性,降低误报,形成恶意代码的特征码。
在进行非零比率的检验时,检验特征片段对应的十进制片段中非零比率是否大于阈值threshold1,如果大于threshold1,则通过,反之删除该特征片段。例如特征片段对应的十进制片段为[70 99 0 12 0 12 0 11],则非零比率rate=5/8。
在进行长度的检验时,检验上述非零比率满足要求的特征片段对应的十进制片段的长度L是否处于指定的区间范围内,即L∈[a,b],其中,a<b,其中a、b分别为区间范围内的下限和上限阈值,如果L∈[a,b],则通过,反之删除该特征片段。
在进行数量的检验时,针对的是属于同一威胁类别(也即恶意类别)的特征码,也即特征码组中特征码的检验,具体地,通过上述长度的检验后保留下来的属于同一恶意类别的特征片段,判断每种特征片段的数量是否大于阈值threshold2,如果一种特征片段的数量大于threshold2,则通过,反之删除该片段。将通过过滤器保留下来的特征片段,输入数据库中进行存储,作为特征码,用于企业内恶意代码的检测和查杀。
采用该实施例提供的特征码的提取方法,将原始恶意文件转换为十进制表示的字节序列,输入深度学习模型,利用模型的自动化学习能力学习恶意代码之间的深层特征,为下一步提取特征码奠定基础。进一步,基于深度学习模型可视化技术的恶意代码特征码的提取方式,利用最优的深度学习模型可视化卷积层,显示原始恶意代码中不同区域属于恶意特征的重要程度,以提取出恶意代码的特征片段,经过过滤器的筛选形成恶意代码的特征码,以用于恶意代码的检测和查杀。
实施例三
对应于上述实施例一,本发明实施例三提供了一种特征码提取装置,相应的技术特征和对应的技术效果可参考上述实施例一和实施例二,该实施例三不再赘述。图5为本发明实施例三提供的特征码提取装置的框图,如图5所示,该装置包括:读取模块301、转换模块302、输入模块303、获取模块304、第一计算模块305、第二计算模块306和确定模块307。
读取模块301用于以字节的方式读取二进制格式的待检测代码,形成原始字节序列;转换模块302用于将原始字节序列进行进制转换,形成转换序列;输入模块303用于将转换序列输入至预设的深度学习模型,其中,深度学习模型包括输入层、卷积层和输出层,输入层用于接收转换序列,卷积层用于提取转换序列的特征,输出层用于输出转换序列对应的类别;获取模块304用于当输出层输出表征待检测代码属于恶意代码的恶意类别时,获取卷积层的特征图,其中,卷积层包括多个通道;第一计算模块305用于确定每个通道上的梯度值;第二计算模块306用于根据特征图和梯度值计算热力图数据,其中,热力图数据包括用于表征原始字节序列中各字节对恶意类别的贡献分值;确定模块307用于根据贡献分值确定待检测代码的特征码。
可选地,在一种实施例中,热力图数据的数据长度小于转换序列的数据长度,确定模块307包括插值单元、处理单元、判断单元、获取单元和确定单元,其中,插值单元用于对热力图数据进行插值,得到等长热力图数据,其中,等长热力图数据的数据长度与转换序列的数据长度相等;处理单元用于在等长热力数据中,将连续的非零贡献分值作为一个贡献区域;判断单元用于判断贡献区域内的每个非零贡献分值是否大于贡献阈值;获取单元用于若贡献区域内的每个非零贡献分值均大于贡献阈值,则按照大小顺序获取贡献区域内的前若干个非零贡献分值作为目标分值;确定单元用于根据原始字节序列中目标分值对应的字节确定特征码。
可选地,在一种实施例中,确定单元根据原始字节序列中目标分值对应的字节确定特征码时,具体执行的步骤包括:提取原始字节序列中目标分值对应的字节,得到特征片段;将特征片段进行进制转换,得到转换片段;确定转换片段的非零比率;判断非零比率是否大于预设比率阈值;若非零比率大于预设比率阈值,则将特征片段作为特征码。
可选地,在一种实施例中,确定单元根据原始字节序列中目标分值对应的字节确定特征码时,具体执行的步骤包括:提取原始字节序列中目标分值对应的字节,得到特征片段;将特征片段进行进制转换,得到转换片段;确定转换片段的数据长度;判断数据长度是否在预设长度范围内;若数据长度在预设长度范围内,则将特征片段作为特征码。
可选地,在一种实施例中,在确定特征码组后,特征码提取装置还包括存储模块,用于统计特征码组中,每种特征码的数量,其中,特征码组包括属于同一威胁类别的多个待检测代码的特征码,当特征码的数量大于预设数量阈值时,将特征码存储至特征码库。
可选地,在一种实施例中,在输入模块将转换序列输入至预设的深度学习模型之前,特征码提取装置还包括训练模块,用于:获取模型训练代码样本集,其中,模型训练代码样本集包括多个代码样本;以字节的方式读取二进制格式的代码样本,形成训练原始字节序列;将训练原始字节序列进行进制转换,形成训练转换序列;将训练转换序列作为初始深度学习模型的输入,将训练转换序列对应的代码类别作为初始深度学习模型的输出,对初始深度学习模型进行训练,以得到深度学习模型,其中,代码类别为恶意代码或非恶意代码。
可选地,在一种实施例中,训练模块在将训练原始字节序列进行进制转换,形成训练转换序列之后,将训练转换序列作为初始深度学习模型的输入的之前,还用于计算训练转换序列的长度,得到第一序列长度;当第一序列长度大于预设序列长度阈值时,在训练转换序列的末尾进行裁剪,以得到标准训练转换序列,其中,标准训练转换序列的长度等于预设序列长度阈值;当第一序列长度小于预设序列长度阈值时,在训练转换序列的末尾进行补齐,以得到标准训练转换序列;其中,将训练转换序列作为初始深度学习模型的输入时,具体将标准训练转换序列作为初始深度学习模型的输入。
在转换模块将原始字节序列进行进制转换,形成转换序列之后,输入模块将转换序列输入至预设的深度学习模型之前,特征码提取装置还包括预处理模块,用于:计算转换序列的长度,得到第二序列长度;当第二序列长度大于预设序列长度阈值时,在转换序列的末尾进行裁剪,以得到标准转换序列,其中,标准转换序列的长度等于预设序列长度阈值;当第二序列长度小于预设序列长度阈值时,在转换序列的末尾进行补齐,以得到标准转换序列;其中,输入模块在将转换序列输入至预设的深度学习模型时,具体将标准转换序列输入至预设的深度学习模型。
实施例四
本实施例四还提供一种计算机设备,如可以执行程序的智能手机、平板电脑、笔记本电脑、台式计算机、机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图6所示,本实施例的计算机设备01至少包括但不限于:可通过系统总线相互通信连接的存储器011、处理器012,如图6所示。需要指出的是,图6仅示出了具有组件存储器011和处理器012的计算机设备01,但是应理解的是,并不要求实施所有示出的组件,可以替代的实施更多或者更少的组件。
本实施例中,存储器011(即可读存储介质)包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器011可以是计算机设备01的内部存储单元,例如该计算机设备01的硬盘或内存。在另一些实施例中,存储器011也可以是计算机设备01的外部存储设备,例如该计算机设备01上配备的插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。当然,存储器011还可以既包括计算机设备01的内部存储单元也包括其外部存储设备。本实施例中,存储器011通常用于存储安装于计算机设备01的操作系统和各类应用软件,例如实施例三的特征码提取装置的程序代码等。此外,存储器011还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器012在一些实施例中可以是中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器012通常用于控制计算机设备01的总体操作。本实施例中,处理器012用于运行存储器011中存储的程序代码或者处理数据,例如特征码提取方法等。
实施例五
本实施例五还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘、服务器、App应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于存储特征码提取装置,被处理器执行时实现实施例一的特征码提取方法。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。