
Rusty Hypervisor: hipervisor Type-2 Blue Pill del kernel de Windows en Rust (Nombre en clave: Matrix)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hipervisor de investigación tipo 2 basado en Rust, ligero, seguro en cuanto a memoria y extremadamente rápido, con hooks para Intel VT-x, centrado en el estudio de los conceptos fundamentales de la virtualización.
Nota: El hipervisor Illusion (hipervisor Type-1 Blue Pill para Windows UEFI en Rust) es más estable, admite más funciones y, en general, tiene un mejor diseño. El hipervisor Matrix (hipervisor Type-2 Blue Pill del núcleo de Windows en Rust) es una versión experimental más antigua y no está pensada para uso en producción. Ambos proyectos sirven como plantillas para ayudar a la gente a empezar con el desarrollo de hipervisores en Rust.
Figura 0: Hooks de tablas de páginas extendidas (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) compatibles con PatchGuard.rustup toolchain install nightly y rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot para que apunte a la ruta de instalación de WDK, si no se ha establecido automáticamente durante la instalación de 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
Configuración: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter con el DWORD DEFAULT = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Usa el Controlador de servicios (sc.exe) para crear y administrar el servicio del hipervisor:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Configuración para VMware Workstation
Compila el proyecto: sigue las instrucciones de compilación proporcionadas en las secciones anteriores para compilar el proyecto.
Configurar VMware Workstation
Configura el puerto serie de VMware para la depuración.
Figura 1: Configuración del puerto serie de VMware
Asegúrate de que "Virtualize Intel VT-x/EPT or AMD-V/RVI" esté habilitada y de que "Virtualize IOMMU (IO memory management unit)" esté habilitada.
Figura 2: Configuración de procesadores de VMware
Copia el controlador
Copia el controlador matrix.sys al directorio C:\Windows\System32\drivers.
Depuración por puerto serie en VMware
Ejecuta el script de PowerShell de la sección Depuración por puerto serie para abrir el puerto serie.
Carga el hipervisor
Usa el script de PowerShell load.ps1 que se muestra en la sección Administración del servicio para crear e iniciar el servicio del hipervisor.
Figura 3: Carga del hipervisor
Figura 4: Configuración de la PoC con registros y Windbg
Figura 5: Ejecución de la PoC con registros y Windbg
Un enorme agradecimiento a las increíbles personas y recursos que han dado forma a este proyecto. Un reconocimiento especial a todos los que se enumeran a continuación. Aunque no utilicé todos estos recursos en mi trabajo, han sido minas de oro de información, muy útiles para cualquiera que se adentre en el desarrollo de hipervisores, incluido yo.