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

Вопрос HyperGuard — Реверс-инжиниринг 0x18B и анализ цепочки вызовов SkpgVerifyMemoryExtent (C++)

  • Автор темы Автор темы hex_cat
  • Дата начала Дата начала
Sloppy
Начинающий
Начинающий
Статус
Оффлайн
Регистрация
13 Фев 2026
Сообщения
505
Реакции
12
Народ, кто сейчас ковыряет HyperGuard, есть повод для обсуждения. Завис тут на пару недель в IDA, анализируя securekernel и hvix64, и докладываю по фактам: стандартный подход с EPT-сплитом через type-1 гипервизор против них уже не катит, 0x18B прилетает стабильно.

Суть проблемы в том, как именно SkpgVerifyExtents чекает память. Трассировка цепочки вызовов показала следующее:

  1. SkpgHyperguardRuntime: Триггерит проверку через рандомный таймер.
  2. SkpgTranslateVaWorker: Дергает гиперколл 0x52 (HvTranslateVirtualAddress).
  3. Флаги доступа: Выставляются в 0x71, что требует прав на чтение.

Так как наши shadow-страницы (--X) при попытке чтения со стороны гипервизора возвращают GpaNoReadAccess (результат 5), Skpg просто дропает систему в 0x18B. Даже если подсунуть валидный байт, проверка доступа (access rights check) на 0x140064996 ожидает R-X или RWX. Наш --X отдает 4, что для них вердикт — детект и последующий селф-дестракт VTL1.

Самое неприятное, что VTL1 сейчас планируется не только через гиперколы, а в четырех точках:
  1. Hypercall 0x11 (explicit vtl call)
  2. Синтетические таймеры (sub_FFFFF8000020F180)
  3. Secure Interrupts
  4. VMExit Piggybacking: Диспетчер в 0x2168BA проверяет очередь событий VTL1 буквально после каждого экзита.

Короче, этот BugCheck — это в одну сторону, восстановления нет. Сейчас думаю, есть ли смысл пытаться хукать HvSetEptPointer непосредственно в hvix64 как единственное горлышко для всех обновлений EPTP, либо пытаться манипулировать VTL-планировщиком в нулевом кольце, чтобы принудительно обходить проверки.

Кто-то уже пробовал работать из вложенной позиции (nested)? Есть варианты обхода без того, чтобы вызывать EPT violation при каждом чихе? Кидайте свои мысли, кто в теме, а то я уже перебрал все варианты с подменой таблиц.
 
Назад
Сверху Снизу