一种基于虚拟机的自省自动化管理、配置与自省方法与流程

文档序号:15492098发布日期:2018-09-21 20:48阅读:281来源:国知局

本发明涉及计算机技术领域,具体地说,是一种基于虚拟机的自省自动化管理、配置与自省方法。



背景技术:

在云计算中虚拟机自省技术为云安全提供了安全保障手段。虚拟机自省技术(virtualmachineintrospection,vmi)是基于虚拟机架构监控技术的典型代表。虚拟机自省技术的体系架构是通过在目标虚拟机外部获取虚拟机底层状态数据(cpu寄存器、i/o控制器寄存器、内存、大容量存储设备等),可以在安全虚拟机中有效地监控或干预其内部运行状态。由于虚拟机管理层(virtualmachinemonitor,vmm)具有最高权限,而且虚拟机之间有很强的隔离性,因此这种监控方式具有更高的安全性和透明性。由于这种方法能够保证监控工具的有效性和防攻击性,在入侵检测、内核完整性保护、文件保护等多方面发挥了重要作用。

但是,目前虚拟机监控技术面临着语义解析的挑战。由于监控器在虚拟化平台仅能获得虚拟机的二进制执行信息,无法获悉其高层语义信息,这种语义之间的差异称为“语义鸿沟”。由于不同虚拟机不同操作系统和不同内核版本具有不同的语义知识,因此外部监控工具的通用性和可扩展性不好。尽管已经有自动化解析语义的工具如volatility等,然而大部分vmi程序仅仅能够解析虚拟机的信息无法做到直接管理虚拟机。这是因为往往一个操作会引起虚拟众多内存和磁盘变化,在外部很难全面地模拟内核的所有操作。比如:当需要结束一个进程时,需要改变内核中的进程列表并且释放掉相关的所有内存,这是一系统化地操作。

为了解决自动化处理语义鸿沟问题,hypershell[1]、ext[2]和pi[3]分别利用系统调用重定向和将分析程序植入目标虚拟机的方法,从而达到管理或监控的目的。但是这些方法面临着安全性、自动化、可扩展性的问题。hypershell与pi都是需要虚拟机辅助完成管理和解析,安全性与透明性有问题,一旦虚拟机内核被破坏则无法工作。ext则是利用安全虚拟机(svm)来代替目标虚拟机(tvm)处理数据,之后将结果复制到目标虚拟机中,但是面临着扩展性问题。因为各个系统调用的待操作数据是不同的,需要分别处理,而linux有众多种调用,因此难以覆盖所用功能。



技术实现要素:

本发明提出了一种安全的基于虚拟机自省的自动化管理、配置与自省方法及系统,使监控程序可以在虚拟机外部自动化地获取虚拟机运行信息和干预虚拟机的运行。核心思想是利用目标虚拟机辅助执行我们需要的傀儡系统调用从而自动化地解析语义和干预虚拟机。采用复用系统调用的策略是因为虚拟机中的大部分的重要的操作是通过系统调用完成的。因此通过利用系统调用可以自动化地处理语义鸿沟问题。

本发明可以采用如下方法来实现:

一种基于虚拟机的自省自动化管理、配置与自省方法,包括:

1)根据操作系统的操作进程的调用执行过程,筛选出复用级系统调用从而形成傀儡系统调用,所述傀儡系统调用由目标虚拟机执行;所述目标虚拟机包括控制模块、数据交换模块以及系统调用控制模块;

2)注入目标虚拟机调用,包括

①在目标虚拟机中选取傀儡程序,并根据待处理语义,选取傀儡系统调用并等待执行;调用控制模块获取当前调用执行过程且数据交换模块传递当前调用数据传递至控制模块并保存;

②控制模块操作数据交换模块,将需要执行的傀儡系统调用的参数数据传递到目标虚拟机中,由目标虚拟机按照需求辅助完成傀儡系统调用;

③数据交换模块将调用执行结果传递给控制模块,所述执行结果位于内核空间或用户空间;

④控制模块操作数据交换模块将傀儡程序原来调用的参数数据恢复到目标虚拟机中,之后调用控制模块会让目标虚拟机继续执行傀儡程序原来的调用;

⑤在原来调用执行后,完成傀儡系统调用返回;操作系统的控制流会返回到傀儡程序;

3)保护虚拟机系统调用执行,包括:

①傀儡系统调用开始执行后,设置目标虚拟机中所有内核页面权限为不可执行;

②当页面被执行后,会触发异常,则暂停目标虚拟机的运行;并根据被执行内核页面的虚拟地址找到安全虚拟机的安全镜像中对应的内存页面;将该页面写入目标虚拟机的被执行页面中并保护该内存页;

③将该页面设置为可以执行后,恢复目标虚拟机运行;

4)隔离虚拟机内存,包括:从目标虚拟机外部跟踪目标虚拟机的vcpu调度和操作目标虚拟机内存;具体为:在注入目标虚拟机调用过程中,在向傀儡程序写入傀儡系统调用的参数数据之前,保存即将被写入内存区域之前的数据,并通过跟踪目标虚拟机中的程序的上下文切换信息,得到目标虚拟机中vcpu的调度信息。

进一步地,所述注入目标虚拟机调用,在注入调用过程中,当vcpu正在执行傀儡程序时,傀儡程序的内存是注入后的状态,当傀儡程序被切换后,在目标虚拟机外部跟踪傀儡程序内存的读写信息。

本发明还提供了一种基于虚拟机的自省自动化管理、配置与自省系统,包括傀儡系统调用形成模块、目标虚拟机调用执行模块、虚拟机调用执行保护模块以及虚拟机内存隔离模块;

所述傀儡系统调用形成模块用于根据操作系统的操作进程的调用执行过程,筛选出需要复用的系统调用从而形成傀儡系统调用,所述傀儡系统调用由目标虚拟机执行;所述目标虚拟机包括控制模块、数据交换模块以及系统调用控制模块;

所述目标虚拟机调用执行模块用于注入目标虚拟机调用,包括

①在目标虚拟机中选取傀儡程序,并根据待处理语义,选取傀儡系统调用并等待执行;调用控制模块获取当前调用执行过程且数据交换模块传递当前调用数据传递至控制模块并保存;

②控制模块操作数据交换模块,将需要执行的傀儡系统调用的参数数据传递到目标虚拟机中,由目标虚拟机按照需求辅助完成傀儡系统调用;

③数据交换模块将调用执行结果传递给控制模块,所述执行结果位于内核空间或用户空间;

④控制模块操作数据交换模块将傀儡程序原来调用的参数数据恢复到目标虚拟机中,之后调用控制模块会让目标虚拟机继续执行傀儡程序原来的调用;

⑤在原来调用执行后,完成傀儡系统调用返回;操作系统的控制流会返回到傀儡程序;

所述虚拟机调用执行保护模块用于保护虚拟机系统调用执行,包括:

①傀儡系统调用开始执行后,设置目标虚拟机中所有内核页面权限为不可执行;

②当页面被执行后,会触发异常,则暂停目标虚拟机的运行;并根据被执行内核页面的虚拟地址找到安全虚拟机的安全镜像中对应的内存页面;将该页面写入目标虚拟机的被执行页面中并保护该内存页;

③将该页面设置为可以执行后,恢复目标虚拟机运行;

所述虚拟机内存隔离模块隔离虚拟机内存,包括:从目标虚拟机外部跟踪目标虚拟机的vcpu调度和操作目标虚拟机内存;具体为:在注入目标虚拟机调用过程中,在向傀儡程序写入傀儡系统调用的参数数据之前,保存即将被写入内存区域之前的数据,并通过跟踪目标虚拟机中的程序的上下文切换信息,得到目标虚拟机中vcpu的调度信息。

进一步地,所述注入目标虚拟机调用,在注入调用过程中,当vcpu正在执行傀儡程序时,傀儡程序的内存是注入后的状态,当傀儡程序被切换后,在目标虚拟机外部跟踪傀儡程序内存的读写信息。

综上,本发明包含了以下几点:

(1)基于跟踪的傀儡系统调用选取方法,当域外的监控程序需要获取虚拟机信息或干预虚拟机时,能够自动选取地需要复用的傀儡系统调用;

(2)透明化的虚拟机系统调用注入,能够通过控制虚拟机系统调用执行的方式,向运行的虚拟机中注入额外的傀儡系统调用。

(3)虚拟机系统调用执行保护技术,在系统调用复用过程中,一旦虚拟机内核被攻破,将导致注入的系统调用的执行结果不可信。因此,需要研究虚拟机系统调用执行保护技术实时地保护注入系统调用的执行安全。在复用虚拟机系统调用时,监控器将在域外动态检查虚拟机执行代码的完整性和安全性。

(4)虚拟机内存隔离技术,在虚拟机注入调用执行过程中,其所执行的代码和暂存的数据都将被隔离。被隔离的内存无法被其他进程访问,保证了注入调用不会被虚拟机中恶意进程攻击。

有益效果为:

(1)使注入的系统调用不会干扰虚拟机正常的业务逻辑;

(2)在虚拟机执行被注入的系统调用时,域外程序实时地跟踪其执行过程,从而实时地提取注入调用的执行结果;

(3)能够及时发现执行的代码被篡改,且实时地在其执行前进行恢复。同时,还将检测被保护代码执行过程中所依赖的内存的完整性,包括系统调用表、内核结构体等;

(4)执行保护技术能够在虚拟机内核被篡改和攻击的情况下,保证复用的系统调用的安全运行;

除了上述以外,本方法能更加加大加强安全性,目标虚拟机执行的傀儡系统调用代码取自安全的内核镜像(存储于安全虚拟机中),复用的傀儡系统不需要依赖目标虚拟机的内核完整性。

附图说明

图1为本发明提供的一种基于虚拟机的自省自动化管理、配置与自省方法实施例流程图;

图2为本发明提供的一种基于虚拟机的自省自动化管理、配置与自省系统实施例结构图;

图3为本发明提供的系统调用执行过程举例图;

图4为本发明提供的傀儡调用注入流程图;

图5为本发明提供的内存多视图示意图。

具体实施方式

本发明给出了一种基于虚拟机的自省自动化管理、配置与自省方法及系统实施例,为了使本技术领域的人员更好地理解本发明实施例中的技术方案,并使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图对本发明中技术方案作进一步详细的说明:

本发明首先提供了基于虚拟机的自省自动化管理、配置与自省方法,如图1所示,包括:

s101、1)根据操作系统的操作进程的调用执行过程,筛选出复用级系统调用从而形成傀儡系统调用,所述傀儡系统调用由目标虚拟机执行;所述目标虚拟机包括控制模块、数据交换模块以及系统调用控制模块;

更详细地:如图3所示,linux系统kill命令的系统调用执行过程,作用是kill系统中运行的进程。这个执行的序列是在目标虚拟机内部通过strace捕获的,而系统的目的是在目标虚拟机外部实现这些干预功能。在外部仿照操作系统内部kill的执行过程,只是将其中重要的调用作为傀儡系统调用让目标虚拟机来完成。在kill程序执行过程中有很多调用被执行,在这些调用中仅仅kill调用是真正用来完成kill操作,系统仅会选择语义相关的系统调用进行复用。

s102、2)注入目标虚拟机调用,包括

①在目标虚拟机中选取傀儡程序,并根据待处理语义,选取傀儡系统调用并等待执行;调用控制模块获取当前调用执行过程且交换模块传递当前调用数据传递至控制模块并保存;

②控制模块操作数据交换模块,将需要执行的傀儡系统调用的参数数据传递到目标虚拟机中,由目标虚拟机按照需求辅助完成傀儡系统调用;

③数据交换模块将调用执行结果传递给控制模块,所述执行结果位于内核空间或用户空间;

④控制模块操作数据交换模块将傀儡程序原来调用的参数数据恢复到目标虚拟机中,之后调用控制模块会让目标虚拟机继续执行傀儡程序原来的调用;

⑤在原来调用执行后,完成傀儡系统调用返回;操作系统的控制流会返回到傀儡程序;

更详细地:系统架流程图如图4所示。左边是安全的虚拟机,右边是被操作的目标虚拟机。它们都运行于虚拟机管理层(vmm)之上,vmm为虚拟机提供虚拟化服务。系统有控制模块、数据交换模块和系统调用控制模块分别位于安全虚拟机和虚拟机管理层中。其中控制模块负责总体控制数据交换和系统调用控制模块。调用控制模块负责监听和控制vm中的调用执行。数据交换模块负责在控制模块和vm之间传递系统调用执行的参数和结果。系统流程如下:

step0:在tvm中选取一个傀儡程序,作为发出调用请求的程序。根据管理配置过程中语义处理的需要,选取需要tvm运行的系统调用并且准备所需的参数数据。

step1:等待傀儡程序执行系统调用时,调用控制模块会得到当前调用执行情况,之后通知控制模块。同时交换模块会将当前调用执行数据等传递给控制模块并保存。

step2:控制模块操作数据交换模块,将需要执行的傀儡系统调用的参数数据传递到目标虚拟机中。之后由目标虚拟机按照需求辅助完成傀儡系统调用。在调用执行过程中,调用的代码完全取自位于安全虚拟机中的安全镜像中,保证系统即使在内核调用被破坏的情况下也可以正常运行。

step3:目标虚拟机完成傀儡调用后,调用控制模块将捕获到调用执行完成,通知控制模块。

step4:数据交换模块将调用执行结果传递给控制模块。执行结果分别可能位于内核空间和用户空间。当执行的是语义解析类的调用时(如sys_read等),传递的结果则是需要调用为解析的语义结果。如果执行的是管理类调用时(如sys_chomd等)结果就是调用的执行是否成功等信息。

step5:首先,控制模块操作数据交换模块将傀儡程序原来调用的参数数据恢复到目标虚拟机中。之后调用控制模块会让目标虚拟机继续执行傀儡程序原来的调用。

step6:在原来调用执行后,完成系统调用返回。操作系统的控制流会返回到傀儡程序。

s103、3)保护虚拟机系统调用执行,包括:

①傀儡系统调用开始执行后,设置目标虚拟机中所有内核页面权限为不可执行;

②当页面被执行后,暂停目标虚拟机的运行;并根据被执行内核页面的虚拟地址找到安全虚拟机的安全镜像中对应的内存页面;将该页面写入目标虚拟机的被执行页面中并保护该内存页;

③将该页面设置为可以执行后,恢复目标虚拟机运行;

举例说明:为了保证目标虚拟机的傀儡调用指令的安全性,让目标虚拟机在执行傀儡调用期间的指令来自安全虚拟机中的安全代码库。为了实现这个目标,在傀儡调用执行期间将安全的调用指令动态地覆盖到tvm中。通过这种动态覆盖,能够让目标虚拟机在执行期间的执行的指令全部来自于安全虚拟机中的安全库。为了提高这个覆盖过程的效率,将替换的层次定在页面级。当目标虚拟机中某个页面被执行时则从安全虚拟机页面中取出与之对应的页面覆盖到目标虚拟机中。指令替换流程如下:

step0,傀儡系统调用开始执行后,设置目标虚拟机中所有内核页面权限为不可执行,当该指令被虚拟机执行时会触发vmexit异常;

step1,当页面被执行后,暂停目标虚拟机的运行。根据被执行页面的虚拟地址找到安全虚拟机的安全镜像中找到对应的内存页面,然后将该页面写入目标虚拟机的被执行页面中。之后保护该内存页,当这一页再次被执行时就不需要重新写入了,同时也可以保护该内存防止其被篡改或者攻击。

step2,将该页面设置为可以执行后,恢复目标虚拟机运行,这样目标虚拟机就可以继续执行调用了。当目标虚拟机中其他页面被执行时由于其页面权限是不可执行会重复执行step1。

还需要注意目标虚拟机调用过程中间接寻址的问题。跳转指令会改变操作系统中的控制流。其中直接寻址指令的跳转地址是写在指令区域的,通过保护代码的方法就可以保证其控制流的正确性。更详细地,攻击者将call0xc15ac75c这条指令篡改,可以通过代码覆盖恢复原来的指令。而间接寻址的指令的跳转地址存储于其他内存区域,仅仅确保代码完整是不够的。采取动态指令解析的方法解决这个问题。利用安全虚拟机的安全镜像覆盖间接寻址过程中所依赖的内存区域。当执行step1中将安全虚拟机中安全页面写入目标虚拟机时,利用distorm解析该内存页,找到其中所有的间接寻址指令。然后将其替换为int3中断,这样就可以在外部跟踪它的执行。当int3引发vmexit时,恢复对应的间接寻址指令,然后根据当前的寄存器和指令信息找到该指令依赖的内存区域地址。最后在安全镜像库中根据地址找到安全的内存内容将其覆盖到tvm中。

s104、4)隔离虚拟机内存,包括:从目标虚拟机外部跟踪目标虚拟机的vcpu调度和操作目标虚拟机内存;具体为:在注入目标虚拟机调用过程中,在向傀儡程序写入傀儡系统调用的参数数据之前,保存即将被写入内存区域之前的数据,并通过跟踪目标虚拟机中的程序的上下文切换信息,得到目标虚拟机中vcpu的调度信息。

更详细地:为了保护数据安全采取了一种基于多视图的内存保护措施。使注入的调用的内存视图与其他程序的所看到的视图不同,注入调用的数据只对傀儡程序可见,其他程序是不可见的,如图5所示。通过从目标虚拟机外部跟踪目标虚拟机的vcpu调度和操作目标虚拟机内存实现多视图机制。

首先在注入调用过程中在向傀儡程序写入傀儡调用数据之前保存被写入内存区域之前的数据。通过跟踪目标虚拟机中的程序上下文切换情况,得到目标虚拟机中vcpu的调度情况。当vcpu正在执行傀儡程序时,傀儡程序的内存是注入后的状态。而当傀儡程序被切换下去后,在目标虚拟机外部跟踪傀儡程序内存的读写情况。当傀儡程序的内存被读取时,这表明其他程序需要读取傀儡程序的数据。将傀儡程序内存重置为原来未注入数据的状态,这样保证其他程序读取到了其原来所需的数据,保证了透明性。当傀儡程序的内存被修改时,这表明有程序正在尝试修改傀儡程序的内存。如果这些修改与注入调用无关,则不做任何操作。如果是有关的,则不能让这些修改影响到注入的傀儡调用。对此,先将内存恢复为原来的样子,然后允许写入。写完后重新保存原内存数据。这样就保证了读写的是原来的内存视图,不影响注入调用的视图。

优选地,所述注入目标虚拟机调用,在注入调用过程中,当vcpu正在执行傀儡程序时,傀儡程序的内存是注入后的状态,当傀儡程序被切换后,在目标虚拟机外部跟踪傀儡程序内存的读写信息。

本发明还提供了一种基于虚拟机的自省自动化管理、配置与自省系统,包括傀儡系统调用形成模块201、目标虚拟机调用执行模202、虚拟机调用执行保护模块203以及虚拟机内存隔离模块204;

所述傀儡系统调用形成模块201用于根据操作系统的操作进程的调用执行过程,筛选出复用级系统调用从而形成傀儡系统调用,所述傀儡系统调用由目标虚拟机执行;所述目标虚拟机包括控制模块2011、数据交换模块2012以及系统调用控制模块2013;

所述目标虚拟机调用执行模块202用于注入目标虚拟机调用,包括

①在目标虚拟机中选取傀儡程序,并根据待处理语义,选取傀儡系统调用并等待执行;调用控制模块2013获取当前调用执行过程且数据交换模块2012传递当前调用数据传递至控制模块2011并保存;

②控制模块2011操作数据交换模块2012,将需要执行的傀儡系统调用的参数数据传递到目标虚拟机中,由目标虚拟机按照需求辅助完成傀儡系统调用;

③数据交换模块2012将调用执行结果传递给控制模块2011,所述执行结果位于内核空间或用户空间;

④控制模块2011操作数据交换模块将傀儡程序原来调用的参数数据恢复到目标虚拟机中,之后调用控制模块2011会让目标虚拟机继续执行傀儡程序原来的调用;

⑤在原来调用执行后,完成傀儡系统调用返回;操作系统的控制流会返回到傀儡程序;

所述虚拟机调用执行保护模块用于保护虚拟机系统调用执行,包括:

①傀儡系统调用开始执行后,设置目标虚拟机中所有内核页面权限为不可执行;

②当页面被执行后,暂停目标虚拟机的运行;并根据被执行内核页面的虚拟地址找到安全虚拟机的安全镜像中对应的内存页面;将该页面写入目标虚拟机的被执行页面中并保护该内存页;

③将该页面设置为可以执行后,恢复目标虚拟机运行;

所述虚拟机内存隔离模块隔离虚拟机内存,包括:从目标虚拟机外部跟踪目标虚拟机的vcpu调度和操作目标虚拟机内存;具体为:在注入目标虚拟机调用过程中,在向傀儡程序写入傀儡系统调用的参数数据之前,保存即将被写入内存区域之前的数据,并通过跟踪目标虚拟机中的程序的上下文切换信息,得到目标虚拟机中vcpu的调度信息。

优选地,所述注入目标虚拟机调用,在注入调用过程中,当vcpu正在执行傀儡程序时,傀儡程序的内存是注入后的状态,当傀儡程序被切换后,在目标虚拟机外部跟踪傀儡程序内存的读写信息。

本发明提出了一种安全的基于虚拟机自省的自动化管理、配置与自省方法及系统,使监控程序可以在虚拟机外部自动化地获取虚拟机运行信息和干预虚拟机的运行。核心思想是利用目标虚拟机辅助执行我们需要的傀儡系统调用从而自动化地解析语义和干预虚拟机。采用复用系统调用的策略是因为虚拟机中的大部分的重要的操作是通过系统调用完成的。因此通过利用系统调用可以自动化地处理语义鸿沟问题。

以上实施例用以说明而非限制本发明的技术方案。不脱离本发明精神和范围的任何修改或局部替换,均应涵盖在本发明的权利要求范围当中。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1