Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Гайд HyperGuard — Исследование защиты 0x18B и обход проверки EPT (C++)

  • Автор темы Автор темы hex_cat
  • Дата начала Дата начала
Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
537
Реакции
14
Народ, кто сейчас ковыряет HyperGuard, есть жирный инсайд по 0x18B. Потратил последние недели на реверс securekernel и hvix64, ситуация интересная.

Сижу на тайп-1 гипервизоре, паразитирующем внутри Hyper-V, с dual-CR3 EPT split. Идея была простая: hyperv_cr3 держит теневые страницы с --X, а hook_cr3 — полная копия с оригинальными RW-. Чтение триггерит EPT-виолейшн, хендлер подсовывает чистые байты. Против EAC работает стабильно, но HyperGuard после пары часов активного использования прилетает с 0x18B.

Разобрал цепочку в IDA, дошел до SkpgHyperguardRuntime (0x14000E884). Весь замес происходит здесь:

  1. SkpgVerifyExtents: крутится по модулям ядра.
  2. SkpgVerifyMemoryExtent: вызывает SkpgTranslateVaWorker (0x1400645FC), который в свою очередь дергает гиперколл 0x52 (HvTranslateVirtualAddress).

Флаги там всегда 0x71 (ValidateRead | SetPTBits | FlushInhibit | Supervisor). Весь прикол в том, что гиперколл делает программный EPT-волк из partition+0x2480, читая те же физические страницы таблиц, что и VMCS EPTP. Мои --X правки в PTE светятся для него как на ладони. Если ResultCode не 5, он лезет проверять права доступа: sub eax, 5. На выходе нужно либо 5 (R-X), либо 6 (RWX), а мои --X отдают 4. Итог: VTL1 самоуничтожается, вешает все CPU, оверврайтит RIP в VTL0 на KeBugCheckEx(0x18B).

Также нашел, что VTL1 шедулится не только через VTL-коллы, но и через синтетические таймеры, secure interrupt delivery и даже через vmexit piggybacking (диспатч-луп на 0x2168BA).

Вопрос к знающим: кто-то пробовал это обходить с нестед-позиции? Думаю, единственный адекватный вариант — хукать HvSetEptPointer в hvix64, чтобы фильтровать все EPTP-врайты на лету. Либо ковырять шедулер VTL0, чтобы не давать ему лезть в наш EPT.

Кто-то уже тестил такие хуки? Есть смысл или есть способ проще через манипуляции с VMCS? Делитесь опытом, кто допиливал — кидайте свои мысли.
 
Назад
Сверху Снизу