-
随着云计算的发展,云平台的安全问题成为业界关心的核心问题[1]。由于云平台资源、信息高度集中,虚拟机的安全直接威胁着平台的安全[2]。MITC攻击[3]就是一种新型的云环境下利用虚拟机窃取云平台数据的攻击,此外还有各种勒索软件、Cloud weaponization等均可通过虚拟机对云平台造成攻击,窃取租户的数据,甚至破坏整个平台[4]。传统主机面临的安全威胁,在虚拟化环境下的虚拟机同样存在[5]。目前针对操作系统的恶意软件、病毒、rootkit层出不穷,严重威胁着操作系统的安全。进程作为操作系统资源分配和代码执行的基本单位,一旦被攻击,会直接威胁操作系统的安全[16]。因此,研究虚拟机中的进程防护意义重大。
目前,针对虚拟机的进程防护大部分是从全局的角度去检测恶意进程,缺乏针对特定进程的防护方案。文献[6]通过检测CR3寄存器的变化拦截进程切换动作,在VMM中调用第三方的安全模块对进程进行分析。这种方案一方面只能在恶意进程运行一段时间后分析出恶意进程的存在,存在滞后性,不能针对特定进程做防护;另一方面,每次进程切换都会发生陷入,然后传递信息到宿主机用户空间进行分析,性能损耗严重。文献[7]通过虚拟机内部代理驱动设置KiFastCallEntry和KiSystemService函数中调用KiSystemServiceRepeat函数的点为0xFFFFFFFF,使该函数被调用的时候发生陷入,在VMM中做陷入处理分析。此方式虽然可以保护指定进程,但是一方面存在虚拟机代理,代理本身安全无法保证;另一方面,陷入次数过于频繁,同样存在性能问题。文献[8]通过设置SSDT(system service descriptor table)所在页面为只读页面,在发生直接HOOK SSDT的时候会发生陷入,之后在VMM中做处理。文中针对的是对rootkit的检测,且仅仅针对通过挂钩SSDT隐藏自身这一个特征做处理,一方面关注点太小,另一方面也不适应于特定进程防护的场景。文献[9-10]从全局的角度对虚拟机完整性做监控,侧重点不在于防护。文献[11]通过拦截CR3切换动作,在VMM中操作受保护进程的页表,对指定进程内存进行防护。这种方式同样存在文献[6]提到的性能问题。文献[12]通过构建一个影子内核,对所有系统服务重定向,可以较好对特定进程进行防护,但是其依赖于虚拟机内部的代理驱动,代理驱动自身安全存在威胁。
针对以上存在的问题,本文提出一种基于影子内存的无代理[13]虚拟机进程防护系统AVMPPS(agentless process protection system based on shadow memory),并针对windows虚拟机进行了实现。该系统通过影子内存保证SSDT和系统调用执行流的完整性,在虚拟机外部分析处理虚拟机内部进程敏感行为,保护虚拟机中特定进程不被非法操作。基于本文方案无代理特性,规避了代理自身带来的安全威胁和资源消耗。并且该方案仅对特定系统调用做陷入设置,减少了模式切换次数,大幅减少了性能的损耗。
HTML
-
为了验证AVMPPS系统的防护效果并且了解AVMPPS系统对虚拟机性能的影响,针对AVMPPS系统的功能和性能分别作了测试。Windows 7系统自发布以来稳定性和用户量均位于Windows各个版本前列,因此选取Windows 7系统进行测试。
实验环境:宿主机:Intel Core i5四核处理器、64位CentOS 7操作系统3.10.1版本内核;虚拟机:双核2 G内存、32位windows 7操作系统;VMM:KVM 3.10.1;Qemu:1.7.1;Libvirt:1.2.17。
-
为了验证AVMPPS系统的防护效果,采取多个样本分别针对进程运行防护、系统调用执行流防护、SSDT防护做测试,样本原理介绍如表 1所示。同时为了凸显本系统的优势,和已有的优秀方案做对比,测试结果表明,AVMPPS可以有效地对指定进程进行保护,同时保护SSDT自身和系统调用执行流的完整性。如表 2所示。
恶意样本 操作 Shutdown.sys/fin.exe
Windbg/OD
Cheategine/inject.exe
360/腾讯管家
SafeCrack
FileFilter
Sysenter.sys
GetSSDT.sys
HidePro
PCHunter终止特定进程
恶意调试/恶意附加
读/写进程内存
HOOK入口函数
内联HOOK SSDT
隐藏恶意文件
修改系统调用入口
通过导出结构,获取SSDT
直接挂钩SSDT,隐藏自身
获取原始SSDT函数地址 -
作为安全防护系统,自身安全尤为重要,如果系统运行期间代理驱动被卸载,防护功能就荡然无存。因此借助于PCHunter和Kmdmanager工具针对已有的基于代理驱动的方案和本方案进行安全性对比试验,测试结果如表 3所示。
通过表 3可以发现,文献[7-8]的方法未对代理驱动作任何保护,随时可以被检测和卸载。文献[12]对驱动作了隐藏设置,可以躲避检测,但是如果事先知道驱动名称,还是可以强制卸载;AVMPPS未使用任何代理驱动,因此不可能被检测到,且AVMPPS基于影子内存,类似于系统预留的内存,任何驱动和检测软件都无法获取其有效地址,因此AVMPPS的安全性可以得到保证。
-
AVMPPS系统在虚拟机系统调用机制启用时部署,一旦部署成功,之后的性能损耗基本在于进程特定敏感行为调用的陷入,由于AVMPPS系统对无关调用不作陷入设置,最大程度上减少了模式切换的次数,所以对虚拟机性能的影响极其微小,基本可以忽略。以下利用鲁大师从CPU、内存、I/O三方面分别测试10次取平均值来测试AVMPPS系统对虚拟机的影响,并和其他无代理方案进行对比。测试结果表明,AVMPPS系统部署成功后对CPU的影响在2%左右,而对内存和I/O的影响都低于0.5%,性能损耗方面远远低于其他的无代理方案,如表 4所示。