欢迎来到名为“ Hypervisor From Scratch ”的多部分系列教程的第一部分。顾名思义,本课程包含创建基于硬件虚拟化的基本虚拟机的技术细节。如果您遵循本教程,您将能够创建自己的虚拟环境,并了解 VMWare、VirtualBox、KVM 和其他虚拟化软件如何使用处理器的设施来创建虚拟环境。此外,您还可以了解HyperDbg调试器的“VMM”模块内部是如何工作的。
本教程的完整源代码可在 GitHub 上获取:
[ https://github.com/SinaKarvandi/Hypervisor-From-Scratch ]
为了设置嵌套虚拟化环境,请确保在虚拟机中启用以下功能
我们将在本系列的其余部分中经常使用一些关键字,您应该了解它们(大多数定义源自英特尔软件开发人员手册,第 3C 卷)。
Virtual Machine Monitor (VMM): VMM 充当host并完全控制处理器和其他平台硬件。 VMM 能够保留对处理器资源、物理内存、中断管理和 I/O 的选择性控制。
Guest Software: 每个虚拟机 (VM) 都是一个guest软件环境。
VMX Root Operation and VMX Non-root Operation: VMM在VMX root operation中运行, 而guest software在VMX non-root operation中运行.
VMX transitions: VMX root operation和VMX non-root operation之间的转换.
VM entries: 转换为VMX non-root operation.
Extended Page Table (EPT): 一种使用第二层将guest机的物理地址转换为host的物理地址的机制。
VM exits: 从VMX non-root operation转换到VMX root operation.
Virtual machine control structure (VMCS): 是内存中的一种数据结构,在 VMM 管理时,每个 VM 只存在一次(或更准确地说,每个虚拟 CPU 存在一个)。 随着不同 VM之间执行上下文的每次更改,VMCS 都会针对当前 VM 进行恢复,从而使用 VMCS 定义 VM 虚拟处理器和 VMM 控制Guest software 的状态。
VMCS 由六个逻辑组组成:
理器的当前状态信息保存在guest-state区域。
host-state区域:在VM-exit时,处理器的状态信息从host-state区域中加载。
VM-execution 控制区域:在进入VM后,处理器的行为由VM-execution控制区域中的字段提供控
制。例如,可以设置某些条件使得在guest执行中产生 VM-exit.。
VM-exit控制区域:控制处理器在处理VM-exit时的行为,也影响返回VMM后处理器的某些状态。
VM-entry控制区域:控制处理器在处理VM-entry时的行为,也决定进入VM后处理器的某些状态。
VM-exit信息区域:记录引起VM-exit事件的原因及相关的明细信息。也可以记录VMX指令执行失败
后的错误编号。
我发现了一篇很好的作品来说明 VMCS不用担心这些字段,我将在后面的部分中清楚地解释其中的大部分内容。 请记住,VMCS 结构因处理器的不同版本而异。
VMX引入了一下新指令
以下几项总结了 VMM 及其guest软件的生命周期以及它们之间的交互:
现在就够了!
其他与虚拟机管理程序相关的作品和材料。
Awesome virtualization(介绍书籍、论文、项目、课程、CVE 和其他与虚拟机管理程序相关的作品)-https://github.com/Wenzel/awesome-virtualization
7 天虚拟化:虚拟机管理程序开发系列 - ( https://revers.engineering/7-days-to-virtualization-a-series-on-hypervisor-development/ )
最后,如果您想使用虚拟机管理程序进行调试、研究或逆向工程,您可以使用HyperDbg Debugger,因为该调试器中实现了许多基于虚拟机管理程序的创新方法,这将为您的逆向之旅提供帮助。
在这一部分中,我们研究了我们应该注意的一般关键字,并为我们将来的测试创建了一个简单的测试环境。 在下一部分中,我将解释如何使用我们上面制作的驱动程序在您的计算机上启用 VMX。 然后我们将调查虚拟化的其余部分,所以我们下一部分见。
[1] 英特尔® 64 和 IA-32 架构软件开发人员手册合并第 3 卷 ( https://software.intel.com/en-us/articles/intel-sdm )
[2] 硬件辅助虚拟化 ( http://www.cs.cmu.edu/~412/lectures/L04_VTx.pdf )
[3] 编写 Windows 内核驱动程序 ( https://resources.infosecinstitute.com/writing-a-windows-kernel-driver/ )
[4] 什么是 1 类虚拟机管理程序? – ( http://www.virtualizationsoftware.com/type-1-hypervisors/ )
[5] Intel / AMD CPU 内部结构 – ( https://github.com/LordNoteworthy/cpu-internals )
[6] Windows 10:禁用签名驱动程序强制执行 – ( https://ph.answers.acer.com/app/answers/detail/a_id/38288/~/windows-10%3A-disable-signed-driver-enforcement )
[7] 指令集映射 » VMX 指令 – ( https://docs.oracle.com/cd/E36784_01/html/E36859/gntbx.html )
[8] HyperDbg 文档 – ( https://docs.hyperdbg.org )
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
Hypervisor From Scratch虚拟化技术文章翻译原文地址:https://rayanfam.com/tutorials/