基于VMFUNC的虚拟机自省触发机制

2017-11-07 10:11刘维杰王丽娜
计算机研究与发展 2017年10期
关键词:调用虚拟化指令

刘维杰 王丽娜 谈 诚 徐 来

(空天信息安全与可信计算教育部重点实验室(武汉大学) 武汉 430072) (武汉大学计算机学院 武汉 430072) (软件工程国家重点实验室(武汉大学) 武汉 430072) (liuweijie@whu.edu.cn)

2017-06-02;

2017-07-25

国家自然科学基金项目(61373169,61672394);国家“八六三”高技术研究发展计划基金项目(2015AA016004);国家科技支撑计划基金项目(2014BAH41B00);NSFC-通用技术基础研究联合基金项目(U1536204) This work was supported by the National Natural Science Foundation of China (61373169, 61672394), the National High Technology Research and Development Program of China (863 Program) (2015AA016004), the National Key Technology Research and Development Program of China (2014BAH41B00), and the NSFC-General Technology Basic Research Joint Funds (U1536204).

王丽娜(lnwang.whu@gmail.com)

基于VMFUNC的虚拟机自省触发机制

刘维杰 王丽娜 谈 诚 徐 来

(空天信息安全与可信计算教育部重点实验室(武汉大学) 武汉 430072) (武汉大学计算机学院 武汉 430072) (软件工程国家重点实验室(武汉大学) 武汉 430072) (liuweijie@whu.edu.cn)

虚拟化技术作为云计算的基础得到了广泛应用,但随之而来的虚拟机安全问题日趋严重.虚拟机自省作为一种从外部监控虚拟机内部运行状态的方法,为解决虚拟机安全问题提供了新视角,但同时也引入了巨大开销,阻碍了实际应用.提出了一种基于VMFUNC的虚拟机自省(virtual machine introspection, VMI)触发机制.该机制借助CPU硬件特性VM-Function以及RDTSC指令模拟,将调用时产生VM Exit开销降至最低;利用VMFUNC的功能为目标虚拟机切换备用扩展页表,避免VMI程序运行时对虚拟机执行的中断;通过重载VMFUNC指令和Xentrace的功能实现高效的触发与信息传递机制,主动触发VMI程序运行,克服了VMI程序常驻带来的大量资源消耗.实现了虚拟机自省即服务系统,并进行了实验验证.结果表明:本系统带来额外性能开销不超过2%,使VMI在实际云环境中的广泛应用成为了可能.

云计算安全;虚拟机自省;VMFUNC;扩展页表指针切换;虚拟机自省即服务

在云计算已经得到普及和大规模应用的今天,虚拟化技术作为其基础得到了广泛应用,与此同时,虚拟机的安全问题也得到了越来越多的关注.其中,虚拟机自省(virtual machine introspection, VMI)[1]作为一种在虚拟机外部监控虚拟机内部运行状态的方法,充分利用了虚拟机管理器(virtual machine monitor, VMM或Hypervisor)的隔离特性以及介于硬件和虚拟化操作系统之间的新的抽象层次,为解决虚拟机安全问题提供了新视角.拥有特权的虚拟机可以通过作为安全虚拟机,借助VMM监控虚拟机的行为和软硬件资源使用情况(例如执行指令等)来感知虚拟机的内部状态,实现对于虚拟机透明地安全监控,以待进一步的分析与检测.

然而VMI技术在大规模虚拟机安全监控应用场景中仍存在疏漏.现有的VMI存在资源消耗高、运行时间长的困境,无法很好地适应云环境.传统的虚拟机自省方法需要由主机接管关键页面进行处理,从而实现VMI.文献[2]指出VMI技术的额外开销一般在正常开销的9.3~500倍之间,有时甚至需要6 s才能遍历操作系统进程链.为了保证客户机内核(guest-OS)所维护的进程信息一致,虚拟机(virtual machine, VM)在某些情况下必须暂停.这样攻击者可能会利用这些时间延时知识来误导VMI的分析结果,或者延迟启动攻击以避免被检测[3].因此,实现更高效的VMI是保证虚拟机安全的必要前提,在云环境中不可或缺.

随着虚拟化的快速演进,软件堆栈的垂直和水平复杂度进一步增加.复杂的软件栈带来了强大的功能,同时也带来了挑战.一方面,程序员有更多的自由来利用软件层实现各种功能,包括安全性、去耦和改进管理功能;另一方面,软件层面和保护域的扩散也导致了更为复杂的跨特权级控制转换.这种不必要的开销和复杂性完全是由于灵活的跨特权级调用的缺乏导致的[4].通常硬件机制仅支持从用户级程序到操作系统的调用(Syscall)以及从虚拟机到Hypervisor的调用(即超级调用,Hypercall)[5].若虚拟机要将某些信息传送到Hypervisor,必须调用超级调用,或者使用VMREAD和VMWRITE等特殊指令读写VMCS字段[6].然而,这些特殊指令将会引入频繁的VM Exits,产生相当大的性能开销.想要在虚拟化环境中运用VMI技术保证虚拟机的安全,必须克服VMI具有的开销过大的缺陷.本文通过引入先进的CPU硬件特性VMFUNC解决该问题.

通过审视现有的Hypervisor操作系统,催生了新一代Intel处理器的VM-Function系列指令(VMFUNC).VM-Function技术允许用户在多个地址空间之间跨多个层级的安全、有效和灵活的跨特权级调用.VMFUNC功能集成在英特尔的Haswell及其后的微体系架构中,使虚拟机能够在不退出root模式的情况下使用Hypervisor的功能.VMFUNC被设计为通用接口,以支持由不同索引指定的多个功能.当前的Intel处理器仅实现了一个名为EPTP switching的功能,即客机虚拟机能够切换其扩展页表指针(extended page table pointer, EPTP),使用一套新的EPT页表(extended page table, EPT),且不触发任何VM Exits.使用此功能的一种典型应用是将客户端内核的运行环境与用户应用程序隔离开来,以防止内核Rootkit使用“Return-to-user”攻击和内存扫描[7].

本文针对云环境中云租户个体的虚拟化安全要求,提出一种灵活的基于VMFUNC[6]触发VMI的机制.该机制借助CPU硬件特性VM-Function以及RDTSC指令模拟,将调用时产生VM Exit开销降至最低.利用VMFUNC的功能为目标虚拟机切换备用扩展页表,避免VMI程序运行时对虚拟机执行的中断.通过重载VMFUNC指令和Xentrace的功能实现高效的触发与信息传递机制,实现了虚拟机自省即服务系统.用户可以根据需要发出VMI的同时,既节约了计算资源,又满足特定用户的安全需求.该触发机制有力地解决了云环境中大规模虚拟机安全监控的难题,为云计算中VMI的使用模式提供了新思路.

1 相关工作

自Garfinkel等人[1]提出虚拟机自省这一概念以来,VMI被定义为在虚拟机之外分析虚拟机内的软件运行状况的监控手段.由于虚拟化平台没有相关接口,SIM[8]如同Garinkel的实现一样,放弃了隔离性需求,即从目标虚拟机直接拉取高层数据至Hypervisor.甚至如HyperNE[9]为了实现高性能监控而直接重写Hypervisor,允许虚拟机与监控软件的直接交互.然而坚持隔离性会带来语义鸿沟的难题,即从虚拟机获取的内存信息是最底层的二进制数据,并无任何可直接读取的数据结构以供分析.Jones等人[10]于2006年提出了AntFarm,它可以被VMM使用从而独立隔离地运行;Ether[11]利用了硬件虚拟化技术,迫使系统调用发生错误会陷入VMM的方法来监控目标虚拟机;Virtuoso[12]提供了生成自省程序的方案,但是其可靠性过低.同时上述方法都只针对特定的目标进程,若将监控范围扩大到整个虚拟机,则其开销会变得非常巨大.

另一方面,虚拟机自省技术被用来构建一系列的安全工具,包括入侵检测系统Graffiti[13]、内核完整性验证系统[14]、VMM控制流完整性验证系统[15-16]等.然而这些工具都有一个共同的特点:被动触发监控.安全工具的触发需要通过额外的扫描和轮询,这使得安全工具无法保证在事件发生之前介入.

文献[17-18]通过生成外部语义视图(View)来监控目标虚拟机.然而,在虚拟机外部观测并产生视图耗时较长,而内部耗时较短[19];基于Xen的DRAKVUF动态恶意软件分析[20]通过将断点指令写入到客户端的内存中来实现VMI,利用CPU的硬件特性,在上下文切换过程中插入钩子,实现了监控程序的自动化调用,并且使用了额外的EPT页表以节省开销.DRAKVUF通过频繁的上下文切换来陷入Hypervisor,而在x86架构的CPU上,每次VM Exit/VM Entry都需消耗近104时钟周期(cycles)[7],实际上依旧引入显著的VM Exit开销.

为了利用基于软件结构知识的语义信息来解决语义鸿沟问题,并真正实现VMI程序的长期可移植性,Payne[21]于2012年设计实现了一个基于XenAccess库[22]的虚拟机自省库LibVMI,它大大提升了VMI技术的性能,也创造了一个更易用的VMI编程环境.LibVMI提供了应用程序编程接口,用于读取和写入虚拟机内存.这种基于软件架构知识的独立自省技术的优势是在目标虚拟机之外获取底层状态信息和语义重构,透明性好;其可获取高层语义信息的范围几乎没有限制,信息量大.缺点在于如果软件结构知识发生了变化,自省代码就极有可能失效.若要保证自省代码长期有效,VMI程序需要暂停虚拟机,因此可移植性差且资源消耗较大[19].VMI技术发展的主要障碍是性能问题和语义鸿沟问题,而这两者无法做到有效统一[23].

针对上述研究所存在的被动监控、开销较大等问题,本文在现有基于软件架构自省方案的基础上,结合现有的CPU新特性,提出能够主动触发并且实时内存读取的VMI机制,既能弥补语义鸿沟,又能保持极少的额外性能开销.

2 基于VMFUNC的VMI触发机制

本文借助先进的CPU硬件特性VM-Function,结合RDTSC指令模拟,避免了Hypercall的频繁使用,将调用时产生VM Exit开销降至最低;利用VMFUNC的0号功能EPTP switching为目标虚拟机切换备用扩展页表,维持了内存的一致性,避免VMI程序运行时会中断虚拟机中程序执行的现象,同时实现了监控的透明化;使用按需触发的服务理念,通过重载VMFUNC指令和Xentrace的功能,Hypervisor向特权域注入虚拟中断,VMI程序的按需启动实现高效的触发与信息传递机制,最大程度地避免VMI程序常驻特权域(Domain-0,Dom0)而导致的资源消耗.其总体设计如图1所示.

为了能够向Hypervisor传递一定量的信息(Guest-VM的自省请求),本文设计使用VMFUNC指令所切换的EPTP索引作为传递信息的载体来通知Hypervisor,进而请求自省程序的执行.具体来说,当某个客户虚拟机(Guest-VM)用户空间中执行VMFUNC指令后,扩展页表指针值发生变化.这样一来,Hypervisor能够在RDTSC模拟指令代码中感知EPTP索引的变化,进而判断是否开启针对该Guest-VM的VMI程序.

在执行VMI程序时,该Guest-VM的原有页表可以被用作VMI程序的监控对象.此时虚拟机上的应用程序可在EPTP switching之后的新EPT页表上可无缝地继续执行.页表的切换仅仅只需10-7秒级的时间开销[9],此举可极大程度地降低VMI程序对虚拟机运行时的影响.

Fig. 1 System design of VMI Triggering Mechanism based on VMFUNC图1 基于VMFUNC的VMI触发机制设计

2.1VMFUNC指令利用

在使用VMFUNC的0号功能——页表指针切换(EPTP switching)之前,Hypervisor需要为Guest-VM创建好备用的EPT页表.通过创建多个相同的扩展页表(Xen为虚拟机创建的最大备用页表数为10)来确保虚拟机内存访问的一致性.并且设置VM-functions control字段为1,开启“EPTP switching”功能.Guest-VM可以使用类似图2上半部分位于Guest-OS的代码示例,执行VMFUNC指令调用“EPTP switching”功能.

Fig. 2 VMFUNC code example图2 VMFUNC代码示例

截至2016年底,扩展页表有4个级别*Intel于2016年12月发布了新式的5级页表模式.,它们分别是页面映射4级表(page map level 4 table, PML4T)、页目录指针表(page directory pointer table, PDPT)、页目录表(page directory table, PDT)和页表(page table, PT).每个EPTP指向一个PML4T结构.图3表示Xen架构中的VMFUNC寻址和客户/主机物理地址转换(EPT walking)的过程.

当执行用户应用(例如RSA加密,如图1步骤①所示)中的VMFUNC指令时,EPTP切换例程将被执行,并且新的EPTP将被加载到VMCS中的EPTP字段中.此时Hypervisor通过新传入的EPTP值,来计算出当前的EPTP索引值.需要特别注意的是,我们通过ECX寄存器中传入的不同值,来区分用户的正常VMFUNC请求(使用页表切换功能)与本文所提出的虚拟机自省请求.我们规定:若Hypervisor计算得到的EPTP索引值小于或等于10,则判断为正常的VMFUNC请求;反之,若传入ECX的值大于10(不妨设为10+x),则判断为虚拟机按需自省请求,并将x作为新的EPTP索引值.如图3下半部分所示,Hypervisor代码中的第1行和第2行分别读取“EPTP”字段和“EPTP列表地址(EPTP_LIST_ADDR)”字段.“0x201AH”和“0x2024H”是每个VMCS中的“EPTP”字段和“EPTP列表地址”字段的地址.

当采用另一个CPU高级硬件特性#VE(virtual exception)[6]时,本文的方案会更为有效.通过使用VMFUNC和#VE,Xen虚拟机管理程序不必涉及处理Guest-VM的内部策略,从而降低Hypervisor的复杂性,并且可以很好地与VM迁移配合使用.同时,使用VMFUNC和#VE可以为Guest虚拟机分配更多的CPU周期,避免Guest虚拟机花费过多的时间来处理由EPT violation导致的VM Exit.因此启用VMFUNC和#VE的虚拟机将具有更好的性能.然而,该硬件功能只集成在最新的Intel CPU中,因此本文仅讨论VMFUNC指令的利用方法.

Fig. 3 EPT walking图3 EPT walking

2.2RDTSC指令模拟

为了保证实时性,本文设计了基于RDTSC模拟的VMFUNC感知机制.该机制利用RDTSC模拟开销极少的特点[24],同时充分考虑到RDTSC请求发生的频繁性,通过将检测VMFUNC是否执行的功能插入到RDTSC截获与模拟的模块中,实现了VMFUNC的透明感知,并且不引入额外开销.

通过对Xen源代码的深入研究,发现Xen虚拟机管理程序为其上的虚拟机提供了多个时钟源,并且Xen上的Linux实例默认使用时间戳计数器(time stamp counter. TSC)作为其时钟源.TSC值可以通过RDTSC指令访问,RDTSC指令从CPU的TSC寄存器中将64 b的值取出,并将其高32 b装入EDX寄存器,低32 b装入EAX寄存器.

目前,大多数处理器芯片虚拟化功能均提供RDTSC模拟,即提供Hypervisor对RDTSC和RDTSCP指令的条件捕获与模拟.此外,它们允许软件控制在虚拟机执行期间读取的TSC的值,并且在虚拟机控制结构(virtual machine control structure, VMCS)中规定额外的偏移字段[6].

根据现有CPU提供的上述特性,本文设置VMCS中的RDTSCEXITING位来截取Guest-VM的RDTSC指令,并在Hypervisor层模拟RDTSC指令的执行.为了方便用户启动和终止RDTSC截取,本文修改了Xen的源代码,并定制了2个超级调用(如表1所示).当Guest用户调用第1个Hypercall时,Hypervisor将执行“开始截断TSC值”函数;当第2个Hypercall——“禁用RDTSC拦截”被调用时,VM的时间将被强制恢复到正常状态.出于安全考虑,Hypercall的调用部分已经被封装为系统调用.通过启停Hypervisor对Guest-VM的RDTSC模拟,进而实现对整个VMI触发机制的启停.

Table 1 Capsulate Hypercalls

本文将VMFUNC的使用与RDTSC截获功能集成在一起.利用RDTSC的高频性(每秒钟执行上万次),保证监控的实时性,其开销与Guest-VM正常使用RDTSC指令所产生的开销一致.

2.3VMI程序触发

通过重载Xentrace[25],本文重用了其事件记录机制和消息传递机制,设计了一种能够迅速将Guest-VM的VMI检测需求连同VMI程序所需的参数一并传递至Dom0的机制.该机制具备通用性,且不增加过多的源代码,对系统的性能影响极小,最大程度上维护了系统的安全性和可移植性.

Xentrace是在Xen源代码中自带的一个工具,在编译时就会默认生成,在进行测试或调优时或需要进行底层细节分析时可以使用Xentrace工具来辅助进行.Xen Hypervisor在关键位置有许多跟踪点,允许开发人员查看系统内部发生的情况.启用这些跟踪点后,Xen会将跟踪信息写入Xen中的每个CPU对应的缓冲区(如图1步骤④),然后在Dom0中的Daemon程序设置并启用跟踪,并定期读取这些缓冲区并将其写入磁盘.Xentrace生成的数据是二进制的格式,不能直接理解.因此本文为记录VMFUNC所传递的参数设计了专门的事件格式与事件解析器来存储解析其数据.

除了Domain-U的标识(Dom_ID)与时间戳,Hypervisor还需要提供EPTP索引,用以告知VMI程序Guest-VM所使用的EPT页表基址.缓冲区中的每条记录格式如图4所示:

Fig. 4 VMFUNC event record format图4 VMFUNC事件记录格式

运行VMFUNC指令后,本文将当前的程序运行环境切换到了另外一套EPT页表中,这样一来,原来程序运行的那一套EPT页表就能够单独被Dom0分析而不中断被监控VM应用程序的运行(如图1步骤⑤).检测程序和虚拟机应用程序并发执行,因此VMI程序的透明性能够得到保障.之后,Hypervisor将以虚拟中断的形式通知Dom0开启自省程序,对有需求的目标Guest-VM进行针对性的恶意进程检测.

3 VMI-as-a-Service系统实现

本文借鉴云服务的理念,在Xen虚拟化平台[5]上实现了VMI-as-a-service系统*https://github.com/lpjlwj/VMI-as-a-Services,其具体思想是将VMI作为一种服务按需提供给云租户.

3.1层次结构及模块划分

VMI-as-Service系统主要分为3个模块:VMFUNC感知模块、参数传递模块和VMI启动模块,如图5所示.其中,VMFUNC感知模块存在于Hypervisor,当目标主机在用户层或者内核层执行VMFUNC指令时,若执行成功,则会切换页表.此时,VMFUNC感知模块在每一个RDTSC截获过程中,会判断是否存在VMFUNC的执行,即是否有页表基地址被修改.当检测到目标主机VMFUNC所传入参数大于10时,会通知处于VMM的参数传递模块.当参数传递模块被调用时,VMI启动模块负责开启基于LibVMI的自省程序来对目标主机的内存进行分析.

Fig. 5 System architecture and module partition图5 系统层次结构及模块划分

3.2VMFUNC感知模块

VMFUNC感知模块负责感知EPTP switching的执行和VMCS中EPTP字段的改变.VMFUNC感知模块主要实现3项功能:

1) 读取和保存当前的EPTP.本文在实现VMI-as-a-Service时,为了保证充分的可用性,对原始的VMFUNC功能做了保留,并在其上加入了新的功能.当用户想要使用原有VMFUNC功能时,其在ECX中放置的值为正常值(小于或等于10).而当VMFUNC感知模块发现ECX寄存器中的值大于10,则读取当前的EPTP,并比对上次保存的EPTP值,查看该EPTP是否变化,从而感知目标虚拟机Guest-VM发出了使用VMI-as-a-Service的请求,并进行进一步处理.

2) RDTSC截获与模拟.Hypervisor对VMFUNC指令感知操作均在RDTSC截获之后完成.由于VMFUNC感知模块的核心功能即为随时能够对用户发起的VMFUNC调用进行感知.于是在本系统中,利用了RDTSC指令每秒能够被VMM截获上千次的特点,主动地拦截系统获取CPU中TSC的值.在感知模块运行即将结束时,将当前的TSC值重新写入寄存器,以保证TSC值的正确性与一致性.

3) 计算EPTP与EPT index的映射,并写入EPTP到VMCS.当VMI感知模块已经感知到用户的EPTP字段被修改后,参数传递模块将读入当前的EPTP和保存的原EPTP,接着计算得出当前用户想要切换到的目的EPT index.当VMFUNC成功执行时,需要将新的EPTP存入对应的VMCS,并且在下一次VM Entry时应用到用户虚拟机中.

在执行VMFUNC之前,需要为虚拟机创建额外的页表.在Xen的设计中,p2m表是管理从客户机物理地址到机器地址转换的内存管理层.在Xen中,使用硬件辅助分页(hardware assisted paging, HAP)来具象化p2m,利用Intel扩展页表机制来创建p2m表.而为了创建多个备用EPT页表,本文使用Xen altp2m机制[26],它允许Xen为每个客户端创建不止一个EPT页表(EPT View).

当Guest虚拟机需要进行VMI监控时,Xen无需重新配置页表的访问权限来限制应用程序的运行[9],只需切换副本EPT View即可.由于每个vCPU(virtual CPU)都有自己的VMCS执行此切换,因此无需暂停任何其他vCPU或者对访问进行模拟.Guest-VM访问其物理内存的方式不变,但实际上它正在使用副本EPT页表.Guest-VM无法感知此过程,从而实现透明性.其具体步骤设计如下:

① VMFUNC在用户虚拟机内执行;

② 判断模块是否开启,若开启则继续;若未开启,则执行步骤⑥;

③ 截获TSC值并将其保存;

④ 读取当前EPTP值,判断当前EPTP值与上一次保存的EPTP值是否一样,若相同则返回执行步骤①,若不同则调用参数传递模块;

⑤ 将模拟的TSC值送入EAX,EDX寄存器;

⑥ 结束并返回到虚拟机执行环境.

3.3参数传递模块

参数传递模块负责将VMFUNC感知模块所获得的参数记录在缓存区中,并通知Dom0中的VMI启动模块读取缓存区.主要实现2个功能:

1) 通过重载Xentrace相关函数接收VMI调用参数,并将其记录在trace buffer中.

2) 在特权域Dom0协助调用基于LibVMI虚拟机自省程序.向VMI启动模块传入虚拟域标志,新的EPTP字段等用于用户启动VMI的参数.

具体步骤设计如下:

① 在Dom0中启动Xentrace;

② 当VMI启动模块被调用后,将接下来需要传入VMI程序的参数(Domain ID、新的EPTP)写入到Xentrace的核心函数TRACE_ND()中;

③ 当TRACE_ND()第1次执行时,将需要传入的参数写入到Xentrace在Xen堆上的trace buffer中;

④ 向Dom0注入虚拟中断VIRQ_TBUF.

3.4VMI启动模块

该模块的主要功能主要是接收VMI调用参数并启动位于Dom0中的VMI程序.具体步骤设计如下:

① 在Dom0中启动Xentrace Daemon;

② Dom0中的Daemon程序检测是否有新的虚拟中断注入,若发现有新的参数传入,则解析传入的参数,并通过所提供的内存页读取接口,读取目标虚拟机的内存;

③ 调用Dom0中的虚拟机自省程序.

4 实验与分析

4.1实验环境

实验平台搭建于CPU为Intel Core i7-6700K*4的物理主机上(已集成VMFUNC指令),其主频为4 GHz,内存为16 GB.本文选择Linux 3.14.60作为物理机的操作系统,在Xen Hypervisor 4.6.0实现了本系统,同时为虚拟机分配单vCPU,2 GB内存.

首先编译并安装修改后的Xen,包括Xen,Xen Tools;然后安装LibVMI.对LibVMI进行适当修改后编译并安装监控服务.加载编译好的驱动VMI偏移计算模块到DomU内核中.为保证正常使用Xen altp2m机制,虚拟机中需配置“altp2mhvm=1”,启用Xen硬件虚拟化的altp2m功能并设置虚拟机的影子内存“shadow_memory=16”.

4.2功能测试

考虑到多应用程序并行调用的情况,本文测量了单vCPU虚拟机能够达到的最大触发次数.每次实验一共调用1 000次,共计50次实验,统计VMI的成功触发次数.在高负荷切换的情况下,触发速率为1 000次/秒,触发率达到100%.因此可以认为该机制是可靠的.

4.3性能测试

4.3.1 CPU密集型程序性能影响

为了验证方案的正确性和测试本系统的性能,本文实现了2套基于LibVMI的VMI程序,分别为cMonitor[27]与CAPT.cMonitor通过在Hypervisor对DomU的监控,实现对网络数据包进行漏洞触发规则透明校验和过滤,提升云平台针对已知漏洞的快速免疫能力;CAPT的功能则是持续透明地记录目标主机内的系统事件和网络事件,用于事后的攻击起源追踪.在进行性能测试之前,本文对VMI的操作时间进行了测量,如表2所示,为后续实验分析提供量化参考.

Table 2 Average Execution Time of four VMI Programs

本文选用PARSEC测试集[28]中的blackscholes,canneal,dedup和streamcluster作为基准测试程序.同时考虑到实际应用情况,选用对安全需求敏感的AES CBC-128模式文件加密程序,RSA 1 024 b字符串加密程序同样作为基准测试.我们在PARSEC中的基准测试程序的源代码前插入了VMFUNC指令;在OpenSSL 1.0.2g中的AES和RSA加密程序进行了VMFUNC指令插桩.对于AES加密程序,VMFUNC指令被插入在每一个区块block的第1轮加密的开始位置.这样每加密1 KB文本,有32条VMFUNC指令被执行;对于RSA加密程序,VMFUNC被插入在函数bn_mod_mul_montgomery()的开始.该函数是用于蒙哥马利模乘算法的核心函数.同时,AES加密程序密钥由伪随机数发生算法生成,加密对象为1 KB大小的二进制全“0”的明文文件.RSA加密程序明文为117 B的全“0”字符串.

通过对6个不同的基准测试程序的20次重复实验,得到不同情况下程序的标准化运行时间.我们对比了使用LibVMI的SHM-snapshot[21]实现方案和传统的将虚拟机暂停的VMI实现方案.当使用CAPT作为自省程序时,具体开销如图6所示:

Fig. 6 Comparison of different benchmarks图6 基准测试程序耗时对比

测试结果表明:传统的将虚拟机暂停的VMI实现方案相对于无VMI情况下,系统消耗大大增加,远高于其他3种方案.使用共享页面的SHM-snapshot方案采用了Dom0共享DomU页面的方式,可以将性能开销降至5%以内.而本方案由于VMFUNC的触发机制实现了VMI的按需调用,因此VMI的开销被有效抑制,相比于无VMI情况下,仅增加了不超过2%的调用和切换耗时.

4.3.2 I/O密集型程序性能影响

本文以云环境中应用范围最广的Web-server作为测试基准,测试了本系统对其性能影响.我们采用Apache+PHP作为服务器的基础运行环境,在被监控虚拟机中部署Web-server,并使用修改过的OpenSSL运行库,重新编译Apache,生成已插桩的SSL模块.

使用包测试工具Siege[29]进行压力测试,结果如图7和图8所示.其中,每台服务器被Siege持续测试30 min.我们测试了标准化的单线程时HTTPS包响应时间和标准化的最大包处理能力.

4.4现有VMI方法比较

本文所实现的VMI触发机制本质上属于改进的Live memory reads方法[30].我们从运行速度、资源消耗、虚拟机性能影响、EPT页表切换连续性和兼容性5个角度来评估现有的VMI方法,如表3所示.

Fig. 7 Normalized response time in different object sizes图7 标准化包响应时间

Fig. 8 Normalized response per second in different object sizes图8 标准化最大包处理吞吐率

Table 3 Comparison of the Existing VMI Methods

其中,Guest-halting方法效率最低,且无法做到实时自省.SHM-snapshot方案即属于Halt snap方法.作为Live snap方法的代表,文献[31]提出使用实时内部的内存快照作为自省程序的分析视图,能够为KVM创建不停止Guest-VM的内存快照,不用暂停虚拟机即可实现监控,一定程度上减少了开销.但由于这些方法修改了Hypervisor的内存管理部分,因此兼容性并不好.文献[32]为QEMU提供了从虚拟机到特权域的内存映射接口,加快了监控效率.然而上述方案与Hypervisor的实现结合紧密,实现复杂,不具有较好的通用性.

Live memory mapping的典型例子是Xen提供的内存页面共享机制,该方法的运行速度非常快,且对虚拟机影响很小;然而这种方法仅适用于PV(Para-virtualization)虚拟机,兼容性差.本文方法同样可以实时自省,且不会扰乱Guest-VM的执行,不过我们不通过基于文件描述符的方式来访问虚拟机的状态,而是提供一套副本EPT视图供Dom0审查.这样既保证了运行速度,且无需修改Guest-OS,在Xen Hypervisor中仅加入了近60代码行SLOC(source lines of code),具有很好的透明性和可移植性.

5 结束语

在云计算大规模普及的今天,虚拟机技术越来越多地应用到了各种计算平台中.然而由于缺乏高效而又可靠的虚拟机内存存取机制,传统虚拟机自省技术的实现一般开销过大.本文从Intel处理器硬件新特性VMFUNC中获得灵感,将VMFUNC与虚拟机自省技术结合起来,提出了一种基于CPU硬件特性的虚拟机自省触发机制.相比于其他VMI实现机制,本方案具有极小的时间开销和较小的空间开销,相较于正常程序的执行,仅引入了低于2%性能开销,使VMI在实际环境中的广泛应用成为了可能.

下一步,我们会将#VE特性集成到本方案中,使系统更加高效并增加其稳定性.同时寻求更高效的虚拟机自省方法来为云平台的安全运行提供保障.

[1] Garfinkel T, Rosenblum M. A virtual machine introspection based architecture for intrusion detection[C] //Proc of Network and Distributed System Security Symp (NDSS’03). Reston, VA: ISOC, 2003: 191-206

[2] Wu Rui, Chen Ping, Liu Peng, et al. System call redirection: A practical approach to meeting real-world virtual machine introspection needs[C] //Proc of Dependable Systems and Networks (DSN’14). Piscataway, NJ: IEEE, 2014: 574-585

[3] Nance K, Bishop M, Hay B. Investigating the implications of virtual machine introspection for digital forensics[C] //Proc of ARES’09. Reston, VA: ISOC, 2009: 1024-1029

[4] Li Wenhao, Xia Yubin, Chen Haibo, et al. Reducing world switches in virtualized environment with flexible cross-world calls[C] //Proc of the 42nd Int Symp on Computer Architecture (ISCA’15). Piscataway, NJ: IEEE, 2015: 375-387

[5] Barham P, Dragovic B, Fraser K, et al. Xen and the art of virtualization[J]. ACM SIGOPS Operating Systems Review, 2003, 37(5):164-177

[6] Intel. Intel 64 and IA-32 Architectures Software Developer’s Manual[M/OL]. Santa Clara, California: Intel Corporation,[2017-07-21]. https://www.intel.com/content/www/us/en/architecture-and-technology/64-ia-32-architectures-software-developer-manual-325462.html

[7] Liu Yutao, Zhou Tianyu, Chen Kexin, et al. Thwarting memory disclosure with efficient hypervisor-enforced intra-domain isolation[C] //Proc of the ACM SIGSAC Conf on Computer and Communications Security (CCS’15). New York: ACM, 2015: 1607-1619

[8] Sharif M, Lee W, Cui Weidong, et al. Secure in-VM monitoring using hardware virtualization[C] //Proc of the ACM SIGSAC Conf on Computer and Communications Security (CCS’09). New York: ACM, 2009: 477-487

[9] Huang Xiao, Deng Liang, Sun Hao, et al. Secure and efficient kernel monitoring model based on hardware virtualization[J]. Journal of Software, 2016, 27(2): 481-494 (in Chinese)

(黄啸, 邓良, 孙浩, 等. 基于硬件虚拟化的安全高效内核监控模型[J]. 软件学报, 2016, 27(2): 481-494)

[10] Jones S, Arpacidusseau A C, Arpacidusseau R H, et al. AntFarm: Tracking processes in a virtual machine environment[C] //Proc of USENIX Annual Technical Conf (USENIX ATC’06). Berkeley, CA: USENIX Association, 2006: 1-14

[11] Dinaburg A, Royal P, Sharif M, et al. Ether: Malware analysis via hardware virtualization extensions[C] //Proc of the ACM SIGSAC Conf on Computer and Communications Security (CCS’08). New York: ACM, 2008: 51-62

[12] Dolangavitt B, Leek T, Zhivich M, et al. Virtuoso: Narrowing the semantic gap in virtual machine introspection[C] //Proc of IEEE Symp on Security and Privacy (Oakland’11). Piscataway, NJ: IEEE, 2011: 297-312

[13] Cristalli S, Pagnozzi M, Graziano M, et al. Micro-virtualization memory tracing to detect and prevent spraying attacks[C] //Proc of USENIX Security Symp (USENIX Security’16). Berkeley, CA: USENIX Association, 2016: 431-446

[14] Ahmed I, Richard Ⅲ GG, Zoranic A, et al. Integrity checking of function pointers in kernel pools via virtual machine introspection[C] //Proc of the Information Security Conf (ISC’13). Berlin: Springer, 2013: 1-16

[15] Wang Zhi, Jiang Xuxian. HyperSafe: A lightweight approach to provide lifetime hypervisor control-flow integrity[C] //Proc of IEEE Symp on Security and Privacy (Oakland’10). Piscataway, NJ: IEEE, 2010: 380-395

[16] Vasudevan A, Chaki S, Maniatis P, et al. üBERSPARK: Enforcing verifiable object abstractions for automated compositional security analysis of a hypervisor[C] //Proc of USENIX Security Symp (USENIX Security’16). Berkeley, CA: USENIX Association, 2016: 87-104

[17] Jiang Xuxian, Wang Xinyuan, Xu Dongyan, et al. Stealthy malware detection through vmm-based “out-of-the-box” semantic view reconstruction[C] //Proc of the ACM SIGSAC Conf on Computer and Communications Security (CCS’07). New York: ACM, 2007: 128-138

[18] Wang Lina, Gao Hanjun, Liu Wei, et al. Detecting and managing hidden process via hypervisor[J]. Journal of Computer Research and Development, 2011, 48(8): 1534-1541 (in Chinese)

(王丽娜, 高汉军, 刘炜, 等. 利用虚拟机监视器检测及管理隐藏进程[J]. 计算机研究与发展, 2011, 48(8): 1534-1541)

[19] Li Baohui, Xu Kefu, Zhang Peng, et al. Research and application progress of virtual machineintrospection technology[J]. Journal of Software, 2016,27(6): 1384-401 (in Chinese)

(李保珲, 徐克付, 张鹏, 等. 虚拟机自省技术研究与应用进展[J]. 软件学报, 2016, 27(6): 1384-1401)

[20] Lengyel T K, Maresca S, Payne B D, et al. Scalability, fidelity and stealth in the DRAKVUF dynamic malware analysis system[C] //Proc of Annual Computer Security Applications Conf (ACSAC’14). Piscataway, NJ: IEEE, 2014: 386-395

[21] Payne B D. Simplifying virtual machine introspection using LibVMI[EB/OL]. 2012 [2017-07-21]. https://prod.sandia.gov/techlib/access-control.cgi/2012/127818.pdf

[22] Payne B D, Martim D P A, Lee W. Secure and flexible monitoring of virtual machines[C] //Proc of Annual Computer Security Applications Conf (ACSAC’07). Piscataway, NJ: IEEE, 2007: 385-397

[23] Pfoh J, Schneider C, Eckert C. A formal model for virtual machine introspection[C] //Proc of the ACM Workshop on Virtual Machine Security (VMSec’09). New York: ACM, 2009: 1-10

[24] Vattikonda B C, Das S, Shacham H, et al. Eliminating fine grained timers in Xen[C] //Proc of the 3rd Cloud Computing Security Workshop. New York: ACM, 2011: 41-46

[25] Faggioli D. Tracing with Xentrace and Xenalyze[EB/OL]. (2012-09-27)[2017-07-21]. https://blog.xenproject.org/2012/09/27/tracing-with-xentrace-and-xenalyze

[26] Lengyel T. Stealthy monitoring with Xen altp2m[EB/OL]. (2016-04-13)[2017-07-21]. https://blog.xenproject.org/2016/04/13/stealthy-monitoring-with-xen-altp2m

[27] Zhang Hao, Zhao Lei, Xu Lai, et al. cMonitor: VMI-based fine-grained monitoring mechanism in cloud[J]. Wuhan University Journal of Natural Sciences, 2014, 19(5): 393-397

[28] Bienia C, Kumar S, Singh J P, et al. The PARSEC benchmark suite: Characterization and architectural implications[C] //Proc of Int Conf on Parallel Architectures and Compilation Techniques (PACT’08). Piscataway, NJ: IEEE, 2008: 72-81

[29] Siege. Siege-http load testing and benchmarking utility[EB/OL]. (2012-01-30)[2017-07-21]. https://www.joedog.org/siege-home

[30] Suneja S, Isci C, De Lara E, et al. Exploring VM introspection: Techniques and trade-offs[C] //Proc of ACM SIGPLAN/SIGOPS Int Conf on Virtual Execution Environment (VEE’15). New York: ACM, 2015: 133-146

[31] Cui Lei, Li Bo, Zhang Yangyang, et al. HotSnap: A hot distributed snapshot system for virtual machine cluster[C] //Proc of the USENIX Large Installation Systems Administration Conf (LISA’13). Berkeley, CA: USENIX Association, 2013: 59-73

[32] Roberts A, McClatchey R, Liaquat S, et al. Poster: Introducing pathogen: A real-time virtual machine introspection framework[C] //Proc of the ACM SIGSAC Conf on Computer and Communications Security (CCS’13). New York: ACM, 2013: 1429-1432

AVirtualMachineIntrospectionTriggeringMechanismBasedonVMFUNC

Liu Weijie, Wang Lina, Tan Cheng, and Xu Lai

(KeyLaboratoryofAerospaceInformationSecurityandTrustedComputing(WuhanUniversity),MinistryofEducation,Wuhan430072) (SchoolofComputerScience,WuhanUniversity,Wuhan430072) (StateKeyLaboratoryofSoftwareEngineering(WuhanUniversity),Wuhan430072)

Virtualization technology as the basis of cloud computing has been widely used, while security issues of virtual machine have been attracted more and more attention. The virtual machine introspection, as an “out-of-the-box” method leveraged to monitoring virtual machine, provides a new perspective for solving the security problems. Aiming at this situation, a triggering mechanism based on VMFUNC is proposed. Taking the advantages of the CPU hardware features VM-Function and RDTSC emulation, the mechanism minimizes the overhead of VM exits. Based on the extended page table view switching through the VMFUNC, our mechanism avoids the system pause caused by VMI programs. By means of overloading VMFUNC and Xentrace, our method can trigger VMI programs actively, thus overcoming the VMI program resident consumption. In this paper, a VMI-as-a-service system is implemented and verified by experiments. The results show that the performance cost is no more than 2%, which makes VMI widely being used possible in practical cloud environment.

cloud computing security; virtual machine introspection; VMFUNC; extended page table pointer (EPTP) switching; VMI-as-a-service

TP309

LiuWeijie, born in 1991. PhD candidate. His main research interests include virtualization security and cloud security.

WangLina, born in 1964. Professor and PhD supervisor. Senior member of CCF. Her main research interests include multimedia security and cloud computing security.

TanCheng, born in 1989. PhD candidate of Wuhan University. Student member of CCF. His main research interests include network security and cloud security.

XuLai, born in 1990. PhD. His main research interests include virtualization security and covert channel analysis.

猜你喜欢
调用虚拟化指令
基于 Verilog HDL 的多周期 CPU 设计与实现
《单一形状固定循环指令G90车外圆仿真》教案设计
核电项目物项调用管理的应用研究
基于OpenStack虚拟化网络管理平台的设计与实现
系统虚拟化环境下客户机系统调用信息捕获与分析①
对基于Docker的虚拟化技术的几点探讨
H3C CAS 云计算管理平台上虚拟化安全防护的实现
中断与跳转操作对指令串的影响
MAC指令推动制冷剂行业发展
利用RFC技术实现SAP系统接口通信