Xen是领先的开源虚拟化平台,支撑着亚马逊云、阿里云等众多知名的公有云服务的基础建设,因此,保证虚拟化基础设施的安全性具有重要意义。

阿里云安全漏洞研究团队致力于云安全威胁的研究与追踪,近日,我们发现并提交了一处Xen平台下的虚拟机逃逸漏洞,漏洞编号为XSA-148/CVE-2015-7835,鉴于该漏洞利用简单且威力强大,我们将它命名为“破天(Dome Breaking)”漏洞。

“破天”漏洞详情

“破天”漏洞从Xen 3.4版本开始引入,后续版本包括最新发布的Xen 4.6都受该漏洞的影响。攻击者可以利用一台以PV模式运行的虚拟机轻易实现虚拟机逃逸,从而可以进一步控制Xen Hypervisor、Dom0以及当前物理机器上运行的其他所有虚拟机。

该漏洞存在于Xen Hypervisor的内存管理机制中。基于安全的考虑,Xen将PV DomU的页表页面映射为“不可写”,因此PV DomU无法直接修改其页表,只能通过调用相关的Hypercalls向Xen Hypervisor发起页表修改请求,Xen Hypervisor检查通过后代替PV DomU进行修改。然而,为了优化检查步骤,提高运行速度,Xen Hypervisor在提供了快速更新的选择,即如果Xen Hypervisor认为本次页表更新是安全的,就不必再走严格的检查流程。

问题在于,Xen Hypervisor在更新Page Directory Table(PDT)中的页面项时,快速更新逻辑会允许新的Page Driectory Table Entry(PDE)携带_PAGE_PSE和_PAGE_RW标志。

PDE的_PAGE_PSE标志会导致MMU允许使用2M页面,在这种情况下,2M Paging的MMU页面映射逻辑如下:

图1 IA-32e模式2M页面地址转换逻辑

对于PDE更新请求,是否执行快速更新操作是由Xen的l2e_has_changed(ol2e, nl2e, _PAGE_PRESENT)例程决定的。该函数会检查ol2e与nl2e中的物理页帧号、_PAGE_PRESENT标志位是否一致,如果一致,则直接使用nl2e更新该PDE。此时,如果nl2e中设置了_PAGE_PSE标志位,可以通过构造虚拟地址访问nl2e中页帧号指示的2M大小的物理内存,即真正允许访问到的物理内存不是Xen假定的4K大小,而是真实的连续的2M大小,而扩增的这部分物理内存,有可能是不属于当前虚拟机的。同时,如果nl2e包含了_PAGE_RW,这2M内存可以任意写。

从漏洞利用的角度,既然通过设置PDE的_PAGE_PSE和_PAGE_RW位可以突破对4K内存的访问限制,访问到连续的2M大小的物理内存,如果事先将一个Page Table置于这2M物理内存空间内,这样就可以通过恶意的nl2e读写该Page Table,从而突破了Xen对虚拟机只能以只读权限拥有Page Tables的限制,实现了任意物理内存读写,最终可以绕过软硬件上的所有安全机制的限制在Xen Hypervisor上下文环境和Dom0上下文环境执行任意代码。

演示视频

   

“破天”漏洞补丁目前已经公开发布,建议尚未更新的Xen平台用户及时从官方下载并安装安全补丁。

参考:

1. XSA-148安全公告:http://xenbits.xen.org/xsa/advisory-148.html

2. Intel 64 and IA-32 Architectures Software Developer’s Manual Vol.3

* 作者:阿里安全(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

源链接

Hacking more

...