
Rusty Hypervisor - Windows Kernel Blue Pill Type-2 Hypervisor in Rust (Codename: Matrix)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Ein leichtgewichtiger, speichersicherer und blitzschneller in Rust geschriebener Typ-2-Forschungshypervisor mit Hooks für Intel VT-x, der sich auf das Studium der Kernkonzepte der Virtualisierung konzentriert.
Hinweis: Der Illusion-Hypervisor (Windows-UEFI-Blue-Pill-Typ-1-Hypervisor in Rust) ist stabiler, unterstützt mehr Funktionen und ist insgesamt besser gestaltet. Der Matrix-Hypervisor (Windows-Kernel-Blue-Pill-Typ-2-Hypervisor in Rust) ist eine ältere, experimentelle Version und nicht für den Produktionseinsatz gedacht. Beide Projekte dienen als Vorlagen, um Menschen den Einstieg in die Hypervisor-Entwicklung mit Rust zu erleichtern.
Abbildung 0: Extended Page Tables (EPT)-Hooks (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 und rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot so, dass sie auf deinen WDK-Installationspfad zeigt, falls sie während der WDK-Installation nicht automatisch gesetzt wurde:[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
Einrichtung: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter mit dem DEFAULT-DWORD = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Verwende den Dienstcontroller (sc.exe), um den Hypervisor-Dienst zu erstellen und zu verwalten:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Einrichtung für VMware Workstation
Baue das Projekt: Folge den Build-Anweisungen in den vorherigen Abschnitten, um das Projekt zu kompilieren.
VMware Workstation einrichten
Konfiguriere den seriellen Port von VMware für das Debugging.
Abbildung 1: Serielle Port-Einstellungen von VMware
Stelle sicher, dass "Intel VT-x/EPT oder AMD-V/RVI virtualisieren" aktiviert ist und "IOMMU (IO-Speicherverwaltungseinheit) virtualisieren" aktiviert ist.
Abbildung 2: Prozessor-Einstellungen von VMware
Den Treiber kopieren
Kopiere den Treiber matrix.sys in das Verzeichnis C:\Windows\System32\drivers.
VMware-Serienport-Debugging
Führe das PowerShell-Skript aus dem Abschnitt Serienport-Debugging aus, um den seriellen Port zu öffnen.
Den Hypervisor laden
Verwende das PowerShell-Skript load.ps1 aus dem Abschnitt Dienstverwaltung, um den Hypervisor-Dienst zu erstellen und zu starten.
Abbildung 3: Hypervisor laden
Abbildung 4: Logs und Windbg-PoC-Einrichtung
Abbildung 5: Logs und Windbg-PoC-Ausführung
Ein großes Dankeschön an die großartigen Menschen und Ressourcen, die dieses Projekt geprägt haben. Ein besonderer Gruß an alle unten Aufgeführten. Auch wenn ich nicht alle diese Ressourcen in meiner Arbeit verwendet habe, sind sie wahre Goldgruben an Informationen und sehr hilfreich für alle, die sich in die Hypervisor-Entwicklung stürzen – mich eingeschlossen.