一种数据检测方法和装置与流程

文档序号:12470963阅读:257来源:国知局
一种数据检测方法和装置与流程

本发明涉及数据检测技术领域,尤指一种数据检测方法和装置。



背景技术:

目前,主要通过两种方式对数据中的恶意代码进行检测,一种是基于传统特征进行检测,例如杀毒软件通常采用这种方式,一个是基于行为进行检测,例如沙箱通常采用这种方式。

基于传统特征进行检测的方式中,都是先由安全厂商的安全分析人员在已捕获恶意样本的前提下,对样本进行特征提取,并通过提取的特征对恶意代码进行检测。传统特征方式,检测准确,效率高,但由于其特征一般都是无意义的二进制数据(比如文件的MD5值),提取的内容通常只用于确定恶意样本,没有额外的功能,在遇到病毒变种,或新的恶意代码时,它通常无能为力,需要通过安全分析人员重新根据捕获的恶意样本进行特征提取。

基于行为进行检测的方式中,通常是让样本在虚拟环境中运行起来,通过分析样本的行为来确定样本中是否存在恶意代码。这种方式的一个重要弊端是,只有恶意代码运行起来,才能被检测到,如果因为环境不符,沙箱对抗等原因,导致恶意代码没有运行,则恶意代码无法被检测到,因此这种方式的检测准确率较低。



技术实现要素:

为了解决上述问题,本发明提出了一种数据检测方法和装置,能够提高恶意代码的检测效率和检出率。

为了解决上述技术问题,本发明提出了一种数据检测方法,包括:

获取待检测的机器码流对应的机器指令;

判断连续的合法机器指令的数目是否达到预定的阈值;

如果连续的合法机器指令的数目达到预定的阈值,则判断待检测的机器码流中存在可疑代码。

优选的,所述获取待检测的机器码流对应的机器指令包括:

根据当前数据地址,对机器码流进行翻译,获取翻译得到的机器指令;

在所述翻译执行之后,还包括:将当前数据地址跟新为指向下一段未翻译的机器码流。

优选的,所述判断连续的合法机器指令的数目是否达到预定的阈值包括:

在翻译不能获得合法机器指令的情况下,将指令计数器设置为0,继续执行所述根据当前数据地址,对机器码流进行翻译的步骤;

在翻译得到一条合法机器指令的情况下,将指令计数器加1;

判断指令计数器的计数数目是否达到预定的阈值;如果没达到,则判断待检测的机器码流是否已全部翻译完毕;如果没有全部翻译完毕,则继续执行所述根据当前数据地址,对机器码流进行翻译的步骤。

优选的,在所述获取待检测的机器码流对应的机器指令之后,所述方法还包括:

判断所述机器指令是否为跳转指令;

在所述机器指令不是跳转指令的情况下,继续执行所述根据当前数据地址,对机器码流进行翻译的步骤;

在该机器指令是跳转指令的情况下,根据跳转指令的内容更新当前数据地址,继续执行所述根据当前数据地址,对机器码进行翻译的步骤。

优选的,所述预定的阈值设置为50~150。

为了解决上述技术问题,本发明还提出了一种数据检测装置,所述装置包括:

翻译单元,用于获取待检测的机器码流对应的机器指令;

检测单元,用于判断连续的合法机器指令的数目是否达到预定的阈值;

结果判断单元,用于在连续的合法机器指令的数目达到预定的阈值时,则判断待检测的机器码流中存在可疑代码。

优选的,所述翻译单元包括:

翻译模块,用于根据当前数据地址,对机器码流进行翻译,获取翻译得到的机器指令;

地址更新模块,用于在翻译模块执行翻译之后,将当前数据地址跟新为指向下一段未翻译的机器码流。

优选的,所述检测单元包括:

指令计数模块,用于在翻译单元执行翻译不能获得合法机器指令的情况下,将指令计数器设置为0,并继续通过翻译模块执行所述根据当前数据地址,对机器码流进行翻译;在翻译单元执行翻译得到一条合法机器指令的情况下,将指令计数器加1;

计数检测模块,用于判断指令计数器的计数数目是否达到预定的阈值;如果没达到,则判断待检测的机器码流是否已全部翻译完毕;如果没有全部翻译完毕,则继续通过翻译模块执行所述根据当前数据地址,对机器码流进行翻译。

优选的,所述检测单元还包括:跳转检测模块,用于

在翻译单元获取待检测的机器码流对应的机器指令之后,判断所述机器指令是否为跳转指令;在该机器指令是跳转指令的情况下,通知地址更新模块根据跳转指令的内容更新当前数据地址。

优选的,所述预定的阈值设置为50~150。

与现有技术相比,本发明提供的技术方案包括:获取待检测的机器码流对应的机器指令;判断连续的合法机器指令的数目是否达到预定的阈值;如果连续的合法机器指令的数目达到预定的阈值,则判断待检测的机器码流中存在可疑代码。通过本发明的方案,通过对连续的机器指令进行计数的方式进行检测。在检测可以代码时,不需要提取恶意样本,因此在病毒变种或者面对新的恶意代码时,不会由于确认恶意样本而无法识别,本发明的检测方法具有较好的适应性和较快的应变能力,此外,本发明实施例提供的检测方法中,不需要运行样本,不会由于环境不符或沙箱对抗导致恶意代码没有运行时,而造成恶意代码无法被检测到,因此,具有较高的检出率,检测准确率较高。

附图说明

下面对本发明实施例中的附图进行说明,实施例中的附图是用于对本发明的进一步理解,与说明书一起用于解释本发明,并不构成对本发明保护范围的限制。

图1为本发明实施例提供的一种数据检测方法的流程图;

图2为本发明实施例提供的另一种数据检测方法的流程图;

图3A和图3B分别为本发明实施例提供的数据检测装置的结构示意图。

具体实施方式

为了便于本领域技术人员的理解,下面结合附图对本发明作进一步的描述,并不能用来限制本发明的保护范围。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的各种方式可以相互组合。

参见图1,本发明提出了一种数据检测方法,所述方法包括:

步骤110,获取数据中待检测的机器码流对应的机器指令;

步骤120,判断连续的合法机器指令的数目是否达到预定的阈值;

步骤130,如果连续的合法机器指令的数目达到预定的阈值,则判断待检测的机器码流中存在可疑代码。

其中,步骤110中,所述获取机器码流对应的机器指令包括:

根据当前数据地址,对机器码流进行翻译,从而得到对应的机器指令。在所述翻译执行之后,还包括:将当前数据地址跟新为指向下一段未翻译的机器码流。

参见图2,本发明提出了一种数据检测方法,所述方法包括:

步骤210,根据当前数据地址,对机器码流进行翻译。

其中,根据预定的合法性规则,对机器码流进行翻译,例如,合法性规则可以是基于某CPU平台的指令集,根据指令集定义的机器码流与机器指令之间的映射关系,对机器码流进行翻译。

步骤220,在翻译不能获得机器指令的情况下,将指令计数器设置为0;更新当前数据地址,继续执行步骤210;

本发明实施例中,指令计数器用于对连续的机器指令进行计数,指令计数器的初始值为0。

步骤230,在翻译得到一条机器指令的情况下,将指令计数器加1;

在当前指令计数器为非零的情况下,只有当翻译得到的机器指令与上一条机器指令是连续的机器指令,才会将指令计数器加1,如果检测到无法翻译成机器指令的机器码流片段,则会将指令计数器设置为0。

步骤240,判断指令计数器的计数数目是否达到预定的阈值;

步骤250,如果指令计数器的计数数目达到预定的阈值,则判断数据中存在可疑代码;

步骤260,如果指令计数器的计数数目没有达到预定的阈值,判断该机器指令是否为跳转指令;

在该机器指令不是跳转指令的情况下,根据更新的当前数据地址,继续执行步骤210;

步骤270,在该机器指令是跳转指令的情况下,根据跳转指令的内容更新当前数据地址,继续执行步骤210;

本发明实施例中的跳转指令是指call指令以外的跳转指令,也就是说对call指令以外的跳转指令进行地址跳转翻译操作。

本实施例中,有两种翻译方式,第一种翻译方式是,对机器码流进行翻译时,能够翻译成机器指令的部分,则翻译成机器指令,机器指令指合法的机器指令,不能翻译成机器指令的部分,放弃翻译成机器指令,第二种翻译方式是,对于不能翻译成机器指令的部分,则翻译成预设的翻译代码,该翻译代码和合法的机器指令统称为翻译指令,上述实施例中,采用第一种翻译方式。下面结合另一个具体的示例进行说明。该实例中,采用第一种翻译方式。

步骤310,对数据对应的机器码流进行翻译,并获取对应的翻译指令;

本发明实施例中,根据机器指令的相关定义制定翻译规则,并将根据翻译规则对机器码流进行翻译得到的内容称为翻译指令。

步骤320,在获取翻译指令之后,检测翻译指令是否为合法的机器指令;

其中,检测翻译指令是否为合法的机器指令包括:根据预定的合法性规则判断所述翻译指令是否为合法的机器指令。

其中,机器指令是在CPU平台中根据预定的指令规则预定义好的,符合这个预定规则的翻译指令称为合法的机器指令,不符合的称为非法指令。

步骤330,判断连续的合法的机器指令的数目是否达到预定的阈值;

步骤340,如果连续的合法的机器指令的数目达到预定的阈值,则判断数据中存在可疑代码。

步骤350,是否完成全部机器码流的翻译,如果已经完成全部机器码流的翻译,执行步骤360,如果没有完成全部机器码流的翻译,执行步骤310。

本实施例中,步骤310和其他的步骤不存在特定的执行顺序,对机器码流的翻译可以持续进行,翻译得到的翻译指令由其他单元进行相应的处理。

步骤360,判断数据中不存在可疑代码。

其中,步骤330中,可以通过指令计数器对合法的机器指令进行计数,从而判断连续的合法的机器指令的数目是否达到预定的阈值。

所述判断连续的合法的机器指令的数目是否达到预定的阈值包括:

如果翻译指令是合法的机器指令,将指令计数器加1,如果翻译指令不是合法的机器指令,将指令计数器清零;

判断指令计数器的计数值是否到达预定的阈值;

本发明实施例中,所述预定的阈值设置为50~150。其中,可以根据经验对预定的阈值进行设置。

下面结合具体的实施场景进行说明,

参见表1,为对机器码流进行翻译的示意数据。

表1为对机器码流进行翻译的示意数据

左侧为机器码流,例如,60、8B 74 24 24等均为机器码流,其中,60对应的当前数据地址为0000009B,8B 74 24 24对应的当前数据地址为0000009C;右侧为根据机器码流进行翻译所得到的机器指令,例如,通过对60进行翻译,得到的对应的当前数据地址为00000098为pusha;通过对E8 97 00 00 00进行翻译,得到的翻译指令为call sub_13C。

对于当前数据地址为000000A0时,根据机器码流E8 97 00 00 00进行翻译所得到的机器指令为call sub_13C,该机器指令为跳转指令,但是,本发明实施例仅对call指令以外的跳转指令进行地址跳转翻译操作,因此翻译得到call sub_13C之后,当前数据地址继续指向下一段机器码流,即将当前数据地址更新为000000A5之后,对000000A5的机器码流继续进行翻译。

本发明实施例中,当前数据地址为000000BA时,根据机器码流进行翻译所得到的机器指令为inz short loc B7,该机器指令为跳转指令,根据该跳转指令,当前数据地址会跳转至000000B7,即loc B7对应的地址。

可以看出,000000B7~000000BA构成循环内容,指令计数器会根据该循环内容反复执行加1操作,最终将导致检测结果为存在可疑代码。

SHELLCODE,即可疑代码,通常都是一段连续的机器码流,而在正常的非可执行文件中以及网络数据流中,通常是不会存在的,换句话说,如果我们在非可执行文件或网络数据流中发现一段可连续执行的指令流,我们就可以将其视为SHELLCODE。

基于与上述实施例相同或相似的构思,本发明实施例还提供一种数据检测装置,参见图3A和图3B,本发明提出的一种数据检测装置包括:

翻译单元10,用于获取待检测的机器码流对应的机器指令;

检测单元20,用于判断连续的合法机器指令的数目是否达到预定的阈值;

结果判断单元30,用于在连续的合法机器指令的数目达到预定的阈值时,则判断待检测的机器码流中存在可疑代码。

本发明实施例中,所述翻译单元10包括:

翻译模块11,用于根据当前数据地址,对机器码流进行翻译,获取翻译得到的机器指令;

地址更新模块12,用于在翻译模块执行翻译之后,将当前数据地址跟新为指向下一段未翻译的机器码流。

本发明实施例中,所述检测单元20包括:

指令计数模块21,用于在翻译单元执行翻译不能获得合法机器指令的情况下,将指令计数器设置为0,并继续通过翻译模块执行所述根据当前数据地址,对机器码流进行翻译;在翻译单元执行翻译得到一条合法机器指令的情况下,将指令计数器加1;

计数检测模块22,用于判断指令计数器的计数数目是否达到预定的阈值;如果没达到,则判断待检测的机器码流是否已全部翻译完毕;如果没有全部翻译完毕,则继续通过翻译模块执行所述根据当前数据地址,对机器码流进行翻译。

本发明实施例中,所述检测单元20还包括:跳转检测模块23,用于

在翻译单元获取待检测的机器码流对应的机器指令之后,判断所述机器指令是否为跳转指令;在该机器指令是跳转指令的情况下,通知地址更新模块根据跳转指令的内容更新当前数据地址。

本发明实施例中,所述预定的阈值设置为50~150。

需要说明的是,以上所述的实施例仅是为了便于本领域的技术人员理解而已,并不用于限制本发明的保护范围,在不脱离本发明的发明构思的前提下,本领域技术人员对本发明所做出的任何显而易见的替换和改进等均在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1