
Rusty Hypervisor - Hypervisor di tipo 1 "Blue Pill" per UEFI Windows in Rust (Nome in codice: Illusion)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hypervisor di ricerca di tipo 1 basato su Rust, leggero, memory-safe e estremamente veloce, con hook per Intel VT-x, incentrato sullo studio dei concetti fondamentali della virtualizzazione.
Nota: L'hypervisor Illusion (Windows UEFI Blue Pill Type-1 Hypervisor in Rust) è più stabile, supporta più funzionalità ed è nel complesso progettato meglio. L'hypervisor Matrix (Windows Kernel Blue Pill Type-2 Hypervisor in Rust) è una versione sperimentale più vecchia e non è destinato all'uso in produzione. Entrambi i progetti servono come modelli per aiutare le persone a iniziare con lo sviluppo di hypervisor in Rust.
Paging: Traduzione degli indirizzi virtuali x64 in indirizzi fisici
Questo diagramma illustra il meccanismo di traduzione degli indirizzi virtuali x64 in indirizzi fisici nei sistemi di paging tradizionali. Nell'architettura x64, questa traduzione coinvolge quattro livelli di tabelle delle pagine: PML4, PDPT, PDT e PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table e Page Table). Ogni livello utilizza 9 bit dell'indirizzo virtuale per indicizzare il livello successivo, puntando infine a un indirizzo fisico specifico nella RAM. Questo processo è gestito dal sistema operativo e dalla Memory Management Unit (MMU), che traduce gli indirizzi virtuali usati dal software in indirizzi fisici usati dall'hardware.

Figura 1: x64 Virtual Address Translation (Crediti completi: Guided Hacking)
Extended Page Tables (EPT): Second Level Address Translation (SLAT)
Le Extended Page Tables (EPT) sono una funzionalità delle tecnologie di virtualizzazione assistita dall'hardware come Intel VT-x e le Nested Page Tables (NPT) di AMD-V. Le EPT implementano la Second Level Address Translation (SLAT), progettata specificamente per ambienti virtualizzati. Mentre il paging tradizionale traduce gli indirizzi virtuali in indirizzi fisici all'interno del sistema operativo guest, le EPT aggiungono un ulteriore livello traducendo gli indirizzi fisici guest (usati dal sistema operativo guest) in indirizzi fisici host (usati dall'hypervisor). Questo secondo livello di traduzione è gestito dall'hypervisor, consentendo ai sistemi operativi guest di gestire le proprie tabelle delle pagine in modo indipendente. SLAT migliora le prestazioni riducendo al minimo la necessità di VM exit durante le operazioni di memoria, il che riduce l'overhead e aumenta l'efficienza della virtualizzazione.
Il diagramma sottostante mostra come implementare hook EPT nascosti nel Windows UEFI Blue Pill Type-1 Hypervisor (Nome in codice: Illusion) scritto in Rust.

Figura 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).cargo install cargo-make.cargo make build-debug.cargo make build-release.