Почему одного сигнатурного антивируса недостаточно: уклонение от сигнатур и многослойный детект

Прямой ответ​


Сигнатурный антивирус сравнивает байты файла с базой известных шаблонов. Любое изменение этих байтов — перестановка секций, затирание импорта, модификация точки входа — ломает совпадение, и файл перестаёт детектироваться. Поведенческий детект решает эту проблему принципиально иначе: он наблюдает не за содержимым файла, а за действиями процесса в runtime. Поэтому многослойная защита комбинирует оба подхода.

Как работает сигнатурный детект​


Классический антивирусный сканер выполняет статический анализ PE-файла (на Windows) или ELF-бинарника (на Linux). Он извлекает характерные последовательности байтов — сигнатуры — и сверяет их с базой. Сигнатура может быть привязана к разным частям файла:

  • Телу конкретной секции (например, .text с машинным кодом).
  • Таблице импорта — списку функций, которые бинарник вызывает из системных DLL.
  • Заголовку PE, включая поле AddressOfEntryPoint в IMAGE_OPTIONAL_HEADER.
  • Комбинации нескольких участков.

Пока файл не изменяется, детект работает надёжно. Проблема в том, что изменить файл тривиально.

Классы модификаций, ломающих сигнатуру​


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

Затирание и перестройка секций​


PE-файл состоит из секций: .text (код), .data (инициализированные данные), .rdata (константы, импорт), .reloc (релокации) и других. Если сигнатура привязана к содержимому конкретной секции, её удаление или обнуление устраняет детект.

Например, затирание всех секций кроме первой (.text) или обнуление только секции .data меняет хеш файла и разрушает сигнатуру, при этом исполняемый код может остаться функциональным — программа продолжит работать, если не обращается к затёртым данным.

Модификация таблицы импорта​


Таблица импорта перечисляет внешние функции, которые бинарник вызывает через IAT (Import Address Table). Многие сигнатуры строятся именно на характерном наборе импортов: например, комбинация VirtualAlloc + CreateRemoteThread + WriteProcessMemory — классический маркер инъекции.

Перезатирание или перестройка таблицы импорта (динамическое разрешение через GetProcAddress вместо статического импорта) убирает эти маркеры из статического анализа. Файл на диске больше не содержит подозрительных строк, но в runtime те же функции всё равно вызываются.

Обход эмулятора​


Некоторые антивирусы запускают подозрительный файл в встроенном эмуляторе CPU, чтобы наблюдать его поведение без реального выполнения. Если сигнатура срабатывает на результате эмуляции, атакующий может поставить инструкцию выхода (например, ret или exit) непосредственно на точку входа, которую эмулятор начинает исполнять. Эмулятор завершает работу, не дойдя до вредоносного кода, и детект исчезает.

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

Полиморфизм и метаморфизм​


Полиморфный код шифрует своё тело разным ключом при каждой генерации, оставляя неизменным только небольшой дешифратор. Метаморфный код перестраивает саму логику: меняет порядок инструкций, вставляет мусорные операции, заменяет эквивалентные последовательности. Оба подхода делают бесполезной любую статическую сигнатуру на теле кода.

Почему поведенческий детект закрывает эти пробелы​


Все описанные техники объединяет одно: они меняют статическое представление файла, но не меняют логику его работы в runtime. Поведенческий детект наблюдает именно за runtime-активностью Endpoint Detection and Response (EDR): какие события собираются и как строится поведенческий детект:

Что наблюдает поведенческий движокПочему это устойчиво к обходу сигнатур
Системные вызовы и их последовательностьВызовы NtAllocateVirtualMemory, NtWriteVirtualMemory, NtCreateThreadEx видны независимо от того, как они были импортированы
Доступ к памяти других процессовИнъекция кода оставляет след в целевом процессе, даже если источник не содержит сигнатуры
Сетевые соединения и DNS-запросыC2-коммуникация детектируется по паттернам трафика, а не по байтам бинарника
Модификация реестра и автозагрузкиPersistence-механизмы видны через мониторинг ключевых путей реестра
Создание и модификация файлов в чувствительных директорияхДроппер, записывающий payload в %APPDATA%, детектируется по действию

Ключевое отличие: поведенческий детект не зависит от содержимого файла на диске. Он фиксирует последствия выполнения — а последствия изменить значительно сложнее, чем байты PE-заголовка.

Ограничения поведенческого анализа​


Поведенческий детект не является серебряной пулей. У него свои слепые зоны:

  • Ложные срабатывания. Легитимное ПО (инсталляторы, утилиты администрирования, системы обновления) часто выполняет те же действия, что и вредоносное: инъекцию в процессы, модификацию автозагрузки, сетевые соединения. Без контекста и allowlisting это приводит к блокировке нормальных операций.
  • Задержка детекта. Поведенческий движок должен дождаться, пока процесс выполнит подозрительное действие. Между запуском и детектом проходит время, за которое часть ущерба может быть нанесена.
  • Обход через легитимные процессы. Техники living-off-the-land (LOLBins) используют подписанные системные утилиты для выполнения вредоносных действий. Поведенческий детект видит легитимный процесс и может не сработать без дополнительных правил.
  • Анти-эмуляция и sandbox detection. Вредоносный код может проверять, находится ли он в песочнице или под мониторингом, и менять поведение.

Многослойная модель защиты​


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

  1. Статический анализ и сигнатуры — быстрый первый фильтр. Отсекает известные образцы без запуска. Дёшев в вычислительном плане.
  2. Эвристика и машинное обучение на статике — обобщённые модели, которые детектируют новые варианты известных семейств по структурным признакам PE-файла.
  3. Песочница (sandbox) — контролируемый запуск в изолированной среде с наблюдением за поведением. Даёт время на анализ до попадания на реальный хост.
  4. Поведенческий детект на эндпоинте (EDR) — мониторинг в реальном времени на рабочей станции Endpoint Detection and Response (EDR): какие события собираются и как строится поведенческий детект. Фиксирует системные вызовы, доступ к памяти, сетевую активность, изменения файловой системы.
  5. Анализ in-memory артефактов — детект активности, которая существует только в памяти процесса и не оставляет файла на диске Детект в памяти Windows: почему in-memory активность оставляет признаки и как их анализируют защитники.
  6. Сетевой детект (NDR/IDS) — анализ трафика на уровне сети: аномальные DNS-запросы, C2-паттерны, горизонтальное перемещение.
  7. Корреляция и threat intelligence — сопоставление событий с известными тактиками и техниками из базы MITRE ATT&CK, которая систематизирует наблюдения за реальными атаками.

Каждый слой увеличивает стоимость атаки для противника. Обход сигнатуры тривиален, но обход сигнатуры + поведенческого детекта + сетевого мониторинга + корреляции с threat intelligence требует значительно больше усилий и оставляет больше следов.

Что это значит для защитника: практический чек-лист​


  • Не полагайтесь на один антивирусный продукт. Если в инфраструктуре используется только сигнатурный сканер — это минимальный уровень защиты, который обходится модификацией одного байта.
  • Внедряйте EDR-решение с мониторингом системных вызовов и доступа к памяти процессов. Это закрывает пробел между статическим анализом и реальным поведением.
  • Настройте правила детекта на последовательности действий, а не на отдельные события. Один вызов VirtualAllocEx не подозрителен; цепочка VirtualAllocExWriteProcessMemoryCreateRemoteThread в контексте одного процесса — индикатор инъекции.
  • Используйте MITRE ATT&CK как таксономию для покрытия: проверяйте, какие техники из матрицы детектируются вашими средствами, а какие остаются слепой зоной.
  • Ведите allowlisting легитимного ПО, чтобы снизить ложные срабатывания поведенческого детекта без отключения правил.
  • Тестируйте защиту в изолированной лаборатории: воспроизводите известные техники (в рамках авторизованного scope) и проверяйте, какие слои детектируют активность, а какие пропускают.

Источники​


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