-
-
[翻译]虚拟机逃逸——QEMU的案例分析(一)
-
发表于:
2017-5-31 22:44
14188
-
题目:虚拟机逃逸——QEMU的案例分析
目录
1.介绍
2.KVW/QEMU概述
2.1工作区环境
2.2 QEMU存储配置
2.3地址转换
3.内存泄露的利用
3.1漏洞代码
3.2配置网卡
3.3漏洞利用
4.堆溢出的利用
4.1漏洞代码
4.2配置网卡
4.3逆向冗余校验码
4.4漏洞利用
5.总结
5.1 RIP控制
5.2 交互式Shell
5.3 利用虚拟机逃逸
5.4 局限
6.结论
7.致谢
8.引用
9.源代码
1.介绍
如今虚拟机广泛应用于个人或企业中。网络安全供应商通过使用不同的虚拟机,实现在一个可控且封闭的环境中分析恶意软件。一个问题自然而然的出现了:这些恶意软件会从虚拟机中逃逸出来并在宿主机上执行吗?
去年,安全公司CrowdStrike的Jason Geffner,已经发布了一系列QEMU漏洞,通过影响虚拟机软盘驱动代码实现让一个攻击者从虚拟机逃逸[1]到宿主机中。虽然这个漏洞已经在网络社区中引起了广泛关注——也许因为它有一个专有名称(VENOM)——但这已经不是第一次出现这种漏洞了。
2011年,Nelson Elhage[2]发布并成功利用了一个在QEMU虚拟机热插拔PCI设备的漏洞。 利用过程可参见[3]。
最近,奇虎360的刘旭和汪圣平在HITB 2016黑客大会上展示了KVM/QEMU的成功利用。他们在两种不同的网卡设备仿真模型RTL8139 和PCNET上,演示了两个漏洞(CVE-2015-5165 和CVE-2015-7504)的利用。在展示中,他们列举了在宿主机上运行代码的主要步骤,但没有提供任何漏洞利用或技术细节来再现逃逸过程。
在本文中,我们对CVE-2015-5165(一个内存泄露漏洞)和CVE-2015-7504(一个堆溢出漏洞)进行了深度分析和利用。同时利用这两个漏洞可以实现虚拟机逃逸并在目标宿主机上运行代码。我们讨论了在QEMU的网卡设备仿真上利用这两个漏洞的技术细节,并提供了继续利用QEMU未来出现的漏洞的通用技术。比如一个用来共享内存区域和共享代码的交互式bindshell。
2.KVM/QEMU 概述
KVM(Kernal-based Virtual Machine)是一个为用户空间程序提供整个虚拟化基础架构的内核模型。它允许运行多个Linux或Windows映像的虚拟机。
KVM的用户空间部分包含于处理主要设备仿真的主线QEMU(高速虚拟机)。
2.1 工作区环境
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课