
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, , , , , .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.
Daax (@daaximus): Für seine herausragende kostenlose Serie zur Hypervisor-Entwicklung, die eine der besten verfügbaren Ressourcen ist und meine Arbeit durch ihre gründliche Recherche und klaren Erklärungen stark beeinflusst hat. Seine Unterstützung und Antworten auf meine Fragen waren von unschätzbarem Wert, um mir den Einstieg in die Hypervisor-Entwicklung zu ermöglichen:
Satoshi Tanda (@tandasat): Satoshi Tandas Anleitung, Projekte und strukturierte Trainingsprogramme waren unglaublich hilfreich. Seine detaillierten Erklärungen und Beiträge auf GitHub haben mein Verständnis erheblich verbessert und ihn zu einem großartigen Mentor auf meinem Weg gemacht:
Jess (@jessiep_): Für seine unschätzbare Unterstützung und Zusammenarbeit in mehreren Bereichen dieses Projekts, die wesentliche Einblicke und Fachwissen lieferte, sowie für seine schnellen Antworten auf meine Fragen.
Drew (@drew): Für seine Hilfe, Anleitung und schnellen Antworten auf meine Fragen zu verschiedenen Aspekten der Hypervisor-Entwicklung.
Sina Karvandi (@Intel80x86): Für seine detaillierte kostenlose Hypervisor-From-Scratch-Serie:
Secret Club: Einblicke in Anti-Cheat-Systeme und Hypervisor-Erkennung, die ebenfalls dieses Projekt inspiriert haben:
Weitere wichtige Ressourcen:
Besonderer Dank geht an:
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Weitere Informationen findest du in den MIT-Lizenzdetails.
EptViolationEptMisconfigurationInveptInvvpidXsetbvint3).Matthias (@not-matthias): Für seine wegweisende Arbeit am Projekt amd_hypervisor, das diese Forschung stark inspiriert und beeinflusst hat.
Nick Peterson (@everdox) und Aidan Khoury (@ajkhoury): Für ihre aufschlussreichen Untersuchungen zur Hypervisor-Introspektion und zum Syscall-Hooking: