作者:360 Marvel Team 团队负责人 唐青昊 (新浪微博:SunSky0101)
前言:
相信最近amazon,阿里云等云供应商都已经收到了xen官方的漏洞通知邮件(http://lists.xen.org/archives/html/xen-devel/2015-11/msg03351.html 或者 http://seclists.org/oss-sec/2015/q4/405 ),在这封邮件中,官方声明MarvelTeam发现并报告了这枚高危漏洞。今天的主角就是这枚编号CVE-2015-7504的,一枚同时影响kvm和xen平台的高危虚拟化安全漏洞。
2015是云计算虚拟化安全问题爆发的元年,继毒液漏洞肆虐全球之后,360 Marvel Team又不断在kvm,xen,vmware平台上发现了众多高危安全漏洞,这些漏洞会导致各种云系统被黑客攻破。目前云系统上存放着大量用户的个人隐私信息,企业数据库信息,以及政府的敏感信息,一旦云被攻破,就意味着这些重要的信息就会被泄露。而本文所介绍的这枚漏洞,就具备这样的危害性,黑客利用这个漏洞不但可以偷取到重要信息,甚至可以从一台虚拟机的普通用户发起攻击控制宿主机,最终控制整个云环境的所有用户。因此,对该漏洞的深入分析非常必要。
360 Marvel Team虚拟化漏洞系列文章,是针对团队独立发现的虚拟化软件的,高危0day漏洞的分析文章,希望以此揭开虚拟化攻击技术的神秘面纱。在刚刚过去的日本东京太平洋安全大会(PACSEC)中,360 Marvel Team安全研究员唐青昊,进行了关于《虚拟化系统漏洞挖掘技术》议题的演讲,在该议题中分享了漏洞挖掘的核心技术。
360 Marvel Team团队结合在漏洞挖掘和利用过程中的相关经验,针对云计算平台提供防御解决方案,防御虚拟化平台的安全威胁,该解决方案将持续保证360云的安全。
本文为该系列的第三篇文章,将详细分析团队在9月22日提交的CVE-2015-7504 qemu pcnet网卡缓冲区溢出漏洞的相关知识。与之前我们披露的漏洞不同,该漏洞溢出的位置非常精妙,可以轻易使黑客控制代码流程,是一枚上等的安全漏洞。另外,我们也吐槽下qemu官方的处理效率,该漏洞从提交到正式公开,经历了2个月零7天。如此高危的漏洞在这段漫长时间内被黑客用于云计算系统的攻击几率都是很大的!
关于之前的两篇文章,链接如下:
http://www.freebuf.com/vuls/77834.html
http://blogs.360.cn/blog/360marvelteam虚拟化漏洞第二弹-cve-2015-5279-漏洞分析/
一. 什么是pcnet
QEMU软件中,实现了对大量网卡的模拟,如pcnet,rtl8139,ne2000,eepro100,e1000等,通过组件满足虚拟机用户对各种网卡的需求。网卡相关的漏洞也发现了很多,如之前我们发现的e1000网卡的漏洞,就是在数据报接收过程中出现的代码问题引起的。
pcnet是虚拟化软件QEMU中实现AMD PCNET网卡功能模拟的组件,相关的代码实现位于/hw/net/pcnet.c中。
在qemu软件中使用pcnet网卡,需要如下的命令行进行配置:
qemu-system-x86_64 centos-6.5-x64.img -m 1024 – net nic,model=pcnet -net user
二.漏洞原理分析
了解了pcnet的基础知识,再来聊聊CVE-2015-7504漏洞原理。我们前面已经说到,该漏洞利用时可以直接控制代码执行路径,那么它是怎么做到的呢?
首先我们来看漏洞触发过程,该漏洞发生在pcnet网卡模块的接收数据包的过程中,相关函数pcnet_receive的执行逻辑:首先检测CSR_DRX(s),CSR_STOP(s),CSR_SPND(s),size,CSR_LOOP(s),s->looptest这些值是否符合边界要求,确定函数是否继续处理。并且如果buf太小,则把它扩充到MIN_BUF_SIZE,之后检测是否要接受此包。最终把数据拷到rmd中物理地址中。相关代码截图如下:
图1. 有缺陷的代码
在上述代码中,我们可以看到,在实现数据包buffer操作的逻辑时,程序员出现了一个明显的错误:未判断数据包的长度是否已经等于buffer长度。另外,在pcnet.c的另一个函数pcnet_transmit中也有对缓冲区位置和数据包长度的处理,截图如下:
图2. pcnet_transmit函数中进行缓冲区相关的处理
如果数据包长度临近缓冲区长度(4096)时,由于代码逻辑会自动添加4个字节的crc值,因此就会发生缓冲区溢出。
巧合的是溢出了buffer之后的四个字节恰好会覆盖一个结构体指针。如图所示:
图3.buffer所在的结构体
图4.qemu_irq的结构体
在溢出发生之后,代码流程进入pcnet_update_irq函数中,该函数经过层层调用,最终使用了irq->handler作为函数指针!!!而该irq的结构体指针我们可以对其进行控制,因此就完成了对代码逻辑的劫持。
图5. pcnet_update_irq的代码逻辑
三.漏洞危害&漏洞利用演示
CVE-2015-7504被xen和qemu社区官方安全团队定义为高危漏洞,一旦被黑客恶意利用,可以实现虚拟机逃逸攻击。在成功利用该漏洞发动攻击之后,黑客进而可以控制宿主机执行任意指令,后果十分可怕。
图6. xen官方对该漏洞内容和危害的描述
Marvel Team在演示环境中(64位centos 系统)完成了对该漏洞的完美利用。在该视频中,黑客通过虚拟机漏洞实现代理功能,控制虚拟机所在宿主机,并且在宿主机中执行任意指令。
(观看视频时,请注意“被攻击的宿主机”和“黑客主机”两个标签页之间的切换。另外视频演示的攻击方式,绕过了目前大部分针对宿主机和虚拟机的防护手段,可谓是相当残暴。)
视频连接地址如下:
http://yunpan.cn/c3wGdEInx7LMC 访问密码 5299
四.漏洞修复方案
xen官方在MarvelTeam的帮助下提供了对该漏洞的修复补丁,截图如下:
图7. 官方公布的补丁信息
在该补丁文件中,对pcnet_receive和pcnet_transmit两个函数的缓冲区处理都进行了修正,完美修复了之前存在的漏洞。
小结:针对360 Marvel Team独立发现的虚拟化安全漏洞CVE-2015-7504,本文完整分析了漏洞相关的原理,危害,以及修复方案。在漏洞利用视频中,Marvel Team演示了黑客控制宿主机的全过程。希望此文可以引起更多云服务供应商,对虚拟化安全问题的重视。
关于360 Marvel Team:
360 Marvel Team是国内首支虚拟化安全研究团队,研究内容为云安全领域的虚拟化平台攻防技术,致力于保持领先的脆弱性安全风险发现和防护能力,针对主流虚拟化平台提供漏洞检测和系统加固解决方案。
发表评论
您还未登录,请先登录。
登录