虚拟化漏洞

来源:互联网 发布:nginx并发数设置 编辑:程序博客网 时间:2024/06/05 04:57

KVM虚拟化新型漏洞CVE-2015-6815技术分析

360MarvelTeam2015-09-1551132人围观,发现10个不明物体漏洞

云计算业务目前已经触及到多个行业,无论是云存储,云音乐等生活中随处可见的业务,就连银行金融,支付信息等服务也都和云紧密相关。

作为云服务的基础,虚拟化系统扮演着非常重要的角色,因为在云生态中主机的硬件多是由虚拟化系统模拟出来的。虚拟化系统中的安全漏洞将严重影响云业务的安全。

360虚拟化安全团队(MarvelTeam)近日发现了多个虚拟化软件安全漏洞,使用kvm和xen作为虚拟化平台的公司业务都将会受这批漏洞影响。该漏洞一旦被攻击者恶意利用,可以造成三种类型的安全风险:

1)虚拟机宕机,影响业务;2)系统资源被强制占用,宿主机及所有虚拟机拒绝服务;3)虚拟机逃逸,攻击者在宿主机中执行任意代码。

我们将陆续公开系列针对虚拟化软件高危0day漏洞的分析文章,揭开宿主机攻击技术的神秘面纱。本文将首先分析KVM虚拟化新型漏洞CVE-2015-6815。

在9月29日的ISC 2015大会上,360虚拟化安全团队(MarvelTeam)安全研究员唐青昊,将进行《云虚拟化系统的漏洞挖掘技术》的议题演讲,进一步分享漏洞挖掘的核心技术。

关于QEMU和KVM

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 版本来完成。

QEMU网卡设备简介

QEMU支持多种网卡设备,可以通过如下的命令去列举所支持的网卡设备类型,一共有8种,基本可以满足大多数操作系统的需求。

图2.qemu支持的虚拟网卡设备

此次漏洞出现在e1000网卡设备中,该网卡的基本功能等同于Intel rc82540EM硬件网卡,支持TSO技术,网络数据传输效率极高。

漏洞分析

CVE-2015-6815是qemu软件的虚拟网卡设备存在的一处逻辑漏洞,攻击者可通过构造恶意的数据流触发该漏洞。

我们分析网卡在处理恶意数据流时执行的逻辑:

a)网卡驱动向网卡设备发送指令,通知网卡设备执行数据发送操作;b)set_tctl(E1000State *s, int index, uint32_t val)当网卡设备判断已经设置相关寄存器,即开始进行发包操作,进入set_tctl函数中进行相关处理,函数原型如下:c) start_xmit(E1000State *s)start_xmit函数首先检查(s->reg[TCTL]&E1000_TCTL_EN),若等于0,表示没开启发送功能,将直接退出。否则判断是否存在有效的描述符,有的话则依次取出描述符交给process_tx_desc处理。d)存在漏洞的函数源码如下:

图3.存在漏洞的函数代码

根据注释,可以清晰地看到,该函数的主要目的是按照3种类型来处理网卡数据描述符表中的单个描述符,分别是context descriptor,data descriptor,legacy descriptor,这三种类型代表了不同的数据内容:描述信息,数据,遗留信息,网卡通过判断处于何种类型,设置s->tx的状态位,然后根据tp->tse 和 tp->cptst来确定是否要调用xmit_seg函数以及怎样填充buf,由于函数对驱动传进来描述符的内容没有检测,可设置成任意值。

xmit_seg函数根据s->tx中各字段的信息来填充s->data,最后调用qemu_send_packet函数发送s->data,qemu_send_packet(nc, buf, size)。

在该函数的执行过程中,攻击者通过恶意的数据流,可以控制该函数中的tp->hdr_len和tp->mss数据的值,而 msh = tp->hdr_len + tp->mss。在进入do…while 循环之后,tp->size值为0,而bytes和msh的值可以控制,通过迫使代码逻辑进入第一个if循环,可将bytes设置为msh的值,即bytes也可以被控制。之后,bytes可以一直保持值不变,直至进入while的条件判断语句,此时如果bytes为0,则do…while进入死循环的逻辑。

漏洞危害

攻击者利用该漏洞可以导致虚拟机拒绝服务,并且保持对cpu的高占用率,继而会影响宿主机以及其他虚拟机的正常执行。

我们在测试环境中对该漏洞进行测试,触发前后的截图如下。可以看到,在漏洞触发后宿主机的空闲cpu百分比一直锁定为为0%。

图4.触发漏洞前

 

图5.触发漏洞后

漏洞修补方案

360虚拟化安全团队(MarvelTeam)在发现了该漏洞之后,第一时间通知QEMU软件官方团队进行修复。官方在20天的紧张修复之后,在9月5日完成对该漏洞的修复补丁。详细信息,该网页也包含了360虚拟化安全团队的致谢。

官方对该漏洞的修补方法如下:

图6.官方提供的漏洞补丁

在该补丁中,开发人员加入了对漏洞关键数据 – bytes树值的判断,如为0,则退出循环,完美修复漏洞。建议所有使用qemu的厂商采用该补丁,防止攻击者对在虚拟机中利用CVE-2015-6815漏洞。


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

360MarvelTeam2015-09-2831561人围观,发现3个不明物体文章

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

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

本文为该系列的第二篇文章,将详细分析CVE-2015-5279 qemu网卡堆溢出漏洞的相关知识。第一篇文章是针对CVE-2015-6815漏洞的分析。

一. 漏洞基础知识

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网卡实物照

二.漏洞原理分析

第一部分中简要分析了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. 需要进行关注的关键代码

三.漏洞危害

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

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

四.漏洞修复方案

360 Marvel Team在发现该漏洞之后,第一时间通知了qemu官方安全团队进行修复。在经历了长达25天的紧张修复之后,官方团队于9月15日公开了该漏洞的详细信息,该详细信息里也包含了对360 Marvel Team成员的致谢信息。

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

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

针对360 Marvel Team独立发现的虚拟化安全漏洞CVE-2015-5279,本文完整分析了漏洞相关的原理,危害,以及修复方案,希望可以引起更多开展云业务的公司,对虚拟化安全问题的重视。 

关于360 Marvel Team

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


360MarvelTeam虚拟化漏洞第三弹:CVE-2015-7504漏洞分析

360MarvelTeam2015-12-0244762人围观,发现11个不明物体文章网络安全

本文作者: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天。如此高危的漏洞在这段漫长时间内被黑客用于云计算系统的攻击或者发生泄露的几率都是很大的!

关于之前的两篇文章,链接如下:12

一. 什么是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演示了黑客控制宿主机的全过程。希望此文可以引起更多云服务供应商,对虚拟化安全问题的重视。


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

360MarvelTeam2015-12-316860人围观,发现2个不明物体漏洞

作者:360 Marvel Team 团队负责人 唐青昊 (新浪微博:SunSky0101;微信:702108451)

2015年是“云跃进”的一年,同样也是虚拟化漏洞真正被人们认知、重视的一年,不甘于“等风来”的360 Marvel Team主动出击,用实际行动为云计算保驾护航。截至今日,我们累计在kvm,xen,vmware平台上公开了高达14枚高危安全0day漏洞,这些漏洞均会导致通用云系统被黑客攻破。

今天,政府、企业、个人都有越来越多的资料信息在云上储存,一旦云系统被攻破,就意味着这些重要的信息会被泄露。黑客利用虚拟化漏洞不但可以偷取到重要信息,甚至可以从一台虚拟机的普通用户发起攻击控制宿主机,最终控制整个云环境的所有用户。

本文为该系列的第四篇文章,也是今年的收官之作,文章将详细分析编号为CVE-2015-8567的qemu内存泄露漏洞的相关知识,该漏洞存在于xen和kvm系统的qemu模块中的vmxnet3网卡组件,黑客在一台虚拟机中利用该漏洞,可以导致同一宿主机上的其他虚拟机崩溃。360 Marvel Team于 10月22日提交该漏洞,官方于12月16号公开了漏洞信息及修复补丁。

1、关于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

2、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函数分配内存,直至宿主机系统内存枯竭。

3、漏洞危害&漏洞利用方案

官方关于CVE-2015-8567漏洞危害描述为:虚拟机授权用户利用该漏洞可以泄露宿主机内存,导致拒绝服务。该信息的链接地址为:https://access.redhat.com/security/cve/cve-2015-8567

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

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

图5. 漏洞利用结果截图

4、漏洞修复方案

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

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

5、小结:

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


0 0
原创粉丝点击