一种恶意代码检测方法、终端设备及存储介质与流程

文档序号:24129800发布日期:2021-03-02 17:08阅读:111来源:国知局
一种恶意代码检测方法、终端设备及存储介质与流程

[0001]
本发明涉及恶意代码检测领域,尤其涉及一种恶意代码检测方法、终端设备及存储介质。


背景技术:

[0002]
当前恶意软件数量呈井喷式增长,但其中的大部分并非新生的恶意软件,而是在原始恶意家族的基础上进行一系列异构变换而产生的变种。在这些异构变换处理中,模糊化是较为常用的方法。模糊即是故意混淆代码,通过掩盖其目的或者它的逻辑来防止篡改,阻止逆向工程。代码模糊技术被大量应用于恶意代码中。通过对现有恶意代码进行修改,恶意代码的字节序列被模糊化,基于签名的原始静态检测技术越发难以满足反病毒检测工作。
[0003]
目前传统的恶意代码分析方法分为静态分析和动态分析两种。动态分析是指在一个可控的环境内运行恶意代码,分析恶意代码与运行环境之间交互行为的方法。该方法通过比较环境在运行样本前后产生的变化,从多个方面给出样本的指令以及系统调用的描述来大致还原恶意代码实际功能。动态分析实质上就是运行程序,再根据各种寄存器、变量等的变化来描述其行为。用户可以直接对这些寄存器、变量进行观察,也可以使用一些辅助工具。这些辅助工具一般会在样本程序中加入部分代码来实现动态监视功能。静态分析方法是指不运行恶意程序而是通过文件结构进行分析的方法。一般而言,静态分析需要首先对可执行文件或源代码进行反汇编、反编译等方法进行处理,然后再做相应的分析。与动态分析相反,静态分析不编译运行程序,而是通过对程序源代码进行分析以发现其中的错误。静态分析一般是作为动态分析的补充来施行的。
[0004]
程序的运行时间可能远超预期,如果每次分析都完整运行整个程序的成本过高,并且由于未对其进行静态分析,程序的不可预见性也大大提高。这些都是不利于动态分析的。在程序运行前尽可能多地分析程序的特征就显得很有必要。手工检测需要做大量重复冗余的操作,检测效果可能也并不尽如人意。由于有些分支条件在实际执行中极难满足,而使用静态分析方法可以了解恶意代码在执行中极难获取的分支细节,能够提炼出恶意代码的静态特征。另外,词法分析技术和二进制比对技术是静态检测中常用的两种专门针对软件代码审查的检测技术。这类针对代码审查的检测技术普遍具有简单高效的特点,但是只针对代码本身特征的检测并不能很好的检测出代码语义层级的缺陷,虽然可以对其中引入模式识别来加强检查特征的匹配类型,但这只能略微突出其检测的特征,实际检测效果的提升并不明显。


技术实现要素:

[0005]
为了解决上述问题,本发明提出了一种恶意代码检测方法、终端设备及存储介质。
[0006]
具体方案如下:
[0007]
一种恶意代码检测方法,包括以下步骤:
[0008]
s1:采集多个恶意家族的多个变种样本的可执行文件;
[0009]
s2:针对每个变种样本,对其可执行文件进行预处理,以得到变种样本的权值矩阵;
[0010]
s3:针对每个恶意家族,采用签名迭代算法,将恶意家族的多个变种样本的权值矩阵叠加生成恶意家族的权值矩阵;
[0011]
s4:接收待检测可执行文件,并对其预处理得到待检测可执行文件的权值矩阵;
[0012]
s5:将待检测可执行文件的权值矩阵与每个恶意家族的权值矩阵进行对比,计算两者之间的相似度,当相似度大于阈值时,计算待检测可执行文件的权值矩阵与恶意家族的权值矩阵的偏移量,当偏移量落在由恶意家族的所有变种样本计算的恶意家族对应的偏移量范围内时,判定待检测可执行文件属于该恶意家族;当偏移量落在由恶意家族的所有变种样本计算的恶意家族对应的偏移量范围之外时,则判定待检测可执行文件不属于该恶意家族,继续与下一个恶意家族的权值矩阵进行对比。
[0013]
进一步的,对可执行文件进行预处理的过程包括以下步骤:
[0014]
s201:对可执行文件进行脱壳处理;
[0015]
s202:将脱壳处理后的文件进行反汇编,得到可执行文件的汇编指令;
[0016]
s203:提取汇编指令中的call语句,根据call语句中的操作数得到call语句包含的库函数调用集,同时根据call语句提取call语句包含的子函数的调用关系,得到子函数偏序集;
[0017]
s204:将库函数调用集与子函数调用集进行合并后,得到可执行文件对应的权值矩阵。
[0018]
进一步的,权值矩阵为函数的二元组映射,将函数内包含的所有类型和所有动作进行一一组合,得到多个函数对应的类型动作映射码,根据所有的类型动作映射码构建二维的权值矩阵,其中权值矩阵的行和列的个数均为所有的类型动作映射码的总数,权值矩阵中每个元素的值的计算公式为:
[0019]
v
ij
=n
ij
/n
max
[0020]
其中,v
ij
为权值矩阵中第i行第j列元素的值,n
ij
表示第i行的类型动作映射码对应的函数与第j列的类型动作映射码对应的函数组成的偏序对在可执行文件中出现的次数,n
max
表示可执行文件中包含的偏序对的总数。
[0021]
进一步的,步骤s3中采用签名迭代算法生成恶意家族的权值矩阵的过程包括以下步骤:
[0022]
s301:构建恶意家族的权值矩阵,并初始化设定恶意家族的权值矩阵中每个元素的值均为0,即v

ij
(0)=0;初始化设定变量k=1,样本的总数n;
[0023]
s302:接收第k个样本的权值矩阵;
[0024]
s303:将第k个样本的权值矩阵叠加至恶意家族的权值矩阵,对恶意家族的权值矩阵进行更新;
[0025]
s304:判断k=n是否成立,如果是,输出恶意家族的权值矩阵,结束;否则,令k=k+1,返回s302。
[0026]
进一步的,步骤s303中恶意家族的权值矩阵中各元素的更新公式为:
[0027]
v

ij
(k)=v
ij
(k)*θ+v

ij
(k-1)*(1-θ)
[0028]
其中,v

ij
(k)表示恶意家族的权值矩阵更新k次后的第i行第j列元素的值,v
ij
(k)表示第k个样本的权值矩阵的第i行第j列元素的值,θ=1/(k+1)。
[0029]
进一步的,步骤s5中相似度的计算采用图相似性比对算法。
[0030]
进一步的,步骤s5中偏移量的计算公式为:
[0031][0032]
其中,o表示待检测可执行文件与恶意家族的偏移量,v
ij(family)
表示恶意家族的权值矩阵中第i行第j列元素的值,v
ij(sample)
表示待检测可执行文件的权值矩阵中第i行第j列元素的值,m表示权值矩阵中行和列的总数。
[0033]
进一步的,步骤s5中由恶意家族的所有变种样本计算的恶意家族对应的偏移量范围的方法为,计算恶意家族的每个变种样本与恶意家族的偏移量,将其中的最小值作为偏移量范围的最小值,将其中的最大值作为偏移量范围的最大值。
[0034]
一种恶意代码检测终端设备,包括处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例上述的方法的步骤。
[0035]
一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述的方法的步骤。
[0036]
本发明采用如上技术方案,相对于传统的文法分析,提升了恶意代码静态检测的精确度,对部分系统的可执行文件恶意代码测试特征库的生成提出了较为完整的解决方案。
附图说明
[0037]
图1所示为本发明实施例一的流程图。
[0038]
图2所示为该实施例中类型映射表的示意图。
[0039]
图3所示为该实施例中动作映射表的示意图。
[0040]
图4所示为该实施例中常见api映射表(操作类型映射码+动作映射码)的示意图。
[0041]
图5所示为该实施例中常见类型映射表的示意图。
[0042]
图6所示为该实施例中常见动作映射表的示意图。
具体实施方式
[0043]
为进一步说明各实施例,本发明提供有附图。这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理。配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点。
[0044]
现结合附图和具体实施方式对本发明进一步说明。
[0045]
实施例一:
[0046]
本发明实施例提供了一种恶意代码检测方法,如图1所示,所述方法包括以下步骤:
[0047]
s1:采集多个恶意家族的多个变种样本的可执行文件。
[0048]
s2:针对每个变种样本,对其可执行文件进行预处理,以得到变种样本的权值矩
阵。
[0049]
对可执行文件进行预处理的过程包括以下步骤:
[0050]
s201:对可执行文件进行脱壳处理。
[0051]
可执行文件均为exe格式,该实施例中用于预处理的可执行文件均来自开源数据库,这些可执行文件普遍经过模糊处理,直接对其分析极难获取有用信息。考虑到可执行文件极有可能经过加壳等处理,在分析的时候如果不先行进行分析,运行时存在很大可能出现异常状况,因此,在对可执行文件进行分析前需要首先对其进行相应的脱壳和解密操作。
[0052]
该实施例中使用的脱壳工具为peid。
[0053]
s202:将脱壳处理后的文件进行反汇编,得到可执行文件的汇编指令。
[0054]
该实施例中使用反汇编工具ida pro进行反汇编。
[0055]
s203:提取汇编指令中的call语句,根据call语句中的操作数得到call语句包含的库函数调用集,同时根据call语句提取call语句包含的子函数的调用关系,得到子函数偏序集。
[0056]
s204:将库函数调用集与子函数调用集进行合并后,得到可执行文件对应的权值矩阵。
[0057]
合并后的权值矩阵包含了可执行文件的所有库函数和子函数的调用信息,能够反映可执行文件的时序关系,一定程度地克服了原始的静态检测方法的缺陷,与基于字节序列签名反病毒检测技术相比具有一定的优势。
[0058]
在权值矩阵的构建中,由于函数的调用关系非常复杂,如果直接对其进行分析不仅繁琐,而且极易产生新的错误,如果能够对函数调用进行提炼将大幅简化后续工作,并能剔除函数的冗余信息,从更抽象的层次获取可执行文件的行为。因此,该实施例中采用二元组映射的方式构建函数的调用关系对应的权值矩阵。
[0059]
下面介绍二元组映射的具体方法。
[0060]
如将每个windows api分成一个二元组,其中一部分是具体类型,另一部分是操作动作。具体类型即常见的api调用资源,该实施例中只关注常见的api。根据msdn(microsoft software developer network),该实施例中将windwos api的调用资源分为32种,如memmory、register、mutex等。操作动作又分为打开、关闭、读和写共4种,所以api调用即被分成32*4=128种。例如,malloc()函数可以转换为memory+write。这样处理能够屏蔽api中大量的非关键和冗余信息,提炼出语义层级的抽象含义。通过试验证明,这一处理过程极大克服了一般静态检测的缺陷,检测模糊化处理的恶意文件具有较好的适用性。具体映射表如图2所示。
[0061]
图2展示了二元组的操作类型映射关系,其中操作类型依据msdn,每个操作类型都有一个对应的操作类型映射码,映射码的范围为0-31。
[0062]
如图3所示,展示了二元组的动作映射关系,其中具体动作为打开、关闭、读和写,分别对应一个映射码,依次为0、1、2、3。
[0063]
如图4所示,展示了一些常见的映射关系,由于在类型映射表和动作映射表中都没有明确对应关系,因此提取出一些常见的并列出其对应的映射码,映射码由具体类型码和动作类型码两部分组成,前者占两位,后者占一位,具体对应关系如图4所示。
[0064]
如图5所示,展示了一些常见的类型映射关系,由于在图2中并未出现,所以需要单
独进行设置。
[0065]
如图6所示,展示了一些常见动作的映射关系,由于在图3中并未出现,所以此处对其进行了单独的设置。
[0066]
基于上述的二元组映射方式,该实施例中设定权值矩阵为函数的二元组映射,将函数内包含的所有类型和所有动作进行一一组合,得到多个函数对应的类型动作映射码,根据所有的类型动作映射码构建二维的权值矩阵,其中权值矩阵的行和列的个数均为所有的类型动作映射码的总数,权值矩阵中每个元素的值的计算公式为:
[0067]
v
ij
=n
ij
/n
max
[0068]
其中,v
ij
为权值矩阵中第i行第j列元素的值,n
ij
表示第i行的类型动作映射码对应的函数与第j列的类型动作映射码对应的函数组成的偏序对在可执行文件中出现的次数,n
max
表示可执行文件中包含的偏序对的总数。
[0069]
该实施例中权值矩阵为128*128的矩阵,
[0070]
s3:针对每个恶意家族,采用签名迭代算法,将恶意家族的多个变种样本的权值矩阵叠加生成恶意家族的权值矩阵。
[0071]
权值矩阵即为从语义层级反映可执行文件的行为特征,其又称为签名。由于同属一个恶意家族的不同变种具有相近的行为特征,因此,该实施例中通过分析各变种的特征来归纳出恶意家族的整体特征,
[0072]
该实施例中采用签名迭代算法生成恶意家族的权值矩阵的过程包括以下步骤:
[0073]
s301:构建恶意家族的权值矩阵,并初始化设定恶意家族的权值矩阵中每个元素的值均为0,即v

ij
(0)=0;初始化设定变量k=1,样本的总数n。
[0074]
s302:接收第k个样本的权值矩阵。
[0075]
s303:将第k个样本的权值矩阵叠加至恶意家族的权值矩阵,对恶意家族的权值矩阵进行更新。
[0076]
恶意家族的权值矩阵中各元素的更新公式为:
[0077]
v

ij
(k)=v
ij
(k)*θ+v

ij
(k-1)*(1-θ)
[0078]
其中,v

ij
(k)表示恶意家族的权值矩阵更新k次后的第i行第j列元素的值,v
ij
(k)表示第k个样本的权值矩阵的第i行第j列元素的值,θ=1/(k+1)。
[0079]
s304:判断k=n是否成立,如果是,输出恶意家族的权值矩阵,结束;否则,令k=k+1,返回s302。
[0080]
s4:接收待检测可执行文件,并对其预处理得到待检测可执行文件的权值矩阵。
[0081]
s5:将待检测可执行文件的权值矩阵与每个恶意家族的权值矩阵进行对比,计算两者之间的相似度,当相似度大于阈值时,计算待检测可执行文件的权值矩阵与恶意家族的权值矩阵的偏移量,当偏移量落在由恶意家族的所有变种样本计算的恶意家族对应的偏移量范围内时,判定待检测可执行文件属于该恶意家族;当偏移量落在由恶意家族的所有变种样本计算的恶意家族对应的偏移量范围之外时,则判定待检测可执行文件不属于该恶意家族,继续与下一个恶意家族的权值矩阵进行对比。
[0082]
该实施例中相似度的计算采用图相似性比对算法,具体过程为:
[0083]
待检测可执行文件的权值矩阵中的元素w
ij
的值为:
[0084][0085]
恶意家族的权值矩阵中中相同位置的元素w
ij
(f)的值为:
[0086][0087]
采用jaccard系数计算两者之间的相似度,jaccard系数计算方法如下,以样本a与b的相似度计算为例,那么样本a与b的系数即可定义为:
[0088][0089]
如果j(a,b)=1,则说明这两个样本具有相同的行为。
[0090]
根据上述公式,a与b交集的计算公式为:
[0091][0092]
a与b并集的计算公式为:
[0093][0094]
样本a和样本b的相似度s
f
的计算公式为:
[0095][0096]
如果相似度大于阈值,即s
f
>=20%,说明待检测可执行文件与恶意家族代码的公共部分所占比例大于20%,此时需要进行偏移量的计算。偏移量体现了样本的波动性。如果偏移量在偏移量范围之外时,说明与恶意家族的偏差较大,则不属于恶意家族。
[0097]
该实施例中偏移量的计算公式为:
[0098][0099]
其中,o表示待检测可执行文件与恶意家族的偏移量,v
ij(family)
表示恶意家族的权值矩阵中第i行第j列元素的值,v
ij(sample)
表示待检测可执行文件的权值矩阵中第i行第j列元素的值,m表示权值矩阵中行和列的总数。
[0100]
由恶意家族的所有变种样本计算的恶意家族对应的偏移量范围的方法为,计算恶意家族的每个变种样本与恶意家族的偏移量,将其中的最小值作为偏移量范围的最小值,将其中的最大值作为偏移量范围的最大值。
[0101]
本发明实施例一通过提取恶意家族的权值矩阵来识别样本的行为。其依然归属于静态检测范畴,但由于对样本进行抽象提炼获取调用,故又体现了程序部分语义层级的特点,所以相较传统的静态检测方法具备一定的优势。另外,增加了样本同恶意家族权值矩阵的偏移量计算步骤,通过增加偏移量的计算能够一定程度地过滤检测过程中的不确定性因素进而提升检测的准确性。本实施例中使用对一个恶意家族的检测,由于家族特征相较于单个恶意样本具备一定的统计学规律,所以需要降低样本不稳定性对于整体实验结果的影响,引入偏移量就是从这一角度入手,通过减少样本差异性对整体的影响得到更一般的家族特征。事实证明,增加偏移量计算步骤在不显著影响漏报率的前提下降低了误报率,故这种方法是值得推荐的,尤其对于模糊化样本的检测具有一定参考价值。
[0102]
实施例二:
[0103]
本发明还提供一种恶意代码检测终端设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本发明实施例一的上述方法实施例中的步骤。
[0104]
进一步地,作为一个可执行方案,所述恶意代码检测终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述恶意代码检测终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,上述恶意代码检测终端设备的组成结构仅仅是恶意代码检测终端设备的示例,并不构成对恶意代码检测终端设备的限定,可以包括比上述更多或更少的部件,或者组合某些部件,或者不同的部件,例如所述恶意代码检测终端设备还可以包括输入输出设备、网络接入设备、总线等,本发明实施例对此不做限定。
[0105]
进一步地,作为一个可执行方案,所称处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现场可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述恶意代码检测终端设备的控制中心,利用各种接口和线路连接整个恶意代码检测终端设备的各个部分。
[0106]
所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述恶意代码检测终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据手机的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card,smc),安全数字(secure digital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
[0107]
本发明还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现本发明实施例上述方法的步骤。
[0108]
所述恶意代码检测终端设备集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,所述计算机程序包括计算机程序代码,所述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)以及软件分发介质等。
[0109]
尽管结合优选实施方案具体展示和介绍了本发明,但所属领域的技术人员应该明白,在不脱离所附权利要求书所限定的本发明的精神和范围内,在形式上和细节上可以对
本发明做出各种变化,均为本发明的保护范围。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1