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。
(4)覆盖c++对象虚表地址
根据C++对象的大小进行多次越界写内存。
(5)通过信息泄露绕过ASLR
通过命令info-set guestinfo.KEY VALUE 和info-get guestinfo.KEY 来设置和获取数据,通过这两个命令后面的值来泄露堆上的对象,从而获取对象的虚表地址,从而得到vmware-vmx的地址。
(6)实现代码执行
根据信息泄露判断溢出的是哪一种C++对象,DnD还是CnP。根据判断类型,分别利用ROP绕过DEP,拼接shellcode后完成exploit的构造。
CnP类型对象溢出利用构造:
覆盖对象虚表地址,指向伪造的虚表,然后发送CP命令,触发虚函数调用。
其中 SetGlobalPointer 函数发送unity.window.contents.start命令,通过在命令中指定参数的宽度和高度,写入一个64位的堆栈迁移gadget地址。
DnD类型对象溢出利用构造:
发送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
vmware漏洞之三——Vmware虚拟机逃逸漏洞(CVE-2017-4901)Exploit代码分析与利用的更多相关文章
- VMware 虚拟机逃逸漏洞
所谓虚拟机逃逸(Escape Exploit),指的是突破虚拟机的限制,实现与宿主机操作系统交互的一个过程,攻击者可以通过虚拟机逃逸感染宿主机或者在宿主机上运行恶意软件. 针对 VMware 的虚拟机 ...
- vmware漏洞之二——简评:实战VMware虚拟机逃逸漏洞
下文取自360,是vmware exploit作者自己撰写的.本文从实验角度对作者的文章进行解释,有助于学习和理解.文章虚线内或红色括号内为本人撰写. ------------------------ ...
- VENOM cve-2015-3456 Qemu 虚拟机逃逸漏洞POC
#include <sys/io.h> int main() { int i ; iopl(3); outb(0x8e, 0x3f5); outb(0x41, 0x3f5); outb(0 ...
- GitHub现VMware虚拟机逃逸EXP,利用三月曝光的CVE-2017-4901漏洞
今年的Pwn2Own大赛后,VMware近期针对其ESXi.Wordstation和Fusion部分产品发布更新,修复在黑客大赛中揭露的一些高危漏洞.事实上在大赛开始之前VMware就紧急修复了一个编 ...
- OpenStack 虚拟机冷/热迁移的实现原理与代码分析
目录 文章目录 目录 前文列表 冷迁移代码分析(基于 Newton) Nova 冷迁移实现原理 热迁移代码分析 Nova 热迁移实现原理 向 libvirtd 发出 Live Migration 指令 ...
- 【转载】利用一个堆溢出漏洞实现 VMware 虚拟机逃逸
1. 介绍 2017年3月,长亭安全研究实验室(Chaitin Security Research Lab)参加了 Pwn2Own 黑客大赛,我作为团队的一员,一直专注于 VMware Worksta ...
- vmware漏洞之一——转:利用一个堆溢出漏洞实现VMware虚拟机逃逸
转:https://zhuanlan.zhihu.com/p/27733895?utm_source=tuicool&utm_medium=referral 小结: vmware通过Backd ...
- RunC容器逃逸漏洞席卷业界,网易云如何做到实力修复?
近日,业界爆出的runC容器越权逃逸漏洞CVE-2019-5736,席卷了整个基于runC的容器云领域,大量云计算厂商和采用容器云的企业受到影响.网易云方面透露,经过技术团队的紧急应对,网易云上的容器 ...
- Vmware快速安装linux虚拟机(SUSE)
安装环境:Vmware 11.SUSE11 64位 vmware快速安装linux虚拟机的过程还是比较简单的,步骤如下: 1.点击文件,新建虚拟机. 2.选择典型安装. 3.在红框中选择想要安装的虚拟 ...
随机推荐
- Android核心类源码分析
Handler流程1.首先Looper.prepare()在本线程中保存一个Looper实例,然后该实例中保存一个MessageQueue对象:因为Looper.prepare()在一个线程中只能调用 ...
- 查看mysql binlog日志
1.使用show binlog events a.获取binlog文件列表 mysql> show binary logs; +------------------+-----------+ | ...
- ZooKeeper内部构件
引言 这个文档包含关于ZK内部工作的信息.目前为止,它讨论了这些主题: 原子广播 日志 原子传播 ZK的核心是一个原子的通信系统,它使所有的服务端保持同步. 保证.属性和定义 通过使用ZooKeepe ...
- IConfigurationSectionHandler 接口
IConfigurationSectionHandler 处理对特定的配置节的访问. 示例代码: public class MyConfig : IConfigurationSectionHandle ...
- PHP 练习1:新闻发布
1.新闻发布主页面 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...
- CSS animation怎么使用?(山东数漫江湖)
animation可以为很多CSS属性添加动画,比如: color, background-color, height和width.animation的动画需要使用@keyframes来定义,随后被a ...
- HDU 2059 龟兔赛跑 (dp)
题目链接 Problem Description 据说在很久很久以前,可怜的兔子经历了人生中最大的打击--赛跑输给乌龟后,心中郁闷,发誓要报仇雪恨,于是躲进了杭州下沙某农业园卧薪尝胆潜心修炼,终于练成 ...
- 大聊Python----协程
协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来 ...
- 常见网络命令之Ping命令
前言:计算机网络老师要求我们自己总结一下常见的网络命,然后上课可以上去讲一下这些命令使用,像我这么听话的好学生,肯定是照老师要求,认真的总结了一下,总结的过程中,我发现网上已经有的资源讲的都不是很详细 ...
- 关于might_sleep的一点说明【转】
转自:http://blog.csdn.net/chen_chuang_/article/details/48462575 这个函数我在看代码时基本上是直接忽略的(因为我知道它实际上不干什么事),不过 ...