Маркетинг вендоров говорит «ИИ нового поколения». Инженерная реальность менее мистична и полезнее для понимания: современный EDR — это слоистая телеметрия плюс движок корреляции. Каждое проектное решение в AXIS начинается с этой карты, и эта заметка — сама карта, на уровне категорий, как мы брифим заказчиков. Знание местности важнее коллекции трюков.
Слой первый: хуки в пользовательском режиме
Классический слой. EDR внедряет свою библиотеку в новые процессы и патчит точки входа нативного API — прежде чем ваш вызов дойдёт до ядра, агент уже прочитал его аргументы. Это слой, который видит «кто попросил исполняемую память» с полным стеком вызовов. У него же больше всего публичной контр-литературы: снятие хуков, прямые сисколлы и их многочисленные потомки. Всё это противодействует ровно одному слою из пяти.
Структурная слабость слоя — охват. Библиотека хуков видит только процессы, в которые внедрена: процессы, запущенные до сенсора, процессы, блокирующие загрузку чужих модулей, и всё, что логика внедрения решила пропустить. Защищённые процессы — и уровень protected-light, под которым теперь работает большинство продуктов безопасности, — для этого слоя недоступны вовсе.
Слой второй: ядерные колбэки
Драйвер EDR подписывается на собственные каналы уведомлений ОС: создание процессов и потоков, загрузку образов, операции с реестром, запросы дескрипторов. Это слой, который может урезать права дескриптора до того, как ваш процесс его получит — поэтому открытие полного доступа к наблюдаемому процессу молча возвращает меньше, чем просили, и без ошибки. Минифильтры добавляют вид файловой системы; драйверы раннего запуска ставят сенсор впереди почти всего при загрузке.
Слабости здесь — тайминг и объём. Уведомления приходят после создания, а не до — достаточно быстрый актор выигрывает малые гонки. А каждый колбэк стоит вендору процессорного времени на каждой машине заказчиков, поэтому вендоры агрессивно настраивают выборку: высокочастотные события семплируются, а семплированная телеметрия по определению неполна.
Слой третий: ETW
Event Tracing for Windows — это операционная система, рассказывающая о себе: события потоков и памяти, загрузка образов, компиляция сборок .NET, выполнение скриптов, сетевые потоки. Продукты безопасности читают провайдер threat-intelligence и его соседей, чтобы видеть поведение, которое вообще не касается перехваченных API. Именно этот слой похоронил план «мы просто не вызываем нативный API напрямую».
Слабость в том, что рассказ производится внутри процесса, а потребляется снаружи. Процесс может мешать собственной сессии ETW — но ослепление провайдера само по себе громкое, хорошо каталогизированное поведение. Честный вопрос про ETW не «можно ли его отключить», а «что попытка отключения сообщит движку корреляции».
Слой четвёртый: AMSI
Antimalware Scan Interface направляет содержимое скриптов и макросов — PowerShell, автоматизацию Office, хосты JavaScript, загрузки сборок .NET в памяти — через провайдера защиты в момент исполнения, изнутри процесса-хоста. Всё, что живёт в скриптовых поверхностях, проходит этот слой. Граница столь же ясна: содержимое, которое никогда не входит в скриптовый хост, никогда не встречает AMSI. Это контрольный пост на конкретных дорогах, а не стена вокруг страны.
Слой пятый: сеть и песочница
Полностью за пределами конечной точки: паттерны DNS, метаданные TLS, периодичность сессий и детонация подозрительных файлов в инструментированных средах. Сетевой детект нельзя «отцепить» ничем, что вы делаете на хосте, — поэтому мы считаем профиль трафика первоклассным проектным решением, а не дополнением, и поэтому каждая сборка AXIS прогоняется против актуальных версий сенсоров в рамках релизного QA.
Продукт — это движок корреляции
Одиночные события — шум. Сигнал — последовательность.
Самая важная часть, которую фольклор об обходах игнорирует. Выделение памяти ничего не значит; выделение, запуск потока в него, неподписанный образ у родителя и новая TLS-сессия девяносто секунд спустя значат всё. Настоящий продукт вендора — движок, который соединяет события всех пяти слоёв — по хосту, по пользователю, по парку машин — и оценивает последовательность. Поэтому «я пропатчил хуки» не значит «невидим»: вы убедили одного свидетеля из пяти, а остальные четыре теперь показывают процесс, который первый свидетель загадочно перестал описывать.
{"ts":"14:31:02.114", "ev":"process.create", "pid":5104, "img":"svchost.exe", "parent":"services.exe"}
{"ts":"14:31:04.772", "ev":"mem.alloc", "pid":5104, "size":"64 КБ", "prot":"RWX", "src":"unbacked"}
{"ts":"14:31:04.815", "ev":"thread.start", "pid":5104, "entry":"unbacked+0x1a20"}
{"ts":"14:32:33.090", "ev":"net.tls", "pid":5104, "sni":"cdn-metrics.example"}
# любая строка по отдельности: шум. последовательность: score 0.97 → алерт
Что мы из этого извлекаем
Доктрина, а не рецепты — рецепты остаются в лицензионных материалах. Живучие импланты растворяются в последовательностях, а не в одиночных вызовах: ведут себя как программное обеспечение, которому место на машине, в темпе, нормальном для машины, по каналам, которые профиль способен честно объяснить. Каждая техника уклонения — сигнал со сроком годности; хорошо стареют те, что устраняют необходимость в сигнале вообще. Когда операции действительно нужны громкие варианты — работа на уровне ядра, злоупотребление драйверами — правильная мысленная модель: «покупка времени против движка корреляции», и бюджет всегда меньше, чем обещает фольклор.
Что из этого извлечь защитникам
Охотьтесь на последовательности, а не на артефакты. Включайте телеметрию, которая стоит денег, — ETW threat-intel, логирование блоков скриптов, аудит загрузки драйверов, — потому что слои, до которых имплант не дотягивается, ваше самое дешёвое преимущество. Считайте события порчи сенсора алертами высшего класса: EDR, который внезапно видит меньше, сам является детектом. И измеряйте покрытие по пяти слоям, а не по маркетинговой схеме: любой слой, который вы не можете перечислить, уже принадлежит импланту.