首页> 中国专利> 一种非可执行文件中包含恶意代码的检测方法及其装置

一种非可执行文件中包含恶意代码的检测方法及其装置

摘要

本发明公开了一种非可执行文件中包含恶意代码的检测方法及其装置,该方法包括打开被检查的文件,读取并解码有效内容数据到内存;从数据起始开始检查,如果当前位置一定数量的数据满足有效CPU指令代码块形式,则认为该文件包含恶意代码;如果该位置数据不满足有效CPU指令代码块形式,则移动到下一个数据位置检查;如果检查所有数据没有发现有效CPU指令形式代码块,则该文件不包含恶意代码。本发明通过搜寻非可执行文件中存在的可执行的指令代码块,来判断一个非可执行文件是否被注入了恶意代码,与其他检测方法相比,该检测方法识别率高,不易被免杀修改绕过,并且能够发现使用了未知漏洞或者无法触发漏洞的非可执行文件捆绑恶意代码,能作为现有检测方法的一个有效地补充。

著录项

  • 公开/公告号CN102043915A

    专利类型发明专利

  • 公开/公告日2011-05-04

    原文格式PDF

  • 申请/专利权人 厦门市美亚柏科信息股份有限公司;

    申请/专利号CN201010531717.0

  • 发明设计人 郭小春;张永光;吴鸿伟;

    申请日2010-11-03

  • 分类号G06F21/00(20060101);

  • 代理机构35204 厦门市首创君合专利事务所有限公司;

  • 代理人连耀忠

  • 地址 361000 福建省厦门市软件园二期观日路12号美亚柏科大厦

  • 入库时间 2023-12-18 02:05:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2017-04-26

    专利权的转移 IPC(主分类):G06F21/60 登记生效日:20170401 变更前: 变更后: 申请日:20101103

    专利申请权、专利权的转移

  • 2014-09-10

    专利实施许可合同备案的生效 IPC(主分类):G06F21/60 合同备案号:2014350000079 让与人:厦门市美亚柏科信息股份有限公司 受让人:厦门市美亚柏科信息安全研究所有限公司 发明名称:一种非可执行文件中包含恶意代码的检测方法及其装置 申请公布日:20110504 授权公告日:20130123 许可种类:独占许可 备案日期:20140710 申请日:20101103

    专利实施许可合同备案的生效、变更及注销

  • 2013-01-23

    授权

    授权

  • 2011-06-15

    实质审查的生效 IPC(主分类):G06F21/00 申请日:20101103

    实质审查的生效

  • 2011-05-04

    公开

    公开

说明书

技术领域

本发明涉及一种计算机安全的检测方法,特别是涉及一种非可执行文件中包含恶意代码的检测方法及其装置。

背景技术

互联网络安全技术的发展已经使直接的远程攻击大大减少。而通过发送一些包含恶意代码的文件,诱骗攻击目标打开来进行入侵的间接攻击行为成为一种主要的攻击形式。使网络和计算机安全都成为日益严峻的问题。由于现有技术的发展和网络用户意识的提高,直接使用包含恶意代码的可执行文件进行间接式攻击已经基本不可能。然而在计算机中,系统和各种应用软件都存在着未知的安全漏洞,如未知溢出漏洞等,这些漏洞常常允许把恶意代码捆绑到如文档,电子表格,图片等非可执行文件中去。出于对这类文件的信任,这类文件很容易被打开,导致其中的恶意代码被入侵。

因此有效的检测非可执行文件的安全性,判断非可执行文件是否包含恶意代码也成为互联网安全的重要课题。传统的基于特征码查杀的方法,很容易被通过修改特征码免杀绕过。基于行为检测的方法在漏洞已被修复或者漏洞依赖的系统环境不满足而无法触发的时候也会失效。另外这种方法不需要依赖系统环境,因而不仅在一般计算机用户检测有害文件的时候使用,在专业安全公司进行大量样本筛选的时候也能有效地工作。

发明内容

本发明的目的在于克服现有技术之不足,提供一种非可执行文件中包含恶意代码的检测方法及其装置,通过对非可执行文件中是否有有效CPU指令代码块的判断,达到了有效地检测出非可执行文件中恶意代码的目的,起到了发现和防御有害非可执行文件的作用,保证了计算机使用的安全性。

本发明解决其技术问题所采用的技术方案是:一种非可执行文件中包含恶意代码的检测方法,包括如下步骤:

打开被检查的文件,读取并解码有效内容数据到内存;

从数据起始开始,对数据中是否含有有效CPU指令代码块进行检查,如果当前位置一定数量的数据含有有效CPU指令代码块,则认为该文件包含恶意代码;

如果该位置数据不含有有效CPU指令代码块,则移动到下一个数据位置继续检查;

如果检查所有数据均没有发现有效CPU指令代码块,则认为该文件不包含恶意代码。

所述的对数据中是否含有有效CPU指令代码块进行检查的过程,包括:

检测该数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块;

将数据作为一段代码使用指令模拟执行程序进行执行,在指定的有限时间或指定的有限指令个数内是否能够合法运行而不出现错误。

所述的使用指令模拟执行程序进行执行的过程,包括:

a.判断是否已到文件尾,如果是则结束,否则从文件中读取一块数据;

b.判断是否已到数据块结尾,若已到数据块结尾则返回步骤a,否则从该数据块中读取一条指令;

c.判断该指令是否为预先设定的非法指令形式;如果是则返回步骤b,否则继续下一步骤;

d.解析该指令,复制该指令到缓冲区;

e.调用通用处理过程处理缓冲区内的代码,在缓冲区内的代码处理过程中,若在指定规则下运行不出现错误,且满足预先设定的恶意代码指令形式,则认为文件中含有有效CPU指令代码块,结束模拟;否则返回步骤b。

所述的预先设定的非法指令形式,包括:指令中任意的使用了未初始化的寄存器、指令进行了无意义的操作、指令是特权指令、指令包含无效存储地址、指令包含不常用的指令或指令包含其他预定义的指令。

所述的预先设定的恶意代码指令形式,包括:代码中含解密算子、代码中含代码重定位、代码中含跳板、代码中含API导入或代码中含其他用户预定义的规则。

本发明的一种非可执行文件中包含恶意代码的检测方法,所述的检测该数据是否配备可执行指令的规则,是指:不包含了未定义指令,特权指令,取地址无效指令,破坏运行环境的指令或其他特定指令形式的数据块符合指令代码块的规则;代码结构类似常见的恶意代码所使用到的技法。

本发明的一种非可执行文件中包含恶意代码的检测方法,所述的将数据作为一段代码执行在有限时间和有限指令个数内能够合法运行的规则,是指:使用能够解释大多数常用指令的指令模拟执行程序(虚拟机)对符合可执行指令的规则的数据起始部分开始解释执行,在指定的指令个数或者时间内,执行能够正常实现而没有出现执行了引发错误异常指令或者发现代码功能类似常见的恶意代码所使用到的技法。就认为该数据块符合指令代码块的规则。

本发明的一种非可执行文件中包含恶意代码的检测方法,所述的代码结构或者功能类似常见的恶意代码所使用到的技法包括但不限于恶意代码解密算子、恶意代码重定位、恶意代码跳板、恶意代码API导入等。

本发明的一种非可执行文件中包含恶意代码的检测方法,该检测方法是针对入侵者利用漏洞将恶意代码捆绑到非可执行文件进行欺骗式入侵时所使用的非可执行文件。所述入侵行为是包括文档,图片捆马等其他以非可执行文件作为攻击工具的入侵行为。

本发明的一种非可执行文件中包含恶意代码的检测方法,该检测方法不依赖于恶意代码和非可执行文件捆绑所使用的入侵漏洞类型,因而能够有效对使用未知漏洞的包含恶意代码的非可执行文件进行检测。

本发明的一种非可执行文件中包含恶意代码的检测装置,包括:

一打开文件装置,用来打开被检查的文件,读取并解码有效内容数据到内存;

一有效CPU指令代码块检测装置,用来对数据中是否含有有效CPU指令代码块进行检查,并输出检测结果;

一输出显示装置,用来显示有效CPU指令代码块检测装置输出的显示结果,当被检测的文件中含有有效CPU指令代码块时,输出和显示报警信息,当被检测的文件中不含有有效CPU指令代码块时,输出不包含恶意代码的信息;

打开文件装置的输出接至有效CPU指令代码块检测装置的输入;有效CPU指令代码块检测装置的输出接至输出显示装置的输入。

所述的有效CPU指令代码块检测装置由用来检测文件的数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块的第一检测装置和用来将数据作为一段代码使用指令模拟执行程序进行执行、在指定的有限时间或指定的有限指令个数内是否能够合法运行而不出现错误的第二检测装置,第一检测装置的输入接至打开文件装置的输出,第一检测装置的输出接至第二检测装置的输入,第二检测装置的输出接至输出显示装置的输入。

本发明的有益效果是,由于本发明是基于检测非可执行文件中恶意代码是否存在,而不是检测其使用的具体漏洞类型,因此检测有效性和漏洞类型无关,可以有效地检测使用未知漏洞的包含恶意代码的非可执行文件。起到了发现和防御有害非可执行文件的作用,保证了计算机使用的安全性。与其他检测方法相比,本发明的检测方法识别率高,不易被免杀修改绕过,并且能够发现使用了未知漏洞或者无法触发漏洞的非可执行文件捆绑恶意代码,能作为现有检测方法的一个有效地补充。

以下结合附图及实施例对本发明作进一步详细说明;但本发明的一种非可执行文件中包含恶意代码的检测方法及其装置不局限于实施例。

附图说明

图1是本发明检测步骤的流程图;

图2是捆绑了恶意代码的非可执行文件的数据内容和正常的非可执行文件的数据内容的对比示意图;

图3是普通数据块和可执行指令代码块形式上的差别示意图;

图4是指令模拟执行程序流程图;

图5是本发明装置的示意图。

具体实施方式

实施例,参见附图所示,本发明的一种非可执行文件中包含恶意代码的检测方法,包括如下步骤:

打开被检查的文件,读取并解码有效内容数据到内存;

从数据起始开始,对数据中是否含有有效CPU指令代码块进行检查,如果当前位置一定数量的数据含有有效CPU指令代码块,则认为该文件包含恶意代码;

如果该位置数据不含有有效CPU指令代码块,则移动到下一个数据位置继续检查;

如果检查所有数据均没有发现有效CPU指令代码块,则认为该文件不包含恶意代码。

图1即为本发明检测步骤的流程图;

首先是读入文件到内存并解码;然后,从当前位置开始分析是否存在有效指令代码段(即有效CPU指令代码块);接着进行判断,判断如果是存在时,就输出警告信息,即认为该文件包含恶意代码,而后结束;判断如果是不存在时,就移动到下一个位置;接着,对文件是否已到结尾进行判断,如果是已到文件的结尾,就结束该次检测;如果是未到文件的结尾,则返回到从当前位置(此时的当前位置已是所移动到的下一个位置)开始分析是否存在有效指令代码段,继续检测。

本发明的一种非可执行文件中包含恶意代码的检测方法,其中,所述的对数据中是否含有有效CPU指令代码块进行检查的过程,包括:

检测该数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块;

将数据作为一段代码使用指令模拟执行程序进行执行,在指定的有限时间或指定的有限指令个数内是否能够合法运行而不出现错误。

在本发明的检测过程中:

打开被检查的文件,读取并解码,有些文件格式要求数据按照某种方式编码,比如Flash动画文件可能进行了压缩。因此必须解码把有效内容数据读到内存。这样文件中除了必要格式数据以外的其他有效内容数据就进入了内存。

如图2所示,包含恶意代码的非可执行文件中的某个位置包含了可以被CPU正确执行的代码片段,这些代码片段就是ShellCode。这些代码执行以后就会解密或者加载更多的代码执行各种恶意行为。

从数据起始字节开始对数据进行检测,判断从当前字节位置的开始的一段数据是不是一段有效地数据,可以被CPU正确执行。图3即为普通数据块和可执行指令代码块形式上的差别示意图;

如图3所示,二进制代码分析人员很容易看出其中的差别。可以被有效执行的CPU指令代码段在使用寄存器寻址存取数据时,都很好的初始了寄存器。它有连贯的逻辑性,有很好规则,不包含各种会引发错误异常的代码。

而无效的数据段则任意的使用了未初始化寄存器,进行各种无意义的运算,并随意改写寄存器值,导致运行引发错误。

因此,本发明所述的检测该数据是否配备可执行指令的规则,是指:不包含了未定义指令,特权指令,取地址无效指令,破坏运行环境的指令或其他特定指令形式的数据块符合指令代码块的规则;代码结构类似常见的恶意代码所使用到的技法。

这些会引发错误异常的代码包括当不限于:

特权指令,特权指令需要高系统权限级别才可以执行,通常是驱动级软件使用;一般处理文件的程序都是用户级别的程序,因而特权指令会引发错误异常;

包含无效地址存储的指令,这类指令操作了无效的地址,执行一定会引发异常;检查这类指令时需要根据操作系统的内存布局定义,规定有效地址空间;

未定义指令,该类指令是CPU未定义的指令,CPU无法执行,也会引发错误和异常;其他会引发错误和异常的指令,另外有些实际工作中极其少用的指令,但是不会引发异常的指令,也可以认为是未定义的指令;

有些指令虽然会引发异常,但是如果代码开始部分设置了异常处理器,则应当把这部分指令视为跳转指令。

本发明的一种非可执行文件中包含恶意代码的检测方法,从当前数据位置起始开始检测是否包含有效CPU指令代码段分为两步:

第一步,从当前地址位置开始逐步反汇编一定数量的指令代码(比如512个字节的指令,或者512个指令)。分析这些指令,判断是否包含会引发错误异常的指令。如果当前位置数据不满足规则,放弃这个位置,当前数据位置移动到下一字节。在大多数情况下反汇编第一个指令就是无效指令,因而可以快速移动。

第二步、如果上一步检测中没有发现包含会引发错误异常的指令,则进一步使用指令模拟执行程序从当前数据位置开始模拟执行代码有限步数(比如执行512个指令)。指令模拟执行程序是一个CPU虚拟设备,它不需要是一个完整的虚拟机实现,但必须包含一个基本的CPU和内存架构。能够解释绝大多数的常用CPU指令,并根据指令有效地模拟CPU寄存器和内存状态的改变,从而能够接近连续的模拟执行一段很长的指令。如图4所示,使用指令模拟执行程序从当前位置开始执行,判断在有限步骤内指令能够正常执行。如果当前位置数据不满足规则,放弃这个位置,当前数据位置移动到下一字节。

在检测过程中,还可以根据恶意代码常见的结构和功能特征来提高准确率。这些结构和功能特征包括但不限于:恶意代码解密算子、恶意代码重定位、恶意代码跳板、恶意代码API导入。以恶意代码API导入为例,由于恶意代码需要进行恶意行为时需要获得各种系统接口API函数的地址,因而常见的恶意代码都有一段以导入API函数为目的的代码块。如果指令模拟执行程序在模拟代码段执行的时候发现一段代码能载入API函数地址,就可以认为这个代码段具有恶意代码API导入功能特征。

如果检测中发现了符合检测规则的数据块,则该文件很有可能包含了恶意代码。向用户提出警告,病毒分析人员可以进一步对其分析,找到漏洞。普通计算机用户可以谨慎处理,或者在安全的环境(如沙箱或者虚拟机中)打开。

本发明的一种非可执行文件中包含恶意代码的检测方法,所述的将数据作为一段代码执行在有限时间和有限指令个数内能够合法运行的规则,是指:使用能够解释大多数常用指令的指令模拟执行程序(虚拟机)对符合可执行指令的规则的数据起始部分开始解释执行,在指定的指令个数或者时间内,执行能够正常实现而没有出现执行了引发错误异常指令或者发现代码功能类似常见的恶意代码所使用到的技法。就认为该数据块符合指令代码块的规则。

本发明的一种非可执行文件中包含恶意代码的检测方法,采用了指令模拟执行程序,即简单的虚拟机。虚拟机是一个软件模拟的CPU,它可以象真正CPU一样取指,译码,执行,它可以模拟一段代码在真正CPU上运行得到的结果。考虑到要完整模拟CPU,其工作量是巨大的。而我们的目标只是模拟大多数恶意代码常用的指令,所以模拟的内容只是其中的一个较小的子集。因此,将虚拟机设计成缓冲代码虚拟机。

一条指令是从文件中取得的,并和预定义的规则相比较。如果不满足指定规则,直接跳过。否则,它被进行简单的解码以求得指令的长度,随后所有这样的指令会被导入到一个可以通用地模拟所有常用指令的小过程中。通过这种方式,可以大大削减要处理的指令数目并提高了执行速度。

所述的使用指令模拟执行程序进行执行的过程,包括:

a.判断是否已到文件尾,如果是则结束,否则从文件中读取一块数据;

b.判断是否已到数据块结尾,若已到数据块结尾则返回步骤a,否则从该数据块中读取一条指令;

c.判断该指令是否为预先设定的非法指令形式;如果是则返回步骤b,否则继续下一步骤;

d.解析该指令,复制该指令到缓冲区;

e.调用通用处理过程处理缓冲区内的代码,在缓冲区内的代码处理过程中,若在指定规则下运行不出现错误,且满足预先设定的恶意代码指令形式,则认为文件中含有有效CPU指令代码块,结束模拟;否则返回步骤b。

其中,

所述的预先设定的非法指令形式,包括:指令中任意的使用了未初始化的寄存器、指令进行了无意义的操作、指令是特权指令、指令包含无效存储地址、指令包含不常用的指令或指令包含其他预定义的指令。

所述的预先设定的恶意代码指令形式,包括:代码中含解密算子、代码中含代码重定位、代码中含跳板、代码中含API导入或代码中含其他用户预定义的规则。

本发明的一种非可执行文件中包含恶意代码的检测方法,可以通过文件预处理(文件模拟执行之前)来提高识别率。

可以采用如下处理步骤:

①扫描可用的插件并载入;

②调用该插件判定文件是否满足该插件的预处理条件;

③如果满足,则调用插件处理文件,然后进入模拟执行流程;

④否则直接进入模拟执行流程;

⑤插件模式是为了对文件进行处理,让文件处理后提高模拟执行的效果。

如某些文件中内嵌JS脚本,数据通过JS加密,可以通过插件处理,得到解密后的数据。

本发明的一种非可执行文件中包含恶意代码的检测方法,可以通过大量实际测试结果,来完善预先设定的非法指令形式和预先设定的恶意代码指令形式,从而降低误报率。

本发明的一种非可执行文件中包含恶意代码的检测方法,该检测方法是针对入侵者利用漏洞将恶意代码捆绑到非可执行文件进行欺骗式入侵时所使用的非可执行文件。所述入侵行为是包括文档,图片捆马等其他以非可执行文件作为攻击工具的入侵行为。

本发明的一种非可执行文件中包含恶意代码的检测方法,该检测方法不依赖于恶意代码和非可执行文件捆绑所使用的入侵漏洞类型,因而能够有效对使用未知漏洞的包含恶意代码的非可执行文件进行检测。

参见图5所示,本发明的一种非可执行文件中包含恶意代码的检测装置,包括:

一打开文件装置51,用来打开被检查的文件,读取并解码有效内容数据到内存;

一有效CPU指令代码块检测装置52,用来对数据中是否含有有效CPU指令代码块进行检查,并输出检测结果;

一输出显示装置53,用来显示有效CPU指令代码块检测装置输出的显示结果,当被检测的文件中含有有效CPU指令代码块时,输出和显示报警信息,当被检测的文件中不含有有效CPU指令代码块时,输出不包含恶意代码的信息;

打开文件装置51的输出接至有效CPU指令代码块检测装置52的输入;有效CPU指令代码块检测装置52的输出接至输出显示装置53的输入。

所述的有效CPU指令代码块检测装置52由用来检测文件的数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块的第一检测装置521和用来将数据作为一段代码使用指令模拟执行程序进行执行、在指定的有限时间或指定的有限指令个数内是否能够合法运行而不出现错误的第二检测装置522构成,第一检测装置521的输入接至打开文件装置51的输出,第一检测装置521的输出接至第二检测装置522的输入,第二检测装置522的输出接至输出显示装置53的输入。

上述实施例仅用来进一步说明本发明的一种非可执行文件中包含恶意代码的检测方法及其装置,但本发明并不局限于实施例,凡是依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化与修饰,均落入本发明技术方案的保护范围内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号