EDR-агент — не монолитная программа, а многоуровневая система, компоненты которой работают в разных привилегированных кольцах. Понимание того, как именно EDR наблюдает за хостом, позволяет защитнику оценить, какие точки наблюдения может попытаться ослепить атакующий, и выстроить детект на обход этих попыток.
Типичный EDR-агент состоит из трёх связанных компонентов:
Цепочка наблюдения выглядит так: драйвер фиксирует событие → передаёт его пользовательскому процессу → тот принимает решение (мониторить, блокировать, алертить) → отправляет лог на консоль.
Когда EDR_Process.exe решает мониторить процесс, он внедряет хуки в
Если агент наблюдает такую цепочку, он классифицирует процесс как вредоносный и завершает его.
Драйвер EDR подписывается на несколько типов kernel notifications:
Каждый из этих механизмов — отдельная поверхность, которую атакующий может попытаться отключить.
С точки зрения защитника важно понимать не конкретные эксплойты, а классы воздействий на каждый компонент защиты.
Атакующий может перезаписать участки памяти
Что наблюдает защитник:
В пространстве ядра атакующий может попытаться удалить зарегистрированные callback-записи из внутренних структур Windows или подменить их.
Что наблюдает защитник:
EDR-драйвер, работающий как filesystem minifilter, использует
Что наблюдает защитник:
Один из наиболее распространённых векторов атаки на kernel-level защиту. Атакующий загружает легитимный, но уязвимый драйвер с валидной подписью и использует его уязвимость для получения произвольного чтения/записи в памяти ядра. Через этот примитив можно отключить EDR-драйвер или удалить его callback-записи.
Предварительные условия для атакующего:
Что наблюдает защитник:
Наиболее грубый метод: убить пользовательский процесс агента. Требует высоких привилегий и обычно детектируется.
Что наблюдает защитник:
Ни один отдельный механизм не гарантирует обнаружение обхода. Эффективная защита строится на комбинации слоёв.
EDR-драйвер должен проверять собственную целостность: наличие callback-записей, неизменность хуков, живость пользовательского процесса. Если любой из компонентов «ослеп», это событие должно быть доставлено на консоль альтернативным каналом.
Несколько независимых источников телеметрии усложняют задачу атакующему. Например:
Virtualization-Based Security (VBS) с включённым Hypervisor-Protected Code Integrity (HVCI) существенно усложняет BYOVD-атаки. HVCI проверяет целостность кода ядра на уровне гипервизора, и даже уязвимый драйвер не сможет произвольно модифицировать память ядра.
VBS доступна в Windows 10, Windows 11, Windows Server 2016 и более поздних версиях. Включение HVCI — одна из наиболее эффективных мер против kernel-level обхода EDR.
Microsoft поддерживает рекомендованные правила блокировки драйверов, которые предотвращают загрузку известных уязвимых драйверов. В сочетании с правилами из проекта loldrivers.io это закрывает значительную часть BYOVD-векторов.
Даже если атакующему удалось частично ослепить агент, аномалии в поведении хоста видны на уровне SIEM/SOAR:
Ни одна комбинация мер не делает обход невозможным. Атакующий с достаточными привилегиями и ресурсами может:
Задача защитника — не сделать обход невозможным, а поднять его стоимость до уровня, при котором атакующий оставит достаточно артефактов для детекта и расследования. Каждый дополнительный слой увеличивает время dwell time и вероятность обнаружения.
Архитектура наблюдения EDR на Windows
Типичный EDR-агент состоит из трёх связанных компонентов:
- Драйвер ядра (EDR_Driver.sys) — подписывается на уведомления ядра через callback-механизмы Windows. Например,
PsSetCreateProcessNotifyRoutineсообщает драйверу о каждом создаваемом процессе: родительский PID, командная строка, путь к исполняемому файлу.
- Пользовательский процесс (EDR_Process.exe) — получает телеметрию от драйвера, устанавливает хуки в
ntdll.dllцелевых процессов и анализирует последовательности вызовов Windows API.
- Консоль управления (EDR_C2) — принимает алерты, позволяет аналитику изолировать хост от сети, загружать дампы памяти и выполнять команды для расследования.
Цепочка наблюдения выглядит так: драйвер фиксирует событие → передаёт его пользовательскому процессу → тот принимает решение (мониторить, блокировать, алертить) → отправляет лог на консоль.
Хуки в пользовательском пространстве
Когда EDR_Process.exe решает мониторить процесс, он внедряет хуки в
ntdll.dll этого процесса. Через эти хуки агент видит каждый вызов Windows API. Классическая вредоносная последовательность, которую EDR распознаёт как process injection:
Код:
OpenProcess → VirtualAllocEx → WriteProcessMemory → CreateRemoteThread
Если агент наблюдает такую цепочку, он классифицирует процесс как вредоносный и завершает его.
Callback-механизмы ядра
Драйвер EDR подписывается на несколько типов kernel notifications:
- Создание/завершение процессов (
PsSetCreateProcessNotifyRoutine)
- Создание/закрытие потоков (
PsSetCreateThreadNotifyRoutine)
- Загрузка/выгрузка образов (
PsSetLoadImageNotifyRoutine)
- Операции с реестром (
CmRegisterCallbackEx)
- Файловые операции через minifilter (
FltRegisterFilter)
Каждый из этих механизмов — отдельная поверхность, которую атакующий может попытаться отключить.
Поверхности атаки на компоненты EDR
С точки зрения защитника важно понимать не конкретные эксплойты, а классы воздействий на каждый компонент защиты.
Удаление хуков в пользовательском пространстве
Атакующий может перезаписать участки памяти
ntdll.dll в своём процессе, восстановив оригинальные байты функций и убрав хуки EDR. После этого вызовы API перестают перехватываться.Что наблюдает защитник:
- EDR-агент может детектировать изменение контрольных сумм собственных хуков.
- Sysmon Event ID 10 (ProcessAccess) фиксирует, когда один процесс открывает другой с правами записи в память.
- Аномальное поведение: процесс, который только что был под мониторингом, внезапно перестаёт генерировать телеметрию.
Удаление или подмена kernel callbacks
В пространстве ядра атакующий может попытаться удалить зарегистрированные callback-записи из внутренних структур Windows или подменить их.
Что наблюдает защитник:
- Integrity checks: EDR-драйвер периодически проверяет, что его callback-записи остаются в соответствующих массивах ядра.
- Поведенческий детект: если драйвер EDR внезапно перестаёт получать уведомления о создании процессов, это само по себе алерт.
Атака через minifilter-коммуникацию
EDR-драйвер, работающий как filesystem minifilter, использует
FltCreateCommunicationPort для обмена данными с пользовательским процессом. Атакующий может попытаться:- Перехватить или подменить communication port.
- Отправить crafted-сообщения для вызова уязвимости в обработчике.
Что наблюдает защитник:
- Мониторинг попыток подключения к порту EDR из неожиданных процессов.
- Ошибки соединения (например,
ERROR_CONNECTION_COUNT_LIMITпри исчерпании лимита подключений) могут указывать на DoS-попытку против агента.
BYOVD: Bring Your Own Vulnerable Driver
Один из наиболее распространённых векторов атаки на kernel-level защиту. Атакующий загружает легитимный, но уязвимый драйвер с валидной подписью и использует его уязвимость для получения произвольного чтения/записи в памяти ядра. Через этот примитив можно отключить EDR-драйвер или удалить его callback-записи.
Предварительные условия для атакующего:
- Привилегия
SeLoadDriverPrivilege(локальный администратор, оператор печати домена и т. п.)
- Возможность убить или перезапустить пользовательский процесс EDR
Что наблюдает защитник:
- Загрузка драйверов из нестандартных путей.
- Использование известных уязвимых драйверов — проект loldrivers.io поддерживает актуальный список.
- Sigma-правила и Sysmon-конфигурации, детектирующие загрузку драйверов из списка LOLDrivers.
Прямое завершение процесса EDR
Наиболее грубый метод: убить пользовательский процесс агента. Требует высоких привилегий и обычно детектируется.
Что наблюдает защитник:
- Сервис-менеджер Windows фиксирует неожиданную остановку сервиса.
- EDR-консоль получает алерт о потере связи с агентом.
- Tamper Protection (если реализована) блокирует попытку завершения.
Стратегии многослойного детекта
Ни один отдельный механизм не гарантирует обнаружение обхода. Эффективная защита строится на комбинации слоёв.
Слой 1: Integrity monitoring агента
EDR-драйвер должен проверять собственную целостность: наличие callback-записей, неизменность хуков, живость пользовательского процесса. Если любой из компонентов «ослеп», это событие должно быть доставлено на консоль альтернативным каналом.
Слой 2: Взаимный мониторинг
Несколько независимых источников телеметрии усложняют задачу атакующему. Например:
- EDR-агент + Sysmon: если EDR ослеплён, Sysmon продолжает фиксировать события.
- EDR-агент + Windows Event Log: события безопасности ядра (Event ID 4657, 4688) дублируют часть телеметрии.
- Сетевой детект: если хост перестаёт отправлять heartbeat на EDR-консоль, это триггер для SOC.
Слой 3: VBS и HVCI
Virtualization-Based Security (VBS) с включённым Hypervisor-Protected Code Integrity (HVCI) существенно усложняет BYOVD-атаки. HVCI проверяет целостность кода ядра на уровне гипервизора, и даже уязвимый драйвер не сможет произвольно модифицировать память ядра.
VBS доступна в Windows 10, Windows 11, Windows Server 2016 и более поздних версиях. Включение HVCI — одна из наиболее эффективных мер против kernel-level обхода EDR.
Слой 4: Driver blocklist
Microsoft поддерживает рекомендованные правила блокировки драйверов, которые предотвращают загрузку известных уязвимых драйверов. В сочетании с правилами из проекта loldrivers.io это закрывает значительную часть BYOVD-векторов.
Слой 5: Поведенческий детект на консоли
Даже если атакующему удалось частично ослепить агент, аномалии в поведении хоста видны на уровне SIEM/SOAR:
- Хост перестал отправлять телеметрию.
- Появились процессы, которые не были видны EDR, но зафиксированы сетевым оборудованием.
- Аномальная сетевая активность с хоста после «ослепления» агента.
Практический чек-лист для blue team
| Мера | Что закрывает | Приоритет |
|---|---|---|
| Включить VBS + HVCI | BYOVD, kernel callback removal | Высокий |
| Применить driver blocklist Microsoft + loldrivers.io | Загрузка уязвимых драйверов | Высокий |
| Развернуть Sysmon параллельно с EDR | Резервный источник телеметрии | Высокий |
| Настроить алерт на потерю heartbeat агента | Прямое убийство EDR-процесса | Высокий |
| Мониторить ProcessAccess (Sysmon EID 10) | Попытки unhook через запись в память | Средний |
| Sigma-правила на загрузку драйверов из LOLDrivers | BYOVD на ранней стадии | Средний |
| Периодический аудит привилегий SeLoadDriverPrivilege | Сужение поверхности для BYOVD | Средний |
| Сетевой детект на аномалии после потери агента | Пост-обход активность | Средний |
Ограничения защиты
Ни одна комбинация мер не делает обход невозможным. Атакующий с достаточными привилегиями и ресурсами может:
- Использовать zero-day в самом EDR-драйвере.
- Атаковать гипервизор (если VBS реализована с уязвимостями).
- Применить firmware-level атаку, невидимую для ОС.
Задача защитника — не сделать обход невозможным, а поднять его стоимость до уровня, при котором атакующий оставит достаточно артефактов для детекта и расследования. Каждый дополнительный слой увеличивает время dwell time и вероятность обнаружения.
