
Rusty Hypervisor — Windows UEFI Blue Pill гипервизор Type-1 на Rust (кодовое имя: Illusion)
Блог: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Легковесный, безопасный для памяти и молниеносно быстрый исследовательский гипервизор типа 1 на Rust с хуками для Intel VT-x, ориентированный на изучение основных концепций виртуализации.
Примечание: Гипервизор Illusion (Windows UEFI Blue Pill гипервизор Type-1 на Rust) более стабилен, поддерживает больше функций и в целом лучше спроектирован. Гипервизор Matrix (Windows Kernel Blue Pill гипервизор Type-2 на Rust) — это более старая экспериментальная версия, не предназначенная для использования в продакшене. Оба проекта служат шаблонами, помогающими людям начать разработку гипервизоров на Rust.
Страничная адресация: преобразование x64 виртуальных адресов в физические
Эта диаграмма иллюстрирует механизм преобразования x64 виртуальных адресов в физические адреса в традиционных системах страничной адресации. В архитектуре x64 это преобразование включает четыре уровня таблиц страниц: PML4, PDPT, PDT и PT (Page Map Level 4, Page Directory Pointer Table, Page Directory Table и Page Table). Каждый уровень использует 9 бит виртуального адреса для индексации на следующем уровне, в конечном итоге указывая на конкретный физический адрес в оперативной памяти. Этот процесс управляется операционной системой и блоком управления памятью (MMU), который преобразует виртуальные адреса, используемые программным обеспечением, в физические адреса, используемые аппаратным обеспечением.

Рисунок 1: Преобразование x64 виртуальных адресов (Полные заслуги: Guided Hacking)
Расширенные таблицы страниц (EPT): трансляция адресов второго уровня (SLAT)
Расширенные таблицы страниц (EPT) — это функция технологий аппаратно-ускоренной виртуализации, таких как Intel VT-x и вложенные таблицы страниц (NPT) AMD-V. EPT реализует трансляцию адресов второго уровня (SLAT), специально разработанную для виртуализированных сред. В то время как традиционная страничная адресация преобразует виртуальные адреса в физические адреса внутри гостевой ОС, EPT добавляет дополнительный уровень, преобразуя гостевые физические адреса (используемые гостевой ОС) в хост-физические адреса (используемые гипервизором). Этот второй уровень трансляции управляется гипервизором, что позволяет гостевым операционным системам независимо управлять своими собственными таблицами страниц. SLAT повышает производительность за счёт минимизации необходимости в VM exits во время операций с памятью, что снижает накладные расходы и повышает эффективность виртуализации.
Диаграмма ниже демонстрирует, как реализовать скрытые EPT-хуки в Windows UEFI Blue Pill гипервизоре Type-1 (кодовое имя: Illusion), написанном на Rust.

Рисунок 2: Хуки расширенных таблиц страниц (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).cargo install cargo-make.cargo make build-debug.cargo make build-release.cargo make run-debug.cargo make run-release.