• 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

  • 相关阅读:
    模仿jquery框架源码 -成熟---选择器
    模仿jquery框架源码---网络
    jquery链式语法
    jquery跟DOM转换
    jquery选择器
    基本jquery
    滚屏加载--无刷新动态加载数据技术的应用
    CenterFactory
    IImage--factory
    redis的使用及方法
  • 原文地址:https://www.cnblogs.com/studyskill/p/7279970.html
Copyright © 2020-2023  润新知