Логотип
Главная | Статьи | Kernel Pool Exploitation на Windows 11
Kernel Pool Exploitation на Windows 11

Kernel Pool Exploitation на Windows 11

11 февраля, 2026

27

Kernel pool – это сердце Windows, и если ты умеешь его эксплуатировать, то получаешь SYSTEM. Windows 11 прокачала защиты до максимума: segment heap, pool corruption detection, CFG в ядре. Но это не значит, что игра окончена. Просто теперь нужно играть умнее.

Что такое Kernel Pool и почему он твоя цель

Kernel pool – это аналог user-mode heap, только для ядра. Драйверы и сама Windows используют ExAllocatePoolWithTag для выделения динамической памяти. Есть два основных типа пула:​

  • NonPagedPool – всегда в физической памяти, используется для критичных операций (DPC, ISR и т.д.)
  • PagedPool – может быть выгружен на диск, используется для менее критичных данных

Когда драйвер облажался и дал тебе переполнение буфера в пуле, ты можешь перезаписать соседние объекты и получить arbitrary read/write. А это = game over для системы.

Архитектура Windows 11 Kernel Pool

Segment Heap и kLFH

С Windows 10 (19H1) Microsoft переключилась на segment heap. Для мелких аллокаций используется kernel Low Fragmentation Heap (kLFH). Вот как это работает:

kLFH активация: Нужно сделать 17 последовательных аллокаций примерно одного размера. После этого kLFH создаст UserBlock – набор страниц, разбитых на чанки одинакового размера.

Bucket system: Аллокации распределяются по бакетам в зависимости от размера:

  • Каждый чанк имеет 16-байтный POOL_HEADER
  • Если запрашиваешь 496 байт, то с хедером получается 512 (0x200) – ровно один бакет
  • Важно: Переполнение работает только внутри одного бакета!

Структура POOL_HEADER:

VS Allocator

Для размеров, которые еще не попали в kLFH (до 17-й аллокации), используется Variable Size (VS) allocator. У него жесткие защиты:

  • Хедеры зашифрованы
  • Используются более безопасные структуры данных для free-листов
  • Эксплуатация требует утечки адресов

Защиты Windows 11

Pool Corruption Detection

Microsoft добавила detection механизмы с Windows 7, а к Windows 11 они стали еще злее:

  1. Encoded metadataFirstAllocationOffset и BlockStride в kLFH зашифрованы
  2. Guard pages: Maximally-sized subsegments получают guard page в конце
  3. Pool cookies: Хедеры содержат контрольные суммы для обнаружения перезаписи
  4. Safe unlinking: Проверки целостности при операциях с free-листами

SMEP/SMAP

  • SMEP (Supervisor Mode Execution Prevention): Ядро не может выполнять код из user-mode памяти
  • SMAP (Supervisor Mode Access Prevention): Ядро не может читать/писать в user-mode при IRQL >= 2

Важный момент: SMAP работает только при IRQL ≥ 2. Многие IOCTL хендлеры работают на PASSIVE_LEVEL (IRQL 0), и там можно читать/писать user-mode память.

KASLR

Kernel Address Space Layout Randomization рандомизирует базовые адреса ядра и драйверов. Для эксплуатации нужна утечка адресов.

Техники эксплуатации

1. Pool Spray с Named Pipes

Named pipes – это королева pool spray на Windows. Вот почему:

Структура NP_DATA_QUEUE_ENTRY:

Размер структуры: 48 (0x30) байт
С POOL_HEADER (16 байт): 64 (0x40) байт – идеальный размер для контроля.​

Spray техника:

2. Arbitrary Read через Pipe Overflow

Классическая техника с переполнением в соседний объект NP_DATA_QUEUE_ENTRY:

Принцип: Overflow перезаписывает поле Irp в соседнем NP_DATA_QUEUE_ENTRY, заставляя его указывать на наш user-mode IRP. Когда вызываем PeekNamedPipe, ядро читает из Irp->AssociatedIrp.SystemBuffer (наш контролируемый адрес).

3. Use-After-Free с IoCompletionReserve

IoCompletionReserve объекты – это легенда. Размер: 96 (0x60) байт с хедером.​

Spray через NtAllocateReserveObject:

Эта техника всё ещё работает на Windows 10/11.

4. Token Stealing Shellcode

Классика жанра – кража токена от SYSTEM процесса:

Важно: Offsets меняются между билдами Windows! Используй Vergilius Project для актуальных данных.

5. WNF State Data для современных эксплойтов

Windows Notification Facility (WNF) – новая техника для heap spray:​

Это дает контроль над размером и данными в kernel pool.

Debugging с WinDbg

Базовые команды

Анализ pool allocation:

Дамп POOL_HEADER:

Поиск по тегу:

Просмотр структур:

Показать все pool allocations по размеру:

Реальный CVE: разбор CVE-2025-24066

Heap overflow в Windows kernel driver:

Уязвимый код:

Эксплуатация:

  1. Spray NonPagedPool через named pipes с 0x100 размером
  2. Отправляем IOCTL с userSize = 0x200 (в 2 раза больше)
  3. Overflow перезаписывает соседний NP_DATA_QUEUE_ENTRY
  4. Меняем Irp->AssociatedIrp.SystemBuffer на адрес токена нашего процесса
  5. Пишем токен от SYSTEM через WriteFile в corrupted pipe
  6. Profit: процесс теперь SYSTEM

Продвинутые техники

Обход Pool Corruption Detection

Сохранение pool cookies: Если можешь читать перед записью (read-write примитив):

Exploitation без SMEP bypass

Если не можешь выполнять user-mode код:

  1. ROP в ядре: Ищи ROP gadgets в ntoskrnl.exe и драйверах
  2. Data-only attack: Просто меняй данные (токены, флаги, ACL), не трогай код
  3. Kernel function hooking: Перезаписывай указатели на функции в драйвере

Race Condition эксплуатация

Pool corruption часто происходит в race conditions:

Инструменты и ресурсы

Для разработки:

  • HackSysExtremeVulnerableDriver (HEVD) – тренировочный драйвер с уязвимостями​
  • WinDbg Preview – современный отладчик от Microsoft
  • PoolMon – мониторинг pool allocations в реальном времени

Offset’ы структур:

PoC и exploits:

Практические советы

  1. Всегда активируй kLFH: 17+ аллокаций одного размера делают heap детерминированным
  2. Используй правильные размеры: Твоя overflow allocation и spray objects должны быть в одном бакете
  3. Heap Feng Shui: Манипулируй состоянием heap через аллокации/освобождения перед атакой
  4. Leak before exploit: Сначала утекай адреса (bypass KASLR), потом атакуй
  5. Safe corruptions: Перезаписывай только то, что не крашнет систему сразу. Kernel debugging = долго
  6. Named pipes everywhere: Если можешь контролировать размер от 0x40 до 0x1000+, named pipes – твой друг​
  7. Test incrementally: Сначала proof-of-concept для детекции корректного overflow, потом эксплуатация. Не пытайся написать всё сразу.

Bottom Line

Kernel pool exploitation на Windows 11 – это не прогулка в парке, как было на XP или даже 7-ке. Segment heap, encryption, guard pages, SMEP/SMAP – всё это реальные препятствия. Но они не непробиваемые.

Ключ к успеху – понимание архитектуры kLFH, правильный heap feng shui через named pipes и терпение при отладке. А ещё – следи за свежими CVE, там часто можно найти новые паттерны эксплуатации.

Так что запускай VM с Windows 11, ставь HEVD, открывай WinDbg и начинай ломать. Pool overflow не умер – он просто вырос и стал сложнее. Удачи, и пусть твои эксплойты будут надёжными, а BSOD’ы – редкими!