码迷,mamicode.com
首页 > 其他好文 > 详细

[转帖]浅析虚拟机逃逸漏洞

时间:2019-06-07 23:17:45      阅读:273      评论:0      收藏:0      [点我收藏+]

标签:接口   container   公司   溢出   play   恶意软件   允许   star   div   

浅析虚拟机逃逸漏洞

“云时代”的虚拟机安全被提升到至关重要的位置。虚拟机逃逸指的是突破虚拟机的限制,实现与宿主机操作系统交互的一个过程,攻击者可以通过虚拟机逃逸感染宿主机或者在宿主机上运行恶意软件。

浅析虚拟机逃逸漏洞
 

一、 漏洞背景

VMware,Inc. (Virtual Machine ware)是一个“虚拟PC”软件公司,提供服务器、桌面虚拟化的解决方案。其虚拟化平台的产品包括播放器;它能使个人用台式电脑运行虚拟机器,融合器,它是用户基于英特尔结构苹果机的桌面虚拟化产品,工作站的软件开发商和企业的资讯科技专才,能使虚拟分区的服务器,ESX服务器(一种能直接在硬件上运行的企业级的虚拟平台),虚拟的SMP让一个虚拟机同时使用四个物理处理器,和VMFS使多个ESX服务器分享块存储器。但是也伴随着虚拟机的发展出现了一些高危漏洞,例如虚拟机逃逸导致命令执行。

“云时代”的虚拟机安全被提升到至关重要的位置。虚拟机逃逸指的是突破虚拟机的限制,实现与宿主机操作系统交互的一个过程,攻击者可以通过虚拟机逃逸感染宿主机或者在宿主机上运行恶意软件。早在2016年举办的PwnFest黑客大会上(由Power of Community组织,在韩国首尔举办),研究人员唐青昊成功实现了VMware的虚拟机逃逸,这也是VMware首次在公开场合被攻陷,震惊世人。然后再2018年,长亭科技安全研究员张焱宇利用VMware虚拟化平台的3个漏洞,从一台Linux虚拟机内部进行攻击,仅用9分钟便成功获取ESXi宿主机系统的最高权限并进行任意控制,展示了私有云系统所存在的安全问题,成功挑战世界级难度虚拟机逃逸。

二、 漏洞描述

VMware Workstation和Fusion中的拖放(DnD)功能含有越界内存访问漏洞。 这会允许访客在运行Workstation或Fusion的操作系统上执行代码。VMware实现了多种虚拟机(下文称为guest)与宿主机(下文称文host)之间的通信方式。其中一种方式是通过一个叫做Backdoor的接口,guest只需在用户态就可以通过该接口发送命令。VMware Tools也部分使用了这种接口来和host通信。

针对Vmware的虚拟机逃逸的exploit源码GitHub早已公布(https://github.com/unamer/vmware_escape)。实现了从虚拟机到宿主机器的代码执行,弹出了熟悉的计算器。该开源代码,只需要将执行计算器部分的shellcode替换成其他具有恶意攻击的代码,就可以造成很大的危害。借鉴各位大神的分析,本文重点分析复现虚拟机逃逸典型漏洞CVE-2017-4901,当然还有其他几个CVE漏洞,能力有限,就不一一复现。

三、 影响版本

影响版本如下:

Vmware Workstation 12.5.5以前的版本

四、 漏洞分析

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

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

技术图片

技术图片

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

技术图片

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

技术图片

技术图片

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

技术图片

(6)我们根据信息泄露判断溢出的是哪一种C++对象,是DnD还是CnP。根据判断类型,分别利用ROP绕过DEP,拼接shellcode后完成exploit的构造。CnP类型对象溢出利用构造:覆盖对象虚表地址,指向伪造的虚表,然后发送CP命令,触发虚函数调用,实现命令执行。

技术图片

SetGlobalPointer函数发送unity.window.contents.start命令,通过在命令中指定参数的宽度和高度,写入一个64位的堆栈迁移gadget地址。然后DnD类型对象溢出利用构造,最终发送payload完成构造!

技术图片技术图片

技术图片

 

五、 漏洞复现

测试过程中虚拟机确实出现了利用不稳定的情况:直接崩溃或者弹出计算机后虚拟机退出。测试版本:Vmware Workstation Pro 12.5.1 Build build-4542065。操作系统为Windows10 64位。

现象一 成功利用,宿主机弹出计算机

技术图片

现象二 弹出计算器后闪退,宿主机计算器昙花一现

技术图片

现象三  直接崩溃,尴尬的是本人宿主机也出现了短暂崩溃

技术图片

 

对于开源的exploit代码来看,结构还是很清晰的,对于要修改后利用,主要是两个方面,增加exploit的稳定性以及shellcode功能部分的修改,才能实现命令执行,实现虚拟机逃逸。

六、 修复建议

目前该漏洞影响Vmware Workstation Pro/Player和Vmware Fusion Pro/Fusion的较低版本,在高版本中已经修复,建议用户使用Vmware Workstation 12.5.5以上版本。当然,关于云平台虚拟机逃逸监测告警的想法早已被提出,近些年也趋于成熟,以后虚拟机会实现更好的发展。

 

关注我们

对信息安全有兴趣的小伙伴可以关注我们,TideSec安全团队:

[转帖]浅析虚拟机逃逸漏洞

标签:接口   container   公司   溢出   play   恶意软件   允许   star   div   

原文地址:https://www.cnblogs.com/jinanxiaolaohu/p/10989389.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!