
Rusty Hypervisor - Hypervisor Tipo-1 Blue Pill UEFI para Windows em Rust (Codename: Illusion)
Blog: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Um hypervisor de pesquisa tipo-1 baseado em Rust, leve, com segurança de memória e extremamente rápido, com hooks para Intel VT-x, focado no estudo dos conceitos centrais de virtualização.
Nota: O hypervisor Illusion (Windows UEFI Blue Pill Type-1 Hypervisor em Rust) é mais estável, suporta mais recursos e é, no geral, melhor projetado. O hypervisor Matrix (Windows Kernel Blue Pill Type-2 Hypervisor em Rust) é uma versão mais antiga e experimental e não se destina ao uso em produção. Ambos os projetos servem como modelos para ajudar as pessoas a começar o desenvolvimento de hypervisors em Rust.
Paginação: Traduzindo Endereços Virtuais x64 para Endereços Físicos
Este diagrama ilustra o mecanismo de tradução de endereços virtuais x64 para endereços físicos em sistemas de paginação tradicionais. Na arquitetura x64, essa tradução envolve quatro níveis de tabelas de páginas: PML4, PDPT, PDT e PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table e Page Table). Cada nível usa 9 bits do endereço virtual para indexar o próximo nível, apontando, em última análise, para um endereço físico específico na RAM. Esse processo é gerenciado pelo sistema operacional e pela Memory Management Unit (MMU), que traduz os endereços virtuais usados pelo software em endereços físicos usados pelo hardware.

Figura 1: x64 Virtual Address Translation (Créditos completos: Guided Hacking)
Extended Page Tables (EPT): Second Level Address Translation (SLAT)
As Extended Page Tables (EPT) são um recurso de tecnologias de virtualização assistidas por hardware, como o Intel VT-x e as Nested Page Tables (NPT) do AMD-V. A EPT implementa a Second Level Address Translation (SLAT), projetada especificamente para ambientes virtualizados. Enquanto a paginação tradicional traduz endereços virtuais para endereços físicos dentro do sistema operacional convidado, a EPT adiciona uma camada adicional ao traduzir endereços físicos do convidado (usados pelo sistema operacional convidado) para endereços físicos do host (usados pelo hypervisor). Essa segunda camada de tradução é gerenciada pelo hypervisor, permitindo que os sistemas operacionais convidados gerenciem suas próprias tabelas de páginas de forma independente. A SLAT melhora o desempenho ao minimizar a necessidade de VM exits durante operações de memória, o que reduz a sobrecarga e aumenta a eficiência da virtualização.
O diagrama abaixo demonstra como implementar hooks EPT ocultos no Windows UEFI Blue Pill Type-1 Hypervisor (Codename: Illusion) escrito em 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.cargo make run-debug.cargo make run-release.