
Rusty Hypervisor - Hipervisor Tipo-1 Blue Pill UEFI de Windows en Rust (Nombre en clave: Illusion)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Un hypervisor de investigación tipo-1 basado en Rust, ligero, con seguridad de memoria y extremadamente rápido, con hooks para Intel VT-x, enfocado en estudiar los conceptos fundamentales de la virtualización.
Nota: El hypervisor Illusion (Windows UEFI Blue Pill Type-1 Hypervisor en Rust) es más estable, soporta más características y en general está mejor diseñado. El hypervisor Matrix (Windows Kernel Blue Pill Type-2 Hypervisor en Rust) es una versión más antigua y experimental, y no está destinado para uso en producción. Ambos proyectos sirven como plantillas para ayudar a las personas a comenzar con el desarrollo de hypervisores en Rust.
Paginación: Traducción de direcciones virtuales x64 a direcciones físicas
Este diagrama ilustra el mecanismo de traducción de direcciones virtuales x64 a direcciones físicas en los sistemas de paginación tradicionales. En la arquitectura x64, esta traducción involucra cuatro niveles de tablas de páginas: PML4, PDPT, PDT y PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table y Page Table). Cada nivel utiliza 9 bits de la dirección virtual para indexar al siguiente nivel, apuntando finalmente a una dirección física específica en la RAM. Este proceso es gestionado por el sistema operativo y la Unidad de Gestión de Memoria (MMU), que traduce las direcciones virtuales utilizadas por el software en direcciones físicas utilizadas por el hardware.

Figura 1: Traducción de direcciones virtuales x64 (Créditos completos: Guided Hacking)
Tablas de Páginas Extendidas (EPT): Traducción de Direcciones de Segundo Nivel (SLAT)
Las Tablas de Páginas Extendidas (EPT) son una característica de las tecnologías de virtualización asistidas por hardware como Intel VT-x y las Nested Page Tables (NPT) de AMD-V. EPT implementa la Traducción de Direcciones de Segundo Nivel (SLAT), diseñada específicamente para entornos virtualizados. Mientras que la paginación tradicional traduce direcciones virtuales a direcciones físicas dentro del sistema operativo invitado, EPT añade una capa adicional al traducir direcciones físicas del invitado (utilizadas por el sistema operativo invitado) a direcciones físicas del host (utilizadas por el hypervisor). Esta segunda capa de traducción es gestionada por el hypervisor, permitiendo a los sistemas operativos invitados gestionar sus propias tablas de páginas de forma independiente. SLAT mejora el rendimiento al minimizar la necesidad de VM exits durante las operaciones de memoria, lo que reduce la sobrecarga y mejora la eficiencia de la virtualización.
El diagrama a continuación demuestra cómo implementar hooks EPT ocultos en el Windows UEFI Blue Pill Type-1 Hypervisor (Nombre en clave: Illusion) escrito en Rust.

Figura 2: Hooks de Tablas de Páginas Extendidas (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).