
Rusty Hypervisor - Hyperviseur Blue Pill de type 2 du noyau Windows en Rust (Nom de code : Matrix)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hyperviseur de recherche de type 2 écrit en Rust, léger, sûr en matière de mémoire et extrêmement rapide, avec des hooks pour Intel VT-x, axé sur l'étude des concepts fondamentaux de la virtualisation.
Remarque: L'hyperviseur Illusion (hyperviseur Blue Pill de type 1 pour UEFI Windows en Rust) est plus stable, prend en charge davantage de fonctionnalités et est globalement mieux conçu. L'hyperviseur Matrix (hyperviseur Blue Pill de type 2 du noyau Windows en Rust) est une version plus ancienne et expérimentale qui n'est pas destinée à une utilisation en production. Les deux projets servent de modèles pour aider les personnes à démarrer dans le développement d'hyperviseurs en Rust.
Figure 0: Hooks de tables de pages étendues (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 PatchGuard.rustup toolchain install nightly et rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot pour qu'elle pointe vers votre chemin d'installation du WDK, si elle n'a pas été définie automatiquement lors de l'installation du 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
Configuration: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter avec le DWORD DEFAULT = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Utilisez le contrôleur de services (sc.exe) pour créer et gérer le service de l'hyperviseur:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Configuration pour VMware Workstation
Compilez le projet: suivez les instructions de compilation fournies dans les sections précédentes pour compiler le projet.
Configurer VMware Workstation
Configurez le port série VMware pour le débogage.
Figure 1: Paramètres du port série VMware
Assurez-vous que "Virtualize Intel VT-x/EPT or AMD-V/RVI" est activé et que "Virtualize IOMMU (IO memory management unit)" est activé.
Figure 2: Paramètres des processeurs VMware
Copier le pilote
Copiez le pilote matrix.sys dans le répertoire C:\Windows\System32\drivers.
Débogage par port série VMware
Exécutez le script PowerShell de la section Débogage par port série pour ouvrir le port série.
Charger l'hyperviseur
Utilisez le script PowerShell load.ps1 présenté dans la section Gestion du service pour créer et démarrer le service de l'hyperviseur.
Figure 3: Chargement de l'hyperviseur
Figure 4: Configuration du PoC avec les journaux et Windbg
Figure 5: Exécution du PoC avec les journaux et Windbg
Un grand merci aux personnes et aux ressources exceptionnelles qui ont façonné ce projet. Un merci tout particulier à toutes les personnes énumérées ci-dessous. Bien que je n'aie pas utilisé toutes ces ressources dans mon travail, elles ont été de véritables mines d'or d'informations, extrêmement utiles pour quiconque se lance dans le développement d'hyperviseurs, y compris moi-même.