Техники обхода антивирусов и EDR глазами защитника: поверхности наблюдения и многослойный детект

EDR-агент — не монолитная программа, а многоуровневая система, компоненты которой работают в разных привилегированных кольцах. Понимание того, как именно EDR наблюдает за хостом, позволяет защитнику оценить, какие точки наблюдения может попытаться ослепить атакующий, и выстроить детект на обход этих попыток.

Архитектура наблюдения 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 + HVCIBYOVD, kernel callback removalВысокий
Применить driver blocklist Microsoft + loldrivers.ioЗагрузка уязвимых драйверовВысокий
Развернуть Sysmon параллельно с EDRРезервный источник телеметрииВысокий
Настроить алерт на потерю heartbeat агентаПрямое убийство EDR-процессаВысокий
Мониторить ProcessAccess (Sysmon EID 10)Попытки unhook через запись в памятьСредний
Sigma-правила на загрузку драйверов из LOLDriversBYOVD на ранней стадииСредний
Периодический аудит привилегий SeLoadDriverPrivilegeСужение поверхности для BYOVDСредний
Сетевой детект на аномалии после потери агентаПост-обход активностьСредний

Ограничения защиты​


Ни одна комбинация мер не делает обход невозможным. Атакующий с достаточными привилегиями и ресурсами может:

  • Использовать zero-day в самом EDR-драйвере.
  • Атаковать гипервизор (если VBS реализована с уязвимостями).
  • Применить firmware-level атаку, невидимую для ОС.

Задача защитника — не сделать обход невозможным, а поднять его стоимость до уровня, при котором атакующий оставит достаточно артефактов для детекта и расследования. Каждый дополнительный слой увеличивает время dwell time и вероятность обнаружения.

Источники​


 
Назад
Верх Низ