Rusty Hypervisor - Hyperviseur de type 1 Blue Pill UEFI Windows en Rust (Nom de code : Illusion)
Blog : https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hyperviseur de recherche de type 1 basé sur Rust, léger, sûr en termes 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 (Windows UEFI Blue Pill Type-1 Hypervisor en Rust) est plus stable, prend en charge davantage de fonctionnalités et est globalement mieux conçu. L'hyperviseur Matrix (Windows Kernel Blue Pill Type-2 Hypervisor en Rust) est une version plus ancienne et expérimentale, et n'est pas destiné à une utilisation en production. Les deux projets servent de modèles pour aider les personnes à débuter dans le développement d'hyperviseurs en Rust.
Pagination : Traduction des adresses virtuelles x64 en adresses physiques
Ce diagramme illustre le mécanisme de traduction des adresses virtuelles x64 en adresses physiques dans les systèmes de pagination traditionnels. Dans l'architecture x64, cette traduction implique quatre niveaux de tables de pages : PML4, PDPT, PDT et PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table et Page Table). Chaque niveau utilise 9 bits de l'adresse virtuelle pour indexer le niveau suivant, pointant finalement vers une adresse physique spécifique en RAM. Ce processus est géré par le système d'exploitation et l'unité de gestion de la mémoire (MMU), qui traduit les adresses virtuelles utilisées par le logiciel en adresses physiques utilisées par le matériel.

Figure 1 : Traduction d'adresse virtuelle x64 (Crédits complets : Guided Hacking)
Tables de pages étendues (EPT) : Traduction d'adresse de second niveau (SLAT)
Les tables de pages étendues (EPT) sont une fonctionnalité des technologies de virtualisation assistée par matériel telles que Intel VT-x et les Nested Page Tables (NPT) d'AMD-V. L'EPT implémente la traduction d'adresse de second niveau (SLAT), spécialement conçue pour les environnements virtualisés. Alors que la pagination traditionnelle traduit les adresses virtuelles en adresses physiques au sein du système d'exploitation invité, l'EPT ajoute une couche supplémentaire en traduisant les adresses physiques invitées (utilisées par le système d'exploitation invité) en adresses physiques hôtes (utilisées par l'hyperviseur). Cette seconde couche de traduction est gérée par l'hyperviseur, permettant aux systèmes d'exploitation invités de gérer leurs propres tables de pages de manière indépendante. La SLAT améliore les performances en minimisant le besoin de sorties de VM lors des opérations mémoire, ce qui réduit la surcharge et améliore l'efficacité de la virtualisation.
Le diagramme ci-dessous montre comment implémenter des hooks EPT cachés dans le Windows UEFI Blue Pill Type-1 Hypervisor (Nom de code : Illusion) écrit en Rust.

Figure 2 : Hooks des tables de pages étendues (EPT) (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).