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

浅析虚拟机逃逸漏洞

https://www.freebuf.com/column/197651.html

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

浅析虚拟机逃逸漏洞

一、 漏洞背景

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安全团队:

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

时间: 2024-10-09 14:43:47

[转帖]浅析虚拟机逃逸漏洞的相关文章

VENOM cve-2015-3456 Qemu 虚拟机逃逸漏洞POC

#include <sys/io.h> int main() { int i ; iopl(3); outb(0x8e, 0x3f5); outb(0x41, 0x3f5); outb(0x41, 0x3f5); outb(0x41, 0x3f5); outb(0x41, 0x3f5); outb(0x41, 0x3f5); for(i = 0 ; i < 100000 ; i++) { outb(0x42, 0x3f5); } return 0 ; }

GitHub现VMware虚拟机逃逸EXP,利用三月曝光的CVE-2017-4901漏洞

今年的Pwn2Own大赛后,VMware近期针对其ESXi.Wordstation和Fusion部分产品发布更新,修复在黑客大赛中揭露的一些高危漏洞.事实上在大赛开始之前VMware就紧急修复了一个编号为CVE-2017-4901的虚拟机逃逸漏洞. 而近日,有人在GitHub上公布了一个VMWare虚拟机逃逸利用工具,工具正是这个CVE-2017-4901,它能够攻击12.5.5版本之前的VMware WorkStation,目标主机为Windows 10 x64.漏洞利用工具所使用到的编译器是

【转载】利用一个堆溢出漏洞实现 VMware 虚拟机逃逸

1. 介绍 2017年3月,长亭安全研究实验室(Chaitin Security Research Lab)参加了 Pwn2Own 黑客大赛,我作为团队的一员,一直专注于 VMware Workstation Pro 的破解,并成功在赛前完成了一个虚拟机逃逸的漏洞利用.(很不)幸运的是,就在 Pwn2Own 比赛的前一天(3月14日),VMware 发布了一个新的版本,其中修复了我们所利用的漏洞.在本文中,我会介绍我们从发现漏洞到完成利用的整个过程.感谢@kelwin 在实现漏洞利用过程中给予的

转:利用一个堆溢出漏洞实现VMware虚拟机逃逸

转:https://zhuanlan.zhihu.com/p/27733895?utm_source=tuicool&utm_medium=referral 利用一个堆溢出漏洞实现VMware虚拟机逃逸 [作者:李小龙(acez),中文翻译:kelwin] 1. 介绍 2017年3月,长亭安全研究实验室(Chaitin Security Research Lab)参加了Pwn2Own黑客大赛,我作为团队的一员,一直专注于VMware Workstation Pro的破解,并成功在赛前完成了一个虚

新近爆出的runC容器逃逸漏洞,用户如何面对?

runC是一个根据OCI(Open Container Initiative)标准创建并运行容器的CLI工具,目前Docker引擎内部也是基于runc构建的. 2019年2月11日,研究人员通过oss-security邮件列表(https://www.openwall.com/lists/oss-security/2019/02/11/2 )披露了runc容器逃逸漏洞的详情,根据OpenWall的规定EXP会在7天后也就是2019年2月18日公开. 此漏洞允许以root身份运行的容器以特权用户身

[转帖]Java虚拟机(JVM)体系结构概述及各种性能参数优化总结

Java虚拟机(JVM)体系结构概述及各种性能参数优化总结 2014年09月11日 23:05:27 zhongwen7710 阅读数 1437 标签: JVM调优jvm 更多 个人分类: Java知识点总结技术架构原理 https://blog.csdn.net/zhongwen7710/article/details/39213377 写的很好.. 堆栈分不清楚的我 愧对计算机系毕业.. 第一部分:相关的概念 数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型.基本类型的变

【实例演示】Android安全须知

软件免费像是一种潮流,收费软件生存空间变小,只能变向获利. 于是..... app加入信息搜集,用户行为收集,植入广告,留后门. 为了利益,修改带资金的app,窃取用户资金. app加入挖矿功能,挖黑金. 利用第三方sdk接口收集用户信息. app中插入广告链接. app中植入木马. 利用用户手机发动ddos攻击. 伪装成官方应用...... 我们了解的仅仅是新闻上所报出来的,还有许多暗流不为人知.总结以下几点安全须知,供广大Android用户参考. 1. 不安装非官方应用 非官方apk可能被植

漏洞预警:“毒液(VENOM)”漏洞影响全球数百万虚拟机安全

CrowdStrike公司安全研究员称,一个名为"毒液(VENOM)"的QEMU漏洞使数以百万计的虚拟机处于网络攻击风险之中,该漏洞可以造成虚机逃逸,威胁到全球各大云服务提供商的数据安全.QEMU是一个指令级模拟器的自由软件实现,被广泛用于各大GNU/Linux发行版. 漏洞原理 这个名为毒液(VENOM,编号CVE-2015-3456)的安全漏洞威胁到了整个安全行业,可以造成虚拟机逃逸.QEMU是一个指令级模拟器的自由软件实现,被广泛用于各大GNU/Linux发行版(包括Debian

xxe漏洞入门浅析

title: xxe漏洞入门浅析 categories: xxe漏洞 1,xml的前世今生 XML 指可扩展标记语言(Extensible Markup Language),与HTML非常像 XML作用 用来传输和存储数据,是开发领域里数据交换标准. XML与HTML异同 区别:HTML用来显示数据.XML可以用来存储数据.当数据量较小时,若将数据库存储,则应用需要在数据库中读取数据,会造成网络延时,占据数据库I/O口流量.若使用xml则可以直接读取,避免了网络延时和数据库I/O口流量占用.xm