
Rusty Hypervisor - Hyperviseur Blue Pill de type 2 du noyau Windows en Rust (Nom de code : Matrix)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hyperviseur de recherche de type 2 écrit en Rust, léger, sûr en matière de mémoire et extrêmement rapide, avec des hooks pour Intel VT-x, axé sur l'étude des concepts fondamentaux de la virtualisation.
Remarque: L'hyperviseur Illusion (hyperviseur Blue Pill de type 1 pour UEFI Windows en Rust) est plus stable, prend en charge davantage de fonctionnalités et est globalement mieux conçu. L'hyperviseur Matrix (hyperviseur Blue Pill de type 2 du noyau Windows en Rust) est une version plus ancienne et expérimentale qui n'est pas destinée à une utilisation en production. Les deux projets servent de modèles pour aider les personnes à démarrer dans le développement d'hyperviseurs en Rust.
Figure 0: Hooks de tables de pages étendues (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 et rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot pour qu'elle pointe vers votre chemin d'installation du WDK, si elle n'a pas été définie automatiquement lors de l'installation du 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
Configuration: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter avec le DWORD DEFAULT = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Utilisez le contrôleur de services (sc.exe) pour créer et gérer le service de l'hyperviseur:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Configuration pour VMware Workstation
Compilez le projet: suivez les instructions de compilation fournies dans les sections précédentes pour compiler le projet.
Configurer VMware Workstation
Configurez le port série VMware pour le débogage.
Figure 1: Paramètres du port série VMware
Assurez-vous que "Virtualize Intel VT-x/EPT or AMD-V/RVI" est activé et que "Virtualize IOMMU (IO memory management unit)" est activé.
Figure 2: Paramètres des processeurs VMware
Copier le pilote
Copiez le pilote matrix.sys dans le répertoire C:\Windows\System32\drivers.
Débogage par port série VMware
Exécutez le script PowerShell de la section Débogage par port série pour ouvrir le port série.
Charger l'hyperviseur
Utilisez le script PowerShell load.ps1 présenté dans la section Gestion du service pour créer et démarrer le service de l'hyperviseur.
Figure 3: Chargement de l'hyperviseur
Figure 4: Configuration du PoC avec les journaux et Windbg
Figure 5: Exécution du PoC avec les journaux et Windbg
Un grand merci aux personnes et aux ressources exceptionnelles qui ont façonné ce projet. Un merci tout particulier à toutes les personnes énumérées ci-dessous. Bien que je n'aie pas utilisé toutes ces ressources dans mon travail, elles ont été de véritables mines d'or d'informations, extrêmement utiles pour quiconque se lance dans le développement d'hyperviseurs, y compris moi-même.
Daax (@daaximus): Pour son excellente série gratuite sur le développement d'hyperviseurs, qui est l'une des meilleures ressources disponibles et qui a grandement influencé mon travail grâce à ses recherches approfondies et ses explications claires. Son soutien et ses réponses à mes questions ont été inestimables pour me lancer dans le développement d'hyperviseurs:
Satoshi Tanda (@tandasat): Les conseils, les projets et les programmes de formation structurés de Satoshi Tanda ont été incroyablement utiles. Ses explications détaillées et ses contributions sur GitHub ont considérablement enrichi ma compréhension, faisant de lui un excellent mentor tout au long de mon parcours:
Jess (@jessiep_): Pour son soutien inestimable et sa collaboration dans plusieurs domaines de ce projet, apportant des perspectives et une expertise essentielles, ainsi que pour ses réponses rapides à mes questions.
Drew (@drew): Pour son aide, ses conseils et ses réponses rapides à mes questions sur divers aspects du développement d'hyperviseurs.
Sina Karvandi (@Intel80x86): Pour sa série gratuite et détaillée Hypervisor From Scratch:
Secret Club: Des éclairages sur les systèmes anti-triche et la détection d'hyperviseurs, qui ont également inspiré ce projet:
Autres ressources essentielles:
Un merci spécial à:
Ce projet est sous licence MIT. Pour plus d'informations, consultez les détails de la licence MIT.
EptViolationEptMisconfigurationInveptInvvpidXsetbvint3) compatibles PatchGuard.Matthias (@not-matthias): Pour son travail marquant sur le projet amd_hypervisor, qui a grandement inspiré et influencé cette recherche.
Nick Peterson (@everdox) et Aidan Khoury (@ajkhoury): Pour leurs explorations perspicaces de l'introspection d'hyperviseurs et du hooking d'appels système: