
Гипервизор Windows для Intel x64: защитный гипервизор хоста для Windows, предназначенный для смягчения атак на уровне ядра, включая BYOVD, совместимый с VMware и Hyper-V.
NovaHypervisor — это защитный гипервизор на основе хоста x64 Intel. Цель этого проекта — защитить от атак на уровне ядра (либо через Bring Your Own Vulnerable Driver (BYOVD), либо другими способами) путем охраны продуктов защиты (антивирусов/EPP) и структур памяти ядра, а также предотвращения несанкционированного доступа к памяти ядра.
NovaHypervisor написан на C++ и Assembler и предназначен для работы на Windows 10 и более поздних версиях. Информацию об использовании см. в разделе Настройка.
[!IMPORTANT]
Гипервизор протестирован на Windows 11 25H2 и нескольких версиях Windows 10. Если вы столкнулись с проблемой, создайте новый issue, предварительно убедившись, что такой проблемы еще нет.
NovaHypervisor может работать под следующими гипервизорами:
✅ — Поддерживается и протестировано
⌛ — В разработке
❌ — Не поддерживается и не планируется к поддержке
| Гипервизор | Поддерживается |
|---|
Для использования NovaHypervisor необходимо создать службу ядра и запустить её:
sc create NovaHypervisor type= kernel binPath= "C:\Path\To\NovaHypervisor.sys"
sc start NovaHypervisor
Затем можно добавлять и удалять адреса, которые необходимо защитить, с помощью приложения NovaClient:
REM Add an address to protect
NovaClient.exe protect 0x12345678 <r|w|x> <execution hook>
REM Remove an address from protection
NovaClient.exe unprotect 0x12345678
protect: Защищает адрес памяти от доступа. Можно указать тип защиты:
r: Защита от чтенияw: Защита от записиx: Защита от исполнения
Указанная защита — это та защита, которая будет применена к адресу. Например, чтобы снять права на исполнение, укажите "rw".unprotect: Снимает защиту с адреса памяти.
[!NOTE] Перехват исполнения через inline hook + EPT hooks не поддерживается и не будет поддерживаться в этом проекте во избежание злоупотреблений.
Для компиляции проекта необходимо иметь:
Для запуска гипервизора требуется Windows 10 или более поздняя версия. Также необходимо:
NovaHypervisor пишет логи на второй последовательный порт (COM2, порт ввода-вывода 0x2F8) с помощью небольшого COM-логгера, способного работать на уровне IRQL HIGH_LEVEL и в корневых путях VMX. Записи содержат префикс NovaHypervisor и относятся к отладочным, информационным или сообщениям об ошибках.
bcdedit /dbgsettings serial debugport:2 baudrate:115200
Захватывайте вывод с последовательного канала на стороне хоста или с настроенной конечной точки COM2 вашей виртуальной машины при скорости 115200 8N1. Например, в PuTTY можно подключиться к последовательному транспорту, настроенному для виртуальной машины, и наблюдать строки лога по мере работы драйвера. Также можно использовать скрипт connect-vm.ps1 для подключения к порту COM2 виртуальной машины и отображения логов в консоли.
Для тестирования и отладки в тестовой среде выполните следующие команды от имени администратора, а затем перезагрузите машину:
bcdedit /set testsigning on
bcdedit /debug on
bcdedit /dbgsettings net hostip:<HOSTIP> port:55000 key:1.2.3.4
Где <HOSTIP> — IP-адрес вашей хост-машины.
| VMware | ✅ |
| Hyper-V | ✅ |
| Hyper-V с VBS | ⌛ |
| VirtualBox | ❌ |
| QEMU | ❌ |
| KVM | ❌ |