BSOD 0x00000109: CRITICAL_STRUCTURE_CORRUPTION - Ошибка PatchGuard
Архитектура PatchGuard и симптомы (0x109)
Синий экран BSOD 0x00000109 (CRITICAL_STRUCTURE_CORRUPTION) генерируется встроенной системой защиты ядра Windows (Kernel Patch Protection, также известной как PatchGuard). Ядро Windows строго запрещает кому-либо (даже антивирусам уровня ядра) модифицировать свои критические структуры в памяти (таблицы системных вызовов SSDT, таблицу прерываний IDT или регистры MSR). Если PatchGuard при фоновой проверке обнаруживает, что 'чужой' код переписал системную память, он немедленно убивает сервер (BSOD), чтобы не дать руткиту (Rootkit) или эксплойту захватить контроль над ОС.
Анализ параметров (Тип повреждения)
Ключ к разгадке лежит в Parameter 4 дампа MEMORY.DMP:
| Parameter 4 (HEX) | Что переписал нарушитель |
|---|---|
0x101 | Повреждение структуры EPROCESS или KPROCESS (Процессы ядра). |
0x103 | Изменена таблица прерываний (IDT) или глобальная дескрипторная таблица (GDT). |
0x104 | Повреждение таблицы системных вызовов (SSDT). Явный признак работы старых руткитов (Malware). |
0x108 (или 109) | Модификация MSR-регистров процессора (Model Specific Register). Частый конфликт с гипервизорами. |
Пошаговое дерево решений (Отладка и Защита)
Сценарий 1: Программный конфликт (Filter Drivers / EDR)
В современных ОС Microsoft запретила антивирусам 'хукать' (Hooking) ядро старыми методами (для этого введен API Mini-filters). Но старый софт продолжает пытаться встроиться в ядро, вызывая гнев PatchGuard.
- Откройте
MEMORY.DMPв WinDbg и выполните!analyze -v. - В отличие от других BSOD, PatchGuard 'падает' асинхронно (через несколько минут после того, как кто-то сломал память). Поэтому WinDbg почти всегда покажет на само ядро
ntoskrnl.exe. Виновник уже скрылся! - Решение: Проанализируйте установленный софт. Виновниками 0x109 почти всегда выступают: Системы защиты от утечек (DLP), старые версии Антивирусов (Kaspersky/Symantec), эмуляторы CD/DVD-приводов (Daemon Tools, Alcohol) или 'грязные' драйверы античитов. Удалите их в Safe Mode.
Сценарий 2: Дефектная ОЗУ (Memory Corruption)
Если структура ядра была модифицирована не драйвером, а просто исказилась аппаратно из-за 'битого' бита в планке RAM, PatchGuard все равно расценит это как атаку и выдаст 0x109.
- Если сервер падает хаотично — запустите MemTest86+ на 24 часа. Изучите аппаратные логи iLO/iDRAC на предмет Uncorrectable ECC Memory Errors.
Сценарий 3: Виртуализация и гипервизоры (VMware / KVM)
Если сервер работает внутри ВМ, а Parameter 4 равен 0x108 (MSR Registers), значит гипервизор некорректно эмулирует процессор (CPU) для гостевой ОС. Windows Server детектирует это как попытку перехвата (Hypervisor Hooking) и вызывает BSOD. Обновите ядро гипервизора (ESXi/Proxmox) или отключите вложенную виртуализацию (Nested Virtualization), если она не используется.
Типовые ошибки администраторов
- Попытка отключить PatchGuard: На хакерских форумах советуют утилиты вроде 'PatchGuard Disabler'. На боевых Windows Server это делать категорически запрещено! Сервер станет уязвимым для простейших руткитов (Ring 0).
Отладка дампов памяти (Kernel Debugging) при сработках PatchGuard — сложнейшая инженерная задача. Передайте инфраструктуру на системную поддержку: мы проанализируем дампы, вычистим конфликтующие Filter Drivers, обновим Firmware и обеспечим серверам Enterprise-стабильность (SLA 99.9%).
Частые вопросы (FAQ)
Может ли вирус вызвать 0x109?
Да. Собственно, для борьбы с ними ошибка 0x109 и придумана. Современные руткиты (Rootkits) или эксплойты пытаются модифицировать структуры ядра для скрытия своих процессов. PatchGuard замечает это и 'жертвует' сервером (BSOD), чтобы не дать вирусу украсть данные.
Чем 0x109 отличается от 0x139 (KERNEL_SECURITY_CHECK_FAILURE)?
Они из одной 'семьи' защиты. 0x139 срабатывает при повреждении связанных списков (LIST_ENTRY) или переполнении буфера (Stack). 0x109 срабатывает при модификации статичных фундаментальных таблиц ядра (SSDT, IDT).
Почему WinDbg показывает виновником ntkrnlmp.exe?
Потому что ntkrnlmp.exe (многопроцессорное ядро Windows) содержит код самого PatchGuard. Именно оно генерирует прерывание BSOD. Найти истинного виновника, переписавшего память, можно только с помощью Driver Verifier (verifier.exe).
Поможет ли sfc /scannow?
Нет. Команда sfc проверяет физическую целостность файлов на жестком диске. 0x109 — это повреждение динамических структур В ОПЕРАТИВНОЙ ПАМЯТИ (RAM) во время работы ОС.
Что означает Parameter 4 = 0x1A?
Это специфический код: 'Модификация кода самого ядра или драйверов HAL'. Если это не битая RAM, значит у вас в системе 100% работает руткит (Malware), пытающийся пропатчить ядро на лету.