APP下载

一种可配置的虚拟机内存隔离方法

2016-09-10胡志希戴新发徐士伟

计算机与数字工程 2016年8期
关键词:安全策略进程内存

胡志希 戴新发 徐士伟

(武汉数字工程研究所 武汉 430205)



一种可配置的虚拟机内存隔离方法

胡志希戴新发徐士伟

(武汉数字工程研究所武汉430205)

针对虚拟化环境自身体系结构和虚拟机之间内存映射的特点,提出一种特权域和普通域间可配置的内存隔离方法,实现对普通域内存信息的安全性隔离,在保证普通域运行过程内存信息可靠性和秘密性的同时,增强普通域内存信息管理的可维护性。

Xen; 虚拟机安全; 内存隔离

Class NumberTP309.1

1 引言

内存是虚拟机的关键部件之一,内存运行的安全性直接决定虚拟机运行的安全性。Xen虚拟化环境中,如果特权域Domain0(以下简称Dom0)中管理员使用用户空间的工具利用特权读取甚至Dump普通域DomainU(以下简称DomU)内存,或者其他普通域用户利用Xen中存在的漏洞提权访问其他普通域的内存(如Xen安全团队披露的高危漏洞XSA-123[1],可能导致Guest VM读取其他Guest VM的敏感数据。此漏洞对公有云服务的影响重大),这将使得Xen虚拟机的内存隔离变得非常脆弱。由此可见,如何确保虚拟机之间内存安全隔离直接影响到Xen虚拟化环境的安全性和可靠性。

为解决恶意虚拟机用户窃取其他虚拟机内存信息的问题,已有研究人员借鉴Linux操作系统中安全模块Linux Security Module(LSM),在Xen环境中设计Xen安全模块XSM[2](Xen Security Module)。XSM主要支持两种安全框架:ACM[3]和Flask[4]。其中Flask(Flux Advanced Security Kernel)安全框架移植自SELinux,它清晰地区分开策略决定逻辑和策略执行逻辑,是一个细粒度的、灵活的强制访问控制框架。

本文针对虚拟化环境自身安全体系结构的特点,结合Xen中与内存安全相关的管理机制,分析Dom0通过XenAccess机制获取虚拟机内存信息的完整过程,证明Xen虚拟机内存隔离的脆弱性,并基于Xen Flask安全框架提出一种可配置的隔离特权域对普通域DomU获取内存信息的方法,最后通过实验证明该方法能够完成Dom0和DomU之间的内存安全隔离。

2 可配置的虚拟机内存隔离方法

本文可配置的虚拟机内存隔离方法如图1所示。

图1 可配置的虚拟机内存隔离方法

首先,根据Xen安全模块Flask安全框架已有的TE(Type Enforcement)模型,将DomU标记为特殊的安全标签,结合当前的FLASK安全策略中钩子函数实现扩展Flask关于特殊安全标签的策略,保证DomU的正常创建和运行。

然后,重新生成Flask策略文件,在每次启动Xen hypervisor时,此策略文件被载入Xen内核,Xen安全模块对Xen平台上运行的虚拟机之间如域控制、授权表、内存控制[5]的相关操作进行安全性检测,只有符合策略文件的操作才被允许执行。

最后,在Dom0中利用Libxc库通过特权驱动privcmd调用Hypercall,尝试读取DomU的运行内存信息。在假设Xen Hypervisor为可信的前提下,Hypervisor之外的任何域无权访问和获取其他域系统内存私有空间信息。若正确设置Flask安全策略,则Xen安全模块能够拒绝Dom0针对DomU内存信息读取操作,从而达到DomU和Dom0内存安全隔离的目的。

3 实现方法

3.1Flask安全框架

Flask安全框架由策略强制服务器和安全服务器组成,策略强制服务器负责实施执行安全策略[6],安全服务器负责设置安全策略[7],这样可以隔离策略的执行和配置,如图2所示。如果需要更新策略,只需要更新安全服务器端,策略强制服务器端不需要作任何的改动。

基于图1所示的可配置的虚拟机内存隔离方法和图2中的安全框架结构,可配置的虚拟机内存隔离实现方法包括:在已激活Flask框架的Xen虚拟计算平台上,标记进行内存隔离的虚拟机DomU为特殊安全标签,扩展Flask默认安全策略文件保证DomU正常创建,在策略文件中设置拒绝Dom0利用超级调用直接读取DomU内存信息的操作。根据这些策略信息,位于Xen Hypervisor内的Xen安全模块实现对Dom0和DomU之间内存控制操作的检测和判断。

图2 Flask安全框架结构图

3.2Flask安全策略扩展

Flask安全框架中应用到的TE(类型加强)模型区别于传统的TE模型。它直接在Security Context中用Type安全属性来统一标识主体和客体,不直接用Domain同User相关联,而是用RBAC(基于角色的访问控制)模型来给User和Domain直接提供一个额外的抽象层。此外,Flask中的TE还提供更好的细粒度的访问操作。对于主体对客体的操作,系统提供如下变量来确定具体的操作:Source Type表示主体、Target Type表示客体、Class表示对系统中哪一类资源进行操作、Permission表示具体进行什么操作。其中Source Type和Target Type在系统中用Sid来标识,系统通过Sid来获取对应的Context,最后从Context中取得Type。Class和Permission具体确定是哪类操作。

将运行Centos 6.4操作系统的虚拟机(以下简称虚拟机Centos6.4)标记为特殊的安全标签。在Centos6.4.hvm配置文件中:

seclabel='customer_1:vm_r:nomigrate_t'

init_seclabel='customer_1:vm_r:nomigrate_t_building'

虚拟机Centos6.4在创建时使用安全标签init_seclabel,在运行时更换安全标签为seclabel[8]。扩展策略配置policy/policy.conf[9]文件。如表1所示。

表1 Flask安全策略扩展

4 实验与结果分析

4.1攻击实验

Libvmi[10]是一款Linux下开源的Xen扩展库,它封装了Libxc库。实验平台环境为:宿主机安装Xen 4.6,Dom0操作系统为Centos 6.7,linux内核版本为3.18.8;实验虚拟机安装的操作系统为Centos 6.4,linux内核版本为2.6.32。攻击实验的实现流程如图3所示。过程如下:

1) 攻击程序请求获取kernel symbol符号init_task的虚拟地址。

2) 通过查找目标Domain的System.map文件,找到init_task对应的虚拟地址。

3) init_task页目录映射,找到第一个进程对应的的页表入口地址,Xen将此进程页表映射到page directory。

4) 页表映射寻找正确的数据页。

5) 数据页返回到libvmi的库中。

6) Libvmi将与进程有关的数据返回攻击程序,打印出进程列表信息。

从图3中可以看出,首先利用Libxc暂停虚拟机Centos6.4,并寻找进程信息入口地址。在Linux内核中,每一个进程对应着一个进程描述符task_struct实例,task_struct在"linux/sched.h"中定义。进程可以访问的所有虚拟地址称为其地址空间(Virtual Address),task_struct中的成员变量mm_struct保存着地址空间的所有信息。由libvmi.conf获得进程任务偏移量tasks_offset,name_offset,pid_offset。

获取进程列表的表头地址信息,即init_task进程地址信息,主要方式有两种,一是在存有sym_cache_data的哈希表中查找;二是如果哈希表中没有kernel symbol的地址信息,则通过查找System.map文件来获取。获取成功后开始遍历任务列表。System-map文件中init_task所对应的虚拟地址作为current_process值。通过list_head=current_process+tasks_offset,并以list_head作为init_task进程入口current_list_entry,映射虚拟机Centos6.4内存获取next_list_entry的虚拟地址。一个进程对应一个list entry,根据pid、name的偏移量可以映射内存获取对应进程id,进程名信息。

图3 内存攻击实验流程图

其中xc_map_foreign_range()接口将目标系统中的内核内存映射到自己的地址空间。而这是通过内核驱动/proc/xen/priv-cmd,ioctl系统调用来间接调用hypercall:完成由3环到1环的转变,并完成超级调用。程序运行结果如图4所示。

实验结果证明:Xen对虚拟机内存管理的不安全性,作为管理员或者能够访问Dom0的任何人员可以随意访问DomU内存空间。

4.2内存安全隔离功能测试

在Xen中进行如第3.2节所示的扩展安全策略的设置,然后再在Dom0中尝试映射虚拟机Centos6.4内存,通过验证DomU内存数据是否得到了保护。

1) 在Dom0中创建虚拟机Centos6.4。

2) 使用攻击实验中的process-list程序,在Dom0中尝试获取虚拟机Centos6.4中运行的进程。如图5所示,Dom0获取DomU内存列表失败,错误代码为拒绝。

通过单步调试获取linux_privcmd_

map_foreign_bulk中错误码为errno=13。关于错误码的宏定义为:#define EACCES 13 /* Permission denied */。

进一步运行命令xl dmesg | grep avc[11],显示系统已拒绝Dom0对虚拟机Centos6.4的map_read操作。由此可以看出,在ioctl系统调用间接调用Xen hypercall进行内存页面映射的过程中,Xen安全模块根据已扩展的安全策略文件对相关操作进行检测并拒绝,达到隔离恶意用户利用Dom0特权窃取DomU内存信息的目的。

图4 内存攻击实验结果

图5 内存隔离测试结果

4.3内存安全隔离性能测试

内存访问性能测试采用Mbw[12](Memory Bandwidth Benchmark)工具对虚拟机内存带宽进行测定,并对比安全策略扩展前后的性能指标差距,目的在于测定内存隔离方案对系统内存访问性能造成的影响。

表2 性能测试表

测试方法:使用与攻击实验相同硬件环境,分别在策略开启时和关闭时的Xen平台主机上进行内存指标访问的测定,并进行对比。运行命令mbw 256,默认运行10次,256表示测试所用的内存大小,单位为MiB。

测试结果:测试结果如表2所示。从测试结果看,策略扩展开启时主机的内存带宽值较高,但策略扩展关闭时对内存访问性能影响不大。

5 结语

本文设计并实现一种可配置的隔离特权域和普通域运行内存信息的方法。Xen Hypervisor能够支持Xen安全模块对Flask安全策略的扩展和配置,完成对特权域和普通域内存之间的安全隔离,一方面保证普通域内存信息的可靠性和秘密性;另一方面,增强普通域内存信息管理的可维护性。实验表明,该方法对Xen平台正常内存访问活动性能的影响较小。

[1] XSA-123[EB/OL]. http://xenbits.xen.org/xsa.

[2] Machon Gregory. A Mechanism for Risk Adaptive Access Control (RAdAC)[R]. NSA,2007,3.

[3] Bryan D. Payne, Martim D. P. de A. Carbone, Wenke Lee. Secure and Flexible Monitoring of Virtual Machines[C]//Computer Security Applications Conference, 2007. ACSAC 2007. Twenty-Third Annual,2007,12.

[4] G. Coker. Xen Security Modules (XSM)[EB/OL]. http://www.xen.org/files/xensummit_4/xsm-summit-041707_Coker.pdf.

[5] Chris Takemura, Luke S. Crawford. The book of XEN: A Practical Guide for the System Administrator[M]. No Starch,2010:7-11.

[6] Derek G. Murray Grzegorz Milos Steven Hand. Improving Xen Security through Disaggregation[C]//Proceedings of the fourth ACM SIGPLAN/SIGOPS international conference on Virtual execution environments,2008.

[7] S. Rueda, H. Vijayakumar, T. Jaeger. Analysis of virtual machine system policies[C]//In Proc. ACM Symposium on Access Control Models and Technologies (SACMAT),2009:227-236.

[8] Russell Pavlicek. Securing Your Cloud with Xen Project’s Advanced Security Features[R]. Cloud Open North America,2013.

[9] 倪继利.Linux安全体系分析与编程[M].北京:电子工业出版社,2007:83-84.

NI Jili. Linux Security System Analysis and Programming[M]. Beijing: Publishing House of Electronics Industry,2007:83-84.

[10] Asit More, Shashikala Tapaswi. Virtual machine introspection: towards bridging the semantic gap[J]. Journal of Cloud Computing: Advances, Systems and Applications,2014(3):3-6.

[11] Salaun M. Practical overview of a Xen covert channel[J]. Journal in Computer Virology,2010(6):317-328.

[12] 邵长庚.Xen云环境虚拟机安全隔离技术研究与实现[D].成都:电子科技大学,2013:78-79.

SHAO Changgeng. Research and Implementation on Xen Cloud Security Isolation Technology[D]. Chengdu: University of Electronic Science and Technology of China,2013:78-79.

A Configurable Method for Virtual Machine Memory Isolation

HU ZhixiDAI XinfaXU Shiwei

(Wuhan Institute of Digital and Engineering, Wuhan430205)

Based on the virtualized environment architecture and memory mapping between virtual machines, a configurable method for preventing the privileged domain from accessing to user domain’s memory is proposed. The method implements the security isolation between domains’ memory, and this not only guarantees memory reliability and confidentiality during domain process execution, but also enhances the maintainability of domain’s memory management.

Xen, virtual machine security, memory isolation

2016年2月8日,

2016年3月31日

胡志希,女,硕士研究生,研究方向:信息安全。戴新发,男,博士,研究员,硕士生导师,研究方向:虚拟化技术。徐士伟,男,博士,工程师,研究方向:信息安全。

TP309.1

10.3969/j.issn.1672-9722.2016.08.032

猜你喜欢

安全策略进程内存
基于飞行疲劳角度探究民航飞行员飞行安全策略
债券市场对外开放的进程与展望
“春夏秋冬”的内存
改革开放进程中的国际收支统计
一种防火墙安全策略冲突检测方法*
浅析涉密信息系统安全策略
内存搭配DDR4、DDR3L还是DDR3?
如何加强农村食盐消费安全策略
社会进程中的新闻学探寻
基于内存的地理信息访问技术