基于可执行文件线性序列表示的计算机恶意代码检测方法转让专利

申请号 : CN202210496401.5

文献号 : CN114896597B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 许家威付文轩布皓羽王志

申请人 : 南开大学

摘要 :

基于可执行文件线性序列表示的计算机恶意代码检测方法,属于计算机防病毒技术领域。包括将待检测样本进行线性序列表示;将所述线性序列进行填充,并使用线性插值法放缩到指定长度;根据计算机病毒检测模型检测序列的善恶性,得到检测结果,其中,所述计算机病毒检测模型为根据收集到的样本数据集合训练得到的神经网络模型,所述序列为待检测样本按照所述线性序列表示得到的序列。本发明在线性序列化表示样本文件的基础上使用神经网络提取序列特征并进行检测,从而有效避免以往的使用二维图像表示二进制文件时产生的边缘损失、重采样噪声和填充问题,并且可以有效减小模型参数数量、提升模型更新速度,抵抗模型退化问题。

权利要求 :

1.基于可执行文件线性序列表示的计算机恶意代码检测方法,其特征在于,所述方法包括:步骤1、将待检测样本进行线性序列表示;

步骤2、将所述线性序列进行规范化处理;

步骤3、将所述线性序列进行填充,并使用线性插值法放缩到指定长度;

步骤4、使用计算机病毒检测模型检测序列的善恶性,得到检测结果,其中,所述计算机病毒检测模型为根据收集到的样本数据集合训练得到的神经网络模型,所述序列为待检测样本按照所述线性序列表示得到的序列;

步骤1所述的将待检测样本进行线性序列表示,是将待检测样本按照二进制形式读取,读取内容为根据其在设备中的存放顺序形成的二进制序列;

步骤2将所述线性序列进行规范化处理,包括:将所述线性序列中的二进制数据按比例缩放,使之落入一个小的特定区间,从而在为后续进行放缩的同时最大程度上保留原本的信息;

步骤3所述的将所述线性序列进行填充,并使用线性插值法放缩到指定长度,包括如下步骤:第一步、将线性序列进行填充:

在步骤2形成的线性序列首尾填充特定长度的0,使得填充后的线性序列长度为L0;使用线性插值法放缩到指定长度L1;

第二步、线性插值:

1)、确定放缩比S,其中S的计算公式为:S=(L1/L0),其中L1为所述指定长度,L0为所述第一步中所述填充0之后的序列长度;

2)、确定相关像素点数量n,其中n的计算公式为:n=ceil(1/S),其中S为第二步1)中所述放缩比,ceil(1/S)表示将1/S的值进行向上取整;

3)、确定涉及到目标像素点P的n个像素点V={P1……Pn},其中n为第二步2)中所述的相关像素点数量;

4)、使用线性插值法进行放缩,线性插值操作的具体函数表达式为:其中{x1……xn}分别对应像素点{P1……Pn}的横坐标,{y1……yn}分别对应像素点{P1……Pn}的像素值,k为像素点P对应的横坐标。

2.根据权利要求1所述的基于可执行文件线性序列表示的计算机恶意代码检测方法,其特征在于,步骤4所述的使用计算机病毒检测模型检测序列的善恶性,得到检测结果,包括如下步骤:

1)使用计算机病毒检测模型训练一个二分类的分类器,计算并输出样本为每个类别的概率;

2)确定概率的最大值,判断所述概率是否大于设定阈值;

如果是,则表示待检测样本为超过阈值的类别;

如果否,则表示待检测样本为小于阈值的类别。

说明书 :

基于可执行文件线性序列表示的计算机恶意代码检测方法

技术领域

[0001] 本发明属于计算机防病毒技术领域,尤其涉及神经网络检测计算机病毒领域。

背景技术

[0002] 恶意软件是一种很常见的网络安全威胁,可能对个人或公司系统造成严重损害,例如造成系统的减速或崩溃、关键数据丢失或泄漏、灾难性的硬件故障。根据AV‑Test的报告,平均每天检测到超过45万个新的恶意软件。大量的新恶意软件变体使得手动恶意软件分析效率低且耗时,人工分析已经难以对如此庞大数量的恶意软件分析做到及时分析、检测。为了更有效率的检测恶意软件,许多研究人员提出了针对恶意软件分析的先进工具,这些工具能够帮助分析人员执行部分工作,从而更快速地完成任务,然而,在处理如此大量的恶意软件时,这些解决方案并不能从根本上减少其工作负载。为了解决这个问题,许多专家和学者将机器学习算法,特别是深度学习算法,应用于恶意软件检测和分类。但是恶意软件在飞速的变异,大部分的新恶意代码样本采用了躲避神经网络检测的自我保护技术,使得模型需要快速更新以应对这种情况,但是现有的模型存在有模型规模过大、训练代价高的问题,难以做到快速更新。因此,需要有一种模型规模小、参数数量少、训练代价低的轻量级模型进行恶意软件的分析检测。

发明内容

[0003] 为了解决现有深度学习模型退化比较严重、模型规模大、参数数量多、训练代价大、更新速度慢的问题,本发明提出一种基于应用线性序列表示二进制文件特征的神经网络的计算机病毒检测方法。
[0004] 为实现上述目的及其他相关目的,本发明采用的技术方案是:
[0005] 基于可执行文件线性序列表示的计算机恶意代码检测方法,所述方法包括:
[0006] 将待检测样本进行线性序列表示;
[0007] 将所述线性序列进行规范化处理;
[0008] 将所述线性序列进行填充,并使用线性插值法放缩到指定长度;
[0009] 根据计算机病毒检测模型检测序列的善恶性,得到检测结果,其中,所述计算机病毒检测模型为根据收集到的样本数据集合训练得到的神经网络模型,所述序列为待检测样本按照所述线性序列表示得到的序列。
[0010] 进一步地,本申请所述的将待检测样本进行线性序列表示,具体实施方法为将待检测样本按照二进制形式读取,所述读取内容为根据其在设备中的存放顺序形成的二进制序列。
[0011] 本申请所述的将待检测样本进行线性序列表示,包括如下特点:该表示方法可以有效避免现有神经网络模型中将文件表示为二维图像而引起的边缘损失、重采样噪音、填充问题。
[0012] 所述将待检测样本进行线性序列表示的特点中可以有效避免的边缘损失,表现为:在以往方法中,将二进制文件表示为二维图像时,由于图像的长和宽为固定数值,当二进制文件的内容占满图像中的一行时需要另起一行进行表示,这种另起一行的方式会导致二进制文件中内容的折断,从而导致连续语义内容的断裂、缺失。
[0013] 所述将待检测样本进行线性序列表示的特点中可以有效避免的重采样噪音,表现为:在以往方法中,对二进制文件形成的二维图像中进行重采样时,会将图像中的上一行和下一行内容进行双线性插值计算,但对于二进制文件来说,上一行和下一行中表示的内容可能会不存在有直接的关系,如果用重采样进行计算则会将本不相关的二者进行关联,从而产生噪声。
[0014] 所述将待检测样本进行线性序列表示的特点中可以有效避免的填充问题,表现为:在以往方法中,将二进制文件表示为二维图像时会产生边缘损失。而填充是深度学习中常用的处理方式,目的在于调整输出大小,保证输出图像与原本图像尺寸保持一致或达到目标尺寸,同时防止处于边缘的像素被丢弃。但是在经过填充之后,上一行的末尾与下一行的开头之间插入了无关内容,从而使得上一行末尾与下一行开头的内容之间相距更远。由于填充导致连续语义内容的断裂、缺失更加严重。
[0015] 进一步地,本申请的上述方法中,进行所述的线性序列进行规范化处理,使所述线性序列中的数值落入一个小的特定区间。
[0016] 进一步地,本申请的上述方法中,所述的将所述线性序列进行填充,并使用线性插值法放缩到指定长度,还包括如下子步骤:
[0017] 在所述形成的线性序列首尾填充特定长度的0,使得填充后的线性序列长度为L0;使用线性插值法放缩到指定长度L1。
[0018] 进一步地,在本申请的上述方法中,所述使用线性插值法放缩到指定长度L1,还包括如下子步骤:
[0019] 确定放缩比S,其中S的计算公式为:S=(L1/L0),其中L1为所述指定长度,L0为上述子步骤中填充0之后的序列长度;
[0020] 确定相关像素点数量n,其中n的计算公式为:n=ceil(1/S),其中S为以上步骤中所述放缩比,ceil(1/S)表示将1/S的值进行向上取整;
[0021] 确定涉及到目标像素点P的n个像素点V={P1……Pn},其中n为以上步骤中所述的相关像素点数量;
[0022] 使用线性插值法进行放缩,所述线性插值操作的具体函数表达式为:
[0023]
[0024] 其中{x1……xn}分别对应像素点{P1……Pn}的横坐标,{y1……yn}分别对应像素点{P1……Pn}的像素值,k为像素点P对应的横坐标。
[0025] 进一步地,在本申请的上述方法中,所述的使用计算机病毒检测模型检测序列的善恶性,得到检测结果,包括如下子步骤:
[0026] 使用计算机病毒检测模型训练一个二分类的分类器,计算并输出样本为每个类别的概率;
[0027] 确定概率的最大值,判断所述概率是否大于设定阈值;
[0028] 如果是,则表示待检测样本为超过阈值的类别;
[0029] 如果否,则表示待检测样本为小于阈值的类别。
[0030] 进一步地,在本申请的上述方法中,所述的计算机病毒检测模型是基于Pytorch学习框架建立。
[0031] 本发明的优点和积极效果:
[0032] 恶意软件的不断迭代更新和数量迅速增长,而现有的检测方式自动化能力较弱,仍然需要大量的人力进行分析,一些提出的自动化检测方式虽然可行,但是存在有模型规模大、训练代价高、模型退化等问题。基于以上问题,本发明提出了一种基于应用线性序列表示二进制文件特征的神经网络的计算机病毒检测方法。本发明的有益效果为:以二进制文件整体作为特征,不对原始文件进行任何切割、改变,从而最大程度上保持原始二进制文件的性质;使用线性序列表示二进制文件特征,从而最大程度保持原始二进制文件整体特征以及二进制文件中流式结构的特点,并能有效避免以往的使用二维图像表示二进制文件时产生的边缘损失、重采样噪声和填充问题,从而可以有效减小模型参数数量、提升模型更新速度,进而抵抗模型退化问题。同时,本发明以原始文件形成的线性序列进行表示以及放缩处理均在神经网络的输入层前使用脚本自动进行,避免以往传统机器学习算法中人工进行特征工程,更大程度降低人工工程量。
[0033] 实验表明,本发明可以在保持模型检测的准确率基础上显著降低参数数量,本实验中的参数数量约为以往方法中参数数量的11%,并且本发明方法的模型所需训练时间约为以往方法所需时间的12.5%,其中作为对比的以往方法为Malconv,所述Malconv的参数数量为1.2M,每个Epoch训练所需时间为20分钟;而本实验所述计算机病毒检测模型参数数量为136K,每个Epoch训练所需时间为2分半。并且二者的效果相近,所述Malconv准确率为95.5%,召回率为97.1%,本实验所述计算机病毒检测模型准确率为97.7%,召回率为
97.9%。因此,本发明的应用实例可以有效减少模型参数数量,提升训练速度,一定程度上避免边缘损失、重采样噪音、填充问题。

附图说明

[0034] 图1基于应用线性序列表示二进制文件特征的神经网络的计算机病毒检测方法流程图。
[0035] 图2为线性序列表示二进制文件。
[0036] 图3为边缘损失。
[0037] 图4为填充问题。
[0038] 图5为重采样噪声。
[0039] 图6为线性序列首尾进行填充。
[0040] 图7为填充后的二进制序列经过线性插值形成定长序列。

具体实施方式

[0041] 以下将结合实施例和附图对本申请的思想、具体结构及产生的技术效果进行清楚、完整的描述,以充分地理解本申请的原理、目的、方案和效果,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。
[0042] 本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本申请的思想下进行各种修饰或改变。
[0043] 需要说明的是,本实施例中所提供的图示仅以示意方式说明本申请中基本思想的示例说明,遂图式中仅显示与本发明中的示例相关内容,与按照实际实施时的二进制文件内容与示例会有所出入。同时为了更清晰的说明本申请部分内容的思想,所用图示中缺省了规范化处理的步骤,详细内容请以具体实施步骤为准。
[0044] 如图1所示的方法流程图,在本申请的一个或多个实施例中,本申请提出基于应用线性序列表示二进制文件特征的神经网络的计算机病毒检测方法。所述方法包括如下步骤:
[0045] 将待检测样本进行线性序列表示;
[0046] 将所述线性序列进行规范化处理;
[0047] 将所述线性序列进行填充,并使用线性插值法放缩到指定长度;
[0048] 使用计算机病毒检测模型检测序列的善恶性,得到检测结果,其中,所述计算机病毒检测模型为根据收集到的样本数据集合训练得到的神经网络模型,所述序列为待检测样本按照所述线性序列表示得到的序列。
[0049] 进一步地,参照图2所示,本申请所述的将待检测样本进行线性序列表示,具体实施方法为将待检测样本按照二进制形式读取,所述读取内容为根据其在设备中的存放顺序形成的二进制序列。
[0050] 示例性的,本次实验中的样本其中一段内容为图2中左框所示,为代码片段,其中左边的十六进制数为实际存储的内容,右边的汇编代码为对应存储内容的汇编代码。将示例文件以二进制形式读取之后表示成的线性序列如右框所示,即为存储内容的线性排列。
[0051] 在上述将待检测样本进行线性序列表示具体实施方法中,可以通过任意具有二进制形式读取文件的编程语言实现,在本实施样例中使用的编程语言为Python,得到的线性序列用于后续步骤。
[0052] 进一步地,本申请所述的将待检测样本进行线性序列表示,包括如下特点:
[0053] 该表示方法可以有效避免现有神经网络模型中将文件表示为二维图像而引起的边缘损失、重采样噪音、填充问题。
[0054] 示例性的,如图3所示为边缘损失示例。根据左框中的内容所示,89 5C 24 18应当为一个语句,其表示的语义为将ebx中的内容移动到exp+1Ch+var_4这个地址上,这是一条完整的汇编指令,不可拆分。在按照以往的将二进制文件表示为二维图像形式时,可能会出现右框中的情形。在右框中可以看见895C在二维图像中的第k行,而2418在二维图像中的第k+1行,这种表示形式会造成一条完整语句的折断,从而导致连续语义内容的断裂、缺失。
[0055] 示例性的,如图5所示为重采样噪音示例。按照以往的将二进制文件表示为二维图像的方式,可以将左框中的内容转换为中间框中的形式。在神经网络进行重采样操作时,如图所示可以看见将83EC,1885进行了相应重采样操作后,得到的结果为右框中标记的EC。而根据左框中的内容可以得到:83EC为左框中83 EC 18的部分内容,18为89 5C 24 18中的部分内容,85位85 DB中的部分内容,这三部分内容在原本的文件中关联较小,尤其是83 EC在原文件中与85的距离较远。在这种情况下对上述内容进行重采样操作,会将原本没有关联的内容强行联系在一起,从而对神经网络学习过程中的特征产生了误导,影响神经网络的效果。
[0056] 示例性的,如图4所示为填充问题示例。在本示例中,895C和2418由于转换为二维图像时产生了折断,其在空间上的距离相较原文件被放大,而填充的目的在于调整输出大小,保证输出图像与原本图像尺寸保持一致或达到目标尺寸,同时防止处于边缘的像素被丢弃。在填充操作之后,895C后会产生若干个0,同样的在2418前也会产生同等数量的0,从而导致原本语义内容的断裂、缺失更加严重。
[0057] 本发明将所述线性序列进行规范化处理,使线性序列中的数值落入一个小的特定区间。
[0058] 如图6、图7所示,本申请所述的将所述线性序列进行填充,并使用线性插值法放缩到指定长度,还包括如下子步骤:
[0059] 在所述形成的线性序列首尾填充特定长度的0,使得填充后的线性序列长度为L0;使用线性插值法放缩到指定长度L1。
[0060] 进一步地,在本申请的上述方法中,所述将线性序列进行规范化处理,在本实施样例中指定的区间为[‑1,1];
[0061] 在本申请的上述方法中,所述使用线性插值法放缩到指定长度L1,还包括如下子步骤:
[0062] 确定放缩比S,其中S的计算公式为:S=(L1/L0),其中L1为所述指定长度,L0为上述子步骤中所述填充0之后的序列长度;
[0063] 确定相关像素点数量n,其中n的计算公式为:n=ceil(1/S),其中S为以上步骤所述放缩比,ceil(1/S)表示将1/S的值进行向上取整;
[0064] 确定涉及到目标像素点P的n个像素点V={P1……Pn},其中n为以上步骤所述的相关像素点数量;
[0065] 使用线性插值法进行放缩,所述线性插值操作的具体函数表达式为:
[0066]
[0067] 其中{x1……xn}分别对应像素点{P1……Pn}的横坐标,{y1……yn}分别对应像素点{P1……Pn}的像素值,k为像素点P对应的横坐标。
[0068] 经验性的,根据对已有数据集的统计,大多数样本二进制文件均在256KB附近,因18
此将指定长度L1设置为2 个字节。
[0069] 示例性的,如图6所示,在转换成的序列首尾进行填充操作。
[0070] 示例性的,如图7所示,为填充后的二进制序列进行线性插值操作。其中89 5C 24 18在经过线性插值操作之后得到的结果为72 1E。
[0071] 进一步地,所述的使用计算机病毒检测模型检测序列的善恶性,得到检测结果,包括如下子步骤:
[0072] 使用计算机病毒检测模型训练一个二分类的分类器,计算并输出样本为每个类别的概率;
[0073] 确定概率的最大值,判断所述概率是否大于设定阈值;
[0074] 如果是,则表示待检测样本为超过阈值的类别;
[0075] 如果否,则表示待检测样本为小于阈值的类别;
[0076] 具体的,从实际环境中获取相应的二进制文件样本,并将所述二进制文件样本中划分为善意、恶意集合,赋予集合内样本相应标签,以构建训练样本集合。进一步的,使用Pytorch搭建所述所述计算机病毒检测模型,并使用构建的训练样本集合进行训练,得到训练完成后的检测模型。进一步地,使用训练得到的所述计算机病毒检测模型对待检测样本序列进行检测。
[0077] 在本申请的实施例中,所述计算机病毒检测模型是基于Pytorch框架搭建,本领域技术人员可以根据现有的神经网络训练方式搭建并训练相应的检测模型;处理脚本为使用Python语言编写,本领域技术人员可以使用其他编程语言进行编写,本申请对此不予具体限定。进一步地,本申请中实施样例使用计算机病毒检测模型检测样本的善恶性时采用的阈值为0.5,并认为检测值超过0.5时将所述检测样本划分为恶意,检测值小于0.5时将所述检测样本划分为善意。本领域人员可根据需求进行阈值的设定,但阈值的范围需要限定在0到1之间,具体阈值本申请不予限定。
[0078] 进一步地,在使用检测模型检测样本之后,本领域技术人员可以根据需求考虑是否存储所述样本以更新训练集,并在训练集更新到一定规模后进行模型重训练以达到更新模型的目的。具体规模以及收集方式等本申请不予具体限定。
[0079] 实验表明,本发明可以在保持模型检测的准确率基础上显著降低参数数量,本实验中的参数数量约为以往方法中参数数量的11%,并且本发明方法的模型所需训练时间约为以往方法所需时间的12.5%,其中作为对比的以往方法为Malconv,所述Malconv的参数数量为1.2M,每个Epoch训练所需时间为20分钟;而本实验所述计算机病毒检测模型参数数量为136K,每个Epoch训练所需时间为2分半。并且二者的效果相近,所述Malconv准确率为95.5%,召回率为97.1%,本实验所述计算机病毒检测模型准确率为97.7%,召回率为
97.9%。因此,本发明的应用实例可以有效减少模型参数数量,提升训练速度,一定程度上避免边缘损失、重采样噪音、填充问题。
[0080] 上述实施样例仅为示例性说明本发明的思想、目的和效果,而非为本发明的限制。任何本领域的技术人员均可在不违背本发明的精神及范畴下,对上述实施例进行修饰或改变。因此,凡所属技术领域中具有通常知识者在未脱离本发明的思想下进行的修饰、替代构造、等效物和延伸,仍应被本发明的权利要求所涵盖。