
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, , , , , .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
Огромное спасибо замечательным людям и ресурсам, которые сформировали этот проект. Особая благодарность всем перечисленным ниже. Хотя в своей работе я использовал не все эти ресурсы, они стали настоящими золотыми жилами информации и очень полезны всем, кто погружается в разработку гипервизоров, включая меня.
Daax (@daaximus): За его выдающийся бесплатный цикл материалов о разработке гипервизоров, который является одним из лучших доступных ресурсов и оказал огромное влияние на мою работу благодаря глубоким исследованиям и понятным объяснениям. Его поддержка и ответы на мои вопросы были неоценимы, когда я делал первые шаги в разработке гипервизоров:
Satoshi Tanda (@tandasat): Руководства, проекты и структурированные обучающие программы Satoshi Tanda были невероятно полезны. Его подробные объяснения и вклад в GitHub значительно углубили моё понимание, и он стал отличным наставником на протяжении всего моего пути:
Jess (@jessiep_): За его неоценимую поддержку и сотрудничество в нескольких областях этого проекта, важные идеи и экспертные знания, а также за быстрые ответы на мои вопросы.
Drew (@drew): За его помощь, рекомендации и быстрые ответы на мои вопросы по различным аспектам разработки гипервизоров.
Sina Karvandi (@Intel80x86): За его подробный бесплатный цикл «Hypervisor From Scratch»:
Secret Club: Идеи по системам античита и обнаружению гипервизоров, которые также вдохновили этот проект:
Другие важные ресурсы:
Особая благодарность:
Этот проект лицензирован в соответствии с MIT License. Дополнительную информацию см. в подробностях о лицензии MIT.
EptViolationEptMisconfigurationInveptInvvpidXsetbvint3).Matthias (@not-matthias): За его значимую работу над проектом amd_hypervisor, которая во многом вдохновила и повлияла на это исследование.
Nick Peterson (@everdox) и Aidan Khoury (@ajkhoury): За их глубокие исследования гипервизорной интроспекции и перехвата системных вызовов: