360 Marvel Team虚拟化漏洞第四弹 - CVE-2015-8567 漏洞分析

阅读量153807

|

发布时间 : 2015-12-31 10:17:48

https://p3.ssl.qhimg.com/t01c0d121f2a06e8405.jpg

        作者: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函数执行激活设备的相关逻辑。

https://p5.ssl.qhimg.com/t013635bb46a82e5d52.jpg

图1. vmxnet3_handle_command函数部分内容

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

        (1)根据配置信息,客户机类型等条件设置设备操作数据,如发送队列数量,接收队列数量;

        (2)根据发送队列数量,初始化发送队列的缓冲区;根据初始化队列过程中计算的max_tx_frags值初始化发送数据包;

        (3)初始化接收数据包;初始化接收队列的缓冲区。

        vmxnet3_activate_device函数的代码截图如下:

https://p0.ssl.qhimg.com/t01835b6e27e24d5c4a.jpg

图2. vmxnet3_activate_device函数部分内容

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

https://p4.ssl.qhimg.com/t01fcc8cc041a010013.jpg

图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

https://p5.ssl.qhimg.com/t01a2ab9a1a9418dbb4.jpg

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

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

https://p3.ssl.qhimg.com/t0187b11ee2733c2597.jpg

图5. 漏洞利用结果截图


        四.漏洞修复方案

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

https://p5.ssl.qhimg.com/t012fc782cf8c962963.jpg

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

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


        关于360 Marvel Team:

        360 Marvel Team是国内首支虚拟化安全研究团队,研究内容为云安全领域的虚拟化平台攻防技术,致力于保持领先的脆弱性安全风险发现和防护能力,针对主流虚拟化平台提供漏洞检测和hypervisor加固解决方案。

本文由360MarvelTeam原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/83215

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
360MarvelTeam
分享到:微信

发表评论

内容需知
  • 投稿须知
  • 转载须知
  • 官网QQ群8:819797106
  • 官网QQ群3:830462644(已满)
  • 官网QQ群2:814450983(已满)
  • 官网QQ群1:702511263(已满)
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 360网络攻防实验室 安全客 All Rights Reserved 京ICP备08010314号-66