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

文档序号:6335203阅读:291来源:国知局
专利名称:一种非可执行文件中包含恶意代码的检测方法及其装置的制作方法
技术领域
本发明涉及一种计算机安全的检测方法,特别是涉及一种非可执行文件中包含恶 意代码的检测方法及其装置。
背景技术
互联网络安全技术的发展已经使直接的远程攻击大大减少。而通过发送一些包 含恶意代码的文件,诱骗攻击目标打开来进行入侵的间接攻击行为成为一种主要的攻击形 式。使网络和计算机安全都成为日益严峻的问题。由于现有技术的发展和网络用户意识的 提高,直接使用包含恶意代码的可执行文件进行间接式攻击已经基本不可能。然而在计算 机中,系统和各种应用软件都存在着未知的安全漏洞,如未知溢出漏洞等,这些漏洞常常允 许把恶意代码捆绑到如文档,电子表格,图片等非可执行文件中去。出于对这类文件的信 任,这类文件很容易被打开,导致其中的恶意代码被入侵。
因此有效的检测非可执行文件的安全性,判断非可执行文件是否包含恶意代码也 成为互联网安全的重要课题。传统的基于特征码查杀的方法,很容易被通过修改特征码免 杀绕过。基于行为检测的方法在漏洞已被修复或者漏洞依赖的系统环境不满足而无法触发 的时候也会失效。另外这种方法不需要依赖系统环境,因而不仅在一般计算机用户检测有 害文件的时候使用,在专业安全公司进行大量样本筛选的时候也能有效地工作。发明内容
本发明的目的在于克服现有技术之不足,提供一种非可执行文件中包含恶意代码 的检测方法及其装置,通过对非可执行文件中是否有有效CPU指令代码块的判断,达到了 有效地检测出非可执行文件中恶意代码的目的,起到了发现和防御有害非可执行文件的作 用,保证了计算机使用的安全性。
本发明解决其技术问题所采用的技术方案是一种非可执行文件中包含恶意代码 的检测方法,包括如下步骤
打开被检查的文件,读取并解码有效内容数据到内存;
从数据起始开始,对数据中是否含有有效CPU指令代码块进行检查,如果当前位 置一定数量的数据含有有效CPU指令代码块,则认为该文件包含恶意代码;
如果该位置数据不含有有效CPU指令代码块,则移动到下一个数据位置继续检 查;
如果检查所有数据均没有发现有效CPU指令代码块,则认为该文件不包含恶意代码。
所述的对数据中是否含有有效CPU指令代码块进行检查的过程,包括
检测该数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块;
将数据作为一段代码使用指令模拟执行程序进行执行,在指定的有限时间或指定 的有限指令个数内是否能够合法运行而不出现错误。
所述的使用指令模拟执行程序进行执行的过程,包括
a.判断是否已到文件尾,如果是则结束,否则从文件中读取一块数据;
b.判断是否已到数据块结尾,若已到数据块结尾则返回步骤a,否则从该数据块 中读取一条指令;
c.判断该指令是否为预先设定的非法指令形式;如果是则返回步骤b,否则继续 下一步骤;
d.解析该指令,复制该指令到缓冲区;
e.调用通用处理过程处理缓冲区内的代码,在缓冲区内的代码处理过程中,若在 指定规则下运行不出现错误,且满足预先设定的恶意代码指令形式,则认为文件中含有有 效CPU指令代码块,结束模拟;否则返回步骤b。
所述的预先设定的非法指令形式,包括指令中任意的使用了未初始化的寄存器、 指令进行了无意义的操作、指令是特权指令、指令包含无效存储地址、指令包含不常用的指 令或指令包含其他预定义的指令。
所述的预先设定的恶意代码指令形式,包括代码中含解密算子、代码中含代码重 定位、代码中含跳板、代码中含API导入或代码中含其他用户预定义的规则。
本发明的一种非可执行文件中包含恶意代码的检测方法,所述的检测该数据是否 配备可执行指令的规则,是指不包含了未定义指令,特权指令,取地址无效指令,破坏运行 环境的指令或其他特定指令形式的数据块符合指令代码块的规则;代码结构类似常见的恶 意代码所使用到的技法。
本发明的一种非可执行文件中包含恶意代码的检测方法,所述的将数据作为一段 代码执行在有限时间和有限指令个数内能够合法运行的规则,是指使用能够解释大多数 常用指令的指令模拟执行程序(虚拟机)对符合可执行指令的规则的数据起始部分开始解 释执行,在指定的指令个数或者时间内,执行能够正常实现而没有出现执行了引发错误异 常指令或者发现代码功能类似常见的恶意代码所使用到的技法。就认为该数据块符合指令 代码块的规则。
本发明的一种非可执行文件中包含恶意代码的检测方法,所述的代码结构或者功 能类似常见的恶意代码所使用到的技法包括但不限于恶意代码解密算子、恶意代码重定 位、恶意代码跳板、恶意代码API导入等。
本发明的一种非可执行文件中包含恶意代码的检测方法,该检测方法是针对入侵 者利用漏洞将恶意代码捆绑到非可执行文件进行欺骗式入侵时所使用的非可执行文件。所 述入侵行为是包括文档,图片捆马等其他以非可执行文件作为攻击工具的入侵行为。
本发明的一种非可执行文件中包含恶意代码的检测方法,该检测方法不依赖于恶 意代码和非可执行文件捆绑所使用的入侵漏洞类型,因而能够有效对使用未知漏洞的包含 恶意代码的非可执行文件进行检测。
本发明的一种非可执行文件中包含恶意代码的检测装置,包括
—打开文件装置,用来打开被检查的文件,读取并解码有效内容数据到内存;
一有效CPU指令代码块检测装置,用来对数据中是否含有有效CPU指令代码块进 行检查,并输出检测结果;
一输出显示装置,用来显示有效CPU指令代码块检测装置输出的显示结果,当被5检测的文件中含有有效CPU指令代码块时,输出和显示报警信息,当被检测的文件中不含 有有效CPU指令代码块时,输出不包含恶意代码的信息;
打开文件装置的输出接至有效CPU指令代码块检测装置的输入;有效CPU指令代 码块检测装置的输出接至输出显示装置的输入。
所述的有效CPU指令代码块检测装置由用来检测文件的数据是否配备可执行指 令代码块的规则而不是一段不可执行的数据块的第一检测装置和用来将数据作为一段代 码使用指令模拟执行程序进行执行、在指定的有限时间或指定的有限指令个数内是否能够 合法运行而不出现错误的第二检测装置,第一检测装置的输入接至打开文件装置的输出, 第一检测装置的输出接至第二检测装置的输入,第二检测装置的输出接至输出显示装置的 输入。
本发明的有益效果是,由于本发明是基于检测非可执行文件中恶意代码是否存 在,而不是检测其使用的具体漏洞类型,因此检测有效性和漏洞类型无关,可以有效地检测 使用未知漏洞的包含恶意代码的非可执行文件。起到了发现和防御有害非可执行文件的作 用,保证了计算机使用的安全性。与其他检测方法相比,本发明的检测方法识别率高,不易 被免杀修改绕过,并且能够发现使用了未知漏洞或者无法触发漏洞的非可执行文件捆绑恶 意代码,能作为现有检测方法的一个有效地补充。
以下结合附图及实施例对本发明作进一步详细说明;但本发明的一种非可执行文 件中包含恶意代码的检测方法及其装置不局限于实施例。


图1是本发明检测步骤的流程图2是捆绑了恶意代码的非可执行文件的数据内容和正常的非可执行文件的数 据内容的对比示意图3是普通数据块和可执行指令代码块形式上的差别示意图4是指令模拟执行程序流程图5是本发明装置的示意图。
具体实施方式
实施例,参见附图所示,本发明的一种非可执行文件中包含恶意代码的检测方法, 包括如下步骤
打开被检查的文件,读取并解码有效内容数据到内存;
从数据起始开始,对数据中是否含有有效CPU指令代码块进行检查,如果当前位 置一定数量的数据含有有效CPU指令代码块,则认为该文件包含恶意代码;
如果该位置数据不含有有效CPU指令代码块,则移动到下一个数据位置继续检 查;
如果检查所有数据均没有发现有效CPU指令代码块,则认为该文件不包含恶意代码。
图1即为本发明检测步骤的流程首先是读入文件到内存并解码;然后,从当前位置开始分析是否存在有效指令代码段(即有效CPU指令代码块);接着进行判断,判断如果是存在时,就输出警告信息,即认 为该文件包含恶意代码,而后结束;判断如果是不存在时,就移动到下一个位置;接着,对 文件是否已到结尾进行判断,如果是已到文件的结尾,就结束该次检测;如果是未到文件的 结尾,则返回到从当前位置(此时的当前位置已是所移动到的下一个位置)开始分析是否 存在有效指令代码段,继续检测。
本发明的一种非可执行文件中包含恶意代码的检测方法,其中,所述的对数据中 是否含有有效CPU指令代码块进行检查的过程,包括
检测该数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块;
将数据作为一段代码使用指令模拟执行程序进行执行,在指定的有限时间或指定 的有限指令个数内是否能够合法运行而不出现错误。
在本发明的检测过程中
打开被检查的文件,读取并解码,有些文件格式要求数据按照某种方式编码,比如 Flash动画文件可能进行了压缩。因此必须解码把有效内容数据读到内存。这样文件中除 了必要格式数据以外的其他有效内容数据就进入了内存。
如图2所示,包含恶意代码的非可执行文件中的某个位置包含了可以被CPU正确 执行的代码片段,这些代码片段就是SiellCode。这些代码执行以后就会解密或者加载更多 的代码执行各种恶意行为。
从数据起始字节开始对数据进行检测,判断从当前字节位置的开始的一段数据是 不是一段有效地数据,可以被CPU正确执行。图3即为普通数据块和可执行指令代码块形 式上的差别示意如图3所示,二进制代码分析人员很容易看出其中的差别。可以被有效执行的CPU 指令代码段在使用寄存器寻址存取数据时,都很好的初始了寄存器。它有连贯的逻辑性,有 很好规则,不包含各种会弓I发错误异常的代码。
而无效的数据段则任意的使用了未初始化寄存器,进行各种无意义的运算,并随 意改写寄存器值,导致运行引发错误。
因此,本发明所述的检测该数据是否配备可执行指令的规则,是指不包含了未定 义指令,特权指令,取地址无效指令,破坏运行环境的指令或其他特定指令形式的数据块符 合指令代码块的规则;代码结构类似常见的恶意代码所使用到的技法。
这些会引发错误异常的代码包括当不限于
特权指令,特权指令需要高系统权限级别才可以执行,通常是驱动级软件使用;一 般处理文件的程序都是用户级别的程序,因而特权指令会引发错误异常;
包含无效地址存储的指令,这类指令操作了无效的地址,执行一定会引发异常;检 查这类指令时需要根据操作系统的内存布局定义,规定有效地址空间;
未定义指令,该类指令是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的输入。
上述实施例仅用来进一步说明本发明的一种非可执行文件中包含恶意代码的检 测方法及其装置,但本发明并不局限于实施例,凡是依据本发明的技术实质对以上实施例 所作的任何简单修改、等同变化与修饰,均落入本发明技术方案的保护范围内。
权利要求
1.一种非可执行文件中包含恶意代码的检测方法,其特征在于包括如下步骤 打开被检查的文件,读取并解码有效内容数据到内存;从数据起始开始,对数据中是否含有有效CPU指令代码块进行检查,如果当前位置一 定数量的数据含有有效CPU指令代码块,则认为该文件包含恶意代码;如果该位置数据不含有有效CPU指令代码块,则移动到下一个数据位置继续检查; 如果检查所有数据均没有发现有效CPU指令代码块,则认为该文件不包含恶意代码。
2.根据权利要求1所述的非可执行文件中包含恶意代码的检测方法,其特征在于所 述的对数据中是否含有有效CPU指令代码块进行检查的过程,包括检测该数据是否配备可执行指令代码块的规则而不是一段不可执行的数据块; 将数据作为一段代码使用指令模拟执行程序进行执行,在指定的有限时间或指定的有 限指令个数内是否能够合法运行而不出现错误。
3.根据权利要求2所述的非可执行文件中包含恶意代码的检测方法,其特征在于所 述的使用指令模拟执行程序进行执行的过程,包括a.判断是否已到文件尾,如果是则结束,否则从文件中读取一块数据;b.判断是否已到数据块结尾,若已到数据块结尾则返回步骤a,否则从该数据块中读 取一条指令;c.判断该指令是否为预先设定的非法指令形式;如果是则返回步骤b,否则继续下一 步骤;d.解析该指令,复制该指令到缓冲区;e.调用通用处理过程处理缓冲区内的代码,在缓冲区内的代码处理过程中,若在指定 规则下运行不出现错误,且满足预先设定的恶意代码指令形式,则认为文件中含有有效CPU 指令代码块,结束模拟;否则返回步骤b。
4.根据权利要求3所述的非可执行文件中包含恶意代码的检测方法,其特征在于所 述的预先设定的非法指令形式,包括指令中任意的使用了未初始化的寄存器、指令进行了 无意义的操作、指令是特权指令、指令包含无效存储地址、指令包含不常用的指令或指令包 含其他预定义的指令。
5.根据权利要求3所述的非可执行文件中包含恶意代码的检测方法,其特征在于所 述的预先设定的恶意代码指令形式,包括代码中含解密算子、代码中含代码重定位、代码 中含跳板、代码中含API导入或代码中含其他用户预定义的规则。
6.一种非可执行文件中包含恶意代码的检测装置,其特征在于包括 一打开文件装置,用来打开被检查的文件,读取并解码有效内容数据到内存; 一有效CPU指令代码块检测装置,用来对数据中是否含有有效CPU指令代码块进行检查,并输出检测结果;一输出显示装置,用来显示有效CPU指令代码块检测装置输出的显示结果,当被检测 的文件中含有有效CPU指令代码块时,输出和显示报警信息,当被检测的文件中不含有有 效CPU指令代码块时,输出不包含恶意代码的信息;打开文件装置的输出接至有效CPU指令代码块检测装置的输入;有效CPU指令代码块 检测装置的输出接至输出显示装置的输入。
7.根据权利要求6所述的非可执行文件中包含恶意代码的检测装置,其特征在于所述的有效CPU指令代码块检测装置由用来检测文件的数据是否配备可执行指令代码块的 规则而不是一段不可执行的数据块的第一检测装置和用来将数据作为一段代码使用指令 模拟执行程序进行执行、在指定的有限时间或指定的有限指令个数内是否能够合法运行而 不出现错误的第二检测装置,第一检测装置的输入接至打开文件装置的输出,第一检测装 置的输出接至第二检测装置的输入,第二检测装置的输出接至输出显示装置的输入。
全文摘要
本发明公开了一种非可执行文件中包含恶意代码的检测方法及其装置,该方法包括打开被检查的文件,读取并解码有效内容数据到内存;从数据起始开始检查,如果当前位置一定数量的数据满足有效CPU指令代码块形式,则认为该文件包含恶意代码;如果该位置数据不满足有效CPU指令代码块形式,则移动到下一个数据位置检查;如果检查所有数据没有发现有效CPU指令形式代码块,则该文件不包含恶意代码。本发明通过搜寻非可执行文件中存在的可执行的指令代码块,来判断一个非可执行文件是否被注入了恶意代码,与其他检测方法相比,该检测方法识别率高,不易被免杀修改绕过,并且能够发现使用了未知漏洞或者无法触发漏洞的非可执行文件捆绑恶意代码,能作为现有检测方法的一个有效地补充。
文档编号G06F21/00GK102043915SQ20101053171
公开日2011年5月4日 申请日期2010年11月3日 优先权日2010年11月3日
发明者吴鸿伟, 张永光, 郭小春 申请人:厦门市美亚柏科信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1