
В первой части цикла материалов об антивирусных технологиях эксперты центра PT ESC разобрали ключевые компоненты защитных решений: движки, сканеры, системы обновления и контроля. Теперь подробнее рассмотрим, с помощью каких методов и технологий выявляются и блокируются вредоносные объекты.
- Введение
- Статический анализ: хеши и сигнатуры
- Динамический анализ
- 3.1. Перехват системных вызовов
- 3.2. Анализ в эмуляторе
- Эвристический анализ
- Анализ сетевого трафика
- Детектирование ссылок
- Выводы
Введение
Защитные решения представляют собой один или несколько продуктов, будь то обычный домашний антивирус или межсетевой экран на промышленном предприятии. Однако за их интерфейсом скрывается множество технологий и инструментов, каждый из которых решает специфические задачи обнаружения угроз.
Для поиска угроз СЗИ сочетают несколько подходов:
- статический анализ;
- динамический анализ;
- эвристический анализ;
- анализ трафика;
- детект ссылок.
Каждый метод имеет сильные и слабые стороны: например, сигнатуры эффективны против известных вредоносов, но бесполезны в борьбе с полиморфными вирусами, а эмуляторы требуют значительных ресурсов.
В этой статье расскажем, как современные средства защиты используют и комбинируют эти технологии для борьбы с угрозами. Мы рассмотрим как традиционные, так и инновационные методы — от хеширования и проверки сигнатур до поведенческого анализа и машинного обучения. Разберем преимущества и недостатки каждого подхода, а также возможности их комбинирования для достижения максимальной защиты.
Статический анализ: хеши и сигнатуры
Статический анализ выявляет угрозы путем изучения структуры файлов без их выполнения. Антивирус сканирует бинарные инструкции, строки кода, импортируемые библиотеки и другие элементы, сопоставляя их с базами сигнатур и хешей. Этот метод обеспечивает высокую скорость проверки и безопасность, но неэффективен против полиморфных и упакованных вирусов, которые изменяют свой код, чтобы избежать обнаружения. Поэтому его обычно сочетают с динамическим анализом и облачными технологиями.
Сравнение хешей
Хеширование — процесс преобразования данных в уникальную последовательность байтов фиксированной длины с помощью алгоритмов (MD5, SHA-1, SHA-256). В антивирусах хеши используются для идентификации известных вредоносных файлов: программа вычисляет хеш каждого файла и сравнивает его с базой миллионов хешей вредоносных программ. Из преимуществ этого метода можно отметить высокую скорость проверки и минимальное количество ложных срабатываний, а из недостатков — уязвимость к обфускации и модификациям кода, а также высокая чувствительность к изменениям файла (даже изменение одного байта меняет хеш).
Сигнатурный анализ
Сигнатурный анализ обнаруживает вредоносные программы по уникальным последовательностям байтов в файлах. В отличие от хеширования, где файл идентифицируется целиком по криптографической сумме, сигнатуры ищут характерные фрагменты кода или данных. Семейства вредоносов эффективно выявляются по общим признакам в их коде. Такой анализ можно точно настроить, привязав сигнатуры к конкретным участкам файлов, что практически исключает вероятность ошибок. Метод особенно полезен против массовых угроз и почти не нагружает систему при проверке.
Однако, как и хеширование, такой подход неустойчив к изменению или маскировке кода и бесполезен против эксплойтов «нулевого дня». Кроме того, для сохранения эффективности защиты, базы сигнатур нужно регулярно обновлять.
Приведем пример простой сигнатуры YARA:
rule ExampleRule {
meta:
description = "Пример правила для обнаружения вредоносного файла"
strings:
$str1 = "malicious_string"
$str2 = { DE AD BE EF }
condition:
$str1 and $str2
}
Точность сигнатур можно повысить, комбинируя несколько признаков (как в примере выше) и привязывая их к конкретным смещениям в файле. Однако даже в этом случае метод не становится идеальным, так как остается уязвимым к изменениям файла.
Облачные технологии и машинное обучение
Современные СЗИ активно используют облачные сервисы и машинное обучение для борьбы с новыми угрозами. Эти технологии помогают избежать таких проблем, как растущий объем антивирусных баз, задержки в получении информации о новых угрозах и необходимость анализировать огромные массивы файлов.
Облачные технологии позволяют проверять репутацию файлов, искать похожие образцы через алгоритмы нечеткого (fuzzy) хеширования и применять сложные модели машинного обучения (ML) без нагрузки на конечные устройства. Когда система обнаруживает подозрительный файл, она может быстро проверить его через облачный сервис, который анализирует объект с учётом последних обновлений и данных от других пользователей.
Машинное обучение особенно эффективно для задач, где бессильны другие методы статического анализа. Например, ML-алгоритмы успешно определяют шифровальщики по характерным изменениям файлов, выявляют вымогательские сообщения в тексте и решают задачу кластеризации вредоносных файлов.
Динамический анализ
Основное отличие динамического анализа от статического заключается в том, что образец оценивают по его поведению — в действующей системе или в изолированной среде. Этот метод используют против сложных угроз, при реализации которых применяются обфускация, полиморфизм и другие техники маскировки.
Перехват системных вызовов
Системные вызовы — это механизм, с помощью которого пользовательские программы взаимодействуют с ядром операционной системы. С помощью системных вызовов программы выполняют важные задачи, такие как чтение файлов, создание процессов или взаимодействие с сетью и другие операции. Для работы этого механизма в Windows используется таблица системных сервисов (System Service Descriptor Table, SSDT), которая находится в ядре ОС.
Рисунок 1. Указатель на функцию NtCreateFile, предназначенную для создания или открытия файла, папки или тома
Каждая строка этой таблицы содержит номер системного вызова и адрес в памяти, где находится нужная функция ядра. Когда программе нужно выполнить ту или иную задачу, ОС находит в таблице соответствующий номер и передает управление по указанному адресу.
Раньше антивирусы могли перехватывать эти вызовы, подменяя оригинальные обработчики в SSDT своими функциями. Однако с появлением технологии Kernel Patch Protection (PatchGuard) в современных версиях Windows запретили изменение структур ядра ОС, оставив возможность получать лишь ограниченный набор событий ядра (таких как запуск процессов, загрузку модулей и др.), и теперь создатели антивирусов вынуждены искать альтернативные подходы.
Перехват в пользовательском пространстве
Одним из решений стала модификация системных библиотек, например ntdll.dll. При создании процесса драйвер антивируса изменяет библиотеку так, что вызов библиотечных функций сначала попадает на анализ в антивирус, а лишь затем — в ядро системы.
Рисунок 2. Перехват вызова NtCreateFile антивирусом
Однако более совершенные вредоносные программы могут обходить перехваты в пользовательском пространстве.
Гипервизор
Проблему перехвата системных вызовов в ядерном пространстве решают с помощью гипервизора — программного обеспечения для создания и управления виртуальными машинами. Гипервизор может контролировать не только гостевые системы, но и текущую, хостовую. В этом случае антивирус получит полный контроль над системой и сможет перехватывать не только системные вызовы, но и любые другие инструкции (например, cpuid, rdtsc). Это дает СЗИ возможность анализировать и блокировать подозрительную активность на глубоком уровне, а также реализовывать проверку целостности памяти, защиту от эксплойтов и изоляцию ресурсов.
Анализ в эмуляторе
Многие вредоносы используют обфускацию и шифрование, поэтому их трудно анализировать статическими методами. Эмулятор создает изолированную среду для изучения образца, воспроизводя только необходимые компоненты. Так, он может иметь фальшивую файловую систему с заведомо подготовленными файлами-ловушками, доступ к которым может расцениваться как вредоносная активность. Например, доступ к файлу с паролями от браузера может оцениваться как кража учетных записей. Такой подход позволяет антивирусу безопасно изучать поведение программы, не рискуя заразить компьютер.
Существует два основных метода эмуляции:
- Полная интерпретация, или интерпретация машинных инструкций — каждая инструкция выполняется на виртуальном процессоре, что обеспечивает максимальную безопасность, но требует значительных ресурсов. Плюс такого подхода — кроссплатформенность, то есть возможность анализировать образцы разных архитектур.
- Компиляция Just-In-Time (JIT) — код компилируется непосредственно перед выполнением на реальном процессоре. Однако перед этим происходит подмена адресов операторов инструкций, чтобы эмулируемый образец не навредил системе. Это ускоряет анализ, но реализовать такой подход сложнее.
На практике эмуляторы часто комбинируют оба подхода. Например, могут интерпретировать только обращения к памяти, библиотечные и системные вызовы, а остальные инструкции выполнять через JIT-компиляцию. Это позволяет достичь оптимального баланса между производительностью и безопасностью анализа.
Эвристический анализ
Это более сложный метод обнаружения угроз, который выявляет вредоносные объекты по их поведению и структуре файла. В отличие от статического анализа, он не опирается на заранее известные хеши или сигнатуры. Здесь средства защиты отслеживают характерные признаки подозрительной активности: попытки скрыть присутствие вредоноса в системе, внедрение в другие процессы и получение несанкционированного доступа к защищенным ресурсам.
Другой важный аспект эвристического анализа — это исследование кода в поисках потенциально опасных фрагментов. Специальные алгоритмы выявляют методы обфускации и антиотладочные приемы, подозрительные последовательности инструкций, а также нестандартные способы работы с памятью или системными структурами.
Анализ сетевого трафика
Различные технологии защиты позволяют отслеживать сетевую активность, чтобы обнаружить вредоносные соединения, утечки данных и подозрительное поведение программ. Например, если программа пытается массово подключаться к случайным IP-адресам — это типичное поведение червя или бота.
Для мониторинга сетевой активности в СЗИ используют несколько инструментов.
Брандмауэр
Контролирует открытые порты, фильтрует соединения по IP-адресам и протоколам, отмечает попытки сканирования портов, MAC-спуфинг и другие аномалии. Позволяет гибко настраивать правила доступа для разных приложений.
Анализатор трафика
Обычно представляет собой сетевой фильтр и специальные драйверы, которые перехватывают входящие и исходящие соединения. Для работы с сетевыми интерфейсами на низком уровне используют библиотеки — WinPcap в Windows и libpcap в Linux и macOS, — обеспечивающие захват пакетов. Далее за их анализ отвечает движок обработки трафика, который может использовать сигнатурный и поведенческий анализ, а также ML-алгоритмы.
Помимо этого, анализатор трафика может включать декодеры протоколов и модули анализа веб-страниц.
- Декодеры протоколов разбирают как стандартные (HTTP, DNS), так и проприетарные (Cisco, Juniper) или специализированные протоколы (VoIP). С их помощью можно анализировать и HTTPS, однако в этом случае модулям нужны ключи шифрования.
- Модули анализа веб-страниц получают доступ к браузеру через API, инъекцию DLL или сканирование памяти. Цель таких модулей — проверять загружаемые страницы на наличие вредоносных скриптов и подозрительного поведения.
Детектирование ссылок
Защитные решения способны собирать URL-адреса из сетевого трафика и результатов анализа веб-страниц. Затем ссылки проверяют несколькими способами: по базе безопасных и вредоносных ресурсов, с помощью облачных сервисов оценки репутации и ML-модулей для поиска доменов, созданных с помощью алгоритма генерации имен (Domain Generation Algorithm, DGA), который часто используют злоумышленники.
Выводы
Мы разобрали ключевые методы обнаружения вредоносных программ: от классического сигнатурного анализа до современных технологий машинного обучения. Каждый подход имеет свои сильные стороны — скорость, точность или способность находить новые угрозы, — но только их комбинация обеспечивает полноценную защиту.
В следующей части расскажем, как разрабатывают и тестируют антивирусные движки, чтобы все эти технологии работали быстро, точно и без сбоев.
В создании данной статьи принимали участие сотрудники экспертного центра безопасности Positive Technologies: Павел Максютин, ведущий специалист отдела экспертизы обнаружения ВПО в изолированных средах. Илья Тюнькин, специалист отдела экспертизы обнаружения ВПО в изолированных средах. Илья Борисов, старший специалист отдела экспертизы обнаружения ВПО на конечных устройствах. Ксения Наумова, старший специалист отдела сетевой экспертизы.