zoukankan      html  css  js  c++  java
  • vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用

    本文简单分析了代码的结构。有助于理解。

    转:http://www.freebuf.com/news/141442.html

    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

  • 相关阅读:
    Selector + 线程池 遇到的问题
    【转】Android TabActivity无法正常bindService解决方法
    Android 中的 Service 全面总结
    【转】IT 圈里有哪些经常被读错的词?
    【转】线程的7种状态及相互转换
    【eoeandroid 特刊】第117期打包网盘下载地址
    使用 Android 自带的 proguard 混淆源码
    Google+ 连接不上的解决办法
    【转】AsyncTask的用法
    winForm简单数据绑定
  • 原文地址:https://www.cnblogs.com/studyskill/p/7279970.html
Copyright © 2011-2022 走看看