法律状态公告日
法律状态信息
法律状态
2018-01-26
授权
授权
2015-08-19
实质审查的生效 IPC(主分类):G06F21/62 申请日:20150416
实质审查的生效
2015-07-22
公开
公开
技术领域
本发明属于云计算和信息安全技术领域,更具体地,涉及一种基于KVM 的虚拟机文件强制访问控制方法及系统。
背景技术
基于内核的虚拟机(Kernel-based Virtual Machine,以下简称KVM), 是一种用于Linux内核中的虚拟化基础设施,可以将Linux内核转化为一 个虚拟机管理器。KVM自Linux 2.6.20之后集成在Linux的各个主要发行 版本中,使用Linux自身的调度器进行管理,所以相对于Xen,其核心源码 很少。
KVM是基于X86架构,支持硬件虚拟化(Intel VT或AMD-V)的Linux 全虚拟解决方案,包括一个为处理器提供底层虚拟化可加载的核心模块和 一个经过修改的Qemu软件作为虚拟机上层控制和界面。KVM支持全虚拟化 技术,即在不改变操作系统镜像的情况下运行多个虚拟机,并为每个虚拟 机配置个性化硬件环境。
由于KVM作为Linux的一个内核模块存在,因此对其修改和部署不需 要重新编译内核,也不需要对当前内核做任何修改,只是几个可以动态加 载的驱动模块。KVM结构更加精简、代码量更小,所以出错的可能性更小。 并且在某些方面,性能比Xen更胜一筹。鉴于以上优点,KVM作为一种全虚 拟化技术已经获得了广泛的支持。
传统KVM虚拟机的文件访问控制只能基于操作系统实现,例如SELinux 等技术,通过操作系统自身来限制文件访问行为。这种方法有时限于操作 系统自身的漏洞而易于被攻击者攻击,达不到文件强制访问控制的目的。
发明内容
针对现有技术的以上缺陷或改进需求,本发明提供一种基于KVM的虚 拟机文件强制访问控制方法及系统,采用KVM自省的方式监控虚拟机的系 统调用,并通过语义解析的方法来还原虚拟机中的文件访问。本发明包括 系统调用截获、语义解析和策略分析三个部分。系统调用截获是指当虚拟 机内部发生系统调用时,发生VMEXIT(即虚拟机退出),陷入KVM中;语义 解析是指当虚拟机陷入KVM后,通过虚拟处理器(VCPU)中的寄存器信息 还原出虚拟机陷入前的状态信息;策略分析根据虚拟机陷入前的信息与系 统调用信息来确定是否对文件进行强制访问控制。本发明整个过程对虚拟 机完全透明,这样保证即使虚拟机内部操作系统遭受漏洞攻击,也能过通 过本发明获取文件访问信息,实施对文件的强制访问控制。
为实现上述目的,根据本发明的一个方面,提供一种基于KVM的虚拟 机文件强制访问控制方法,包括以下步骤:
步骤1在前端指定文件访问控制策略;
步骤2将虚拟处理器中特殊模块寄存器的值保存,并设置其值为0;
步骤3当虚拟机发生系统调用时,在所述虚拟处理器中设置的所述特 殊模块寄存器的值被加载到CS寄存器中,系统调用号被压入EAX寄存器中, 所述虚拟机切入内核态;
步骤4CPU根据代码段为0的地址寻址,产生一般保护错误,发生虚 拟机退出,虚拟机陷入KVM;
步骤5为所述KVM添加处理所述一般保护错误的代码,分析出错原因, 如果出错原因是由于设定CS寄存器值为0引起的,则执行步骤6;否则, 将原先保存的所述特殊模块寄存器的值写入所述CS寄存器,执行虚拟机进 入,恢复虚拟机执行;
步骤6屏蔽所述虚拟处理器中保存的堆栈段寄存器ESP字段的低13位 得到thread_info结构体的地址;
步骤7根据所述thread_info结构体的地址读取task_struct结构体 的地址,以获取进程控制块的信息;
步骤8重构所述进程控制块内存,获得文件系统信息,遍历进程文件 目录,获取进程打开所有文件的绝对路径;
步骤9获取所述虚拟处理器中的EAX字段的值,该值对应虚拟机所发 生系统调用的系统调用号,如果该值为3或4,则读取虚拟机中发生系统调 用的文件描述符,转入执行步骤10,否则将原先保存的所述特殊模块寄存 器的值写入所述CS寄存器,执行虚拟机进入,恢复虚拟机执行;
步骤10根据所述文件描述符获取发生读写文件的绝对路径及对文件 的读写模式,对比所述文件访问控制策略,如果所述文件访问控制策略允 许该文件操作,则将原先保存的所述特殊模块寄存器的值写入所述CS寄存 器,执行虚拟机进入,恢复虚拟机执行,否则转入执行步骤11;
步骤11执行文件强制访问控制,恢复虚拟机系统调用堆栈,并执行虚 拟机进入,系统调用被禁止执行。
为实现上述目的,根据本发明的另一方面,提供一种基于KVM的虚拟 机文件强制访问控制系统,包括系统调用截获模块,语义解析模块和策略 分析模块,其中,所述系统调用截获模块用于当虚拟机内部发生系统调用 时,发生虚拟机退出,陷入KVM中;所述语义解析模块用于当虚拟机陷入 KVM后,通过虚拟处理器中的寄存器信息还原出虚拟机陷入前的状态信息; 所述策略分析模块用于根据虚拟机陷入前的状态信息与用户自定义策略对 比决定是否对文件进行访问控制。
总体而言,通过本发明所构思的以上技术方案与现有技术相比,具有 以下有益效果:
1、普通访问控制方法需要对每台虚拟机进行单独设置,一旦访问控制 策略发生变化,需要对每台虚拟机进行修改。在本发明中,云管理员只需 要制定对文件的访问控制策略,即可实现对一个节点的多台虚拟机进行批 量化定制;
2、本发明在KVM中截获虚拟机中发生的系统调用,并通过语义解析还 原虚拟机中的系统调用信息来实现文件的强制访问控制。整个访问控制过 程对虚拟机透明,相比于普通访问控制方法,可以防止发生由于虚拟机操 作系统漏洞或用户操作不当而导致的强制访问控制失败。
附图说明
图1为本发明虚拟机系统调用截获的原理示意图;
图2为本发明KVM虚拟机文件强制访问系统结构图;
图3为本发明KVM虚拟机文件强制访问方法的流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图 及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体 实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的 本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可 以相互组合。
图1所示为本发明虚拟机系统调用截获的原理示意图。应用程序本质 上是一系列的系统调用的集合。当应用程序执行系统调用时(现代操作系 统一般采用快速系统调用方式),将特殊模块寄存器SYSENTER_CS_MSR的值 装入CS寄存器中,由于在KVM初始化虚拟机的过程中,将特殊模块寄存器 SYSENTER_CS_MSR的值设置为0,所以此时CS寄存器的值为0。CPU寻址CS: IP即代码段为0的地址会发生一般保护错误(#GP),虚拟机陷入KVM,实 现对系统调用的截获。当完成对系统调用的语义解析后,重新进入虚拟机, 继续执行应用程序。
图2所示为本发明KVM虚拟机文件强制访问系统结构图,主要包括系 统调用截获模块,语义解析模块和策略分析模块。系统调用截获模块用于 当虚拟机内部发生系统调用时,发生VMEXIT,陷入KVM中;语义解析模块 用于当虚拟机陷入KVM后,通过VCPU中的寄存器信息还原出虚拟机陷入前 的状态信息;策略分析模块根据虚拟机陷入前的状态信息与用户自定义策 略对比决定是否对文件进行访问控制。本发明具有两种模式:普通模式和 访问控制模式。普通模式下,不对系统调用截获和语义解析,不进行文件 访问控制;访问控制模式下,截获发生的系统调用并进行语义解析,并对 文件进行访问控制。
图3所示为本发明KVM虚拟机文件强制访问方法的流程图,以禁止文 件读写为例,具体包括以下步骤:
步骤1由云管理员在前端指定相应策略,在本发明实施例中,包括禁 止创建文件、禁止修改文件、禁止读取文件以及禁止写文件四条策略,对 虚拟机中的文件进行强制访问控制。该策略由Qemu Monitor通过ioctl传 递给KVM。
步骤2云管理员启动访问控制模式后,将原来VCPU中的 SYSENTER_CS_MSR字段保存,并设置其值为0。
步骤3当虚拟机发生系统调用时,在VCPU中设置的SYSENTER_CS_MSR 被加载到CS寄存器中,系统调用号被压入EAX寄存器中,虚拟机切入内核 态。
步骤4CPU根据CS:IP寻址,由于此时CS中的值为0,产生一般保护 错误#GP,发生VMEXIT,虚拟机陷入KVM。
步骤5为KVM添加处理一般保护错误#GP的代码,分析出错原因。如 果出错原因是由于设定CS寄存器值为0引起的,则执行步骤6;否则,不 做任何处理,将原先保存的SYSENTER_CS_MSR写入CS寄存器,执行VMENTRY (虚拟机进入),恢复虚拟机执行。
步骤6发生VMEXIT时,虚拟机处于内核态。此时VCPU中保存的堆栈 段寄存器ESP的值为内核栈的栈指针。由于内核栈与thread_info结构体 共享8KB的存储空间,屏蔽ESP字段的低13位(ESP & 0xFFFFE000)即可得 到thread_info结构体的地址。
步骤7根据thread_info结构体的地址读取task_struct结构体的地 址,这样就可获取进程控制块的信息。
步骤8重构进程控制块内存,可以获得文件系统信息。遍历进程文件 目录,可以获取到进程打开所有文件的绝对路径。
步骤9获取VCPU中的EAX字段的值,该值对应虚拟机所发生系统调用 的系统调用号,如果该值为3(read)或4(write),则读取虚拟机中发 生系统调用的文件描述符,转入执行步骤10。否则不做任何处理,将原先 保存的SYSENTER_CS_MSR值写入CS寄存器,执行VMENTRY,恢复虚拟机执 行。
步骤10根据上述步骤9中获取的文件描述符获取发生读写文件的绝对 路径及对文件的读写模式。对比云管理员制定的文件访问控制策略,如果 策略允许该文件操作,则不做任何处理,将原先保存的SYSENTER_CS_MSR 值写入CS段寄存器,执行VMENTRY,恢复虚拟机执行。否则转入执行步骤 11。
步骤11执行文件强制访问控制,恢复虚拟机系统调用堆栈,并执行 VMENTRY,该系统调用被禁止执行。
本领域的技术人员容易理解,以上所述仅为本发明的较佳实施例而已, 并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等 同替换和改进等,均应包含在本发明的保护范围之内。
机译: 一种方法,用于在具有相同操作系统版本的虚拟机的公共区域中共享相同的文件,并在虚拟机尝试修改共享的相同文件的副本时将共享的相同文件的副本放置在相应虚拟机的私有区域中。共享相同的文件
机译: 基于KVM的具有备份虚拟网络接口卡的虚拟机部署方法,装置和系统
机译: 将虚拟机从头迁移到第二主机,将虚拟机的虚拟单元映射到存储在逻辑存储号中的映射文件的计算方法和系统。通过映射文件创建虚拟机。