高效的基于嵌套虚拟化的虚拟机安全保护方法及系统与流程

文档序号:11690952阅读:434来源:国知局
本发明涉及云计算平台系统安全
技术领域
:,具体地,涉及高效的基于嵌套虚拟化的虚拟机安全保护方法及系统。
背景技术
::在云计算平台中,虚拟化技术通常被用来高效整合服务器,提高包括处理器、内存在内的硬件的利用率。同时,虚拟化技术也通常被用于做虚拟机之间的隔离,防止恶意虚拟机访问其他虚拟机中的内存和磁盘存储的隐私数据。但是,随着多租户云计算平台中虚拟化层软件栈的日益庞大和复杂,整个系统的可信基也逐渐增大,租户在虚拟机中存储的隐私数据面临着来自外部和内部共同的威胁。一方面,随着虚拟化层的功能性日益繁多,虚拟化层软件栈的代码量也日益扩大,其中漏洞数目也越来越多,如根据cve的统计,截止到2015年,当前主流的3大虚拟化平台vmware、xen和kvm分别被披露了234个、135个和89个已知的漏洞,外部攻击可以通过利用这些漏洞控制虚拟化层软件栈,从而威胁整个系统的安全性。另一方面,在云平台内部也存在着不安全因素,比如随着安全事故的发生(如2010年google公司的雇员窃取用户的隐私数据),云平台中恶意的管理人员也成为了一个潜在的威胁。为了增强虚拟化平台的安全性,避免过大的攻击面,之前的研究提出将虚拟化层的软件栈(虚拟机监控器)移除出可信计算基。其中最具代表性的工作是cloudvisor。由于在传统的虚拟化框架中,虚拟化监控器处于整个系统的最高权限层,一旦其被控制,是没有办法通过软件的方法进行阻止的,因此,cloudvisor提出加入一层新的抽象层,通过嵌套虚拟化技术,将虚拟机监控器移出最高权限层,从而防止恶意的虚拟机监控器对整个系统造成破坏。研究指出,在虚拟化环境中,虚拟机隐私和完整性的保护和其他功能性的逻辑是相互独立的,因此cloudvisor系统通过将安全保护机制的逻辑从整个虚拟化层剥离出来,在嵌套虚拟化层对虚拟机监控器进行监控,从而保护虚拟机,防止虚拟机中的隐私数据被虚拟化层窃取和篡改。具体来说,如图1所示,在cloudvisor的架构中,虚拟机监控器将被置于非特权指令集中,并使用扩展页表(ept)机制保护用户虚拟机不受到未授权的访问。虚拟机监控器对用户虚拟机进行的所有敏感操作都将下陷到cloudvisor中接受安全检查。这种机制很好地将安全性与功能性解耦合,在保证功能完备的同时尽量减小了可信计算基的大小,有利于对可信基进行进一步的正确性验证。因此在cloudvisor中可信基仅仅有5.5k行代码,相比于庞大的虚拟机监控器具有更加简单的逻辑及更高的可信性。然而,cloudvisor这种基于嵌套虚拟化的方案存在一个严重的问题:由于嵌套虚拟化层的引入,使得虚拟机到虚拟化层的路径必须经过嵌套虚拟化层,这就对整个系统造成了巨大的性能损失。如图2所示,在传统的虚拟化框架中,虚拟机的特权指令或者特定的事件直接被虚拟化层拦截,通过一次虚拟机下陷(vmexit)和一次虚拟机进入(vmentry)即可完成整个路径。然而在cloudvisor框架中,所有的操作首先进入嵌套虚拟化层,再由嵌套虚拟化层的软件将控制权交还给虚拟化层,在虚拟化层处理完之后,再进入嵌套虚拟化层,最后返回虚拟机。另外,在虚拟化层处理过程中,由于虚拟化层属于非特权级的环境中,某些特定的特权操作还会下陷到嵌套虚拟化层进行模拟,因此,原来一次vmexit就能完成的操作,需要至少两次(一般情况下会远远大于两次)的vmexit才能完成,从而对整个系统造成巨大的性能损失。造成这些性能损失的根本原因在于两点:第一,由于之前硬件提供的功能和特性,很多操作和事件必须要下陷到特权级模式(即嵌套虚拟化层中)进行处理,没有一套可行的方法能够让处于非特权级中的相互隔离的两个实体(虚拟机和虚拟机监控器)直接进行交互;第二,出于对安全的考量,嵌套虚拟化层必须对两个实体(虚拟机和虚拟机监控器)的交互进行拦截,对虚拟机监控器的操作进行检查,从而防止恶意的虚拟机监控器窃取和篡改虚拟机的内存磁盘数据。然而,随着硬件的发展,第一个根本原因(即在特定操作和事件中必然发生vmexit)已经不再是必须的了。比如,intel对硬件虚拟化提供了更为高级的支持,许多硬件特性都使得越来越多的操作和事件都可以被配置为不引起vmexit,以下列举6个相应的硬件特性实例来进行详细的说明:1)vmfunc(eptpswitching):在虚拟化环境中,内存虚拟化是通过两级页表映射实现的,如图1所示,内存虚拟化的两级页表机制客户虚拟机中每个客户虚拟地址(gva)首先会被映射到一个客户物理地址(gpa),之后在vmm里面,每个客户物理地址又会被映射为一个宿主机物理地址(hpa)。也就是说在vmm里面会维护一个页表(intel中被称为ept),该页表会对所有客户虚拟机中的物理地址进行映射,只有存在于该页表中的映射的客户机地址才会被反映在真实的物理内存中。该页表通过一个硬件寄存器进行访问,该寄存器被称为eptpointer(eptp)。理论上,完全可以通过操作ept(即改变gpa到hpa之间的映射)来操作客户机中的内存分配,但是在正常模式下,修改ept中地址的映射关系都是由vmm进行操作的,在虚拟机中切换不同的eptp会引起虚拟机下陷,造成比较大的性能开销。而vmfunc是intel提出的一套硬件机制,eptpswitching是其包含的一项功能,即允许在非特权级的模式下能够直接切换相应的eptp,而不引发vmexit。当然,前提是特权级软件预先配置好可选的eptp,而非特权级只允许在有限的几个配置好的eptp中进行切换。2)virtualizationexception(ve):在传统的虚拟化环境中,在虚拟机运行时如果发现当前访问的物理页在ept中没有被映射,则会发生一个事件,即eptviolation,该事件会造成vmexit,从而由特权级的软件进行处理(比如,填充相应的ept项)。而ve则是intel提出的一个硬件特性,在进行了相应的配置之后,可以使得eptviolation不会引发vmexit,而是作为一个普通的异常(exception),直接触发非特权级(如虚拟机)中的异常处理函数进行处理。3)vmcsshadowing:在intel硬件虚拟化中的cpu虚拟化中,所有和cpu相关的信息都会被保存在一个数据结构中,该数据结构被称为vmcs。这些数据结构保存了虚拟机(vm)和主机(host)的状态,以及一些控制信息。vmcs会被加载在特定的内存中,当发生vmentry的时候,处理器会加载vmcs中和虚拟机相关的状态,在发生vmexit的时候,处理器会加载vmcs中和主机相关的状态。在传统的虚拟化环境中,对vmcs的访问只能由特权级软件进行,非特权级中产生的访问会引发vmexit,因此如果将虚拟机监控器放置在非特权级中,由于其会频繁访问vmcs,因此会造成大量的vmexit。而vmcsshadowing机制使得在经过相应的映射之后,非特权级模式下的软件也能够直接修改内存中的vmcs。4)apicvirtualization:在intel多核处理器中,系统软件如果处理中断相关事务,需要与apic(advancedprogrammableinterruptcontroller)交互。apic的功能包括两点:1)从内部或外部接收中断,并传送给相应的处理器;2)在多核系统中为某处理器向其他处理器发送处理器间中断(ipi)。然而,在虚拟化环境中,虚拟机无法直接接触apic,需要由虚拟机监控器为其模拟apic操作。具体而言,客户虚拟机任何访问apic的操作都会造成一次下陷(vmexit),之后虚拟机监控器检查相应的下陷信息,从而为虚拟机完成对应的模拟。为了消除apic模拟带来的下陷开销,intel推出了apic虚拟化技术,由硬件为每个虚拟机提供apic的模拟。此时,客户虚拟机的apic操作将不再下陷。5)postedinterrupt:apic虚拟化技术支持postedinterruptprocessing,允许vmm向一个正在运行的虚拟cpu直接发送中断,这就避免了一次由中断带来的下陷。然而,发送postedinterrupt依然要求另一个处理器上运行着虚拟机监控器。6)iommu:为了使虚拟机监控器不参与整个中断的转发,将来自物理设备的中断直接发送给某虚拟cpu。可以使用最新的iommu技术。借助iommu,vmm将某物理设备直接绑定给一个虚拟机,由其独占此设备。来自独占设备中断的转发需要借助iommu中的中断重映射表(interruptremappingtable)。在中断重映射表中,虚拟机监控器设置某中断的转发类型,决定硬件如何处理这个中断。若此中断的类型是posting模式,硬件将借助apic虚拟化中的postedinterruptprocessing功能,直接将其插入正在运行的虚拟cpu中。上述这些新的硬件特性提供了一个机遇,即在发生某些特定事件和操作的时候不引发vmexit,而是由非特权级模式中的实体直接进行处理,从而避免了大量vmexit造成的性能损失。同时,由于vmfunc的存在,为非特权级模式下不同实体之间直接交互带来了可能性,可以通过改变eptp达到不同实体间的上下文切换的效果。因此,在以上所提到的硬件支撑的基础上,如何在不产生vmexit的情况下保证虚拟机和虚拟机监控器的隔离性,将是需要解决的关键问题。技术实现要素:针对现有技术中的缺陷,本发明的目的是提供一种高效的基于嵌套虚拟化的虚拟机安全保护方法及系统。根据本发明提供的高效的基于嵌套虚拟化的虚拟机安全保护方法,包括如下步骤:步骤1:将虚拟机与虚拟化层进行隔离;步骤2:实现虚拟化层软件与虚拟机的直接交互。优选地,所述步骤1包括:利用嵌套虚拟化技术防止恶意的虚拟化层软件窃取和篡改虚拟机内存和磁盘的数据;对虚拟化层的操作进行检查和监控,以及对嵌套虚拟化层的软件进行安全性验证,防止恶意的虚拟化层软件纂改虚拟机的控制流。优选地,所述步骤2包括:在虚拟机和虚拟化层之间设置安全通道,所述安全通道用于实现虚拟机与虚拟化层软件的直接交互。优选地,所述步骤1包括:步骤1.1:将虚拟机和虚拟机监控器运行在非特权级的环境中;步骤1.2:对非特权级环境中的实体进行内存隔离配置;所述实体包括:虚拟机、虚拟机监控器以及安全门,当虚拟机监控器恶意访问虚拟机内存时,会触发下陷,由嵌套虚拟化层进行检查并禁止;步骤1.3:在嵌套虚拟化层为虚拟机和虚拟机监控器分别配置相关的虚拟机控制结构中特定的域,所述域用于控制虚拟机和虚拟机监控器运行时的行为。优选地,所述步骤2包括:步骤2.1:在虚拟机和虚拟机监控器之间建立非特权级环境中的代理,所述代理即为虚拟机和虚拟机监控器之间的安全门,并设置相应的跳板函数,对安全门和跳板函数进行安全性的验证;步骤2.2:虚拟机在运行时如果产生了需要虚拟机监控器处理的事件,则通过安全门中的代码直接向虚拟机监控器发出请求,由虚拟机监控器提供的服务进行相应的处理,即包括处理内存分配,异常处理,中断处理,i/o处理等,并在处理结束之后通过安全门返回,并进行隐私性和完整性的检查。根据本发明提供的高效的基于嵌套虚拟化的虚拟机安全保护系统,包括:嵌套虚拟化层模块、虚拟机自处理事件模块、虚拟机监控器服务模块以及通信模块;所述嵌套虚拟化层模块用于对控制层的非特权级实体内存进行配置,使得各个非特权级实体之间相互隔离,并配置通信模块;所述非特权级实体包括:虚拟机、虚拟机监控器、虚拟机与虚拟机监控器之间的安全门;所述虚拟机自处理事件模块用于在发生特定事件时对相关事件进行自行处理,并触发上下文切换;所述虚拟机监控器服务模块用于提供相应的服务,该服务包括:分配页表、进行中断处理、部分异常处理以及i/o处理;所述通信模块用于实现虚拟机和虚拟机监控器之间的交互。优选地,所述通信模块在虚拟机和虚拟机监控器之间插入一个嵌套虚拟化在非特权级中的代理,并为虚拟机、虚拟机监控器以及代理提供相应的跳板函数,所述代理即为安全门,该安全门是一段代码逻辑。与现有技术相比,本发明具有如下的有益效果:本发明提供的高效的基于嵌套虚拟化的虚拟机安全保护方法以及系统,能够将虚拟机和虚拟化层进行隔离,防止恶意的虚拟机监控器窃取和篡改虚拟机的数据,并且在运行时尽可能地减少由隔离机制所带来的虚拟机下陷,使得虚拟机和虚拟机监控器能够进行安全且高效的切换。附图说明通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:图1为cloudvisor的架构示意图;图2为本发明中的系统架构示意图;图3为本发明中多个实体之间的内存隔离机制示意图;图4为本发明中虚拟机和虚拟机监控器之间通信模块的示意图;图5为本发明中处理虚拟机eptviolation的流程示意图;图6为本发明中处理虚拟机中基于iommu设备的i/o操作的流程示意图;图7为本发明中处理虚拟机中基于半虚拟化技术的i/o操作的流程示意图。具体实施方式下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。根据本发明提供的基于嵌套虚拟化的虚拟机安全保护方法,包括如下步骤:步骤1:将虚拟机与虚拟化层进行隔离;步骤2:实现虚拟化层软件与虚拟机的直接交互。所述步骤1包括:利用嵌套虚拟化技术防止恶意的虚拟化层软件窃取和篡改虚拟机内存和磁盘的数据;对虚拟化层的操作进行检查和监控,以及对嵌套虚拟化层的软件进行安全性验证,防止恶意的虚拟化层软件纂改虚拟机的控制流。所述步骤2包括:在虚拟机和虚拟化层之间设置安全通道,所述安全通道用于实现虚拟机与虚拟化层软件的直接交互。这种方式避免大量的虚拟机下陷(到嵌套虚拟化层)所产生的性能损失,同时保证虚拟机和虚拟化层之间的隔离。所述步骤1包括:步骤1.1:将虚拟机和虚拟机监控器运行在非特权级的环境中;步骤1.2:在虚拟机和虚拟机监控器之间建立非特权级环境中的代理,所述代理即虚拟机和虚拟机监控器之间的安全门,并设置相应的跳板函数,对安全门和跳板函数进行安全性的验证;步骤1.3:对非特权级环境中的实体进行内存隔离配置;所述实体包括:虚拟机、虚拟机监控器以及安全门;步骤1.4:为虚拟机和虚拟机监控器分别配置相关的虚拟机控制结构中特定的域;步骤1.5:虚拟机在运行时如果产生了需要虚拟机监控器处理的事件,则通过安全门直接向虚拟机监控器发出请求,由虚拟机监控器进行相应的处理,即包括处理内存分配,异常处理,中断处理,i/o处理等,并在处理结束之后进行隐私性和完整性的检查。根据本发明提供的高效的基于嵌套虚拟化的虚拟机安全保护系统,包括:嵌套虚拟化层模块、虚拟机自处理事件模块、虚拟机监控器服务模块以及通信模块;所述嵌套虚拟化层模块用于对控制层的非特权级实体内存进行配置,使得各个非特权级实体之间相互隔离,并配置通信模块;所述非特权级实体包括:虚拟机、虚拟机监控器、虚拟机与虚拟机监控器之间的安全门;所述虚拟机自处理事件模块用于在发生特定事件时对相关事件进行自行处理,并触发上下文切换;所述虚拟机监控器服务模块用于提供相应的服务,该服务包括:分配页表、进行中断处理、部分异常处理以及i/o处理;所述通信模块用于实现虚拟机和虚拟机监控器之间的交互。所述通信模块在虚拟机和虚拟机监控器之间插入一个嵌套虚拟化在非特权级中的代理,并为虚拟机、虚拟机监控器以及代理提供相应的跳板函数,所述代理即为安全门,该安全门是一段代码逻辑。下面结合附图对本发明中的技术方案做更加详细的说明。图2展示了本发明的整体架构图。总体来说,本发明遵循着将控制层(controlplane)和数据层(dataplane)分离的思想:首先,在特权级环境中,嵌套虚拟化层模块需要对整个系统进行控制层的配置,包括对非特权级三个实体(虚拟机,虚拟机监控器和它们之间的安全门)的内存进行配置,使得它们相互隔离,以及建立通信模块,并保证其中安全门和跳板函数代码的安全性,使得在运行时的数据层交互直接通过通信模块,而不需要下陷到嵌套虚拟化层;其次,虚拟机自处理事件模块在发生特定事件时能够对相关事件自行处理,并且触发上下文切换,通过嵌套虚拟化层之前配置好的通信模块和虚拟机监控器进行交互;而虚拟机监控器服务模块提供相应的服务,当控制流从通信模块中进入虚拟机监控器时,对特定的请求进行处理;最后,虚拟机和虚拟机监控器两个实体之间的通信模块保证通信的高效性和安全性,特别是在虚拟机监控器返回之后需要对其提供的服务结果进行检查,防止虚拟机监控器窃取和篡改虚拟机的数据。嵌套虚拟化层模块需要配置相应的控制层,具体来说,需要做五件事:(1)将虚拟机和虚拟机监控器运行在非特权级的环境中;(2)建立其在非特权级环境中的代理,即虚拟机和虚拟机监控器之间的安全门,以及相应的跳板函数,并对安全门和跳板函数进行安全性的验证;(3)对非特权级环境中的三个实体(虚拟机,虚拟机监控器和安全门)进行内存隔离的配置;(4)需要为虚拟机和虚拟机监控器分别配置相关的虚拟机控制结构(virtualmachinecontrolstructure,vmcs)中特定的域,从而决定在运行时哪些事件会造成vmexit,哪些事件可以直接由虚拟机或者虚拟机监控器直接处理;(5)对于那些需要下陷的事件进行相应的处理。对于第(3)点,即对三个实体进行内存配置,如图3所示,具体来说,就是通过intel内存硬件虚拟化提供的扩展页表(ept)支持,来控制三个实体所能够访问的内存区域的范围,即为三个实体配置三个ept页表,其中虚拟机和虚拟机监控器的内存区域是相互隔离的,同时它们都无法访问安全门所在的内存区域,从而保证它们无法篡改通信模块的控制流,而通信模块中的安全门可以访问虚拟机和虚拟机监控器的内存,并且可以在这两个内存区域间进行切换,切换的过程在通信模块中详述。对于第(4)点,即配置vmcs以决定需要下陷的事件,表1展示了所有可能造成虚拟机下陷(vmexit)的60个事件,以及通过嵌套虚拟化层对vmcs进行配置从而决定相关事件是否最终引起vmexit的结果。表1其中,由于硬件特性决定,有25个事件会无条件地引发vmexit,而出于安全和功能考虑,将另外5个事件设置为在虚拟机和虚拟机监控器中都会触发vmexit,其它的事件则有些在虚拟机环境中不会触发vmexit,有些在虚拟机监控器环境下不会触发vmexit,还有一些在两种环境下都不会触发vmexit。另外,有些事件可以配置成部分触发vmexit,部分不触发,比如exception,rdmsr,wrmsr等,采用的方法是通过硬件提供的bitmap来配置相应的域,这样可以更加细粒度地配置触发vmexit的条件。这里需要注意的是,那些会无条件触发vmexit的情况都是属于出现的很少,甚至是在一些特殊的配置下才会产生,一般不会使用的特性,因此这些vmexit所造成的性能开销很小,而对于其它的配置,所遵循的原则如下:第一、如果某个实体本来不应该进行某些操作,则将其配置为会引起vmexit,比如在虚拟机中不应该读写vmcs,所以在虚拟机中vmread和vmwrite都配置成vmexit,还有比如在虚拟机监控器中不应该有i/o的操作,所以在虚拟机监控器中i/oinstruction被配置成vmexit;第二、对于一些必须要引发vmexit才会被通知的事件,则都配置成vmexit,比如interrupt/nmiwindows,这些事件的发生如果不产生vmexit,则相关的软件无法被通知,也不会有其它的机制来处理相应的事件,所以都被配置成vmexit;第三、对于一些功能性的操作,比如vmx-preemptiontimer,就是通过vmexit的产生来通知特权级软件时间片被用完了,所以也都被配置成vmexit;第四,其它的事件就被配置成不产生vmexit。关于虚拟机自处理事件模块,对于所有不产生下陷的事件,都由虚拟机自处理模块自行处理,在处理的过程中分为两个步骤,如果该事件可以在虚拟机直接解决,比如读写控制寄存器(control-registeraccess)等,则在虚拟机自处理模块中自己进行,否则,对于那些需要经由虚拟机监控器完成的操作,比如修改ept(eptviolation),或者进行i/o操作等,则需要通过通信模块和虚拟机监控机进行通信,并调用相应的服务。关于虚拟机监控器服务模块,其为虚拟机提供必须的服务,包括为其分配页表,进行中断处理,部分异常处理,i/o处理等。虚拟机通过通信模块将请求发送给虚拟机监控器,而虚拟机监控器在处理完之后,再通过通信模块返回相应结果。图4展示了虚拟机和虚拟机监控器之间的通信模块。该通信模块可以进行虚拟机和虚拟机监控器上下文的高效切换,采用的方法是intel处理器提供的一个虚拟化硬件扩展机制:eptpswitching(扩展页表指针替换),这是硬件提供的一个可以在虚拟机中运行的函数,该函数的功能是在不下陷到虚拟机监控器的情况下改变eptpointer的值。由于在嵌套虚拟化层模块的第三步中为这三个实体建立了三套ept,并且将它们对应的eptp指针组成了一个eptp数组,并且将该数组的首地址填到数据结构vmcs中的一个特定的域eptp_list_addr中。上下文切换的过程如下:虚拟机自处理模块通过跳板函数调用vmfunc指令,并将eax寄存器设置为0,将ecx寄存器设置成安全门的eptp对应的索引,则可以达到在不产生vmexit的情况下降当前的上下文切换到通安全门对应的内存中,类似的,安全门也可以通过设置寄存器,并调用vmfunc指令,将上下文切换到虚拟机监控器的内存上下文中。反之,从虚拟机监控器返回虚拟机的途径也是用vmfunc机制。需要注意的是,虽然虚拟机监控器为虚拟机提供服务,但是需要保证其不能窃取和篡改虚拟机的数据。为了保证这一点,需要安全门在虚拟机监控器返回时对结果进行检查和处理。比如当虚拟机监控器处理虚拟机的eptviolation的时候,它为虚拟机分配了一段空的内存,并填写好相应的ept的条目,安全门在检查的过程中就需要将该内存页从虚拟机监控器的映射中去除,从而禁止其访问该页的内容,在保证了安全性的前提下大量减少了vmexit的数量,从而提高了系统的整体性能。本发明提出的一种高效的基于嵌套虚拟化的虚拟机安全保护框架,它通过嵌套虚拟化技术将虚拟机和虚拟化层进行有效的隔离,从而防止恶意的虚拟机监控器窃取和篡改虚拟机的数据,同时在实际运行过程中尽可能地避免由隔离机制所带来的虚拟机下陷,极大地减小了性能损失,使得虚拟机和虚拟机监控器能够进行安全且高效的切换。该架构能够被部署到现有的云计算平台中,满足用户对安全性、功能性和高效性的各方面需求。实施例一种高效的基于嵌套虚拟化的虚拟机安全保护框架的具体部署流程包括:步骤s1:嵌套虚拟化层模块对于控制层进行的配置;步骤s2:运行虚拟机自处理模块;步骤s3:运行虚拟机监控器服务模块;步骤s4:运行通信机制;步骤s5:对eptviolation进行处理;步骤s6:基于iommu设备对i/o进行处理;步骤s7:基于半虚拟化技术对i/o进行处理。其中步骤s5至步骤s7通过对三个虚拟化环境中最关键的场景的处理来具体阐述运行时各模块之间的行为。以下将通过具体实施示例来详细描述本发明。本发明的示例具体步骤如下:步骤s1包括:嵌套虚拟化层模块对控制层进行配置,配置的内容如下:第一,执行相关硬件指令,将虚拟机和虚拟机监控器运行在非特权级环境中;第二,创建嵌套虚拟化层在非特权级的代理,即通信模块,并且对其代码进行安全检查;第三,为非特权级环境中的三个实体(虚拟机,虚拟机监控器和通信模块)配置它们对应的ept,保证虚拟机和虚拟机监控器的内存是相互隔离的,而且它们都无法访问通信模块的内存,而通信模块可以访问另外两个实体的内存;第四,按照表1的内容,为虚拟机和虚拟机监控器分别配置相关的vmcs中特定的域;第五,配置好嵌套虚拟化层中的下陷处理函数,对于那些在非特权级环境中会产生vmexit的事件进行相应的处理。步骤s2包括:在虚拟机的运行环境中,对于所有不产生vmexit的事件,都由进入虚拟机自处理模块的处理函数,由虚拟机对该事件自行处理。在处理的过程进行判断,如果该事件可以由虚拟机解决,则在虚拟机自处理模块中自行处理,否则,对于那些需要经由虚拟机监控器完成的操作,则通过步骤s4中的通信机制,和虚拟机监控机进行通信,并调用相应的服务。步骤s3包括:在虚拟机监控器的运行环境中,虚拟机监控器的服务模块为虚拟机提供必须的服务,包括为其分配页表,进行中断处理,部分异常处理,i/o处理等。虚拟机通过通行模块将请求发送给虚拟机监控器,而虚拟机监控器在处理完之后,再通过步骤s4中的通信机制,向虚拟机返回相应结果。步骤s4包括:在虚拟机自处理模块中,如果需要向虚拟机监控器请求服务,则进入通信模块在虚拟机端提供的跳板函数,该跳板函数通过vmfunc指令,传入通信模块中的安全门对应的ept指针索引,快速切换到安全门相对应的内存空间,并由安全门的跳板函数切换到虚拟机监控器服务模块的内存空间;虚拟机监控器服务模块处理完请求之后,进入通信模块在虚拟机监控器端提供的跳板函数,该跳板函数通过vmfunc指令,传入安全门相对应的ept指针索引,快速切换到相应的内存空间,安全门对返回的结果进行检查,防止虚拟机监控器对虚拟机数据的窃取和篡改,如果检查成功,则通过其跳板函数返回虚拟机的内存空间,完成整个通信流程。步骤s5包括:在虚拟机运行时如果发生eptviolation事件,如图5所示,由于嵌套虚拟化层在vmcs中配置了该事件在虚拟机中不发生vmexit,因此控制流会进入虚拟机自处理模块,自处理模块判断该事件需要请求虚拟机监控器进行处理,因此通过步骤s4中的通信机制将请求发送给虚拟机监控器,在经过安全门的时候,安全门会将相应的虚拟机的ept页表页设置为虚拟机监控器可直接读写。虚拟机监控器根据请求中提供的信息,为该虚拟机分配相应的内存页,在虚拟机的ept中填入相应的条目,并且通过步骤s4中的通信机制返回虚拟机,在经过安全门的时候,安全门会对虚拟机的页表项进行检查,并且将虚拟机的ept页表页设置为虚拟机监控器不可访问,同时,将新分配的页也设置成虚拟机监控器不可访问,从而防止虚拟机监控器恶意窃取和篡改虚拟机的内存数据。这里需要注意的是,安全门在设置虚拟机ept页表页权限的时候需要先将其保护起来,防止虚拟机监控器在检查之后,设置权限之前对ept页表页进行篡改,即所谓的toctou(time-too-checktotime-of-use)攻击,采用的方法包括硬件事务内存等机制。步骤s6包括:在虚拟机需要进行基于iommu设备的i/o事件的处理的时候,如图6所示,由于iommu设备可以将某个i/o设备直接分配给虚拟机。因此虚拟机可以直接对该i/o设备进行读写操作,不需要向虚拟机监控器请求服务。另外,i/o设备会产生大量的中断,由于我们在嵌套虚拟化中配置了在虚拟机运行时产生的中断不会引发vmexit,因此中断会直接进入虚拟机自处理模块,而虚拟机自处理模块判断当前中断是由直接分配给自己的i/o设备产生,可以由自己直接处理,因此也不需要向虚拟机监控器请求服务。最后,为了保证虚拟机监控器不能访问虚拟机磁盘上的数据,需要防止虚拟机监控器的i/o操作,即在嵌套虚拟化层配置虚拟机监控器的i/o操作会产生vmexit,从而对其进行拦截。步骤s7包括:在虚拟机需要进行基于半虚拟化技术的i/o事件的处理的时候,如图7所示,需要加入另外一个实体,即专门负责i/o设备驱动的虚拟机(drivervm),并且在嵌套虚拟化层模块中对其ept进行配置。初始化时,虚拟机和驱动虚拟机之间首先会建立一块共享内存,当发生i/o写操作时,虚拟机将数据写入共享内存,并且通过步骤s4中的通信机制(虚拟机->安全门->驱动虚拟机)通知驱动虚拟机,执行真正的i/o写操作。在发生i/o读操作的时候,驱动虚拟机先从i/o设备中读取数据,并将它们写入共享内存,然后通过步骤s4中的通信机制(驱动虚拟机->安全门->虚拟机)通知虚拟机,由虚拟机直接从共享内存中读取数据。这里需要注意的是,由于驱动虚拟机并不是可信的,所以i/o数据需要由虚拟机自己负责进行加解密和对完整性的保护,从而防止驱动虚拟机窃取和篡改i/o的数据。以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1