作者:360 Marvel Team 团队负责人 唐青昊 (新浪微博:SunSky0101;微信:702108451)
前言:
2015年是云计算飞速发展的一年,也是云虚拟化安全漏洞层出不穷的一年。继5月份毒液漏洞肆虐全球云厂商之后,360 Marvel Team又累计在kvm,xen,vmware平台上协助厂商修复了14枚高危0day漏洞,这些漏洞均会导致通用云系统被黑客攻破。目前云上存放着大量用户的个人隐私信息,企业数据库信息,以及政府敏感信息,一旦云系统被攻破,就意味着这些重要的信息会被泄露。黑客利用虚拟化漏洞不但可以偷取到重要信息,甚至可以从一台虚拟机的普通用户发起攻击控制宿主机,最终控制整个云环境的所有用户。
《360 Marvel Team虚拟化漏洞》系列文章,针对团队独立发现的虚拟化软件中的高危0day漏洞进行深度分析,希望以此揭开虚拟化攻击技术的神秘面纱。360 Marvel Team团队结合在漏洞挖掘和利用过程中的相关经验,针对云计算平台提供完善的虚拟化防护解决方案,持续保证360云的安全。
本文为该系列的第四篇文章,将详细分析编号为CVE-2015-8567的qemu内存泄露漏洞的相关知识,该漏洞存在于xen和kvm系统的qemu模块中的vmxnet3网卡组件,黑客在一台虚拟机中利用该漏洞,可以导致同一宿主机上的其他虚拟机崩溃。360 Marvel Team于 10月22日提交该漏洞,官方于12月16号公开了漏洞信息及修复补丁。
关于之前的三篇文章,链接如下:
http://www.freebuf.com/vuls/77834.html
http://blogs.360.cn/blog/360marvelteam虚拟化漏洞第二弹-cve-2015-5279-漏洞分析/
http://bobao.360.cn/learning/detail/2423.html
一. 关于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
二. 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函数分配内存,直至宿主机系统内存枯竭。
三.漏洞危害&漏洞利用方案
官方关于CVE-2015-8567漏洞危害描述为:虚拟机授权用户利用该漏洞可以泄露宿主机内存,导致拒绝服务。该信息的链接地址为:
https://access.redhat.com/security/cve/cve-2015-8567
图4. 官方公布的漏洞描述
360 Marvel Team在发现该漏洞之后,完成了测试环境中的漏洞利用程序。在测试环境中,有多台虚拟机运行在一个宿主机上,黑客位于其中的一台虚拟机,当黑客运行漏洞利用程序之后,经过约40分钟时间,多台虚拟机崩溃。这里将最终的结果截图如下:
图5. 漏洞利用结果截图
四.漏洞修复方案
厂商可以使用打补丁的方式修补该漏洞。官方提供了完整的针对CVE-2015-8567漏洞的补丁,链接为:https://lists.gnu.org/archive/html/qemu-devel/2015-12/msg02299.html。其中增加了前文提到的对s->device_active值的判断(截图如下)。
图6. 官方公布的漏洞补丁部分截图
小结:针对360 Marvel Team独立发现的虚拟化安全漏洞CVE-2015-8567,本文完整分析了漏洞相关的原理,利用方案,危害说明,以及修复方案。希望此文可以引起更多使用公有云和私有云企业的关注,重视虚拟化安全问题。
关于360 Marvel Team:
360 Marvel Team是国内首支虚拟化安全研究团队,研究内容为云安全领域的虚拟化平台攻防技术,致力于保持领先的脆弱性安全风险发现和防护能力,针对主流虚拟化平台提供漏洞检测和hypervisor加固解决方案。
发表评论
您还未登录,请先登录。
登录