-
云计算的发展使业界更加关注云计算平台的安全性[1]。Windows是虚拟机主流操作系统之一,而目前Windows平台上存在多种恶意程序,如间谍软件[2]、后门程序[3]等,可通过远程代码注入等方式入侵系统进程。内核态恶意代码[4]具有更高特权级,能够劫持进程系统调用的执行路径,窃取进程内存数据。美国国家标准机构NIST发布的《完全虚拟化安全指南》[5]指出,传统主机所面临的安全威胁同样适用于云环境下的虚拟机。由于云平台上用户、信息、资源等高度集中,而进程是操作系统资源分配的基本单位[6],若恶意代码对虚拟机进程进行攻击,则会严重威胁云平台的安全。因此,研究云平台虚拟机进程的安全防护具有重要现实意义。
传统的基于主机的进程防护方法同样可用于云环境下的虚拟机,主要利用内核态的监控代理实施权限限制、系统访问控制等,实现对系统进程的安全防护。文献[7]为Windows系统核心资源提供了细粒度的权限控制,文献[8]利用系统调用接口服务随机化防止代码注入攻击。但该类方法易被内核态rootkit攻击或绕过。在虚拟化环境下,虚拟机监视器(virtual machine monitor,VMM)具有比虚拟机更高的特权级,可对虚拟机进程提供更高的安全性。Overshadow[9]可以将受保护的虚拟机进程加密,但在闭源的Windows虚拟机中应用能力有限。文献[10]将虚拟机进程内存数据隐藏以防止其他进程访问,但受保护进程无法与其他进程传递数据。文献[11]构建的虚拟机进程内存防护系统突破了上述限制,Linux虚拟机第三方进程可读取但禁止修改受保护进程内存数据,所以受保护进程不能与其他进程进行完全的数据读写共享。其他如Flicker[12]、CHAOS[13]、Proxos[14]等原型系统需要特定的受保护进程与防护系统的配合,但不能任意指定进程进行防护。
针对Windows虚拟机进程面临的威胁及现有方法的不足,本文提出影子内核机制以透明的保护虚拟机进程系统调用执行路径,利用KVM和监控代理监控虚拟机中访问进程内存的行为,并构建影子监控代理以保证监控代理的安全性,最后实现了原型系统VMPPS。VMPPS能够指定Windows虚拟机中任意进程,对其系统调用执行路径及内存进行安全防护。同时,为防止VMM自身存在的漏洞也可能被攻击者利用,导致虚拟机逃逸[15-16]等问题,本文引入HyperSafe[17]、HyperDomain[18]和Hypercheck[19]等方案加固VMM。
HTML
-
VMPPS系统测试侧重两方面:1)防护能力;2)系统性能。实验环境:硬件配置为华为Tecal RH2288H v2、Intel Xeon E5-2609、2.4 G主频、32 GB内存;宿主机为Ubuntu 12.04、内核版本3.10.1,KVM及QEMU版本分别为3.10.1、1.7.1;虚拟机为32位Windows 7 SP1操作系统。
-
本文收集了多个样本,分别对进程系统调用执行路径安全防护功能、进程内存安全防护功能及监控代理自身安全防护功能的有效性进行了测试,同时自行实现了恶意驱动模块MalDri弥补样本测试功能的不足。测试样本名称、功能及测试结果如表 1所示。
样本名称 功能 实验结果 关闭 开启 ByteHook 挂钩SSDT表项,劫持系统调用 成功 无效 RegKeyHide 挂钩SSDT表项,劫持系统调用 成功 无效 Migbot.sys 深度内联Hook,劫持系统调用 成功 无效 Sysenter.sys 修改SYSENTER_EIP寄存器,劫持系统调用入口 成功 失败 CHeat Engine 查看进程内存,动态修改内存代码 成功 失败 windbg 调试分析进程内存 成功 失败 PCHunter 内核hook检测软件,检测系统调用完整性 成功 无效 MalDri 挂钩系统调用内部调用函数,根据EPROCESS结构体读写进程内存,修改监控代理代码及数据 成功 失败 以WINWORD.EXE进程作为受保护进程,CHeat Engine作为测试样本为例,对原型系统VMPPS有效性的测试过程分为两个步骤:
1)关闭VMPPS,运行样本CHeat Engine后,可查看并修改WINWORD.EXE进程内存内容,结果如图 4所示。其中,右下角标示为WINWORD.EXE进程内存对应的正在编辑的内容,中间标记为对当前WORD代码的反汇编结果。
2)开启VMPPS,运行样本CHeat Engine,发现无法查看或修改WINWORD.EXE进程内存数据,结果如图 5所示。
需要指出,开启原型系统VMPPS时,样本ByteHook、RegKeyHide和Migbot.sys依然能够挂钩原内核系统调用,但影子内核绕过了原内核系统调用的执行流程,因此受保护进程能够正常执行。实验结果表明,VMPPS利用影子内核机制可以透明的为虚拟机提供有效的进程系统调用执行路径的安全防护,通过KVM和监控代理可对进程的内存安全进行防护。
本文对前文所述方法进行了多方面的对比,如表 2所示。可以看出,现有一些虚拟机进程防护方法存在着不足,如无法全面防护虚拟机系统调用执行路径和进程内存、影响进程通信或可被恶意软件绕过等。而VMPPS有效弥补了上述不足,全面防护了任意虚拟机进程系统调用执行路径和内存,并保证了自身安全性。
方法 系统调用执行路径防护 内存
防护进程间通信 任意进程防护 恶意软件不可绕过 Overshadow × √ × √ × Flicker × √ √ × √ RandSys √ × √ √ × 文献[10] × √ × √ √ VMPPS √ √ √ √ √ -
原型系统VMPPS在原有KVM虚拟化架构中添加了额外功能模块与处理流程,干预了原系统正常的执行流程,会带来一定的性能损失。本文设计了相关测试,分别测试原型系统对虚拟机进程切换、计算密集型、I/O密集型及整体性能的影响,性能损耗率=(部署VMPPS-未部署VMPPS)/未部署VMPPS,性能测试单位为时间(ms)。进程创建、计算密集型、I/O密集型及整体性能对应的基本测试实例为:创建记事本进程、空循环一百万次、写入128 K文件内容及综合测试(利用可执行文件创建空循环一百万次进程),测试结果如图 6~图 9所示。
根据各项指标测试数据可以看出,对于系统大量的进程创建动作,VMPPS会带来一定的性能损失,各测试项的性能损耗率间的平均值约为0.6,这主要是因为密集的进程创建动作会带来大量的系统调用及进程切换的开销,使原型系统在短时间内达到一个比较高的值,但操作系统正常运行时不会出现这种情况。在平稳运行的系统中,VMPPS对计算密集型和I/O密集型进程的运行几乎没有影响,但是由于I/O缓冲区大小、磁盘运转等系统参数的影响,会使I/O密集型进程的性能出现一定的波动。综合测试的性能消耗主要源于进程创建过程,在可接受范围内,但由于利用可执行文件创建进程涉及I/O过程,所以性能损耗会出现一定的波动。