虚拟化漏洞专题之寻找VMware Workstation渲染器中的漏洞

Posted 看雪学院

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虚拟化漏洞专题之寻找VMware Workstation渲染器中的漏洞相关的知识,希望对你有一定的参考价值。



背景



一月中旬,ZDI宣布了2017年比赛的规则,其中包括了攻破VMware,完成虚拟机逃逸的队伍会获得相当高额的奖金。VMware已经不是一个新目标了。在2016年,VMware就被确定为攻击目标。


作为攻击目标,VMware已经经历过各种各样的攻击,攻击点很多。


有趣的是,早在2006-2009年间,就有针对D&D和C&P的漏洞而完成虚拟机逃逸了。然而在2015年Kostya Kortchinsky和lokihardt又在D&D和C&P中发现了类似的漏洞。从此,研究员们开始对这些代码更加深入的研究。


从我们旁观者的角度,这一现象是令人深思的。我们在想,VMware的漏洞一共有多少?其中又有哪些能被我们发现?

 

虽然一系列的漏洞被曝光,但是在2016年的Pwn2Own上,没有一支队伍能够成功完成虚拟机逃逸。虽然像VMware这样的传统桌面软件不是我们的研究领域。但我们还是对寻找VMware中的漏洞非常感兴趣。


我们决定面对这个挑战,看看挖掘VMware中的漏洞到底有多困难。我们定了一个计划,用一个月的业余时间来寻找漏洞。虽然我们没能在Pwn2Own前完成,但我们确实发现了一些高危漏洞,并且尝试通过这些漏洞找到VMware中可利用的攻击点。



攻击面



之前并不了解VMware的细节,我们开始不清楚实施攻击应该从何处着手。关注指令模拟的内部细节会有帮助么?有些CPU支持VT,又有多少指令是被模拟的?为了避免与他人撞洞,除了打印和像D&D或C&P的主机客户机交互外,还剩下什么呢?


下文是我们的研究成果,正如Pwn2Own规定的,所有的漏洞都要能被虚拟机里的普通用户所利用。



VMWare模块



在VMware的各种模块中,GUI是最不受关注的部分。VMware在主机和虚拟机端都有内核模块(至少有vmnet/VMCI),thnuclnt(负责虚拟打印),vmnet-dhcpd,vmnet-natd,vmnet-netifup,vmware-authdlaucher,vmnet-bridge,vmware-usbarbitrator,vmware-hostd,还有虚拟机端最重要的vmware-tools。


几乎所有的这些模块都是作为特权进程运行,这使得他们成为被研究者分析的对象。虚拟打印已经被攻击多次了。

 

vmnet-dhcpd吸引了我们的注意,因为他以root模式运行并且是从ISC-DHCPD演变而来。更令人感兴趣的是,vmware-dhcpd基于isc-dhcp2。我们开始把它作为攻击目标。


然而,当我们发现公开的漏洞后(CVE-2011-2749,CVE-2011-2748)我们就放弃了这一想法。VMware为了防止漏洞,已经在最新的isc-dhcp中修补了漏洞。


于是我们决定在QEMU和AFL对vmware-dhcpd的一些小补丁进行fuzz测试。一个月的fuzzing并没有显示出任何漏洞。vmware-hostd也是一个令人感兴趣的进程,它作为一个web服务器,用于虚拟机共享,而且可以从虚拟机内部访问到。然而,我们还是决定把精力投入研究VMware的核心组件。

 

vmware-vmx是最主要的虚拟机监管模块,在主机上作为root/系统进程运行,拥有一些令人感兴趣的特性。事实上,它有两个版本,vmware-vmx和vmware-vmx-debug。


如果VMware的设置中调试选项被启用,那么使用的就是后者。这一点很重要,因为当我们进行逆向工程时,从拥有很多调试信息的版本开始总会简单许多。或许这不是最适合的方法,但却很有效。后面我们会讲到。



RPC/RPCI



你可曾经想过VM和主机之间的文件拖放功能是如何实现的?RPC在其中发挥了重要的作用。VMware内部在0x5658端口上提供了一个接口作为“后门”。通过这个端口,虚拟机可以通过I/O指令来和主机进行通信。


通过寄存器传递一个VMware可识别的魔数,VMware会自动解析附加的参数。I/O指令通常都是特权指令,但这个“后门”接口是个例外。这种例外是很少的。当执行一个后门I/O指令时,VMware会进行一系列的判断,判断该I/O指令是否来自拥有特权的虚拟机。

 

在这个“后门”接口的上层,VMware使用了RPC服务在主机和客户机之间交换数据。在客户机端,vmware-toolsd执行“后门”命令的同时,使用了RPC服务。


这就是为什么之后在安装了vmware-toolsd的客户机上,你才能使用像拖放文件这样的功能。内核驱动和用户空间功能的结合利用实现了这一功能。

 

在最初的“后门”接口中只能通过寄存器来传递数据,面临大量数据的传输时,速度会变得很慢。为了解决这个问题,VMware引入了另一个端口(0x5659)来实现高带宽的“后门”。实际上这个端口是被RPC使用。


通过传递一个数据指针,vmware-vmx不用重复的调用IN指令,直接调用read/write API就可以完成数据的传输,Derek曾经就在这个功能里发现了一个非常有趣的漏洞。

 

RPC接口提供了以下的功能:

  • 打开通道

  • 发送命令长度

  • 发送数据

  • 接受回复的长度

  • 接受数据

  • 结束互动

  • 关闭通道

 

你可能会想如何防止进程扰乱RPC的交互,建立一个通道时,VMware会生产两个cookie值,用它们来发送和接受数据。显然,这两个cookie是以安全的方式生成的。由于这两个cookie就是两个32位的无符号整数,不能用memcmp和其他方式来比较它们。

 

在上层,VMware还用RPC命令来处理DnD,CnP,Unity和其他的事件。有些命令只能在虚拟机特权用户下执行。在虚拟机端。vmware-tool或open-vm-tools提供了rpctool用来和API交互。保存和获取虚拟机信息的一个简单的例子如下:


rpctool 'info-set guestinfo.foobar baz'

以上是关于虚拟化漏洞专题之寻找VMware Workstation渲染器中的漏洞的主要内容,如果未能解决你的问题,请参考以下文章

vmware-installer

虚拟化漏洞呈增长趋势 VMware发布一批漏洞公告

全球虚拟化软件企业 VMware 修复产品多处漏洞

七伤拳:Web安全之文件包含漏洞专题—第六天

无相劫指:Web安全之其他漏洞专题二-第八天

第四天——Web安全之文件上传漏洞专题.