著录项信息
专利名称 | 一种恶意代码捕获方法 |
申请号 | CN201110029135.7 | 申请日期 | 2011-01-26 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2012-08-01 | 公开/公告号 | CN102622536A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F21/56 | IPC分类号 | G;0;6;F;2;1;/;5;6;;;G;0;6;F;2;1;/;7;4查看分类表>
|
申请人 | 中国科学院软件研究所 | 申请人地址 | 北京市海淀区中关村南四街4号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 中国科学院软件研究所 | 当前权利人 | 中国科学院软件研究所 |
发明人 | 杨轶;冯登国;苏璞睿;应凌云 |
代理机构 | 北京君尚知识产权代理事务所(普通合伙) | 代理人 | 冯艺东 |
摘要
本发明公开了一种恶意代码捕获方法,属于网络安全技术领域。本方法为:1)配置硬件模拟器,加载并启动目标操作系统;2)硬件模拟器读取目标操作系统的虚拟内存,识别所有进程及进程所加载的动态库中的导出表,获取所述导出表中所有API的地址并拦截网络接收API函数;3)根据网络接收API函数的返回值,将进程由网络接收到的数据包标记为污点数据包;4)硬件模拟器反汇编当前进程执行的指令,对其进行污点传播计算;5)判定污点传播过程中当前进程的状态是否发生异常行为,如果发生异常行为则判定当前进程为恶意代码,并从目标操作系统的内存中提取恶意代码镜像。本发明实现对恶意代码完全透明的分析,具有更高的效率和准确性。
1.一种恶意代码捕获方法,其步骤为:
1)配置硬件模拟器,硬件模拟器加载并启动目标操作系统;
2)硬件模拟器读取目标操作系统的虚拟内存,识别当前系统中执行的所有进程及进程所加载的动态库中的导出表,获取所述导出表中所有API的地址并拦截网络接收API函数;
3)根据网络接收API函数的返回值,将进程由网络接收到的数据包标记为污点数据包;
4)硬件模拟器反汇编当前进程执行的指令,如果该指令的源操作数偏移地址和长度在污点数据包范围内,则对该指令进行污点传播计算,如果该指令为API函数调用指令,则根据API地址获取该API名称并查询其传入参数的偏移和长度是否属于污点数据范围,如果属于污点数据范围则对该API调用进行污点传播计算;
5)判定污点传播过程中当前进程的状态是否发生异常行为,如果发生异常行为则判定当前进程为恶意代码,并从目标操作系统的内存中提取恶意代码镜像;其中,判定当前进程的状态是否发生异常行为的方法为:
51)设置一异常行为序列,硬件模拟器读取并在内存中维护一个异常行为序列的单链表数据结构;
52)在当前进程的对应结构中创建污点记录;同时建立污点行为列表,记录当前进程对污点数据包或由污点数据包产生的污点数据进行操作的指令和API调用;
53)从当前进程网络数据接收函数返回的时刻开始,分析该进程后续执行的每一条指令:如果该指令操作了污点数据,则将当前指令得到的结果作为由污点数据包产生的污点加入到所述污点记录中,并将该指令加入污点行为列表;如果是API调用,并且该API调用的参数含有污点数据包或由污点数据包产生的污点数据,则将该API调用加入污点行为列表;
54)判定污点数据操作的目标地址是否覆盖了函数的返回地址,如果覆盖则判定当前进程的状态发生异常行为;根据污点行为列表判定进程执行的API调用与内存中的异常行为序列是否匹配,如果匹配,则判定当前进程的状态发生异常行为。
2.如权利要求1所述的方法,其特征在于所述配置硬件模拟器包括:配置硬件模拟器的模拟内存大小、模拟CPU的类型、虚拟硬盘。
3.如权利要求2所述的方法,其特征在于配置硬件模拟器的虚拟硬盘的方法为:采用线性寻址的方法创建虚拟镜像文件,将所创建虚拟镜像文件作为虚拟的硬盘。
4.如权利要求3所述的方法,其特征在于获取所述导出表中所有API的地址的方法为:
比较所述动态库的导出表中的名称与API表中的名称,获取所述导出表中所有API的地址。
5.如权利要求1或2或3或4所述的方法,其特征在于所述污点传播计算的方法为:
根据当前进程执行的指令,判定污点数据包所产生的污点数据所影响的变量和寄存器。
6.如权利要求5所述的方法,其特征在于所述异常行为包括:当前进程对应堆栈中的函数返回地址被污点数据包或者由污点数据包产生的污点数据覆盖、当前进程执行的API调用序列与预定义的异常行为序列匹配。
7.如权利要求1所述的方法,其特征在于提取所述恶意代码镜像的方法为:对污点行为列表进行回溯,根据异常行为进程所调用的API和执行的指令,找到该进程的行为序列依赖的污点数据,即为捕获到的恶意代码;同时提取攻击过程执行的数据在整个污点数据包中的偏移、长度和内容。
8.如权利要求1所述的方法,其特征在于所述异常行为序列为一系列连续的API操作。
一种恶意代码捕获方法\n技术领域\n[0001] 本发明属于网络安全技术领域,具体涉及一种基于硬件模拟器和污点传播的恶意代码捕获方法。\n背景技术\n[0002] 随着社会的不断发展和进步,计算机在社会各个领域的应用越来越广泛。由于软件漏洞的广泛存在和用户安全意识的不足,木马的传播速度越来越快,感染范围不断扩大,造成的破坏日益严重。传统的恶意代码捕获和分析手段由于受分析效率和用户技术水平的限制,响应周期难以缩短,响应速度已经逐渐不能适应这种新情况。因此,提高恶意代码的捕获和分析能力显得十分必要。\n[0003] 现有的恶意代码捕获工具,如360云安全平台、金山云安全平台等,必须对操作系统进行修改,如Hook系统函数,或者通过PsSetCreateProcessNotifyRoutine注册回调函数,才能实现相应的捕获功能。而由于对操作系统做修改,本身会引起完整性问题,因此被修改的数据补丁或者注册的函数很容易被恶意代码发现,并产生相应的对抗手段。同时由于当前的恶意代码捕获平台,都是在跟恶意代码同一操作系统上运行,在对系统的控制权上和恶意代码产生竞争关系,不利于准确而稳定的实现恶意代码捕获。\n[0004] 当前的恶意代码捕获技术,通常使用如下的几种方法:\n[0005] 1.系统完整性校验\n[0006] 系统完整性校验方法首先在干净的系统上创建系统快照或记录系统中文件散列数据的记录,在系统运行时随机或在特定行为执行后,将记录的系统快照或文件散列值和当前文件的相比较,当比较结果出现差异时,认为感染了恶意代码并提取恶意代码的样本。\n[0007] 2.启发式检测,提取违规行为\n[0008] 启发式检测的方法是通过定义正常操作,以其为基准比较代码执行流程中所产生的行为,度量当前恶意代码行为和正常操作之间的差异,当行为偏离正常操作较远时,认为是恶意行为,提取执行该行为的恶意代码样本。\n[0009] 目前分析隐藏进程中恶意代码的虚拟机调试分析方法,应用VMware、VirtualPC等虚拟机系统实现。虚拟机系统将虚拟指令直接交给本地的真实CPU执行,同时自身存在后门。隐藏进程中的恶意代码可通过检查代码执行时间,或者调用虚拟机后门功能的方法判别自己在一个虚拟系统上运行,采取操作隐藏真实功能。\n[0010] 综上,目前恶意代码样本提取的主要缺陷在于:隐藏进程和恶意代码处于同一层次上,容易被恶意代码检测并产生相应的对抗手段;仅能够提取恶意代码样本,而对其行为和攻击过程的分析不足。\n发明内容\n[0011] 针对现有技术中存在的技术问题,本发明的目的在于提供一种基于硬件模拟器的恶意代码捕获方法,通过构建恶意代码运行环境,操纵和控制模拟CPU指令和各种模拟硬件的访问操作,硬件模拟器中的数据采集模块收集系统中所有进程的信息,以CR3为标志,分析进程执行过程;监控所有进程的运行过程,从虚拟内存中直接提取恶意代码镜像,分析攻击数据和攻击过程的相互关系,提取恶意代码执行的行为特征和攻击数据特征。\n[0012] 本发明的技术方案为:\n[0013] 一种恶意代码捕获方法,其步骤为:\n[0014] 1)配置硬件模拟器,硬件模拟器加载并启动目标操作系统;\n[0015] 2)硬件模拟器读取目标操作系统的虚拟内存,识别当前系统中执行的所有进程及进程所加载的动态库中的导出表,获取所述导出表中所有API的地址并拦截网络接收API函数;\n[0016] 3)根据网络接收API函数的返回值,将进程由网络接收到的数据包标记为污点数据包;\n[0017] 4)硬件模拟器反汇编当前进程执行的指令,如果该指令的源操作数偏移地址和长度在污点数据包范围内,则对该指令进行污点传播计算,如果该指令为API函数调用指令,则根据API地址获取该API名称并查询其传入参数的偏移和长度是否属于污点数据范围,如果属于污点数据范围则对该API调用进行污点传播计算;\n[0018] 5)判定污点传播过程中当前进程的状态是否发生异常行为,如果发生异常行为则判定当前进程为恶意代码,并从目标操作系统的内存中提取恶意代码镜像。\n[0019] 进一步的,所述配置硬件模拟器包括:配置硬件模拟器的模拟内存大小、模拟CPU的类型、虚拟硬盘。\n[0020] 进一步的,配置硬件模拟器的虚拟硬盘的方法为:采用线性寻址的方法创建虚拟镜像文件,将所创建虚拟镜像文件作为虚拟的硬盘。\n[0021] 进一步的,获取所述导出表中所有API的地址的方法为:比较所述动态库的导出表中的名称与API表中的名称,获取所述导出表中所有API的地址。\n[0022] 进一步的,所述污点传播计算的方法为:根据当前进程执行的指令,判定污点数据包所产生的污点数据所影响的变量和寄存器。\n[0023] 进一步的,所述异常行为包括:当前进程对应堆栈中的函数返回地址被污点数据包或者由污点数据包产生的污点数据覆盖、当前进程执行的API调用序列与预定义的异常行为序列匹配。\n[0024] 进一步的,判定当前进程的状态是否发生异常行为的方法为:\n[0025] 1)设置一异常行为序列,硬件模拟器读取并在内存中维护一个异常行为序列的单链表数据结构;\n[0026] 2)在当前进程的对应结构中创建污点记录;同时建立污点行为列表,记录当前进程对污点数据包或由污点数据包产生的污点数据进行操作的指令和API调用;\n[0027] 3)从当前进程网络数据接收函数返回的时刻开始,分析该进程后续执行的每一条指令:\n[0028] 如果该指令操作了污点数据,则将当前指令得到的结果作为由污点数据包产生的污点加入到所述污点记录中,并将该指令加入污点行为列表;如果是API调用,并且该API调用的参数含有污点数据包或由污点数据包产生的污点数据,则将该API调用加入污点行为列表;\n[0029] 4)判定污点数据操作的目标地址是否覆盖了函数的返回地址,如果覆盖则判定当前进程的状态发生异常行为;根据污点行为列表判定进程执行的API调用与内存中的异常行为序列是否匹配,如果匹配,则判定当前进程的状态发生异常行为。\n[0030] 进一步的,提取所述恶意代码镜像的方法为:对污点行为列表进行回溯,根据异常行为进程所调用的API和执行的指令,找到该进程的行为序列依赖的污点数据,即为捕获到的恶意代码;同时提取攻击过程执行的数据在整个污点数据包中的偏移、长度和内容。\n[0031] 进一步的,所述异常行为序列为一系列连续的API操作。\n[0032] 一种恶意代码捕获方法,其使用方法如下:\n[0033] 1.配置镜像路径、硬件模拟器的模拟内存大小及模拟CPU的类型;硬件模拟器加载操作系统镜像以启动目标系统;\n[0034] 2.利用硬件模拟器读取当前系统内存,解析系统内存数据,识别当前系统中执行的所有进程及进程所加载的动态库中的导出表;比较所述动态库的导出表中的名称与API表中的名称,获取所述导出表中所有API的地址并拦截预定义的网络的API函数WSARecv、recv和RecvFrom(即网络接收API)。\n[0035] 3.根据第2步中拦截的网络接收API函数的返回值,获取进程由网络接收到的数据包,标记该数据包为污点数据。\n[0036] 4.硬件模拟器在当前进程执行过程中反汇编并分析当前进程执行的指令,如果当前进程指令的源操作数的地址和偏移属于第2步中生成的污点源数据,则需要对该指令进行污点传播计算。如果该指令为API函数调用指令,则根据API地址获取该API名称并查询其传入参数的地址和偏移是否属于污点数据,如果属于污点数据则对该API调用进行污点传播计算;污点传播运算,即根据当前进程执行的指令,判定污点数据包以及该数据包所产生的污点数据所影响的变量和寄存器。为了进行传播运算,我们解析了CPU指令的操作码、源操作数和目的操作数对于每一条指令,如果其源操作数引用了污点数据,则其目的操作数也被标记为污点数据。进行污点传播的目的,是为了更加准确的提取在进程执行过程中对网络输入数据的处理过程。在污点传播过程中,判定当前进程的状态,如:当前进程对应堆栈中的返回地址是否被污点数据所覆盖,是否执行了连续的API调用序列实现数据转发的行为等。\n[0037] 5.定义异常行为:在程序执行过程中判定当前进程对应堆栈中的函数返回地址是否被污点数据包或者由污点数据包产生的污点数据覆盖,或当前进程执行的API调用序列与预定义的异常行为序列匹配;通过上述两种方法判定异常行为。如果发现异常行为,则开始回溯整个污点传播计算过程,判定污点数据中不同的数据范围和其对该攻击过程所起到的作用,获得其在污点源中的偏移、长度、内容和作用信息并以日志文件的格式输出。\n[0038] 进一步,在上述步骤4中检测到进程状态的非法改变,则自动提取样本。其过程为:硬件模拟器中集成的监控程序在监控进程的执行指令时,根据获取到的进程EPROCESS结构获取进程加载地址,以该地址为起点读取物理内存中的代码,分析进程可执行文件的PE结构,确定需要读取的文件在内存中的范围;并根据内存页表找到相应的内存页在虚拟物理内存的位置,依据获取的地址偏移和在内存中的文件长度,一次性读出代码镜像。\n[0039] 与现有技术相比,本发明的优点和积极效果如下:\n[0040] 1.本发明由于数据采集通过硬件模拟技术实现,而不是将恶意代码放在真实的CPU上执行,恶意代码无法感知自身是否运行在虚拟环境中,也无法分辨自身是否被跟踪,从而实现对恶意代码完全透明的分析。\n[0041] 2.本发明的模拟硬件设备的所有虚拟CPU的指令和各种硬件操作都在翻译之后模拟执行,而不是直接使用代码片段在真实机器上执行,可在指令运行过程中精确计算该条指令运行的时间,从而保证了虚拟环境的透明性。\n[0042] 3.本发明基于污点传播对恶意代码进行分析,通过识别污点数据的运算过程来判定恶意操作和攻击行为,具有更高的效率和准确性。\n附图说明\n[0043] 图1基于硬件模拟器和污点传播的恶意代码捕获方法示意图。\n[0044] 图2基于硬件模拟器和污点传播的恶意代码捕获方法流程图。\n具体实施方式\n[0045] 下面结合附图详细说明本发明的技术方案:\n[0046] 如图1所示,一种基于硬件模拟器和污点传播的恶意代码捕获方法及系统,包括步骤:\n[0047] 1、创建目标文件运行所需的操作系统镜像\n[0048] 本发明采用线性寻址的方法,创建虚拟镜像文件,该文件作为虚拟的硬盘使用,以其为基础在虚拟化分析平台上安装操作系统。\n[0049] 2、配置并启动硬件模拟器\n[0050] 配置操作系统的镜像路径,获取实际运行的操作系统镜像所在位置;配置硬件模拟器的模拟物理内存大小、系统启动时间及模拟CPU的类型,硬件模拟器根据输入的内存大小分配相应大小的内存空间,作为模拟的物理内存;根据输入的系统启动时间设定模拟器的系统时钟;根据模拟CPU的类型选择相应的指令译码引擎,实现源指令和目标指令的翻译执行。在完成上述操作后,硬件模拟器读取操作系统镜像中的引导代码,将EIP跳转到该引导代码处启动该操作系统。\n[0051] 其中,本发明的虚拟内存通过在真实机器上直接申请相应大小的内存进行模拟。\n配置模拟内存的大小是虚拟操作系统运行的基础,模拟内存设置越大,则虚拟操作系统运行越快。本实施例给出模拟内存的大小配置在216M~1G之间。\n[0052] 本发明定义当前模拟CPU的类型,是通过硬件模拟器的译码模块获得,使得模拟CPU的指令转化为本地CPU的指令再运行,在虚拟机上运转的操作系统能够正确的执行指令,本发明可以模拟多种CPU。例如:若当前的镜像是从一台P4的机器上读取出来,则本发明需要将硬件模拟器模拟CPU的类型配置为P4,而不能是ARM或者MIPS等其他类型CPU,否则该操作系统无法正确运行。若真实CPU是Intel P4,而本发明硬件模拟器模拟的CPU是ARM,则需利用译码模块将ARM的指令转化为一条或者多条Intel P4的指令。\n[0053] 3、硬件模拟器执行目标操作系统的指令,识别进程的系统调用和执行的指令[0054] 应用层的程序通过API来访问操作系统。本实施例使用地址比较的方法获取系统调用。在进程被调度执行之前,此时进程的代码还没有执行,但是自身的可执行文件和进程需要的动态库都已经被映射进内存。故本发明在进程加载之后,代码执行之前,通过硬件模拟器的内存管理模块机,读取进程的内存,并分析进程加载的动态库中的导出表,导出表包括API名称和API地址,本发明通过采用字符比较的方法,比较导出表中API名称与API表中的名称,获取导出表中所有API的地址,将所有API地址加入到API表,所述API表包括API名称、API地址及API参数和返回值。隐藏进程执行中,将隐藏进程的EIP值与API表中函数地址的参数逐一做匹配比较。\n[0055] 若EIP值与API表中每个函数的第一条指令相匹配,则调用解析函数,读取堆栈和当前CPU中的通用寄存器,获取函数参数和返回地址,当函数执行到返回地址时读取eax寄存器获取函数返回值;硬件模拟器中数据采集模块记录该指令及该指令执行的数据,其中,指令执行的数据包括该指令打开的文件、打开的端口、通过某端口发送的数据、访问的文件、创建的进程和线程、创建或终止的服务、创建或使用的操作系统同步/互斥量、网络数据发送操作的内容,文件创建操作的文件名等信息。\n[0056] 4、判定程序执行异常和非法行为\n[0057] 对进程执行过程进行污点传播分析,手工设定网络污点源标记规则,所有网络接收的数据包被标记为污点源,该过程由硬件模拟器根据规则自动进行。程序执行异常和非法行为的判定过程如下:\n[0058] 1)为了识别进程的恶意操作,我们首先设置了异常行为序列,该异常行为序列表示一系列连续的API操作,该序列的集合存储在一个配置文件中,由硬件模拟器读取并在内存中维护一个异常行为序列的单链表数据结构。\n[0059] 2)当目标系统中的某个进程发生网络数据接收时,标记其获取的网络数据包为污点数据包,在该进程的对应结构中创建对应的污点记录,同时建立污点行为列表记录对污点数据包或由污点数据包产生的污点数据进行操作的指令和API调用。\n[0060] 3)从网络数据接收函数返回的时刻开始,分析该进程后续执行的每一条指令,如果该指令操作了污点数据,则将当前指令得到的结果作为由污点数据包产生的污点加入到污点记录中,并将该指令加入污点行为列表;如果是API调用,并且该API调用的参数含有污点数据包或由污点数据包产生的污点数据,同样需要将该API调用加入污点行为列表。\n在进程执行的同时,判定污点数据操作的目标地址,是否覆盖了函数的返回地址;同时将进程执行的API调用和内存中的异常行为序列进行匹配。对于异常行为序列的匹配方法为:\n如果当前发生的API调用名称和参数都与异常链表中的第一个API相同,则使用相同的方法继续比较该序列中的后续记录;如果存在差异不同则查找其他预定义的异常API序列的第一个API,使用相同的方法与之匹配。如果污点传播路径可与预定义的异常操作序列相匹配,则可判定此时正在执行的进程为恶意代码。\n[0061] 5、采集并分析数据\n[0062] 在判定恶意代码后,需要提取恶意代码样本和攻击数据的样本。恶意代码样本的提取通过直接由硬件模拟器加载的目标操作系统镜像中读取文件实现,攻击数据样本通过将该进程接收到的污点数据包转储实现。为了更好的提取恶意代码,本发明通过对分析过程中产生的污点行为列表进行回溯,根据发生异常行为的进程所调用的API和执行的指令,找到该进程的行为序列依赖的污点数据,提取所述恶意代码镜像,其中污点数据包括其在整个污点数据包中的偏移、长度和内容。数据分析模块接收并存储上述数据采集模块收集的数据,将该数据返回给用户。\n[0063] 本发明提出的基于硬件模拟器和污点传播的恶意代码捕获方法,对于本领域的技术人员而言,可以根据需要自己配置各种环境信息,设计分析和捕获方法,从而全面分析隐藏进程中的恶意代码。\n[0064] 尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明的内容并据以实施,但是本领域的技术人员可以理解:在不脱离本发明及所附的权利要求的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
法律信息
- 2014-09-03
- 2012-09-26
实质审查的生效
IPC(主分类): G06F 21/00
专利申请号: 201110029135.7
申请日: 2011.01.26
- 2012-08-01
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2010-02-10
|
2008-08-07
| | |
2
| |
2009-12-30
|
2009-07-31
| | |
3
| |
2005-06-08
|
2003-12-05
| | |
4
| |
2010-07-07
|
2008-12-30
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |