Техника DKOM (Direct Kernel Object Manipulation, T1014) позволяет руткитам скрывать присутствие в Ring 0 путем исключения элементов из двусвязных списков ядра без вызова документированных API деинициализации.
При скрытии драйвера вредоносный код удаляет запись
LDR_DATA_TABLE_ENTRY из циклического списка PsLoadedModuleList (nt!PsLoadedModuleList), модифицируя указатели Flink и Blink. Аналогично скрытие потоков или процессов обходит ActiveProcessLinks в структуре EPROCESS. Поскольку стандартные системные утилиты и EDR-сенсоры верхнего уровня полагаются на обход активных структур списка, модуль исчезает из выдачи EnumDeviceDrivers и NtQuerySystemInformation.// Модификация указателей в LDR_DATA_TABLE_ENTRY (DKOM)Entry->InLoadOrderLinks.Blink->Flink = Entry->InLoadOrderLinks.Flink;Entry->InLoadOrderLinks.Flink->Blink = Entry->InLoadOrderLinks.Blink;Для выявления таких аномалий в дампах памяти применяется сканирование пулов памяти (NonPagedPool / PagedPool) по пуловым тегам (Pool Tags) и сигнатурам структур без привязки к активным спискам. В старых версиях Windows валидация опиралась на 4-байтные теги заголовков
_POOL_HEADER. Начиная с Windows 10 (версии 1903+) и в Windows 11 за счет Segment Heap и Pool Quota структура _POOL_HEADER для пулов больших страниц упразднена, что требует поиска по паттернам самих объектов — в частности, сигнатурам структур _DRIVER_OBJECT (тип объекта IoDriverObjectType) и таблицам MajorFunction.♾️Для Blue Team♾️
сверяйте результаты сканирования объектов в Volatility/Rekall (плагины
windows.driverscan, windows.modscan) со списком windows.modules. Несовпадение адреса базы драйвера в пуле со связным списком PsLoadedModuleList однозначно указывает на раслинковку. Дополнительные векторы верификации: анализ целостности цепочек DriverObject->DriverInit, перехваты в MajorFunction[], проверка IRP-хуков и сопоставление страниц памяти исполняемого пула с диапазонами легитимно загруженных PE-образов (VAD/ System PTEs).🌚 @poxek | 🌚 @poxek_ai | 📲MAX