一种用于kvm虚拟机系统的安全防护方法及系统的制作方法

文档序号:10654292阅读:744来源:国知局
一种用于kvm虚拟机系统的安全防护方法及系统的制作方法【专利摘要】本发明提供一种用于KVM虚拟机系统的安全防护方法,包括下列步骤:1)周期性地调用KVM虚拟机系统Qemu接口,获取虚拟机系统的中断描述符表、系统调用表和系统调用数据;2)将获取到的虚拟机系统的中断描述符表、系统调用表和系统调用数据与备份的相应数据进行比较,用备份的数据对虚拟机系统中状态异常的内核对象进行恢复。本发明相对于基于物理机系统开发的安全工具,本发明实现了轻量级的性能开销,能够极大地节省开销,保障虚拟机的性能。本发明能够直接对状态异常的虚拟机进行修复。本发明在实现对虚拟机安全防护的同时,能够最大程度地避免虚拟机运行的中断,将对虚拟机性能的影响降到最低。【专利说明】一种用于KVM虚拟机系统的安全防护方法及系统
技术领域
[0001]本发明涉及虚拟机安全监控
技术领域
,具体的说,本发明涉及一种用于KVM(Kernel-basedVirtualMachine)虚拟机系统的安全防护方法及系统。【
背景技术
】[0002]云计算开创了软件即服务(SaaS)、平台即服务(PaaS)、基础设施即服务(IaaS)的全新服务模式,彻底改变了传统IT资源的交付和商用模式,被视为信息产业界的又一场技术变革,给传统的IT产业带来了新的发展机遇。云计算的迅猛发展促进了虚拟化技术在商业上的广泛应用。作为云计算平台的核心支撑技术,虚拟化技术将各种硬件、软件、操作系统、存储、网络以及其他的IT资源进行虚拟化,形成规模巨大的共享IT资源池,纳入云计算的管理平台。通过虚拟化技术方案,传统服务器物理资源都被抽象成可管理的逻辑资源,通过互联网像水、电和煤气一样提供给最终用户。企业用户把关键业务放在虚拟化环境中运营,在业务扩张、资源不足时只需要添加新的硬件进入资源池,无需任何即可更新和升级即可完成系统规模的扩展。[0003]然而,任何一种平台大规模上线后都会成为广大网络黑客攻击的对象,虚拟机也不例外,针对于传统计算机系统存在的种种威胁对虚拟机系统同样适用。在虚拟化环境中,虚拟机系统装载用户应用并暴露在互联网环境下运行,很显然会遭受到来自网络环境中的各种攻击和威胁。而目前虚拟机系统使用的安全工具往往是基于物理机系统开发的,其防护方法无一例外都是借助传统方式。每一个虚拟机系统都安装安全工具对物理服务器的存储空间、内存资源、CPU资源的消耗是巨大的。常规防病毒扫描和病毒代码库更新等占用大量资源的操作将在很短的时间内导致过量的系统负载。如果防病毒扫描或定期更新在所有的虚拟机上同时启动,将会引起“防病毒风暴”,造成对由内存、存储和CPU构成的基本虚拟化资源池的“哄抢”,这将严重影响虚拟机性能,阻碍虚拟机系统的正常运行。[0004]另一方面,KVM是一个基于Linux内核的开源虚拟化方案,本发明中将基于KVM技术的虚拟机系统称为KVM虚拟机系统,图1示出了KVM虚拟机系统的架构图。与Xen、VMffare等提供完整解决方案的商业化虚拟产品不同,KVM的思想是在Linux内核的基础上添加虚拟机管理模块,重用Linux内核中已经完善的进程调度、内存管理、1管理等部分,使之成为一个可以支持虚拟机运行的虚拟机监视器(VMM)。由于具备简单易用性的特点,KVM正超越Xen成为大多数企业环境首选的开源虚拟化技术。但是,目前,尚未出现专门针对KVM虚拟机系统进行优化的安全防护方案。[0005]因此,当前迫切需要一种特别适用于KVM虚拟机系统的安全防护解决方案。【
发明内容】[0006]本发明的任务是提供一种特别适用于KVM虚拟机系统的安全防护解决方案。[0007]根据本发明的一个方面,提供了一种用于KVM虚拟机系统的安全防护方法,包括下列步骤:[0008]I)周期性地调用KVM虚拟机系统Qemu接口,获取虚拟机系统的中断描述符表、系统调用表和系统调用数据;[0009]2)将获取到的虚拟机系统的中断描述符表、系统调用表和系统调用数据与备份的相应数据进行比较,用备份的数据对虚拟机系统中状态异常的内核对象进行恢复。[0010]其中,所述中断描述符表、系统调用表和系统调用数据包括:中断处理函数system_call()的内存地址、系统调用表sys_call_table的内存地址以及每个系统调用函数的内存地址。[0011]根据本发明的另一个方面,提供了一种用于KVM虚拟机系统的安全防护系统,包括安全检测模块、数据恢复模块、备份系统模块和控制模块;[0012]其中,安全检测模块用于扫描虚拟机的内核对象的关键数据;[0013]数据恢复模块用于恢复状态异常的虚拟机系统调用数据;[0014]备份系统模块用于备份虚拟机系统的内核对象的关键数据;[0015]控制模块用于调度安全检测模块和数据恢复模块的执行,控制模块接收安全检测模块的返回值并为数据恢复模块提供必要的参数;[0016]其中,所述关键数据包括:中断服务处理函数SyStem_Call()地址,系统调用表sys_caIl_tabIe()地址,以及每个系统调用函数的地址。[0017]其中,所述安全防护系统部署在KVM虚拟机系统的KVM驱动器所在宿主机的用户态空间。[0018]其中,所述检测模块还用于向虚拟机发送虚拟机状态获取请求时,调用Qemu接口cpu_physical_memory_map(),在不暂停对应虚拟机的运行的同时,将虚拟机的物理内存地址映射到检测模块的进程地址空间,获取映射内存地址空间的读指针。[0019]其中,所述恢复模块还用于在恢复状态异常的虚拟机系统调用数据时,利用调用Qemu接口cpu_physical_memory_map(),将虚拟机的物理内存地址映射到恢复模块的进程地址空间,获取相应的写指针,暂停虚拟机的运行,然后将备份数据写入虚拟机的物理内存地址。[0020]与现有技术相比,本发明具有下列技术效果:[0021]1、相对于基于物理机系统开发的安全工具,本发明实现了轻量级的性能开销,能够极大地节省开销,保障虚拟机的性能。[0022]2、本发明的方案能够直接对状态异常的虚拟机进行修复。[0023]3、本发明将安全监控系统部署在被监控的虚拟机系统外部,实现了虚拟机与安全监控系统的隔呙。[0024]4、本发明在实现对虚拟机安全防护的同时,能够最大程度地避免虚拟机运行的中断,将对虚拟机性能的影响降到最低。【附图说明】[0025]以下,结合附图来详细说明本发明的实施例,其中:[0026]图1示出了KVM虚拟机系统的架构图;[0027]图2示出了本发明一个实施例的基于KVM的安全防护方法的流程图;[0028]图3示出了本发明一个实施例的基于KVM的安全防护系统的架构图;[0029]图4示出了本发明一个实施例的基于KVM的安全防护系统的安全监控系统的安全分析执行时序图;[0030]图5示出了示出了本发明一个实施例的基于KVM的安全防护系统的安全监控系统的数据恢复执行时序图。【具体实施方式】[0031]发明人针对KVM虚拟机系统的特点进行了深入研究,Linux系统实现系统调用时利用了i386体系结构中的软中断机制。应用程序通过产生intOxSO中断调用系统调用,使程序从用户态进入到内核态执行。当系统调用发生时,CPU切换到内核态并根据中断向量0x80在中断描述符表IDT中查找到system_call()的地址。system_call()在进行必要的处理后,统一调用callsys_call_table(,631,4)来调用85^_0311_1&1316表中的系统调用服务,631存放的即系统调用号,系统调用函数执行完后将结果返回给用户态的应用程序。保障系统调用的整个流程不被破坏,即可保证系统调用的完整性,从而保证虚拟机系统的安全。换句话说,可以通过保障中断描述符表中系统调用对应的中断服务处理函数SyStem_Call()不被重定向;保障syStem_Call()中使用的系统调用表不被重定向;以及保障系统调用函数不被重定向,即可在很大程度上保证虚拟机系统的安全,并且实现轻量级的性能开销。[0032]根据本发明的一个实施例,提供了一种用于KVM虚拟机系统的安全防护方法。首先,根据制定的周期定期地调用Qemu接口获取虚拟机系统中与系统调用相关的关键数据,即中断描述符表、系统调用表和系统调用数据。然后,比较获取到的数据与备份的数据是否一致,如果不一致,则说明对应的项遭到了篡改,提取备份的数据覆盖虚拟机内存的指定地址空间,对虚拟机系统中状态异常的内核对象进行恢复。[0033]图2示出了本实施例的用于KVM虚拟机系统的安全防护方法的流程图,该流程包括下列步骤:[0034]步骤1:根据客户机的8}^七61]1.1]^。,获取85^_0311_131316的地址。[0035]步骤2:根据被监控虚拟机的8}^丨6111.1]^。文件中的85^_0311_131316地址,通过开源自省库LibvmiAPI映射sys_call_table所在的内存页面,并返回该页面的可读指针。[0036]步骤3:通过系统调用号_置_<^611从sys_call_table中获取指定系统调用函数sys_open()的地址addrl。[0037]步骤4:将所获取的系统调用函数sys_open()的地址addrI,与系统的相应地址快照addr2作对比,如果8(1(11'1与3(1(^2不一致,说明系统调用被重定向,进入步骤5,如果addrI与addr2—致,说明系统调用正常,对虚拟机的本轮监控结束。[0038]步骤5:暂停虚拟机。[0039]步骤6:启动恢复流程。[0040]步骤7:利用备份的址快照addr2恢复被篡改的系统调用函数SyS_0pen()的地址。对虚拟机的本轮监控结束。[0041]进一步地,在一个优选实施例中,首先读取被监控虚拟机系统的idtr寄存器,idtr寄存器用于存放系统中断描述符表(IDT)的内存地址,通过idtr能够获取系统中断描述符表的内容;根据中断向量号int0x80计算得到系统调用对应的中断处理函数system_call()的内存地址8(1(11'1。提取备份的85^丨6111_0311()的地址快照addr2,将8(1(11'1与3(1(^2进行比对,如果addrI和addr2不一致则说明addrI被篡改,报告异常,并启动恢复流程,恢复中断处理函数system_calI()的地址。若system_calI()内存地址检测结果正常,获取sys_cal1_table的地址,以进一步检查system_call()函数体是否被篡改。本实施例中,根据得到的system_call()的内存地址,利用Libvmi函数库调用Qemu接口cpu_physical_memory_map(),将SyStem_Call()函数体所在的物理内存页面映射到宿主机用户态空间(即映射到安全防护进程的进程地址空间),并返回该内存空间的可读指针,然后读取到SyS_call()函数的二进制指令。通过反汇编system_call()函数可以得知,system_call()只有在调用系统调用处使用了call指令,x86call指令的二进制格式为\xff\xl4\x85,因此可以从sys_call()函数体开始进行搜索得到存放syS_call_table的地址addrl。抽取备份的地址快照addr2进行对比。如果8(1(11'1与3(1(^2不一致,则说明被监控虚拟机系统中的sys_call()函数体已被篡改,启动恢复流程恢复sys_caIl_tabIe的地址。在恢复状态异常的虚拟机系统调用数据时,利用调用Qemu接口cpu_physical_memory_map(),将虚拟机的物理内存地址映射到恢复模块的进程地址空间,获取相应的写指针,暂停虚拟机的运行,然后将备份数据写入虚拟机的物理内存地址。[0042]图3示出了示出了本发明一个实施例的基于KVM的安全防护系统的架构图。参考图3,该安全防护系统VM-monitor部署在KVM所在宿主机的用户态空间,有效地利用了KVM的隔离性与虚拟机VM相隔离。所述基于KVM的安全防护系统包括安全检测模块、数据恢复模块、备份系统模块和控制模块。[0043]其中,安全检测模块用于扫描虚拟机的内核对象数据,这其中包括系统调用对应的中断服务处理函数system_call()地址、system_call()中调用的系统调用表sys_call_table()地址以及系统调用表中每个系统调用函数的地址,通过与备份的基准数据的对比分析这些地址数据状态是否异常。[0044]数据恢复模块用于恢复状态异常的虚拟机系统调用数据,安全检测模块检测到状态异常的系统调用后,经由控制模块向数据恢复模块传递对应的参数,数据恢复模块根据传入的参数通过写虚拟机内存的方式恢复虚拟机系统调用的状态。[0045]备份系统模块用于备份虚拟机系统的内核对象的关键数据,这些关键数据包括:中断服务处理函数system_call()地址,系统调用表sys_call_table()地址,以及每个系统调用函数的地址。这些备份数据将为安全检测模块和数据恢复模块的功能实现提供必要的基准数据。[0046]控制模块用于调度安全检测模块和数据恢复模块的执行,控制模块接收安全检测模块的返回值并为数据恢复模块提供必要的参数。[0047]图4示出了本发明一个实施例的基于KVM的安全防护系统的安全监控系统的安全分析执行时序图,参考图4,进行安全分析时,首先控制模块向检测模块发送虚拟机状态检测请求。然后检测模块再向KVM虚拟机系统的Qemu接口发送虚拟机状态获取请求。Qemu接口接收到虚拟机状态获取请求后,映射Guest内存空间,然后返回所映射的内存地址空间的指针。检测模块根据所接收的指针读取虚拟机内存状态并进行分析,最后将分析结果返回控制丰吴块。[0048]图5示出了示出了本发明一个实施例的基于KVM的安全防护系统的安全监控系统的数据恢复执行时序图。首先,控制模块通过与检测模块交互(根据图4的时序完成交互),获得虚拟机完整性的分析结果。当分析结果为虚拟机状态异常时,控制模块向恢复模块发送虚拟机异常状态恢复请求,然后恢复模块读取备份系统模块中的相应备份,将其写入虚拟机内存以恢复虚拟机状态。最后,恢复模块向控制模块返回恢复结果。[0049]进一步地,在一个优选实施例中,检测模块发送虚拟机状态获取请求时,利用Libvmi函数库调用Qemu接口cpu_physical_memory_map(),将虚拟机的物理内存地址映射到检测模块的进程地址空间,然后返回所映射的内存地址空间的指针,该指针的属性为读指针,此时虚拟机仍保持运行状态。检测模块根据所接收的指针在自身的进程地址空间读取虚拟机内存状态并进行分析,再将分析结果返回控制模块。恢复模块在收到虚拟机异常状态恢复请求后,从备份系统模块读取对应的备份数据,然后利用Libvmi函数库调用Qemu接口cpu_physical_memory_map(),将虚拟机的物理内存地址映射到恢复模块的进程地址空间,Qemu接口返回相应的写指针,同时暂停虚拟机的运行。恢复模块根据返回的写指针将备份数据写入虚拟机的物理内存地址,从而使虚拟机的状态恢复正常。最后恢复虚拟机的运行。[0050]上述优选实施例能够在实现对虚拟机安全防护的同时,最大程度地避免虚拟机运行的中断,将对虚拟机性能的影响降到最低。[0051]最后应说明的是,以上实施例仅用以描述本发明的技术方案而不是对本技术方法进行限制,本发明在应用上可以延伸为其它的修改、变化、应用和实施例,并且因此认为所有这样的修改、变化、应用、实施例都在本发明的精神和教导范围内。【主权项】1.一种用于KVM虚拟机系统的安全防护方法,包括下列步骤:1)周期性地调用KVM虚拟机系统Qemu接口,获取虚拟机系统的中断描述符表、系统调用表和系统调用数据;2)将获取到的虚拟机系统的中断描述符表、系统调用表和系统调用数据与备份的相应数据进行比较,判断虚拟机系统中是否存在状态异常。2.根据权利要求1所述的用于KVM虚拟机系统的安全防护方法,其特征在于,所述中断描述符表数据包括:中断服务处理函数system_Cal1的内存地址;所述系统调用表数据包括:系统调用表SyS_Call_table的内存地址;所述系统调用数据包括:每个系统调用函数的内存地址。3.根据权利要求1所述的用于KVM虚拟机系统的安全防护方法,其特征在于,所述步骤I)、2)由部署在KVM虚拟机系统的KVM驱动器所在宿主机的用户态空间的安全防护系统执行。4.根据权利要求2所述的用于KVM虚拟机系统的安全防护方法,其特征在于,所述步骤I)还包括:向虚拟机发送虚拟机状态获取请求,调用Qemu接口cpu_physical_memory_map(),在不暂停对应虚拟机的运行的同时,将虚拟机的物理内存地址映射到检测模块的进程地址空间,获取映射内存地址空间的读指针。5.根据权利要求4所述的用于KVM虚拟机系统的安全防护方法,其特征在于,当所述步骤2)中判断虚拟机系统中存在状态异常时,执行步骤:3)用备份的数据对虚拟机系统中状态异常的内核对象进行恢复。6.根据权利要求5所述的用于KVM虚拟机系统的安全防护方法,其特征在于,所述步骤3)中,对状态异常的内核对象进行恢复包括:利用调用Qemu接口cpu_physical_memory_map(),将虚拟机的物理内存地址映射到恢复模块的进程地址空间,获取相应的写指针,暂停虚拟机的运行,然后将备份数据写入虚拟机的物理内存地址。7.—种用于KVM虚拟机系统的安全防护系统,包括:安全检测模块,用于周期性地调用KVM虚拟机系统Qemu接口,获取虚拟机系统的中断描述符表、系统调用表和系统调用数据;和状态异常判断模块;用于将获取到的虚拟机系统的中断描述符表、系统调用表和系统调用数据与备份的相应数据进行比较,判断虚拟机系统中是否存在状态异常。8.根据权利要求7所述的用于KVM虚拟机系统的安全防护系统,其特征在于,还包括:备份系统模块,用于备份虚拟机系统的内核对象的关键数据;所述关键数据包括:虚拟机系统的中断描述符表、系统调用表和系统调用数据;所述中断描述符表数据包括:中断服务处理函数system_ca11()的内存地址;所述系统调用表数据包括:系统调用表sys_caIl_tabIe的内存地址;所述系统调用数据包括:每个系统调用函数的内存地址;数据恢复模块,用于恢复状态异常的虚拟机系统调用数据;和控制模块,用于调度安全检测模块和数据恢复模块的执行,控制模块接收安全检测模块的返回值并为数据恢复模块提供必要的参数。9.根据权利要求8所述的用于KVM虚拟机系统的安全防护系统,其特征在于,所述安全防护系统部署在KVM虚拟机系统的KVM驱动器所在宿主机的用户态空间。10.根据权利要求8所述的用于KVM虚拟机系统的安全防护系统,其特征在于,所述安全检测模块还用于向虚拟机发送虚拟机状态获取请求时,调用Qemu接口cpu_physical_memory_map(),在不暂停对应虚拟机的运行的同时,将虚拟机的物理内存地址映射到检测模块的进程地址空间,获取映射内存地址空间的读指针;所述数据恢复模块还用于在恢复状态异常的虚拟机系统调用数据时,利用调用Qemu接口cpu_physical_memory_map(),将虚拟机的物理内存地址映射到恢复模块的进程地址空间,获取相应的写指针,暂停虚拟机的运行,然后将备份数据写入虚拟机的物理内存地址。【文档编号】G06F21/57GK106020932SQ201610334913【公开日】2016年10月12日【申请日】2016年5月19日【发明人】于磊,唐宏伟,赵晓芳【申请人】中国科学院计算技术研究所
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1