
Rusty Hypervisor — гипервизор типа 2 «Blue Pill» (синяя пилюля) уровня ядра Windows, написанный на Rust (кодовое имя: Matrix)
Блог: https://memn0ps.github.io/hypervisors-for-memory-introspection-and-reverse-engineering/
Лёгкий, безопасный с точки зрения памяти и молниеносно быстрый исследовательский гипервизор второго типа на Rust с хуками для Intel VT-x, ориентированный на изучение базовых концепций виртуализации.
Примечание: Гипервизор Illusion (Windows UEFI Blue Pill Type-1 Hypervisor на Rust) более стабилен, поддерживает больше функций и в целом имеет лучший дизайн. Гипервизор Matrix (Windows Kernel Blue Pill Type-2 Hypervisor на Rust) — более старая экспериментальная версия и не предназначен для промышленного использования. Оба проекта служат шаблонами, которые помогают новичкам начать разработку гипервизоров на Rust.
Рисунок 0: Перехваты расширенных таблиц страниц (EPT) (Matrix)
ExceptionOrNmi (#GP, #PF, #BP, #UD), Cpuid, Getsec, Vmcall, Vmclear, Vmlaunch, Vmptrld, Vmptrst, Vmresume, Vmxon, Vmxoff, Rdmsr, Wrmsr, Invd, Rdtsc, EptViolation, EptMisconfiguration, Invept, Invvpid, Xsetbv.int3).rustup toolchain install nightly и rustup default nightly.winget install LLVM.LLVM.cargo install cargo-make cargo-expand cargo-edit cargo-workspaces.WDKContentRoot, указывающую на путь установки WDK, если она не была задана автоматически при установке 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
Настройка: bcdedit.exe /dbgsettings net hostip:w.x.y.z port:n.
regedit.exe.HKLM\SYSTEM\CurrentControlSet\Control\Session Manager.Debug Print Filter с параметром DEFAULT типа DWORD = 8.$serialPort = New-Object System.IO.Ports.SerialPort COM2,9600,None,8,One; $serialPort.Open().Используйте диспетчер служб (sc.exe) для создания службы гипервизора и управления ею:
sc.exe create matrix type= kernel binPath= C:\Windows\System32\drivers\matrix.sys
sc.exe query matrix
sc.exe start matrix
Настройка для VMware Workstation
Соберите проект: следуйте инструкциям по сборке из предыдущих разделов, чтобы скомпилировать проект.
Настройка VMware Workstation
Настройте последовательный порт VMware для отладки.
Рисунок 1: Настройки последовательного порта VMware
Убедитесь, что "Virtualize Intel VT-x/EPT or AMD-V/RVI" включена, а "Virtualize IOMMU (IO memory management unit)" также включена.
Рисунок 2: Настройки процессора VMware
Скопируйте драйвер
Скопируйте драйвер matrix.sys в каталог C:\Windows\System32\drivers.
Отладка через последовательный порт VMware
Выполните сценарий PowerShell из раздела «Отладка через последовательный порт VMware», чтобы открыть последовательный порт.
Загрузите гипервизор
Используйте сценарий PowerShell load.ps1, показанный в разделе «Управление службой», чтобы создать и запустить службу гипервизора.
Рисунок 3: Загрузка гипервизора
Рисунок 4: Журналы и настройка PoC с Windbg
Рисунок 5: Журналы и выполнение PoC с Windbg
Огромное спасибо замечательным людям и ресурсам, которые сформировали этот проект. Особая благодарность всем перечисленным ниже. Хотя в своей работе я использовал не все эти ресурсы, они стали настоящими золотыми жилами информации и очень полезны всем, кто погружается в разработку гипервизоров, включая меня.