本文作者:360 Marvel Team团队负责人 唐青昊 (新浪微博:SunSky0101)
最近amazon、阿里云等云供应商都已经收到了xen官方的 漏洞通知邮件 ,在这封邮件中,官方声明MarvelTeam发现并报告了这枚高危漏洞。今天的主角就是这枚编号CVE-2015-7504的,一枚同时影响kvm和xen平台的高危虚拟化安全漏洞。
2015是云计算虚拟化安全问题爆发的元年,继毒液漏洞肆虐全球之后,kvm,xen,vmware平台上又不断发现高危漏洞,这些漏洞均可威胁云计算系统的稳定运行,黑客利用这些漏洞可以从虚拟机破坏宿主机,或者控制宿主机,进入威胁云计算系统所在的内网。
本文为该系列的第三篇文章,将详细分析团队在9月22日提交的CVE-2015-7504 qemu pcnet网卡缓冲区溢出漏洞的相关知识。与之前我们披露的漏洞不同,该漏洞溢出的位置非常精妙,可以轻易使黑客控制代码流程,是一枚上等的安全漏洞。另外,我们也吐槽下qemu官方的处理效率,该漏洞从提交到正式公开,经历了2个月零7天。如此高危的漏洞在这段漫长时间内被黑客用于云计算系统的攻击或者发生泄露的几率都是很大的!
关于之前的两篇文章,链接如下:1 2
一. 什么是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 系统)完成了对该漏洞的完美利用。在该视频中,黑客通过虚拟机漏洞实现代理功能,控制虚拟机所在宿主机,并且在宿主机中执行任意指令。
观看视频 (访问密码 5299)
四.漏洞修复方案
xen官方在MarvelTeam的帮助下提供了对该漏洞的修复补丁,截图如下:
图7. 官方公布的补丁信息
在该补丁文件中,对pcnet_receive和pcnet_transmit两个函数的缓冲区处理都进行了修正,完美修复了之前存在的漏洞。
小结:针对虚拟化安全漏洞CVE-2015-7504,本文完整分析了漏洞相关的原理,危害,以及修复方案。在漏洞利用视频中,Marvel Team演示了黑客控制宿主机的全过程。希望此文可以引起更多云服务供应商,对虚拟化安全问题的重视。