基于硬件辅助虚拟化技术的进程内存保护方法

文档序号:6547083阅读:972来源:国知局
基于硬件辅助虚拟化技术的进程内存保护方法
【专利摘要】本发明是基于硬件辅助虚拟化的进程内存安全保护方法,包括步骤1:加载进程内存监控模块;步骤2:受保护进程在启动时通知监控模块;步骤3:为受保护进程的受保护内存空间创建加密拷贝;步骤4:利用影子页表机制实现对虚拟机系统的内存虚拟;步骤5:捕获CR3寄存器改写操作和页错误异常。优点:本发明创建了一个工作在Root级的监控模块监控所有进程的页目录、页表和页目录寄存器的修改以阻止受保护进程之外任何进程访问受保护进程内存空间中数据,在受保护进程切换到核心态时将替换用户态空间的页表来防止内核态代码注入攻击,并利用数据执行保护技术将受保护进程数据区页面设置为不可执行,从而防止用户态代码注入攻击。
【专利说明】基于硬件辅助虚拟化技术的进程内存保护方法
【技术领域】
[0001]本发明涉及内存安全的保护方法,特别是一种有效保护访问机密文件的受保护进程内存安全的基于硬件辅助虚拟化技术的内存安全保护方法。
【背景技术】
[0002]计算机安全服务包括三个方面的内容:机密性(confidentiality)、完整性(integrity)和可用性(availability)。其中,机密性是指对信息或资源的隐藏,防止被非授权的用户访问。完整性指的是数据或资源的可信度,即信息在未经授权的情况下不能被修改。完整性主要包括数据完整性和软件完整性两个方面,数据完整性指的是在计算机系统中存储的数据或在网络上传输中的数据不被非法的篡改或意外的破坏,保证数据整体的完整;而软件完整性指的是软件本身不被非法的修改。可用性指的是人们对信息或资源的期望使用能力。
[0003]计算机中的机密信息在处理的过程中涉及到两点安全问题:第一点,是存储在外部存储设备中的安全问题;第二点,是加载到内存中的安全问题。通过将机密信息加密存储在外部存储设备中可以保障其机密性,但当特定进程访问并处理外存中的机密信息时,这些信息会被加载到内存,并以明文的方式存在于内存中。由于加密算法的不断改进,唯密文攻击的实施难度越来越大,所以攻击者把目光投向了内存中的明文。
[0004]针对操作系统内存的攻击可以总结为两类:修改地址攻击和代码注入攻击。修改地址攻击是指一些恶意程序获取到目标进程的地址等信息后,通过修改CR3寄存器或修改自身页表,将自身的地址转译过程变成目标进程的地址转译过程,从而访问到目标进程的内存空间。代码注入攻击主要是指一些恶意程序将代码注入到目标进程内部,以实现对目标进程内存的非法访问,按照注入的代码所处的特权模式,可将代码注入攻击分为用户态代码注入和内核态代码注入两种。
[0005]针对现有的内存管理机制中存在的漏洞,已有一些防护方法被提出。例如SP3模型提出了保护域的概念,通过设置保护域对指定的物理页的访问权限,并结合加密技术,来对受保护应用程序的内存进行保护,该方法的问题是:进程可以在运行时通过动态附加的方式临时将自身所处的线程附加到目标进程中,那么当前线程就具有了目标进程内存空间的完全访问权限。Cherub模型通过在对应用程序运行期间对其内存页面进行动态加解密来提供保护,该方法虽然能够保护应用程序内存,但动态加解密的开销会对系统性能造成一定的影响。

【发明内容】

[0006]本发明提出的是一种基于硬件辅助虚拟化技术的进程内存保护方法,其目的旨在克服现有技术所存在的上述不足,对计算机中访问机密文件的进程的内存安全进行保护。
[0007]本发明的技术解决方案,基于硬件辅助虚拟化的进程内存安全保护方法,包括以下步骤: 步骤1:加载进程内存监控模块,使其运行于根模式(Root),并将操作系统作为客户机系统置于非根模式(Non-Root),设置VMCS控制域,使监控模块能够捕获到CR3寄存器的改写和页错误异常;
步骤2:受保护进程在启动时通知监控模块,监控模块验证发送通知的进程是否为受保护的进程;
步骤3:为受保护进程的受保护内存空间创建加密拷贝,并为受保护进程创建一份用户模式影子页表和一份内核模式影子页表,分别指向受保护内存的明文和密文;
步骤4:利用影子页表机制实现对虚拟机系统的内存虚拟,设置系统中所有进程的影子页表中页目录项的只读属性,并将受保护进程用户模式影子页表中指向数据页的页表项的不可执行属性设置为1,即该数据页不可被执行;
步骤5:捕获CR3寄存器改写操作和页错误异常,通过捕获CR3寄存器的改写,判断要写入的值是否为受保护进程页目录基地址,是则向CR3寄存器写入受保护进程内核模式影子页表的页目录基地址,通过捕获页错误异常,监控受保护进程用户模式与内核模式的切换以及其他进程的页表改写操作。
[0008]本发明的有益效果及显著优点是:本发明公开了一种基于硬件辅助虚拟化技术的进程内存保护方法,通过监控CR3寄存器和页表的修改防御修改地址攻击,并利用影子页表机制和数据执行保护技术防御代码注入攻击。能够有效的保护指定进程的内存空间,阻止系统中的其他进程、甚至具有高特权级的内核代码访问受保护的内存空间。并且无需对现有的操作系统进行修改,也无需重新部署操作系统。
【专利附图】

【附图说明】
[0009]图1为基于硬件辅助虚拟化技术的进程内存保护方法的架构图。
[0010]图2为基于硬件辅助虚拟化技术的进程内存保护方法的基本流程图。
[0011]图3为PE文件结构图。
[0012]图4为影子页表机制图。
[0013]图5为32位PAE模式下地址转译过程图。
【具体实施方式】
[0014]下面结合附图对本发明做更进一步的具体说明,本发明的上述和/或其他方面的优点将会变得更加清楚。
[0015]如图1所示,基于硬件辅助虚拟化技术的进程内存保护方法,利用Intel VT(Virtualization Technology)技术对虚拟化的硬件支持,实现了进程内存监控模块和操作系统的安全隔离,对系统中的受保护进程的内存空间进行有效地保护。本发明通过监控CR3寄存器和页表的修改以防御修改地址攻击,并利用影子页表机制和数据执行保护技术防御代码注入攻击。
[0016]如图2所示,基于硬件辅助虚拟化技术的进程内存保护方法的流程,包括以下步骤:
步骤1:加载进程内存监控模块,使其运行于根模式(Root),并将操作系统作为客户机系统置于非根模式(Non-Root),设置VMCS控制域,使监控模块能够捕获到CR3寄存器的改写和页错误异常;
步骤2:受保护进程在启动时通知监控模块,监控模块验证发送通知的进程是否为受保护的进程;
步骤3:为受保护进程的受保护内存空间创建加密拷贝,并为受保护进程创建一份用户模式影子页表和一份内核模式影子页表,分别指向受保护内存的明文和密文;
步骤4:利用影子页表机制实现对虚拟机系统的内存虚拟,设置系统中所有进程的影子页表中页目录项的只读属性,并将受保护进程用户模式影子页表中指向数据页的页表项的不可执行属性设置为1,即该数据页不可被执行;
步骤5:捕获CR3寄存器改写操作和页错误异常,通过捕获CR3寄存器的改写,判断要写入的值是否为受保护进程页目录基地址,是则向CR3寄存器写入受保护进程内核模式影子页表的页目录基地址,通过捕获页错误异常,监控受保护进程用户模式与内核模式的切换以及其他进程的页表改写操作。
[0017]所述的步骤1:进程内存监控模块以驱动程序的形式安装于操作系统中,该驱动程序可以动态加载,加载后将CPU的虚拟化功能开启,并准备好虚拟化运行时必须的一些控制结构,然后使CPU运行于非根模式。该驱动程序的处理流程如下:
I)分配和初始化VMXON控制域
VMXON控制域为CPU支持虚拟化技术所使用的控制结构,该控制结构的初始化只需向该结构写入表明硬件虚拟化辅助支持的版本的信息。该版本信息是通过读取MSR寄存器IA32_VMX_BASIC的版本号信息来获取的。
[0018]2)开启VMX操作模式
VT技术中引入了两种模式:根模式(Root)和非根模式(Non-Root)。其中将VMM设置为运行在根模式,而客户机操作系统运行于非根模式。这两种模式统称为VMX操作模式。通过调用VMXON指令开启了 VMX操作模式之后,CPU即运行于根模式,此时VMM可以通过VMENTRY进入到各客户机操作系统中执行,这些客户机操作系统运行于非根模式。在客户机操作系统运行时,会因为执行敏感指令等原因,产生VMEXIT,陷入到根模式中。如果VMM需要退出VMX模式,可以通过调用VMXOFF关闭虚拟化功能。
[0019]3 )分配和初始化VMCS控制域
VMCS控制域是描述VMM和客户机的关键数据结构,由VMCS版本标志、VMX退出原因指示器和VMCS数据区3个部分构成。其中VMCS数据区主要包括:客户机状态保存区,VMM状态保存保存区,VM-Execution控制域,VMENTRY行为控制域,VMEXIT行为控制域和VMEXIT相关信息域。
[0020]在初始化VMCS控制域时,通过设置其中的VM-Execution控制域,使改写CR3寄存器和页错误异常发生时产生VMEXIT事件,以捕获任何写CR3寄存器的操作和页错误异常。
[0021]4)进入VMX非根模式
在VMX模式中,每一个处理器都与一个或多个VMCS结构对应,任何时候只有一个VMCS为当前的VMCS。当前的VMCS记录了此时CPU运行时的根模式和非根模式的行为信息。设置当前VMCS的指令为VMPTRLD,之后软件可以通过调用VMLAUCH指令用于加载虚拟机运行。VMLAUCH指令运行后就进入了非根模式。CPU进入非根模式之后,指令继续运行直到有VMEXIT 产生。[0022]所述的步骤2:受保护进程通过调用VMCALL指令将自身的名称和PID传递给进程内存监控模块,使监控模块获得其加载通知。监控模块收到进程加载消息后对该进程做哈希运算,将运算结果与已计算的哈希值进行比对,验证受保护进程的完整性。
[0023]所述的步骤3:影子页表是系统虚拟化中实现内存虚拟的一种重要机制,本发明使用影子页表技术来实现页表的访问控制和物理页面的重定向。在采用了内存虚拟化技术的系统中,有两种模式的页表,一种是客户机操作系统使用的页表,另一种是进程内存监控模块维护的影子页表。两者之间的关系图如图3所示。
[0024]影子页表是地址转译过程中真正用到的页表,由监控模块维护。上层操作系统在将客户机管理的页目录基址写入CR3寄存器的时候,首先陷入到监控模块中,监控模块负责写入的是影子页表的页目录基址。客户机操作系统管理自己的页表,和直接运行于硬件之上一样。只不过在影子页表中,客户机所管理的页表对应的访问属性被设置为只读,任何针对该部分内存的修改都会产生页错误异常。监控模块拦截了客户机的页错误异常,如果发现产生该异常的原因是对客户机页表进行修改,则将修改同步到影子页表中。影子页表对于客户机是透明的,客户机操作系统无法访问影子页表的内容。
[0025]本发明为受保护进程维护两份影子页表,其中一份是内核模式影子页表,在执行内核模式代码时用于地址转译,另一份是用户模式影子页表,在执行用户模式代码时用于地址转译。两份影子页表的不同点在于对受保护内存的映射关系上。具体来讲,用户模式影子页表中所有页表项都指向真实的物理内存,这样受保护进程可以正常访问受保护内存中的内容。而内核模式影子页表中受保护内存对应的页表项指向受保护内存的加密拷贝所在的物理页面,所以内核模式的代码只能访问到受保护内存的密文内容。在受保护进程执行过程中,当监控到所处特权级由用户模式切换到内核模式时,使用内核模式影子页表将对受保护内存的访问映射到加密的物理页面,以保证机密信息的安全。
[0026]所述的步骤4:将系统中各进程影子页表中页目录项的可写位置为0,即该页目录项指向的页表页不可写,以此捕获客户机页表的修改操作,禁止系统中的其他进程通过修改自身页表访问受保护进程的内存空间。
[0027]利用DEP (Data Executive Protection,数据执行保护)技术可以解决恶意执行任意代码的问题。通过将敏感的数据区设置为不可执行,从而确保在指令流跳转到这些敏感区时依然无法执行恶意代码。DEP通常是由软件和硬件联合实现的,例如在32位PAE(Physical Address Extension,物理地址扩展)模式下的Windows中,DEP的实现就利用了Intel提供的EDB (Executive Disabled Bit)。在32位PAE模式下,内存管理单元将虚拟地址分成四个域:2位的页目录指针、9位的页目录索引、9位的页表索引和12位的字节索弓丨,此时,虚拟地址的转译过程如图4所示。
[0028]本发明通过设置受保护进程用户模式影子页表中页表项的不可执行属性,使受保护进程的数据区页面不可被执行,则非法注入到受保护进程用户态的恶意程序无法得到执行,防止了用户态代码注入攻击。
[0029]所述的步骤5:捕获改写CR3寄存器事件和缺页异常。
[0030]访问CR3等控制寄存器所产生的VMEXIT对应的VM_EXIT_REAS0N (退出原因)字段值为0X0000001C,其控制寄存器号和访问类型等信息保存在EXIT_QUALIFICAT10N (退出条件)字段中。[0031]监控模块对访问CR3寄存器操作的处理流程如下:
I)判断VM_EXIT_REAS0N是否为OxOOOOOOlC,是则转2,否则退出。
[0032]2)根据EXIT_QUALIFICATION的0_3位获取控制寄存器号,如果值为3,表示访问的寄存器为CR3,则下转3)。
[0033]3)根据EXIT_QUALIFICAT10N的4_5位获取操作类型,O表示操作为写寄存器,I表示操作为读寄存器。如果是O则转4。
[0034]4)根据EXIT_QUALIFICAT10N的11:8位,确定通用寄存器。
[0035]5)判断写入CR3寄存器的值是否为受保护进程的页目录基地址,是则将其修改为受保护进程内核模式影子页表的页目录基地址。
[0036]通过捕获页错误异常,监控受保护进程用户模式与内核模式的切换以及其他进程的页表改写操作。
[0037]针对受保护进程用户模式切换到内核模式的处理过程,包括为:
1)将受保护进程的用户模式影子页表中对应于内核态代码的页表项中的不可执行属性设置为1,即该页表项所指向的物理页面不可被执行;
2)当CPU从用户模式进入到内核模式时,产生页错误异常,监控模块捕获到从用户模式到内核模式的切换;
3)将CR3寄存器修改为指向受保护进程的内核模式影子页表。
[0038]针对受保护进程内核模式切换到用户模式的处理过程,包括为:
1)将受保护进程的内核模式影子页表中对应于内核态代码的页表项中的不可执行属性设置为1,即该页表项所指向的物理页面不可被执行;
2)当CPU从内核模式进入到用户模式时,产生页错误异常,监控模块捕获到从内核模式到用户模式的切换;
3)将CR3寄存器修改为指向受保护进程的用户模式影子页表。
[0039]通过上述设置和处理,利用拦截系统调用注入到内核态的代码无法访问到受保护的内存空间。
[0040]由于系统中进程的页表页被设置成了只读,所以任何修改其页表的行为都会产生页错误异常,如果是受保护进程页表的修改,监控模块在客户机页表中完成此次修改,并将修改同步到影子页表中。如果是其他进程页表的修改,则在处理页错误异常过程中判断写入页表项的物理页帧号是否为受保护的物理页帧号,是则替换为该物理页面所对应的加密物理页面的物理页帧号,以禁止其他进程通过修改自身页表访问受保护内存空间。非受保护进程运行时,若客户机页表中的映射关系在影子页表中不存在,则会产生影子错误,出发页错误异常,此时检查该页表项中的物理页帧号字段值与受保护物理内存页的物理页帧号相等,则将该物理页帧号修改为对应的加密物理页面的页帧号。
【权利要求】
1.基于硬件辅助虚拟化的进程内存安全保护方法,其特征是该方法包括以下步骤: 步骤1:加载进程内存监控模块,使其运行于根模式(Root),并将操作系统作为客户机系统置于非根模式(Non-Root),设置VMCS控制域,使监控模块能够捕获到CR3寄存器的改写和页错误异常; 步骤2:受保护进程在启动时通知监控模块,监控模块验证发送通知的进程是否为受保护的进程; 步骤3:为受保护进程的受保护内存空间创建加密拷贝,并为受保护进程创建一份用户模式影子页表和一份内核模式影子页表,分别指向受保护内存的明文和密文; 步骤4:利用影子页表机制实现对虚拟机系统的内存虚拟,设置系统中所有进程的影子页表中页目录项的只读属性,并将受保护进程用户模式影子页表中指向数据页的页表项的不可执行属性设置为1,即该数据页不可被执行; 步骤5:捕获CR3寄存器改写操作和页错误异常,通过捕获CR3寄存器的改写,判断要写入的值是否为受保护进程页目录基地址,是则向CR3寄存器写入受保护进程内核模式影子页表的页目录基地址,通过捕获页错误异常,监控受保护进程用户模式与内核模式的切换以及其他进程的页表改写操作。
2.根据权利要求1所述的基于硬件辅助虚拟化的进程内存安全保护方法,其特征是所述的步骤I中,进程内存监控模块以驱动程序的形式安装于操作系统中,该驱动程序可以动态加载,加载后将CPU的虚拟化功能开启,并准备好虚拟化运行时必须的一些控制结构,然后使CPU运行于非根模式,该驱动程序的处理流程为: 1)分配和初始化VMXON控制域; 2)开启VMX操作模式; 3)分配和初始化VMCS控制域; 4)进入VMX非根模式; 在初始化VMCS控制域时,通过设置其中的VM-Execution控制域,使改写CR3寄存器和页错误异常发生时产生VMEXIT事件,以捕获任何写CR3寄存器的操作和页错误异常。
3.根据权利要求1所述的基于硬件辅助虚拟化的进程内存安全保护方法,其特征是所述的步骤2中,受保护进程通过调用VMCALL指令将自身的名称和PID传递给进程内存监控模块,使监控模块获得其加载通知,监控模块收到进程加载消息后对该进程做哈希运算,将运算结果与已计算的哈希值进行比对,验证受保护进程的完整性。
4.根据权利要求1所述的基于硬件辅助虚拟化的进程内存安全保护方法,其特征是所述的步骤3为受保护进程的受保护内存空间创建加密拷贝,是利用物理页帧加密技术为受保护进程的受保护内存空间创建加密拷贝,并实现了针对受保护进程的两套地址映射关系,其中,用户模式影子页表指向受保护内存的明文,而内核模式影子页表指向受保护内存的密文,结合对受保护进程模式切换的监控,使提供给受保护进程自身使用的是指向真实物理内存的用户模式影子页表,而提供给内核态代码使用的是指向受保护内存加密拷贝的内核模式影子页表。
5.根据权利要求1所述的基于硬件辅助虚拟化的进程内存安全保护方法,其特征是所述的步骤4利用影子页表机制实现对虚拟机系统的内存虚拟,将系统中各进程影子页表中的页目录项的可写位置为0,即该页目录项指向的页表页不可写,以此监控客户机页表页的修改操作,并通过设置受保护进程用户模式影子页表中页表项的不可执行属性,使受保护进程数据区页面不可被执行,则非法注入到受保护进程用户态的恶意程序无法得到执行,防止了用户态代码注入攻击。
6.根据权利要求1所述的基于硬件辅助虚拟化的进程内存安全保护方法,其特征是所述的步骤5捕获CR3寄存器改写操作和页错误异常,对于CR3寄存器改写事件,判断写入CR3寄存器的值是否为受保护进程的页目录基地址,是则向CR3寄存器写入受保护进程内核模式影子页表的物理页基地址; 通过对页错误异常的捕获,监控受保护进程的模式切换,以及其他进程的页表修改操作; 针对用户模式切换到内核模式的处理过程为: O将受保护进程的用户模式影子页表中对应于内核态代码的PTE的属性设置为不可执行; 2)当CPU从用户模式进入到内核模式时,产生页错误异常,监控模块捕获到进入内核模式; 3)将CR3寄存器修改为指向受保护进程的内核模式影子页表; 针对内核模式切换到用户模式的处理过程为: 1)将受保护进程的内核模式影子页表中对应于内核态代码的PTE的属性设置为不可执行; 2)当CPU从内核模式进入到用户模式时,产生页错误异常,监控模块捕获到进入用户模式; 3)将CR3寄存器修改为指向受保护进程的用户模式影子页表; 通过上述设置和处理,利用拦截系统调用注入到内核态的代码无法访问到受保护的内存空间; 非受保护进程运行时,若客户机页表中的映射关系在影子页表中不存在,则会产生影子错误,此时检查该页表项中的物理页帧号与为受保护物理内存页的物理页帧号相同,若相同则将该物理页帧号修改为对应的加密物理页面的页帧号,当非受保护进程修改自身页表时将触发页错误异常,此时判断是否要将受保护内存的物理页帧号写入某个页表项,若是,则写入对应的加密物理页面的物理页帧号,以禁止其他进程通过修改自身页表访问受保护内存空间。
【文档编号】G06F12/14GK103955438SQ201410215459
【公开日】2014年7月30日 申请日期:2014年5月21日 优先权日:2014年5月21日
【发明者】黄皓, 李佳瑶 申请人:南京大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1