3

360MarvelTeam虚拟化漏洞第二弹 - CVE-2015-5279 漏洞分析 | WooYun知识库

 6 years ago
source link:
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

0x00 前言


云计算目前已成为一种被大多数互联网公司接受的服务模式,它提供了定制化的硬件资源,应用,以及服务。作为实现云计算构想的最重要的技术基石,虚拟化系统提供了硬件资源的量化分配和灵活调度,保证云业务的顺利实施。因此,云业务的健康发展,离不开虚拟化系统的稳定运行。

360 Marvel Team将陆续公开一系列独立发现的针对虚拟化软件高危0day漏洞的分析文章,揭开虚拟化攻击技术的神秘面纱。在9月29日的360 ISC 2015大会上,该团队安全研究员唐青昊,将进行关于《云虚拟化系统的漏洞挖掘技术》议题的演讲,在该议题中将分享漏洞挖掘的核心技术。

本文为该系列的第二篇文章,将详细分析CVE-2015-5279 qemu网卡堆溢出漏洞的相关知识。关于第一篇文章针对CVE-2015-6815漏洞的分析,详见http://www.freebuf.com/vuls/77834.html

0x01 漏洞基础知识


CVE-2015-5279是qemu虚拟化环境中rtl8029网卡设备存在一处堆溢出类型漏洞。那么什么是qemu软件?qemu软件和kvm虚拟化存在什么样的关系?rtl8029网卡是怎样的一款设备呢?下面将逐一解答这些问题。

QEMU是一款处理器模拟软件,可以提供用户模式模拟和系统模式模拟。当处于用户模式模拟状态时,将使用动态翻译技术,允许一个cpu构建的进程在另一个cpu上执行。系统模式模拟状态下,允许对整个pc系统的处理器和所使用到的相关外围设备进行模拟。qemu提供的仿真外设包括硬件Video Graphics Array (VGA) 仿真器、PS/2 鼠标和键盘、集成开发环境(IDE)硬盘和 CD-ROM 接口,以及软盘仿真。也包括对E2000 Peripheral Controller Interconnect (PCI) 网络适配器、串行端口、大量的声卡和 PCI Universal Host Controller Interface (UHCI) Universal Serial Bus (USB) 控制器(带虚拟 USB 集线器)的仿真。除了仿真标准 PC 或 ISA PC(不带 PCI 总线)外,QEMU 还可以仿真其他非 PC 硬件,如 ARM Versatile 基线板(使用 926E)和 Malta million instructions per second (MIPS) 板。对于各种其他平台,包括 Power Macintosh G3 (Blue & White) 和 Sun-4u 平台,都能正常工作。

图1.qemu可进行模拟的外围设备

KVM是一种依赖硬件虚拟化技术(Intel VT或者AMD V)的裸机虚拟化程序,它使用 Linux 内核作为它的虚拟机管理程序。对 KVM 虚拟化的支持自 2.6.20 版开始已成为主流 Linux 内核的默认部分。KVM支持的操作系统非常广泛,包括Linux、BSD、Solaris、Windows、Haiku、ReactOS 和 AROS Research Operating System。

在 KVM 架构中,虚拟机实现为常规的 Linux 进程,由标准 Linux 调度程序进行调度。事实上,每个虚拟 CPU 显示为一个常规的 Linux 进程。这使 KVM 能够享受 Linux 内核的所有功能。设备模拟由提供了修改过的 qemu 版本来完成。

在了解了kvm和qemu的原理以及相互的关系之后,我们再来关注下rtl8029网卡设备,如下图所示。这里需要了解的是在qemu中模拟rtl8029网卡设备的模块是ne2000。ne2000模拟了rtl8029网卡收发数据包的流程,逻辑位置位于虚拟机设备驱动和宿主机qemu网络适配器模块之间,当虚拟机的用户空间发生socket send操作之后,设备驱动将封装好的数据发送到ne2000设备模拟器,然后进入qemu相关适配器模块,再通过宿主机的物理网卡向外发送数据。而接收数据则是相反的过程。

图2. rtl8029网卡实物照

0x02 漏洞原理分析


第一部分中简要分析了kvm, qemu,以及关于ne2000网卡模块这些了解漏洞原理的基础知识,我们再来分析CVE-2015-5279漏洞的具体产生原因。

该漏洞发生在ne2000网卡模块的接收数据包的过程,相关代码截图如下。这部分代码取自qemu-2.4.0/hw/net/ne2000.c文件中的ne2000_receive函数。ne2000_receive函数是虚拟机接收外部数据包的关键函数,其大致流程为:

  1. 判断网卡是否处于工作状态,数据缓冲区是否处于满的状态;
  2. 通过检测是否是否处于混杂模式,mac地址是否匹配,是否为广播地址,从而判断是否接收此数据包;
  3. 如缓冲区较小,则对其进行扩展;
  4. 进入数据包处理过程(如下图代码所示):处理数据包头部;写数据包内容;
  5. 结束收包过程(如下图代码所示)。

图3. 有缺陷的代码

在进入收包代码之前,s->curpag,s->stop,s->start是可以被黑客控制为任意数值。因此在上述函数流程的第4步中,index,avail,len这些关键的变量也可以被设置为可控的数值。利用这一特点,黑客可以创造出哪些攻击方式呢?

首先可以导致逻辑循环,即当进入while循环之后,使len不断等于0,执行”size -= len; ”这一行指令时,size永远不会减小,因此“ while (size > 0) ”的判断永远为真,进入死循环。

第二种是造成堆缓冲区的溢出,在执行“memcpy(s->mem + index, buf, len); ”这一行代码时,由于index是可被操控的,因此可以在正确的缓冲区之外写入数据包内容。要实现这种利用方式,还需控制收包流程中的第一步,即判断缓冲区边界的过程。相关代码截图如下。

图4. 需要进行关注的关键代码

0x03 漏洞危害


CVE-2015-5279被qemu官方安全团队定义为高危漏洞,一旦被黑客恶意利用,可以实现拒绝服务攻击,虚拟机逃逸攻击。在成功利用该漏洞之后,黑客进而可以控制宿主机以及该宿主机上的其他虚拟机,进而造成企业的敏感信息泄露,内网被渗透的可怕后果。

图5. 官方确定该漏洞为高危

0x04 漏洞修复方案


360 Marvel Team在发现该漏洞之后,第一时间通知了qemu官方安全团队进行修复。 在经历了长达25天的紧张修复之后,官方团队于9月15日公开了该漏洞的详细信息,详见https://access.redhat.com/security/cve/CVE-2015-5279,该链接也包含了对360 Marvel Team成员的致谢信息。

补丁地址:https://lists.gnu.org/archive/html/qemu-devel/2015-09/msg03984.html

官方提供了对该漏洞的补丁,其中在ne2000_receive函数中增加了对索引边界的检查,防止了缓冲区溢出的危险。建议使用qemu的厂商尽快采用该补丁,以免黑客利用该漏洞对业务造成影响。

图6. 官方发布的补丁信息


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK