自云计算诞生以来,虚拟机监控一直是一个炙手可热的话题。从云服务商的角度,他们要尽可能地获取更多的关于VM(Virtual Machine)运行状态的信息,从而保证每一台虚拟机健康运行,继而保正整个云计算平台的安全可靠。从用户的角度,他们也需要了解自己虚拟机的运行状态。因此,虚拟机监控是必不可少的,本文章将介绍当前针对云平台虚拟机监控的相关技术。
1.安全监控架构研究
近年来,很多学者致力于基于虚报机的安全监控架构的研究。目前,存在两种主流的虚拟机安全监控架构:一种是基于虚拟机自省技术的监控架构,即将监控模块放在Hypervisor中,通过虚拟机自省技术对其他虚拟机进行检测;另一种是基于虚拟化的安全主动监控架构,它通过在被监控的虚拟机中插入一些钩子函数(hook),从而截获系统状态的改变,并跳转到单独的安全虚拟机中进行监控管理。
2.安全监控的分类
从虚拟机安全监护实现的角度来看,基于虚拟化安全监控的相关研究可以分为两大类,即内部监控和外部监控。内部监控是指在虚拟机中加载内核模块来拦截目标虚拟机的内部事件,而内核模块的安全通过Hypervisor来进行保护,外部监控是指通过Hypervisor对目标虚拟机中的事件进行拦裁,从而在虚拟机外部进行检测。
(1)内部监控
基于虚拟化的内部监挖模型的典型代表系统是Lares和SIM,下图描述了Lares内部监控系统的架构。
在Lares内部监控系统的架构中,安全工具部署在一个隔离的虚拟机中,该虚拟机所在的环境在理论上被认为是安全的,称为安全域,如Xen的管理虚拟机。被监控的客户操作系统运行在目标虚拟机内,同时该目标虚拟机中会部署一种至关重要的工具——钩子函数。钩子函数用于拦截某些事件,如进程创建、文件读写等。由于客户操作系统不可信,这些钩子函数需要得到特殊的保护。这些钩子函数在加载到客户操作系统时,向Hypervisor通知其占据的内存空间,使Hypervisor中的内存保护模块能够根据钩子函数所在的内存页面对其进行保护。Hypervisor中还有一个跳转模块,作为目标虚拟机和安全城之间通信的桥梁。为了防止恶意攻击者篡改,钩子函数和统转模块必须是自包含的,不能识用内核的其他函数,同时它们都必须很简单,可以方便地被内存保护模块所保护。
利用该架构进行一次事件拦截响应的过程为:当钩子函数探测到目标虚拟机中发生了某些事件时,它会主动陷入到Hypervisor中去,通过Hypervisor中的跳转模块,将目标虚拟机中发生的事件传遇给安全域中的安全驱动,进而传递给安全工具:然后,安全工工具根据发生事件执行某种安全策略,产生响应,并将响应发送给安全驱动,从而对目标虚拟机中的事件采取响应措施。
这种架构的优势在于,事件截获在虚拟机中实现,而且可以直接获取操作系统的语义。减少了性能开销。然面,这种方式也存在不足:一方面,它需要在客户操作系统中插入内核模块,造成对目标虚拟机的监控不具有适明性,钩子函数也需要Hypervisor提供足够的保护以防止客户机修改。另一方面,内存保护模块和跳转模块与目标虚拟机的操作系统类型以及版本是紧密相关的,不具有通用性,这些不足限制了内部监控架构的进一步研究和使用。
(2)外部监控
基于虚拟化的外部监控模型的典型代表是Liveware,下图描述了Livewire外部监控系统的架构。
对比前一张图片和上图可以看出,外部监控架构中安全工具和客户操作系统的部署和内部监控架构相同,分别位于两个彼此隔离的虚拟机中,增强了安全工具的安全性。与内部监控架构不同的是,外部监控架构的监控点部署在Hypervisor中,它不仅是安全城中的安全工具和目标虚拟机之间通信的桥梁,还用于拦截目标虚拟机中发生的事件,并重构出高级语义,然后传递给目标虚拟机。由于Hypervisor位于目标虚拟机的底层,监控点可以观测到目标虚拟机的秋态(如CPU的信息、内存项面等),故在Hypervisor的输助下,安全工具能够对目标虚拟机进行检测。
根据上述事件拦截响应过程可知,外部监控必须包含两种基本功能:事件拦截和语义重构。事件拦截是指拦截虚拟机中发生的某些事件,从而触发安全工具对其进行检测。语义重构是指由低级语义(二进制)重构出高级语义(操作系统级语义)。由于Hypervisor位于目标虚拟机的下层,它只能获取低级语义(如寄存器和内存页面)。监控工具是针对操作系统层的语义,因此两者之间存在语义鸿沟。为了使监控工具能够理解目标虚拟机中的事件,必须对其进行语义重构。语义重构的过程与客户操作系统的类型和版本密切相关,且目前并没有一种万全之策彻底解决语义重构的问题。
从以上的研究可以看出,现有的工作多集中在利用Hypervisor来保护目标虚拟机中的钩子函数或从目标虚拟机外部查看内部状态。虽然这两种监控方式都能很好地实现虚拟机的安全监控,但是仍然存在一些不足,需要研究者对其进行后续研究。其不足之处主要体现在两个方面:第一,现有的研究工作缺乏通用性;第二,虚拟机监控与现有安全工具存在融合问题。
1)通用性问题:在云计算环境中.单个物理节点上会同时运行多个虚拟机,并且虚拟机中的客户操作系统是多种多样的(可能会有Linux、Windows等)监控工具需要对各种不同类型的虚拟机进行有效的监控。然而,目前所有的监控工具都是针对特定类型的客户操作系统实现特定的安全功能,当在某个物理节点上创建一个新的虚拟机,或者从另外一个物理节点上迁移新的虚拟机时,特定的监控工具就会失效。因此现有的监控工具不能满足监控通用性的要求,构建通用的安全监控机制十分必要。
2)虚拟机监控与现有安全工具磁合的问题:在传统环境下,为了提高计算系统的安全性,研究者开发了大量的安全工具。在虚拟化环境下基于Hypervisor可以更好地监控虚拟机的内部运行状态。然而,Hypervisor获取的是二进制语义,传统的安全工具无法直接使用。因此,为了更好地利用已有的安全工具,基于虚拟化的安全监控需要与现有的安全工具进行有效的融合。一方面,利用语义恢复来实现从二进制语义到系统级语义的转换,同时为安全工具提供标准的调用接口,使安全工具直接或者和作修改来适应于虚拟计算环境;另一方面,语义恢复给安全工具带来了额外的性能开销,为了使安全监控具有更大的实用价值,研究者需要考虑在语义信息的全面性和系统开销之间进行综合权衡。