
Rusty Hypervisor – Windows-UEFI-Blue-Pill-Typ-1-Hypervisor in Rust (Codename: Illusion)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Ein leichtgewichtiger, speichersicherer und blitzschneller Rust-basierter Type-1-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 Type-1 Hypervisor in Rust) ist stabiler, unterstützt mehr Funktionen und ist insgesamt besser konzipiert. Der Matrix-Hypervisor (Windows Kernel Blue Pill Type-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.
Paging: Übersetzung von x64-virtuellen Adressen in physische Adressen
Dieses Diagramm veranschaulicht den Mechanismus zur Übersetzung von x64-virtuellen Adressen in physische Adressen in traditionellen Paging-Systemen. In der x64-Architektur umfasst diese Übersetzung vier Ebenen von Seitentabellen: PML4, PDPT, PDT und PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table und Page Table). Jede Ebene verwendet 9 Bits der virtuellen Adresse, um in die nächste Ebene zu indizieren und letztendlich auf eine bestimmte physische Adresse im RAM zu verweisen. Dieser Prozess wird vom Betriebssystem und der Memory Management Unit (MMU) verwaltet, die von der Software verwendete virtuelle Adressen in von der Hardware verwendete physische Adressen übersetzt.

Abbildung 1: x64 Virtual Address Translation (Vollständige Credits: Guided Hacking)
Extended Page Tables (EPT): Second Level Address Translation (SLAT)
Extended Page Tables (EPT) sind eine Funktion hardwareunterstützter Virtualisierungstechnologien wie Intel VT-x und AMD-Vs Nested Page Tables (NPT). EPT implementiert Second Level Address Translation (SLAT), die speziell für virtualisierte Umgebungen entwickelt wurde. Während traditionelles Paging virtuelle Adressen in physische Adressen innerhalb des Gast-Betriebssystems übersetzt, fügt EPT eine zusätzliche Ebene hinzu, indem es Gast-physische Adressen (die vom Gast-Betriebssystem verwendet werden) in Host-physische Adressen (die vom Hypervisor verwendet werden) übersetzt. Diese zweite Übersetzungsebene wird vom Hypervisor verwaltet, wodurch Gast-Betriebssysteme ihre eigenen Seitentabellen unabhängig verwalten können. SLAT verbessert die Leistung, indem es die Notwendigkeit von VM-Exits während Speicheroperationen minimiert, was den Overhead reduziert und die Virtualisierungseffizienz erhöht.
Das folgende Diagramm zeigt, wie versteckte EPT-Hooks im Windows UEFI Blue Pill Type-1 Hypervisor (Codename: Illusion) implementiert werden, der in Rust geschrieben ist.

Abbildung 2: Extended Page Tables (EPT) Hooks (Illusion)
ExceptionOrNmi (#GP, #PF, #BP, #UD) (0), InitSignal (3), StartupIpi (4), Cpuid (10), Getsec (11), Hlt (12), Invd (13), Vmcall (18), Vmclear (19), Vmlaunch (20), Vmptrld (21), Vmptrst (22), Vmresume (24), Vmxon (27), Vmxoff (26), ControlRegisterAccesses (28), Rdmsr (31), Wrmsr (32), MonitorTrapFlag (37), Rdtsc (49), EptViolation (48), EptMisconfiguration (50), Invept (53), Invvpid (55), Xsetbv (55).UNUSABLE zu markieren).cargo install cargo-make.