
Rusty Hypervisor - Hypervisor Blue Pill di Tipo 2 per il kernel Windows, scritto in Rust (Nome in codice: Matrix)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hypervisor di ricerca di tipo 2 basato su Rust, leggero, memory-safe ed estremamente veloce, con hook per Intel VT-x, focalizzato 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 è complessivamente meglio progettato. L'hypervisor Matrix (Windows Kernel Blue Pill Type-2 Hypervisor in Rust) è una versione più vecchia e sperimentale e non è pensato per l'uso in produzione. Entrambi i progetti servono come modelli per aiutare le persone a iniziare con lo sviluppo di hypervisor in Rust.
Figura 0: Hook delle Extended Page Tables (EPT) (Matrix)
ExceptionOrNmi (#GP, #PF, #BP, #UD), Cpuid, Getsec, Vmcall, Vmclear, Vmlaunch, Vmptrld, Vmptrst, Vmresume, Vmxon, Vmxoff Rdmsr, Wrmsr, Invd, Rdtsc, , , , , .rustup toolchain install nightly e rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot in modo che punti al percorso di installazione del WDK, se non è stata impostata automaticamente durante l'installazione del 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
Configurazione: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter con DWORD DEFAULT = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Usa il Service Controller (sc.exe) per creare e gestire il servizio dell'hypervisor:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Configurazione per VMware Workstation
Compila il progetto: segui le istruzioni di compilazione fornite nelle sezioni precedenti per compilare il progetto.
Configura VMware Workstation
Configura la porta seriale VMware per il debug.
Figura 1: Impostazioni della Porta Seriale VMware
Assicurati che "Virtualize Intel VT-x/EPT or AMD-V/RVI" sia abilitata e che "Virtualize IOMMU (IO memory management unit)" sia abilitata.
Figura 2: Impostazioni dei Processori VMware
Copia il Driver
Copia il driver matrix.sys nella directory C:\Windows\System32\drivers.
Debug della Porta Seriale VMware
Esegui lo script PowerShell nella sezione Debug della Porta Seriale per aprire la porta seriale.
Carica l'Hypervisor
Usa lo script PowerShell load.ps1 mostrato nella sezione Gestione del Servizio per creare e avviare il servizio dell'hypervisor.
Figura 3: Caricamento dell'Hypervisor
Figura 4: Configurazione PoC con Log e Windbg
Figura 5: Esecuzione PoC con Log e Windbg
Un grande ringraziamento alle fantastiche persone e risorse che hanno contribuito a dare forma a questo progetto. Un ringraziamento speciale a tutti coloro elencati di seguito. Anche se non ho usato tutte queste risorse nel mio lavoro, sono state miniere d'oro di informazioni, estremamente utili per chiunque si immerga nello sviluppo di hypervisor, me compreso.
Daax (@daaximus): Per la sua eccezionale serie gratuita sullo sviluppo di hypervisor, una delle migliori risorse disponibili, che ha fortemente influenzato il mio lavoro grazie alla sua ricerca approfondita e alle spiegazioni chiare. Il suo supporto e le risposte alle mie domande sono stati preziosi per iniziare con lo sviluppo di hypervisor:
Satoshi Tanda (@tandasat): La guida, i progetti e i programmi di formazione strutturati di Satoshi Tanda sono stati incredibilmente utili. Le sue spiegazioni dettagliate e i suoi contributi su GitHub hanno migliorato notevolmente la mia comprensione, rendendolo un grande mentore durante il mio percorso:
Jess (@jessiep_): Per il suo inestimabile supporto e la collaborazione in diverse aree di questo progetto, fornendo intuizioni e competenze essenziali, e per le sue rapide risposte alle mie domande.
Drew (@drew): Per il suo aiuto, la sua guida e le sue rapide risposte alle mie domande su vari aspetti dello sviluppo di hypervisor.
Sina Karvandi (@Intel80x86): Per la sua dettagliata serie gratuita Hypervisor From Scratch:
Secret Club: Approfondimenti sui sistemi anti-cheat e sul rilevamento degli hypervisor, che hanno anch'essi ispirato questo progetto:
Altre Risorse Essenziali:
Un ringraziamento speciale a:
Questo progetto è concesso in licenza sotto la MIT License. Per maggiori informazioni, consulta i dettagli della MIT License.
EptViolationEptMisconfigurationInveptInvvpidXsetbvint3) compatibili con PatchGuard.Matthias (@not-matthias): Per il suo influente lavoro sul progetto amd_hypervisor, che ha fortemente ispirato e influenzato questa ricerca.
Nick Peterson (@everdox) e Aidan Khoury (@ajkhoury): Per le loro illuminanti esplorazioni sull'introspezione degli hypervisor e sull'hooking delle syscall: