Перейти к содержимому

Экспериментальный антивирусный сканер на основе эвристики: опыт разработки

Экспериментальный антивирусный сканер на основе эвристики: опыт разработки

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

Так возникла идея проверить другой подход. Вместо того чтобы в первую очередь искать ответ на вопрос "известен ли нам этот файл?", можно оценивать, насколько его структура и поведение похожи на характерные признаки вредоносного ПО. На этой гипотезе построен экспериментальный проект HAV - Heuristic AntiVirus.

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

Задачи и принципы разработки

При создании сканера были определены несколько базовых требований:

- работа без обязательного подключения к облачной инфраструктуре;
- компактный набор локальных данных;
- умеренное потребление процессора и памяти;
- способность анализировать ранее неизвестные файлы;
- минимальное количество ложных срабатываний;
- понятная и расширяемая архитектура.

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

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

Статический анализ

При статическом анализе файл не запускается. Сканер рассматривает его как структурированный объект и извлекает характеристики, зависящие от формата.

Для исполняемых файлов могут анализироваться:

- заголовки и секции;
- размеры и порядок размещения данных;
- таблицы импорта и экспорта;
- вызываемые функции операционной системы;
- строки и служебные метаданные;
- ресурсы, манифесты, идентификаторы и сертификаты;
- признаки упаковки и обфускации;
- распределение байтов и энтропия;
- соотношение кода, данных и пустых областей.

Для документов, библиотек и других типов объектов набор параметров меняется. Один и тот же признак может иметь разное значение в разных форматах, поэтому универсальное правило "обнаружен параметр - файл опасен" здесь неприменимо.

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

Статистический и лингвистический анализ

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

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

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

При этом отдельное слово не считается доказательством. Служебные утилиты, средства администрирования и инструменты разработчика также могут использовать аналогичные команды. Значение имеет сочетание текста, структуры программы и предполагаемого сценария запуска.

Динамический анализ

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

В числе наблюдаемых действий:

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

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

Система оценивания

HAV не строится на жёсткой логике "один найденный признак - немедленная блокировка". Каждый фактор получает определённый вес, после чего формируется итоговая оценка риска. В среднем в решении участвуют примерно три независимых признака.

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

Для практического использования удобно разделять результаты на две категории:

- known - объект распознан как известный и проверенный;
- risky - обнаружена совокупность признаков, указывающая на повышенный риск.

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

Почему компактная база лучше бесконечного накопления

Большая база сигнатур полезна при обнаружении уже изученных угроз, но её постоянное расширение увеличивает размер обновлений, нагрузку на инфраструктуру и сложность сопровождения. Кроме того, сигнатура обычно появляется после анализа конкретного образца, то есть не защищает от самой первой версии новой атаки.

Эвристическая модель не отменяет сигнатуры, но делает их вспомогательным инструментом. Небольшой набор известных индикаторов можно использовать для подтверждения результата, уточнения семейства или повышения приоритета проверки. Основное решение при этом должно опираться на особенности самого объекта и его поведения.

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

Ложные срабатывания и ограничения

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

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

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

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

Что показал эксперимент

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

Наиболее перспективной выглядит многоуровневая схема: быстрая статическая проверка применяется ко всем объектам, более дорогой статистический анализ запускается при наличии аномалий, а динамическое наблюдение используется для файлов с повышенным уровнем риска.

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

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

Прокрутить вверх