赵晓东,曾庆凯
(1.南京大学 计算机软件新技术国家重点实验室,江苏 南京210093;2.南京大学 计算机科学与技术系,江苏 南京210093)
由于应用程序和操作系统自身缺陷的存在及恶意程序可能对执行环境造成的干扰和破坏,目前操作系统和应用程序等软件并不是处于一个完全安全的环境中。利用系统虚拟化技术解决与软件安全相关的问题,提高操作系统和应用程序的安全性成为虚拟化研究的一个重要方向。基于虚拟化技术的可信计算、程序隔离执行、恶意软件分析和入侵检测等安全技术被广泛研究。研究人员利用系统虚拟化技术提供为安全敏感应用程序提供更安全的隔离执行环境、更小的可验证的计算基,将不同的应用程序和操作系统隔离防止它们之间的干扰和破坏,从虚拟机抽象底层来获得程序和系统更真实有效的执行状态和运行信息。
系统虚拟化实现在一台物理主机上虚拟出多个虚拟机(virtual machine,VM),每个虚拟机可看作是一个物理主机的副本。各虚拟机相互隔离并运行独立的操作系统,虚拟机的资源由虚拟机监控器(virtual machine monitor,VMM)统一管理。系统虚拟化本质上是多个VM利用一组物理资源,由VMM实现对底层资源的划分和共享,向上表现出多组虚拟计算资源[1]。
VMM是系统虚拟化的核心,根据VMM提供的平台类型,VMM可以被分为两类[2]:
(1)完全虚拟化:由VMM来虚拟实现现实平台,对虚拟机来说,虚拟平台和实现平台一致,操作系统无需作任何修改即可运行在虚拟平台上。原有的x86体系结构没有为虚拟化提供硬件支持,完全虚拟化只能全部由软件模拟实现。但完全软件虚拟化会存在优先级压缩、性能开销大等弊端。
针对这个问题,硬件厂商修改硬件结构在CPU、芯片组和I/O设备中增加针对虚拟化的支持,比如Intel VT和AMD SVM技术等。它们帮助系统软件更高效的实现虚拟化功能。现有的常用VMM平台,比如Xen、VMware、KVM等都支持硬件虚拟化技术。
(2)类虚拟化:类虚拟化中VMM呈现给操作系统的平台抽象与现实平台并不完全等价,需要修改操作系统来与VMM配合来实现虚拟化。类虚拟化可避开硬件结构的缺陷,提高性能。VMM平台比如Xen,即支持完全虚拟化,也支持类虚拟化。
系统虚拟化提供了隔离的执行环境,且VMM具有软件层中最高特权级,为安全应用带来多方面优势:
(1)隔离性:VMM管理的多个虚拟机独立运行在隔离的环境中,不会被其他虚拟机的干扰和破坏。
(2)高特权级:VMM比运行在其上的操作系统有更高特权级,通过VMM可管理运行在上层的操作系统和应用程序的软硬件资源。
(3)多实例:一个物理机上运行多个虚拟机,可将应用程序组件分布到多个虚拟机提供不同的安全等级,消除完全物理隔离方式的局限性。
(4)可信计算基(trust computing base,TCB):VMM相对于操作系统来说代码量更小,更易于实现安全验证。通过VMM为应用程序提供执行环境,可大幅减小安全应用的TCB大小。
针对系统虚拟化提供的安全优势,本节主要讨论利用系统虚拟化的安全技术的研究文献及最新进展。最近几年,在S & P和CCS等安全会议上每年都有与此类别的论文,而SOSP和OSDI等系统会议也常有相关研究。下面选取较为典型的研究作下介绍。
Proxos[3]将系统调用划分为可信和不可信两部分,可信部分由一般虚拟机提供,而不可信调用将由应用程序私有的可信虚拟机提供,并允许应用程序开发者确定应用程序系统调用的路由规则。Proxos还设计了代理模块来控制程序对一般虚拟机资源的访问及可信虚拟机与一般虚拟机间的切换。系统实现的原型对Xen和上层操作系统Linux的修改添加了一万多行,应用程序的路由配置一般也只需几百行,最终性能开销在15%左右。
TrustVisor[4]利用VMM来完成应用程序安全敏感代码的强制验证和隔离执行。研究引入程序逻辑片(pieces of application logic,PAL)的概念,PAL是由应用程序开发者决定的应用程序的安全敏感片段,由不需要上下文和操作系统等支持且有保密性和完整性需求的代码和数据组成。TrustVisor利用硬件虚拟化的支持构造一个特定功能的微型VMM,引入了3种工作模式:①传统客户模式,该模式正常执行操作系统和其他应用程序;②安全客户模式,执行被隔离的PAL;③主模式,拥有最高特权级的VMM执行。VMM为PAL建立安全的隔离环境,将PAL和不可信环境隔离。TrustVisor还实现一个称为μTPM的软件模块来模拟硬件TPM功能,为PAL分配一个μTPM实例完成代码可信验证。TrustVisor代码量在一万多行左右,大大缩减了PAL的TCB大小。
SP3[5]保护模型中应用程序可以直接请求VMM加密自己的某个内存页面,使操作系统和其他应用程序只能得到该页面的密文内容。为减少频繁加密和解密带来的开销,SP3采取了两个优化措施:①页面冗余,在VMM中存储加密页面的解密副本,在解密时由VMM重定向请求到副本页面;②延时同步,在页面被修改时并不同步页面的镜像,直到页面镜像被访问时才同步页面。通过优化,系统原型大约只有3%的性能开销,不过只能提供页级加密保护,并需修改操作系统。
Overshadow[6]则无需修改操作系统和应用程序利用VMM的影子页表,为应用程序提供透明的加密机制。应用程序的内存页面被生成两种不同视图,应用程序自身使用正常的内存页面视图,而操作系统和其他应用程序使用加密的页面视图。VMM跟踪和管理每个加密页中包含的资源,同时对加密页生成hash值来防止其被恶意修改。对于非内存的资源比如文件等,则利用内存映射功能将其映射为内存页面,实现对其的加密。Overshadow中操作系统可以管理应用程序的资源,但不能直接访问加密资源,并增加用户态shim部件处理系统内核与应用程序间的控制流转换及指针型参数和返回值的调整。
Lycosid[7]、VMwatcher[8]都是通过虚拟机自省(virtual machines introspection,VMI)来检测虚拟机中隐藏进程。Lycosid在VMM中统计虚拟机内每个进程消耗的CPU时间,并与虚拟机内得到的进程消耗的CPU时间匹配,推断可能的隐藏进程。VMwatcher则提出一种称为客户视图转换的技术,在虚拟机外系统化地建立虚拟机的语义视图,与内部视图比较发现隐藏的恶意软件。它需要使用虚拟机系统的数据结构及函数定义来自省VMM中得到的低级别状态,将其重构为与VM内部相等价的信息,完成对虚拟机内语义的系统化重建。
与需要系统的数据及函数定义等信息完成VMI不同,Virtuoso[9]提出一种只需系统API定义即可自动产生自省程序的方法。Virtuoso首先在目标系统中运行包含被自省的功能的程序,记录程序执行的指令序列。然后对指令序列使用程序切片技术找到与功能相关的指令,如果一次执行不成功,则多次执行分析过程。最后合并多次分析得到的二进制指令,并转化为自省程序。
Lares[10]将虚拟化的优势运用到主动监控中。它在不可信虚拟机中加入钩子截获可能的敏感事件。当敏感事件发生时,将相关信息传递至安全虚拟机内的安全工具中,由安全工具使用VMI等功能完成分析,再将结果返回不可信虚拟机。Lares在不可信虚拟机中增加自包含的trampoline部件,部件不依赖操作系统功能,在事件发生时通过VMM完成信息传递和交互。为防止钩子和trampoline被恶意修改,在VMM中将它们的页表设置为只读。Hooksafe[11]对Lares中hooks较为分散,利用页表保护性能开销大的问题作改进。它分析内核中钩子的访问情况,得到内核对所有钩子的访问点,将钩子集中到一片连续的只读内存中。而原有的访问点被重定向到被保护的钩子,减小离散页表保护的性能开销。
SecVisor[12]试图解决操作系统内核在运行时的完整性问题。它利用AMD的SVM硬件虚拟化技术实现了一个代码量少、对外接口少、便于移植的轻量级VMM。VMM对影子页表创建副本,修改副本用户空间执行标志位,使系统在内核态运行时不能执行用户空间的代码,保证内核代码的完整性。SecVisor建立一个进入内核态的控制转移事件列表,找到每个事件对应的数据结构,得到所有进入内核态的入口点。在执行到入口点时,进入VMM中完成对影子页表和副本使用的切换。VMM只包含4000多行代码,并且只需对操作系统作较小的功能添加便可适应内核空间的初始化和变更。
HyperSafe[13]的目标是VMM提供运行时控制流完整性的保证,阻止恶意软件在监控器中执行,提高VMM自身的安全性。它利用了两个技术:①不可绕过内存锁,在VMM启动完后,修改CR0寄存器的页表读写标志位将其设置为只读。对页表的更新必须关闭只读保护,完成更新后再开启只读保护;②受限指针索引,通过静态分析VMM的控制流图,对每个间接调用和跳转以及返回指令,得到所有可能的跳转目标表。替换所有的函数调用和控制流转换地址为目标表中的索引值,使VMM只能完成合法的控制流转换。两个技术相互间形成锁关系,受限指针索引保证页表更新功能不会被误用而恶意破内存保护锁,内存保护锁保证受限指针索引不会被篡改。
HyperSentry[14]则利用X86结构CPU的系统管理模式(system management mode,SMM)完成VMM完整性保证。CPU通过触发系统管理中断进入SMM管理模式执行SMM程序,操作系统将会被挂起直至SMM执行完成。SMM程序被保存专用内存中,在BOIS启动后被锁定,VMM和操作系统都无法对其进行访问和篡改。文章通过平台管理接口隐式触发SMM程序,完成对VMM的测量和验证。为防止验证被VMM感知,SMM程序执行中,系统屏蔽了可屏蔽中断,临时构造中断表处理不可屏蔽中断。
CloudVisor[15]解决VMM或管理虚拟机被攻击时如何保证虚拟机安全的问题。它利用硬件虚拟化的支持通过嵌套虚拟化技术,在VMM之下引入一个称为CloudVisor的特定VMM保护托管虚拟机的安全,实现虚拟化中资源管理和安全分离。原有的VMM和其他虚拟机管理软件只需负责虚拟机资源管理等复杂任务。CloudVisor消除商业VMM越来越复杂的弊端,大大减小TCB大小。
根据目前的研究现状,依据系统层次将系统虚拟化的安全技术的相关研究分为三类:应用程序安全,操作系统安全和虚拟机监控器的安全性。
操作系统可能被恶意软件破坏,而无法为应用程序提供可信的执行环境。基于系统虚拟化提高应用程序安全性的研究,主要利用VMM的优势为应用程序提供隔离的可信执行环境,减小应用程序的TCB。
现有的研究主要解决以下几个问题:①安全性,保证应用程序执行环境与不可信外界的安全隔离,无法被外部环境恶意破坏;②可交互性,应用程序需要操作系统功能,并由其完成对自身资源的管理,如何实现隔离执行的同时与不可信外界间的安全交互;③兼容性,提供的环境如何与现有软硬件结构兼容,尽可能少的修改应用程序和操作系统,保证方案易于实施。④低开销,如何减少VMM的隔离操作带来性能开销,保证隔离环境的可用性。
相关工作主要通过在VMM层对加密应用程序的数据和代码,或者直接在VMM层为应用程序提供执行环境来实现,一般需要调整应用程序来使用VMM提供的功能。对应用程序的加密保护主要能过内存页面或页表上。对于非内容资源,比如文件、网络端口等的加密保护依然是一个难点。而为减小性能开销,通常会对应用程序数据、代码或功能等依据安全需求的不同进行分离,为其提供不同安全等级的执行环境。快速有效、易于实施的应用程序分离策略也是相关研究要考虑的问题。
恶意软件通过修改系统内核数据,截获系统调用等方法破坏操作系统功能并隐藏自己,增加监控软件的检测难度。研究主要利用系统虚拟化技术保护操作系统内核完整性,增强入侵检测和恶意软件分析等安全工具的能力,提高操作系统安全性。
3.2.1 增强安全工具能力
基于虚拟机的恶意代码分析和入侵检测,在VMM或安全的虚拟机中实现安全工具可以具有以下优势:①不必考虑被检测系统安全;②检测无法被虚拟机绕过;③虚拟机难以感知检测的存在。现有的研究主要解决两方面的问题:
(1)虚拟机自省
在虚拟机外,安全工具从VMM得到的虚拟机状态一般是寄存器,内存等低级别信息。而安全工具则使用程序的高层语义信息如文件行为、进程行为、系统服务行为等。虚拟机自省通过读取虚拟机的状态,利用已知的虚拟机操作系统知识,如数据结构和函数定义等,重建虚拟机信息的高级语义如PCB控制块,文件描述符等。面对复杂的操作系统环境特别是非开源系统如何有效正确的完成自省,并将应用已有的程序分析方法仍需进一步研究。
(2)保护虚拟机内部件的安全
基于虚拟化的入侵检测为保证性能通常在被检测虚拟机中增加驱动或组件完成截获敏感事件、传递信息等功能。现在研究通过在VMM对组件页表写保护,加密等措施来防止组件被不可信破坏。但页表保护和加密在执行时将发生VMM的特权级切换,带来一定的开销。为保证方案有效性,需要保证安全性的同时降低性能开销。
3.2.2 操作系统完整性保证
目前的研究主要为利用VMM验证和控制操作系统中应用程序对操作系统的恶意修改,及防止操作系统在内核态中执行用户空间恶意程序两方面。它们主要根据操系统用户态和内核态的不同特权级,在VMM中通过修改页表达到目的。而针对恶意代码通过动态加载模块和驱动完成对操作系统的攻击,也有一些研究将通过将不可信驱动及模块同已有的可信系统内核隔离。这方面的研究通常假设已有内核可信。利用虚拟化技术,可将不可信驱动及模块同已有的可信系统隔离,验证和控制不可信组件。目前的研究主要解决两方面:①如何降低访问控制策略的开销;②如何保证同已有系统程序的兼容性。同时返回值导向(return oriented)这种利用已有安全代码完成恶意攻能的攻击方式,也为利用虚拟化保证操作系统控制流完整性提出新的要求。
大部分基于虚拟化的安全研究是以VMM可信为假设前提,但VMM实际上并非完全可信,如Xen和VMware等都被报告存在漏洞[16]。随着VMM功能越来越复杂,代码量不断增加,将引入更多的漏洞。针对VMM的恶意软件和攻击,比如subVirt、blue pill、虚拟机逃逸等也被研究。所以提高VMM自身的安全性为上层应用提供一个可信的基础也是研究的一个重要方向。它们可被分为两类:
(1)减小TCB:VMM随着功能的日益复杂,代码量不断增加,上层安全应用的TCB随之加大。目前研究工作主要通过功能划分的方法,将VMM管理和安全相关部分分离,减小TCB。但是如何在分离之后保持VMM的特性和功能仍然是一个研究的难点。而针于特定安全应用,构建专用VMM也是减小TCB研究的一个重要方面。
(2)自身可信保证:VMM作为软件层面的最下层,保证自身可信十分困难。现有的研究主要利用硬件的安全特性来完成VMM的可信保证。比如利用BOIS的启动验证功能,完成VMM的可信启动。Intel的可信执行技术通过硬件扩展来提供动态可信根机制,建立动态的可信计算环境。而硬件虚拟化的支持,特别是嵌套虚拟化技术配合控制流分析也为实现VMM完整性提供可能的途径。
Intel-VT硬件辅助的虚拟化技术中,增加了虚拟机控制块(VMCS)和两种操作模式:根模式和非根模式,其中VMM运行在根模式,虚拟机运行在非根模式,每个虚拟机的虚拟处理器对应一个VMCS结构。在VMM中可以对虚拟机的VMCS进行修改和配置,修改虚拟机当前执行的状态。根据这个特性,我们对VMM进行修改,截获虚拟机中正在执行的程序的状态信息,对信息进行修改,调试程序的运行。系统设计如图1所示。
图1 恶意软件调试分析系统设计
系统原型在开源软件Ether[17]上二次开发实现,Ether是一个基于Xen的恶意软件分析工具可以截获恶意软件的系统调用和指令序列,我们增加了对程序的调试功能并结合程序切片技术提取程序的条件判断语句对恶意软件进行多路径的调试,提高恶意程序动态分析的代码覆盖率。
实验选取了5个恶意代码样本在系统原型上分析调试,结果如表1所示:其中代码长度是对代码静态分析后的代码总长,断点数为动态调试时设置的恶意代码断点数,执行总长度为代码动态调试时执行的不重复代码的总长。对于不能其中不能达到完全代码覆盖的程序,是由于在调试过程中发生错误,程序崩溃退出。
表1 恶意代码动态分析调试测试
从实验结果可以看出从VMM中可以截获程序的状态信息,并完成对程序状态的修改,防止恶意程序对分析环境的破坏。系统原型可以有效提高恶意程序的动态执行中的代码覆盖率。相比较单机的调试环境,此方式更透明安全。
系统虚拟化技术有隔离性、封装性安全优势同时虚拟机监控器有更小的可信计算基,更高的特权级,弥补了原有系统和应用软件系统上的安全性上的不足。但为应用程序或操作系统构建一个隔离独立、安全性高、性能影响小、兼容性强的执行环境提供更细粒度的保护依然存在不少困难,仍需要进深入研究。利用不断成熟的硬件辅助虚拟化技术,将是解决这些问题的重要方向。本文最后利用虚拟化技术建立一个安全透明的恶意软件调试环境,一定程序上验证了系统虚拟化的安全特性,但是对调试环境自动化的仍需进一步改进。
[1]JIN Hai.Computer system virtualization-principle and implementation[M].Peking:Tsinghua University Press,2008:54-56(in Chinese).[金海.计算机系统虚拟化—原理与实现[M].北京:清华大学出版社,2008:54-56.]
[2]Intel Open Source Technology Center,Parallel Processing Institute of Fudan University.Principle and implementation of system virtualization[M].Peking:Tsinghua University Press,2009:64-65(in Chinese).[英特尔开源软件技术中心,复旦大学并行处理研究所.系统虚拟化原理与实现[M].北京:清华大学出版社,2009:64-65.]
[3]Richard Ta-Min,Litty Lionel,Lie David.Splitting interfaces:Making trust between applications and operating systems configurable[C]//Proceedings of the 7th Symposium on Operating Systems Design and Implementation.Seattle,Washington:USENIX Association,2006:279-292.
[4]Mccune M Jonathan,Li Yanlin,Qu Ning,et al.TrustVisor:Efficient TCB reduction and attestation[C]//Washington,DC,USA:IEEE Compu-ter Society,2010:143-158.
[5]Yang Jisoo,Shin G Kang.Using hypervisor to provide data secrecy for user applications on a per-page basis[C]//Proceedings of the fourth ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments.Seattle,WA,USA:ACM,2008:71-80.
[6]Chen Xiaoxin,Garfinkel Tal,Lewis E Christopher,et al.O-vershadow:A virtualization-based approach to retrofitting protection in commodity operating systems[J].SIGARCH Comput Archit News,2008,36(1):2-13.
[7]Jones T Stephen,Arpaci-Dusseau C Andrea,Arpaci-Dusseau H Remzi.VMM-based hidden process detection and identification using Lycosid[C]//Proceedings of the fourth ACM SIGPLAN/SIGOPS International Conference on Virtual Execution Environments.Seattle,WA,USA:ACM,2008:91-100.
[8]Jiang Xuxian,Wang Xinyuan,Xu Dongyan.Stealthy malware detection through vmm-based"out-of-the-box"semantic view reconstruction[C]//Proceedings of the 14th ACM Conference on Computer and Communications Security.Alexandria,Virginia,USA:ACM,2007:128-138.
[9]Brendan Dolan-Gavitt,Leek Tim,Zhivich Michael,et al.Virtuoso:Narrowing the semantic gap in virtual machine introspection[C]//Proceedings of the IEEE Symposium on Security and Privacy 2011:297-312.
[10]Payne D Bryan,Carbone Martim,Sharif Monirul,et al.Lares:An architecture for secure active monitoring using virtualization[C]//SP.Washington,DC,USA:IEEE Computer Society,2008:233-247.
[11]Wang Zhi,Jiang Xuxian,Cui Weidong,et al.Countering kernel rootkits with lightweight hook protection[C]//Proceedings of the 16th ACM Conference on Computer and Communications Security.Chicago,Illinois,USA:ACM,2009:545-554.
[12]Seshadri Arvind,Luk Mark,Qu Ning,et al.SecVisor:a tiny hypervisor to provide lifetime kernel code integrity for commodity OSes[C]//SOSP.New York,NY,USA:ACM,2007:335-350.
[13]Wang Zhi,Jiang Xuxian.Hypersafe:A lightweight approach to provide lifetime hypervisor control-flow integrity[C]//SP.Washington,DC,USA:IEEE Computer Society,2010:380-395.
[14]Azab M Ahmed,Ning Peng,Wang Zhi,et al.HyperSentry:Enabling stealthy in-context measurement of hypervisor integrity[C]//Proceedings of the 17th ACM Conference on Computer and Communications Security.Chicago,Illinois,USA:ACM,2010:38-49.
[15]Zhang Fengzhe,Chen Jin,Chen Haibo,et al.CloudVisor:Retrofitting protection of virtual machines in multi-tenant cloud with nested virtualization[C]//Proceedings of the Twenty-Third ACM Symposium on Operating Systems Principles.Cascais,Portugal:ACM,2011:203-216.
[16]Secunia vulnerability report[OL].[2012-04-13].http://secunia.com/advisories/product.2012/.
[17]Dinaburg Artem,Royal Paul,Sharif Monirul,et al.Ether:Malware analysis via hardware virtualization extensions[C]//Proceedings of the 15th ACM Conference on Computer and Communications Security.Alexandria,Virginia,USA:ACM,2008:51-62.