黑帽联盟

标题: Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用 [打印本页]

作者: yun    时间: 2017-7-25 22:02
标题: Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用
0×01 事件分析

2017年7月19 unamer在其github上发布了一个针对Vmware的虚拟机逃逸的exploit源码,使用C++编写。据称影响了Vmware Workstation 12.5.5以前的版本,并给出了演示过程,实现了从虚拟机到宿主机器的代码执行,弹出了熟悉的计算器。该代码开源后,只需要将执行计算器部分的shellcode替换成其他具有恶意攻击的代码,可以造成很大的危害。

通过代码梳理,发现该exploit针对的漏洞就是三月份被曝光的CVE-2017-4901。关于该漏洞,长亭安全研究实验室(Chaitin Security Research Lab)发布了其2017年3月参加Pwn2Own 黑客大赛关于这个Vmware漏洞的挖掘与利用的很多细节 。


而该漏洞的原理与2016年11月在360PwnFest中展示的CVE-2016-7461这个漏洞的原理也是一致的,均是出在drag-and-drop函数和copy-and-paste函数中,只不过该漏洞是出现在version4中,而当前CVE-2017-4901出现在Version 3这个版本中。Vmware给了关于其的公告:https://www.vmware.com/security/advisories/VMSA-2016-0019.html 。


0×02 exploit代码分析

根据exploit的代码,按照步骤分析漏洞的整个利用过程。


(1)设置 version 3.0 版本

因为该漏洞存在于DnD和CnP机制的Version 3中,故设置DnD与CnP均为version3的版本。使用的命令分别“tool.capability.dnd_version 3“和tools.capability.copypaste_version 3“。

1.png


(2)溢出堆

为了达到代码执行,需要溢出堆中对象函数指针或者虚表指针。

2.png


3.png


(3)创建Version 3 的DnD和CnP对象

需要通过查询DnD和CnP的版本才能使设置生效,需要发送的命令分别为:vmx.capability.dnd_version 和vmx.capability.copypaste_version,这两个命令均会检查 DnD/CnP 机制的版本,同时根据版本会创建两个对象,DnD和CnP,其中version3对应的C++对象大小为0xA8。

5.png


(4)覆盖c++对象虚表地址

根据C++对象的大小进行多次越界写内存。

6.png

7.png




(5)通过信息泄露绕过ASLR

通过命令info-set guestinfo.KEY VALUE 和info-get guestinfo.KEY 来设置和获取数据,通过这两个命令后面的值来泄露堆上的对象,从而获取对象的虚表地址,从而得到vmware-vmx的地址。

10.png


(6)实现代码执行

根据信息泄露判断溢出的是哪一种C++对象,DnD还是CnP。根据判断类型,分别利用ROP绕过DEP,拼接shellcode后完成exploit的构造。


CnP类型对象溢出利用构造:


覆盖对象虚表地址,指向伪造的虚表,然后发送CP命令,触发虚函数调用。

11.png


其中 SetGlobalPointer 函数发送unity.window.contents.start命令,通过在命令中指定参数的宽度和高度,写入一个64位的堆栈迁移gadget地址。

13.png


DnD类型对象溢出利用构造:

14.png


发送payload完成构造

15.png


0x03 exploit利用

作者在其github上提到,因为没有对Windows LFH随机化处理好,所以并没有实现完美的利用。在测试过程中虚拟机确实出现了利用不稳定的情况:直接崩溃或者弹出计算机后虚拟机退出。测试版本:Vmware Workstation Pro 12.5.1 Build build-4542065。


(1)弹出计算器后闪退

16.png

17.png


(2)直接崩溃

18.png

(3)利用成功

19.png

对于作者开源的exploit代码来看,结构还是很清晰的,对于要修改后利用,主要是两个方面,增加exploit的稳定性以及 shellcode 功能部分的修改。


0×04 缓解措施

目前很多的企业、政府都使用了Vmware的产品,在虚拟机与宿主机之间的这一“虚拟与现实”之间的安全隔离也不再坚不可摧了,目前该漏洞影响Vmware Workstation Pro/Player和Vmware Fusion Pro/Fusion的较低版本,在高版本中已经修复。对于使用Vmware的用户可以通过【帮助】->【关于Vmware Workstation】来查看版本信息,若是版本低于12.5.5,请及时升级;建议升级到当前最新的版本12.5.7。







欢迎光临 黑帽联盟 (https://bbs.cnblackhat.com/) Powered by Discuz! X2.5