作者:360 Marvel Team 团队负责人 唐青昊 (新浪微博:SunSky0101;微信:702108451)

2015年是“云跃进”的一年,同样也是虚拟化漏洞真正被人们认知、重视的一年,不甘于“等风来”的360 Marvel Team主动出击,用实际行动为云计算保驾护航。截至今日,我们累计在kvm,xen,vmware平台上公开了高达14枚高危安全0day漏洞,这些漏洞均会导致通用云系统被黑客攻破。

今天,政府、企业、个人都有越来越多的资料信息在云上储存,一旦云系统被攻破,就意味着这些重要的信息会被泄露。黑客利用虚拟化漏洞不但可以偷取到重要信息,甚至可以从一台虚拟机的普通用户发起攻击控制宿主机,最终控制整个云环境的所有用户。

本文为该系列的第四篇文章,也是今年的收官之作,文章将详细分析编号为CVE-2015-8567的qemu内存泄露漏洞的相关知识,该漏洞存在于xen和kvm系统的qemu模块中的vmxnet3网卡组件,黑客在一台虚拟机中利用该漏洞,可以导致同一宿主机上的其他虚拟机崩溃。360 Marvel Team于 10月22日提交该漏洞,官方于12月16号公开了漏洞信息及修复补丁。

1、关于qemu和vmxnet3

QEMU是一款存在于xen和kvm系统中的用以实现设备模拟的软件,它实现了在虚拟机中使用键盘,网络通信,磁盘存储等诸多需要硬件设备参与的功能,并且可模拟的硬件设备类型非常丰富,如它提供了10种以上类型设备的网卡设备模拟组件,包括pcnet,rtl8139,ne2000,eepro100,e1000等。

vmxnet3组件模拟了vmware半虚拟化网卡的功能。可以使用如下命令启动带有vmxnet3网卡模拟功能的虚拟机:

qemu-system-x86_64 -m 2048 -enable-kvm -device vmxnet3 centos-6.5-x64.img

2、CVE-2015-8567漏洞原理分析

我们首先来分析出现CVE-2015-8567漏洞的代码,是在qemu-2.4.0/hw/net/vmxnet3.c中的vmxnet3_handle_command函数当中。该函数会根据cmd数值执行针对网卡的不同操作,如cmd的值等于VMXNET3_CMD_ACTIVATE_DEV时,会进入vmxnet3_activate_device函数执行激活设备的相关逻辑。

图1. vmxnet3_handle_command函数部分内容

当逻辑进入vmxnet3_activate_device函数中,会按照如下3个阶段实现网卡设备激活:

(1)根据配置信息,客户机类型等条件设置设备操作数据,如发送队列数量,接收队列数量;
(2)根据发送队列数量,初始化发送队列的缓冲区;根据初始化队列过程中计算的max_tx_frags值初始化发送数据包;
(3)初始化接收数据包;初始化接收队列的缓冲区。

vmxnet3_activate_device函数的代码截图如下:

图2. vmxnet3_activate_device函数部分内容

在第2阶段中,使用vmxnet_tx_pkt_init函数初始化发送数据包,而在该函数中使用g_malloc分配了长度为max_frags + VMXNET_TX_PKT_PL_START_FRAG的内存空间。相关代码如下图所示:

图3. vmxnet_tx_pkt_init函数部分内容

在整个“激活”逻辑中,缺乏对设备当前状态的判断,因此存在被多次“激活”的风险。简单来说,在vmxnet3_activate_device函数的结尾,设置了s->device_active 的值为true,然而在整个函数中并未检查s->device_active的值是否已经为true,攻击者可以不断通过控制网卡进入“激活”逻辑,从而多次调用g_malloc函数分配内存,直至宿主机系统内存枯竭。

3、漏洞危害&漏洞利用方案

官方关于CVE-2015-8567漏洞危害描述为:虚拟机授权用户利用该漏洞可以泄露宿主机内存,导致拒绝服务。该信息的链接地址为:https://access.redhat.com/security/cve/cve-2015-8567

图4. 官方公布的漏洞描述

360 Marvel Team在发现该漏洞之后,完成了测试环境中的漏洞利用程序。在测试环境中,有多台虚拟机运行在一个宿主机上,黑客位于其中的一台虚拟机,当黑客运行漏洞利用程序之后,经过约40分钟时间,多台虚拟机崩溃。这里将最终的结果截图如下:

图5. 漏洞利用结果截图

4、漏洞修复方案

厂商可以使用打补丁的方式修补该漏洞。官方提供了完整的针对CVE-2015-8567漏洞的补丁,链接为:https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg02299.html。其中增加了前文提到的对s->device_active值的判断(截图如下)。

图6. 官方公布的漏洞补丁部分截图

5、小结:

针对360 Marvel Team独立发现的虚拟化安全漏洞CVE-2015-8567,本文完整分析了漏洞相关的原理,利用方案,危害说明,以及修复方案。希望此文可以引起更多使用公有云和私有云企业的关注,重视虚拟化安全问题。

相关阅读

KVM虚拟化新型漏洞CVE-2015-6815技术分析

360MarvelTeam虚拟化漏洞第二弹:CVE-2015-5279 漏洞分析

360MarvelTeam虚拟化漏洞第三弹:CVE-2015-7504漏洞分析

*作者/360MarvelTeam(企业账号),转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)

源链接

Hacking more

...