安全路透社
当前位置:安全路透社 > 网络转载 > 正文

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“。

设置版本 

(2)溢出堆

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

溢出堆

溢出堆

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

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

创建Version 3 的DnD和CnP对象 

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

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

覆盖c++对象虚表地址

覆盖c++对象虚表地址 

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

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

 通过信息泄露绕过ASLR

(6)实现代码执行

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

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

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

CnP类型对象溢出利用构造 

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

 CnP类型对象溢出利用构造

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

 DnD类型对象溢出利用构造

发送payload完成构造

发送payload完成构造 

0x03 exploit利用

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

(1)弹出计算器后闪退

弹出计算器后闪退 

 弹出计算器后闪退

(2)直接崩溃

直接崩溃 

(3)利用成功

利用成功 

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

0×04 缓解措施

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

0x05 参考文献

https://github.com/unamer/vmware_escape

https://zhuanlan.zhihu.com/p/27733895?utm_medium=social&utm_source=wechat_timeline&from=timeline&isappinstalled=1

* 本文作者:任子行

未经允许不得转载:安全路透社 » Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册