
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, , , , , .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.
Daax (@daaximus): Por su excelente serie gratuita sobre desarrollo de hipervisores, uno de los mejores recursos disponibles, que ha influido enormemente en mi trabajo gracias a su exhaustiva investigación y sus claras explicaciones. Su apoyo y sus respuestas a mis preguntas fueron inestimables para que empezara con el desarrollo de hipervisores:
Satoshi Tanda (@tandasat): La guía, los proyectos y los programas de formación estructurada de Satoshi Tanda han sido increíblemente útiles. Sus explicaciones detalladas y sus contribuciones en GitHub han mejorado significativamente mi comprensión, convirtiéndolo en un gran mentor a lo largo de mi camino:
Jess (@jessiep_): Por su inestimable apoyo y colaboración en varias áreas de este proyecto, aportando conocimientos y experiencia esenciales, y por sus rápidas respuestas a mis preguntas.
Drew (@drew): Por su ayuda, orientación y rápidas respuestas a mis preguntas en diversos aspectos del desarrollo de hipervisores.
Sina Karvandi (@Intel80x86): Por su detallada serie gratuita Hypervisor From Scratch:
Secret Club: Información sobre sistemas anti-trampas y detección de hipervisores, que también inspiró este proyecto:
Otros recursos esenciales:
Un agradecimiento especial a:
Este proyecto está licenciado bajo la Licencia MIT. Para más información, consulta los detalles de la Licencia MIT.
EptViolationEptMisconfigurationInveptInvvpidXsetbvint3) compatibles con PatchGuard.Matthias (@not-matthias): Por su impactante trabajo en el proyecto amd_hypervisor, que inspiró e influyó enormemente en esta investigación.
Nick Peterson (@everdox) y Aidan Khoury (@ajkhoury): Por sus esclarecedoras exploraciones de la introspección de hipervisores y el hooking de syscalls: