博客:https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
一个轻量级、内存安全且极速的基于 Rust 的 Type-2 研究型虚拟机监控器,带有面向 Intel VT-x 的钩子,专注于研究虚拟化的核心概念。
注意: Illusion 虚拟机监控器(基于 Rust 的 Windows UEFI Blue Pill Type-1 虚拟机监控器)更加稳定、支持更多功能,并且整体设计更加出色。Matrix 虚拟机监控器(基于 Rust 的 Windows 内核 Blue Pill Type-2 虚拟机监控器)是一个较旧的实验性版本,不适用于生产环境。这两个项目都作为模板,帮助人们开始使用 Rust 进行虚拟机监控器开发。
图 0:扩展页表(EPT)钩子(Matrix)
ExceptionOrNmi (#GP, #PF, #BP, #UD)、Cpuid、Getsec、Vmcall、Vmclear、Vmlaunch、Vmptrld、Vmptrst、Vmresume、Vmxon、Vmxoff、Rdmsr、Wrmsr、Invd、Rdtsc、EptViolation、EptMisconfiguration、Invept、Invvpid、Xsetbv。int3)钩子。rustup toolchain install nightly 和 rustup default nightly。winget install LLVM.LLVM。cargo install cargo-make cargo-expand cargo-edit cargo-workspaces。WDKContentRoot 环境变量,请将其设置为指向你的 WDK 安装路径:[System.Environment]::SetEnvironmentVariable("WDKContentRoot", "C:\Program Files (x86)\Windows Kits\10", [System.EnvironmentVariableTarget]::User)
cargo make --profile development。cargo make --profile release。bcdedit.exe /set testsigning on 激活测试签名。bcdedit.exe /bootdebug {bootmgr} on
bcdedit.exe /bootdebug on
bcdedit.exe /debug on
设置:bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n。
regedit.exe。HKLM\SYSTEM\CurrentControlSet\Control\Session Manager。Debug Print Filter,并将 DEFAULT DWORD 设置为 8。$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open()。使用服务控制器(sc.exe)来创建和管理虚拟机监控器服务:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
为 VMware Workstation 进行设置
构建项目:按照前面章节提供的构建说明编译项目。
设置 VMware Workstation
配置 VMware 串口用于调试。
图 1:VMware 串口设置
确保已启用 "Virtualize Intel VT-x/EPT or AMD-V/RVI"(虚拟化 Intel VT-x/EPT 或 AMD-V/RVI)以及 "Virtualize IOMMU (IO memory management unit)"(虚拟化 IOMMU(IO 内存管理单元))。
图 2:VMware 处理器设置
复制驱动程序
将 matrix.sys 驱动程序复制到 C:\Windows\System32\drivers 目录。
VMware 串口调试
在“串口调试”章节中执行 PowerShell 脚本以打开串口。
加载虚拟机监控器
使用“服务管理”章节中所示的 load.ps1 PowerShell 脚本来创建并启动虚拟机监控器服务。
图 3:加载虚拟机监控器
图 4:日志和 Windbg PoC 设置
图 5:日志和 Windbg PoC 执行
衷心感谢那些塑造了这个项目的杰出人士和资源。特别感谢下面列出的所有人。虽然我并未在自己的工作中使用所有这些资源,但它们都是信息的金矿,对任何深入虚拟机监控器开发的人(包括我)都非常有帮助。
Daax (@daaximus):感谢他出色的免费虚拟机监控器开发系列教程,这是可用的最佳资源之一,其深入的研究和清晰的讲解极大地影响了我自己的工作。他对我问题的支持和解答,对于我入门虚拟机监控器开发来说价值无量:
Satoshi Tanda (@tandasat):Satoshi Tanda 的指导、项目和结构化的培训课程对我帮助极大。他在 GitHub 上详细的讲解和贡献显著加深了我的理解,在我整个学习历程中是一位出色的导师:
Jess (@jessiep_):感谢他在该项目多个领域中提供的宝贵支持和合作,带来了关键的见解和专业知识,并快速回复我的问题。
Drew (@drew):感谢他在虚拟机监控器开发的各个方面给予的帮助、指导和对问题的快速回复。
Sina Karvandi (@Intel80x86):感谢他详细的免费 Hypervisor From Scratch 系列教程:
Matthias (@not-matthias):感谢他在 amd_hypervisor 项目上的出色工作,这极大地启发并影响了本研究。
Nick Peterson (@everdox) 和 Aidan Khoury (@ajkhoury):感谢他们对虚拟机监控器自省和系统调用钩子的深刻探索:
Secret Club:关于反作弊系统和虚拟机监控器检测的见解,也同样启发了这个项目:
其他必备资源:
特别感谢:
本项目基于 MIT 许可证授权。更多信息,请参阅 MIT 许可证详情。