一种基于虚拟机的rop攻击检测方法及系统的制作方法

文档序号:6366641阅读:380来源:国知局
专利名称:一种基于虚拟机的rop攻击检测方法及系统的制作方法
技术领域
本发明属于系统安全技术领域,具体涉及一种基于虚拟机的R0P攻击检测方法和 系统。
背景技术
随着计算机系统在社会各领域应用的不断加深,其安全性问题成为产业界和学术 界共同关注的焦点。恶意代码一直是计算机系统安全的主要威胁和隐患之一,其危害性随 着社会对计算机系统的依存性的提高不断加重。计算机技术持续发展的同时,恶意代码技 术也不断升级,新攻击技术的产生以及对抗手段的提升,均对传统的检测和防范技术带来 了严峻的挑战。利用返回导向编程(Return Oriented Programming, R0P)构造的恶意代码攻击, 由于其隐蔽性等技术优势成为恶意攻击防范研究的难点之一。俄罗斯安全专家Alexander Peslyak于1997年提出了“return-to_libc”攻击,通过堆栈溢出的方法将控制流转到libc 中的exec系统调用,从而实现对特定应用程序的提权。2007年,Hovav Shacham提出了 R0P 攻击的概念,利用R0P技术实现了一种基于x86的恶意代码构造方法。该方法中利用指令 (而非函数)使用“return-to-libc”攻击,通过堆栈溢出将控制流转到库中某条ret指令 的前一条指令。通过精心构造堆栈,配合如伽利略算法等在库中查找可用指令,可以实现 每条指令执行完成之后由ret跳到下一条所需指令,由此通过构造的返回地址序列将库中 已有的指令根据需要拼接起来成为指令序列,从而实现具有所需攻击效果的恶意代码的构 造。该方法的特点是构造恶意代码实现了攻击却没有任何代码注入问题,因此可以躲避代 码完整性校验等传统防范方法。此后,R0P攻击方法被移植到其他架构中,包括ARM,Power PC等RISC架构上,其危害范围不断扩大,其相关检测防范研究也引起了国内外学者的广泛 关注。针对R0P攻击,已有一些研究人员提出了一定的对策。现有的检测及防范方法主 要包括(1)通过识别指令流中大量出现的ret指令检测R0P攻击由于R0P恶意代码构造方法中,代码是通过取ret前的一条指令拼接而成的,因此 指令序列中会出现大量甚至一半的ret指令,这是与正常程序的重要区别。根据R0P攻击 代码的这一特性,通过检测指令流中的ret指令实现R0P构造的恶意代码攻击的检测。(2)通过检查堆栈使用规范检测R0P攻击由于R0P攻击中的调用堆栈使攻击者构造出来,而非call指令生成的,据此通过 在检测到ret指令时检测其是否有对应的call指令的方法,实现R0P攻击的检测。(3)通过在被攻击库中去掉ret指令防范R0P攻击被攻击库指的是构造R0P攻击代码所使用的库(如libc或kernel等)。由于构 造R0P攻击代码需要被攻击库中含有ret指令(x86下指令码0xC3),因此通过使用编译技 巧将该指令码从库中移除,由此防范了 R0P攻击的形成。
上述的检测及防范方法均基于ret指令进行,然而ROP攻击技术进一歩发展,其指 令序列形成方式不再局限于ret指令。例如使用pop指令和jmp指令配合替代ret指令实 现同样的作用;或者使用ニ级跳转的方法,将pop和jmp代码的位置放入通用寄存器,然后 在库中查找jmp[reg]实现控制流转移,从而实现ROP攻击的构造。对于这些ROP攻击构造 方法,目前的检测及防范方法已显露出不足。另外,由于当前的防范方法均在操作系统上实 现,依赖于操作系统本身的安全性,当被攻击系统自身的可信性无法保障吋,对ROP攻击的 防护则会失效。因此,如何能够提供ー种ROP攻击的检测及防范方法成为保障系统安全的 重要需求。

发明内容
针对现有技术中存在的技术问题,本发明的目的在于提出一种基于虚拟机的ROP 攻击检测防御方法,针对在不注入其他代码的情况下利用操作系统中已有的ニ进制代码构 造恶意代码的ROP攻击方法,本发明的目的即在于检测系统中运行的某服务进程中是否包 含ROP恶意代码攻击,对其进行防范从而保障服务中的进程的可用性和持续性。通过在需 要防护的系统硬件上运行虚拟机,将被保护的操作系统运行在虚拟域环境中,从而全面获 取系统运行信息,基于ROP恶意代码的特点,即利用操作系统中已有库中的指令,结合构造 堆栈内容以连接成攻击所需的指令序列,本发明通过识别堆栈内容中是否包含大量的在库 (如Iibc)的地址范围内的地址信息,来检测是否存在ROP攻击。进ー步地,当检测到ROP 攻击以后,通过攻击隔离来阻止ROP攻击的实现,从而保护操作系统服务的可用性。本发明的主要内容如下I、在需要防护的系统硬件上运行虚拟机,然后将被保护的操作系统运行在虚拟域 环境中,全面监控系统运行信息;2、修改虚拟机中的事件处理程序,以实现在程序运行过程中对堆栈的写操作的拦 截,和对堆栈的内容的检查等;3、定位需要保护的进程在执行过程中需要进行堆栈检查的地方,并设置断点;4、当系统上下文切換到被保护进程,或者正在执行堆栈检查时,将堆栈进行标记, 目的是拦截对堆栈的写操作并进行处理;5、当执行到已设置的需要进行堆栈检查的断点处时,检查堆栈内容,通过识别算 法,检测ROP攻击是否存在;6、当检测到ROP攻击后,通过攻击隔离,阻止ROP攻击。本发明方法流程如图I所示,本发明的步骤如下I)在需要防护的系统的硬件上运行虚拟机,将被保护的操作系统运行在虚拟域环 境中;2)利用定位程序定位设定的目标进程,从CPU控制寄存器CR3中定位目标进程的 进程控制块结构体,从进程控制块结构体中获取目标进程的进程信息;3)修改虚拟机进程上下文切換事件处理程序,监控系统中进程运行,当上下文切 换到目标进程时,将堆栈标记为只读;4)修改虚拟机内存页面错误事件处理程序,拦截对堆栈的写操作,并将相应的堆 栈标记为可写;
5)通过反汇编定位到被保护进程在执行过程中下一个需要进行堆栈检查的地方, 在需要进行堆栈检查处设置断点;6)修改虚拟机调试异常事件处理程序,截获断点,将目标进程堆栈内存页面标为 只读,并调用堆栈检测模块;7)堆栈检测模块执行堆栈内容检查,并结合动态链接库地址范围,检查堆栈内容 中是否包含大量的在动态链接库的地址范围内的地址信息,根据事先设置的阈值,检测是 否存在R0P攻击;8)当检测到R0P攻击时,停止相应进程,等待修复,其他进程继续运行服务,以保 护系统的可用性。9)如果此时没有R0P攻击,则使目标进程继续运行,同时将目标进程的堆栈标记 为只读,继续进行实时监控。进一步的,在步骤1)中,在所述虚拟机上,本发明于监控层添加监控模块,从而全 面监控在虚拟域中运行的系统中的进程、堆栈、动态链接库等信息。在步骤2)中,定位程序定位设定的目标进程信息的具体方法是当前运行进程的 内核堆栈可以通过任务寄存器定位。在内核堆栈的底部,可以找到进程的控制块结构体。该 结构体是一个指向任务描述符的指针。通过任务描述符,可以获得关于一个进程的所有所 需要的信息,例如描述虚拟内存结构,调度信息,动态链接库地址信息等等。进一步,通过任 务描述符中的任务指针,可以定位所有客户操作系统的进程,从而得到所有进程的信息。在步骤4)中,所述的拦截堆栈写操作的方法,是通过修改页面错误事件处理程序 实现的。由于在步骤3)中,当被保护进程运行时,堆栈被标记为已读,因此对堆栈的写操作 将会引起页面错误。本发明在修改的页面错误事件处理程序中识别该错误是否引发自对一 个可写内存区域标记为只读后发生的写操作,若是,本发明加入处理程序将调用断点定位 模块。在步骤5)中,所述的反汇编定位断点的方法是在虚拟机中编写反汇编代码,从 当前指令寄存器开始的位置反汇编用来查找下一个返回指令或与其作用相同指令(即有 类似返回指令地址跳转功能的指令),该查找通过识别操作码完成。当查找到下一个需要设 置断点的位置时,用调试寄存器DR0来保存该断点,并设置调试寄存器DR7的相关比特(全 局断点位,地址长度位和读写执行位)以允许这一中断。在步骤7)中,所述的具体检测方法是首先找到潜在被攻击库得地址范围集合, 然后检查堆栈顶的n个元素内容,看其是否属于潜在被攻击库的地址范围之内,计算其在 该地址范围内的元素的比例,根据检测需要设置门限值,以判定是否存在R0P攻击,n为自 然数。本发明提供了一种基于虚拟机的R0P攻击防御系统,该系统基于虚拟机,由六个 主要部分组成事件处理模块、堆栈标记模块、断点定位模块、堆栈检查模块、动态链接库定 位模块和攻击隔离模块。其中,事件处理模块修改虚拟机中的事件处理程序实现堆栈写操 作拦截和断点中断的拦截,并在对应时刻调用断点定位模块和堆栈检查模块。堆栈标记模 块负责在上下文切换到需保护进程时以及进行堆栈检查后,将堆栈标记为只读,从而唤起 页面错误致使对于堆栈的写操作能被拦截及处理。断点定位模块的作用是定位到需要执行 堆栈检查的地方,从而使需要检查堆栈内容的地方之外的指令能够常规执行。动态链接库位模块用于定位目标程序使用的动态链接库的地址范围。堆栈检查模块负责检测R0P攻 击是否存在。攻击隔离模块是在系统其他进程功能继续运行的情形下阻止攻击在系统中扩散。与现有技术相比,本发明的优点在于本发明采用了基于硬件虚拟化技术实现的R0P攻击检测及防御方法,此方法对于 被保护的系统是高透明的,并且不依赖于被保护操作系统的安全性,可以在操作系统不可 信时正确完成检测及防范工作。本发明提出了一种通过检查当前线程堆栈的内容来检测 R0P攻击的算法,并可通过可调节的参数,对R0P攻击具有检测率高,误报率低等特点。进一 步地,本发明在检测到R0P攻击以后,通过停止进程有效阻止了 R0P攻击的危害,保护系统 不会被R0P恶意代码攻击,从而保护了系统服务的可用性。


图1为本发明方法流程图;图2为基于虚拟机的R0P攻击防御系统结构图。
具体实施例方式下面结合附图详细说明本发明的技术方案如图2所示,本发明的基于虚拟机的R0P攻击防御系统,该系统基于虚拟机,由六 个主要部分组成事件处理模块、堆栈标记模块、断点定位模块、堆栈检查模块、动态链接库 定位模块和攻击隔离模块。为了实现R0P检测及攻击防范过程中对于堆栈的写操作的拦截 以及执行堆栈内容检查,在事件处理模块中修改了虚拟机中的三个事件处理程序。当上下 文切换到需保护进程时以及进行堆栈检查时,堆栈标记模块负责将堆栈标记为只读,从而 唤起页面错误致使对于堆栈的写操作能被拦截及处理。由断点定位模块从当前指令开始计 算,定位到需要执行堆栈检查的地方,在检查点之前的指令按照常规执行。动态链接库定位 模块定位目标程序使用的动态链接库的地址范围;堆栈内容检查模块利用动态链接库的地 址范围信息检测R0P攻击是否存在。若存在攻击,则停止相应进程,从而保护系统的可用 性。(1)事件处理模块为了拦截堆栈的写操作,以及正确地执行堆栈内容检查,本发明中的方法和系统 修改了虚拟机中的三个事件处理程序,即上下文切换事件处理程序、页面错误事件处理程 序和调试异常事件处理程序。a)上下文切换事件处理程序的修改本发明针对特定进程的保护,因此通过修改虚拟机中的上下文切换事件处理程 序,来识别下一个预定执行的进程是否是被保护进程。当下一个进程是被保护进程时,堆栈 标记模块在影子页表中将该进程的堆栈标记为只读。针对上下文切换事件处理程序,本发明中修改结构体CR_ACCESS,以便在虚拟机层 捕捉到进程上下文切换,当上下文切换发生时,通过内核数据结构信息定位堆栈范围,并将 堆栈范围数据保存下来。b)页面错误事件处理程序的修改
本发明通过修改虚拟机中的页面错误事件处理程序,以拦截对于堆栈的写操作, 并调用断点定位模块。由于在对上下文切换事件处理程序的修改后,当被保护进程运行时, 堆栈被标记为只读,因此对于堆栈的写操作将会引起页面错误。本发明在页面错误事件处 理程序中识别该错误是否引发自对一个可写内存区域标记为只读后发生的写操作,若是, 本发明中加入的处理程序将调用断点定位模块,寻找硬件断点的位置,同时将堆栈页面标 记为可写。具体实现方式是,本发明编写了页面错误事件处理程序替换原有的处理程序。页 面错误事件处理程序的返回值为“0”或“1”,返回“0”代表是一个真实的常规的页面错误因 此操作系统应该进行处理,返回1表示该页面错误由影子页表的不一致引起。10)本发明定义当下列三种情况满足时,页面错误由堆栈的写操作引起1)原有 的页面错误事件处理程序返回“1”;2)页面错误的线性地址空间在堆栈范围内;3)页面错 误代码代表一个写访问。对于写访问,将通过系统调试机制在执行过程中下一个需要进行 堆栈检查的地方设置一个硬件断点。c)调试异常事件处理程序的修改硬件断点将触发一个调试异常,本发明修改调试异常事件处理程序,使之完成两 个操作调用堆栈检查模块以识别R0P攻击是否存在;将堆栈再次标记为只读。具体实现方式是,在该处理程序中将调试寄存器DR0的内容清除以停止当前断 点,然后触发堆栈检查模块识别R0P攻击,之后触发堆栈标记模块将堆栈再次标记为只读, 以便下一个检查循环的执行。(2)堆栈标记模块利用虚拟机,从操作系统数据结构中读堆栈范围,并将相应的内存页标记为只读。 具体方法是,在虚拟环境中,利用影子页面实现内存虚拟化,用影子页表实现地址转换,将 其条目设置为只读。在以下两种情况下,堆栈标记模块将堆栈标记为只读(a)当上下文切换发生,并 且下一个调度的进程为被保护进程时;(b)进行堆栈检查后。将堆栈标记为只读的目的是唤起页面错误,实现对于堆栈的写操作的拦截以及处理。具体实现方式是首先检查影子页表中是否有特定的堆栈内存页线性地址。从该 检查结构中获取相应的页表项并且重置读写位,然后将此页表项写入影子页表,最后执行 TLB刷新以提升访问权限。(3)断点定位模块本发明中的断点是指堆栈内容需要被检查的点。断点定位模块由修改后的页面错 误事件处理程序调用,该模块输出应设置断点的位置值。由于R0P攻击产生在返回指令执行时刻,该模块将从当前运行指令开始在指令流 中查找下一个返回指令。在当前指令和下一个断点之间的指令将不被干扰地执行。由于系 统中堆栈操作的频繁性,这一方法保障了本系统的执行能力,降低了执行负载。具体实现方式是,在虚拟机中编写反汇编代码,在虚拟机内核中执行从当前指令 开始的反汇编以查找下一个返回指令或与其作用相同指令。本发明中只考虑找到返回指令 和与其作用相同指令,其他指令只需分析出长度而非具体的反汇编结果,因此,只需要识别操作码(因为操作码决定了寻址方式和指令长度当查找到下一个需要设置断点的位置 时,用调试寄存器0如保存该断点,并设置调试寄存器087的相关比特以允许这一中断。 〔0063〕(幻动态链接库定位模块
〔0064〕 此模块在虚拟机监控层分析目标进程的进程控制块结构体。该结构体中一般会包 含以下内容 ⑶攻击隔离模块
〔0079〕 此模块是要在检测到攻击的情况下,从虚拟机监控层修改操作系统中的信息,停 止被攻击进程继续运行,并且使得其他进程无法和被攻击进程进行交互。在隔离攻击的同 时,使得其他不相关进程可以继续运行。
〔0080〕 本发明提出的如?攻击检测方法,对于本领域的技术人员而言,可以根据需要自 己配置检测门限信息,获得需要的检测精确率和误报率下的检测效果。
〔0081〕 尽管为说明目的公开了本发明的具体实施例和附图,其目的在于帮助理解本发明 的内容并据以实施,但是本领域的技术人员可以理解在不脱离本发明及所附的权利要求 的精神和范围内,各种替换、变化和修改都是可能的。因此,本发明不应局限于最佳实施例 和附图所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
权利要求
1.一种基于虚拟机的R0P攻击检测方法,其步骤为1)将待保护的操作系统运行在虚拟机提供的虚拟域环境中;2)利用定位程序定位设定的目标进程,获取目标进程的进程信息;3)修改该虚拟机的进程上下文切换事件处理程序,监控该系统中进程运行,当上下文 切换到目标进程时,将当前目标进程的堆栈标记为只读;4)修改该虚拟机的内存页面错误事件处理程序,拦截当内存页面错误引发自对一个可 写堆栈内存区域标记为只读后发生的写操作,并将相应堆栈页面标记为可写;5)定位当前目标进程在执行过程中下一需堆栈检查的地方,在需堆栈检查处设置断占.6)修改该虚拟机的调试异常事件处理程序,截获断点并检测R0P攻击是否存在;7)当检测到R0P攻击时,停止当前目标进程;如果没有R0P攻击,则使目标进程继续运 行,同时将目标进程的堆栈标记为只读。
2.如权利要求1所述的方法,其特征在于所述定位程序从CPU控制寄存器CR3中定位 所述目标进程的进程控制块结构体,从进程控制块结构体中获取目标进程的进程信息。
3.如权利要求1所述的方法,其特征在于修改虚拟机中的上下文切换事件处理程序的 方法为修改结构体CR_ACCESS,使其能够识别出目标进程。
4.如权利要求1所述的方法,其特征在于所述步骤3)中,在拦截的写操作处设置一硬 件断点;然后调用断点定位模块,寻找硬件断点的位置并将相应堆栈页面标记为可写。
5.如权利要求1所述的方法,其特征在于所述步骤5)中,通过反汇编定位当前目标进 程在执行过程中下一个需要进行堆栈检查的地方并设置断点,即从当前指令寄存器开始的 位置反汇编用来查找下一个返回指令或与其作用相同指令,当查找到下一个需要设置断点 的位置时,用调试寄存器DR0来保存该断点,并设置调试寄存器DR7以允许这一中断。
6.如权利要求5所述的方法,其特征在于通过识别反汇编结果中的操作码,查找下一 个返回指令或与其作用相同指令。
7.如权利要求1所述的方法,其特征在于检测R0P攻击是否存在的方法为a)将攻击者可能利用的潜在被攻击库的地址集合设为SPA;b)将堆栈顶的n个堆栈元素数组设为Ast;其中,每一个元素为4字节,AST(i)表示数组 中第i个元素,则其位置为堆栈顶部-4* (i-1);c)设在Ast数组中的元素属于SPA的个数占Ast数组的比例为R(n),则
8.一种基于虚拟机的R0P攻击检测系统,其特征在于包括一虚拟机,所述虚拟机包括 事件处理模块、堆栈标记模块、断点定位模块、堆栈检查模块、动态链接库定位模块和攻击 隔离模块;其中所述事件处理模块,用于修改虚拟机中的事件处理程序实现堆栈写操作拦截和断点中 断的拦截,并在对应时刻调用断点定位模块和堆栈检查模块;所述堆栈标记模块,用于在上下文切换到目标进程时以及进行堆栈检查后,将堆栈标 记为只读,从而唤起页面错误致使对于堆栈的写操作能被拦截及处理;所述断点定位模块,用于定位到需要执行堆栈检查的地方,从而使需要检查堆栈内容 的地方之外的指令能够执行;所述动态链接库定位模块,用于定位目标进程使用的动态链接库的地址范围;所述堆栈检查模块,用于检测R0P攻击是否存在。
9.如权利要求8所述的系统,其特征在于所述断点定位模块通过反汇编定位当前目标 进程在执行过程中下一个需要进行堆栈检查的地方并设置断点,即从当前指令寄存器开始 的位置反汇编用来查找下一个返回指令或与其作用相同指令,当查找到下一个需要设置断 点的位置时,用调试寄存器DR0来保存该断点,并设置调试寄存器DR7以允许这一中断。
10.如权利要求8所述的系统,其特征在于所述堆栈检查模块中设有一地址集合SPA和 一数组ast ;所述地址集合sPA用于将攻击者可能利用的潜在被攻击库的地址;所述数组ast 用于存储堆栈顶的n个堆栈元素,其中,每一个元素为4字节,AST(i)表示数组中第i个元 素,则其位置为堆栈顶部-4*(i_l);所述堆栈检查模块执行堆栈内容检查,如果R(n)的值 大于设置门限值,则识别为有R0P攻击;其中,R(n)为AST数组中的元素属于个数占 Ast数组的比例。
全文摘要
本发明公开了一种基于虚拟机的ROP攻击检测方法及系统,属于系统安全技术领域。本方法为1)将待保护的操作系统运行在虚拟域环境中;2)定位设定的目标进程,获取目标进程的进程信息;3)监控该系统中进程运行,当上下文切换到目标进程时,将当前目标进程的堆栈标记为只读;4)拦截当内存页面错误引发自对一个可写堆栈内存区域标记为只读后发生的写操作,并将相应堆栈页面标记为可写;5)定位当前目标进程在执行过程中下一需堆栈检查的地方,设置断点;6)截获断点并检测ROP攻击是否存在;当检测到ROP攻击时,停止当前目标进程,否则使目标进程继续运行,同时将目标进程的堆栈标记为只读。本方法具有检测率高,误报率低等特点。
文档编号G06F9/455GK102663312SQ201210075159
公开日2012年9月12日 申请日期2012年3月20日 优先权日2012年3月20日
发明者姜军, 王蕊, 贾晓启 申请人:中国科学院信息工程研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1