Эвристические анализаторы и их место в информационной безопасности
антивирус NOD32

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

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

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

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

Впрочем, на практике современные антивирусы используют оба эти метода защиты от вирусов.

«С помощью эвристического анализа мы можем отразить 90% вирусов, — отмечает Андрей Ли, технический директор компании Eset Software. — Для защиты от остальных вирусов приходится пользоваться сигнатурными методами».

Американская компания Eset производит антивирус NOD32, основу которого составляет эвристический анализатор. В продукте Eset реализованы два метода анализа поведения — по дереву программного кода и с помощью виртуальных машин.

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

Еще одним примером решения, которое основано на анализе поведения программного кода, может служить технология российской компании Protection Technology, под названием Intelligent Activity Control (IAC). Она по своей сути является не антивирусом, но экраном приложений, то есть выполняет такие же функции, что и сетевые экраны, но для взаимоотношений между приложениями и операционной системой. Такой экран встраивается в модули операционной системы, фиксирует все системные вызовы, проходящие через них, и в случае опасности блокирует их исполнение. В первой версии IAC контролируется работа с реестром и обращения к файловой системе; в дальнейшем планируется добавить контроль сетевых соединений.

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

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

«Если есть правила, по которым поведенческий анализатор отличает вирус от легальной программы, то можно придумать такой метод атаки, который не вписывается в эти правила», — замечает Евгений Касперский из «Лаборатории Касперского», один из наиболее авторитетных специалистов в области сигнатурного анализа.

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


Эвристика!

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

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

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

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

Первый и второй методы не могут отразить атаку на переполнение буфера, поскольку данные, которые в нем содержатся, исполняются только в той программе, для которой они предназначены, и без нее невозможно ни построить дерево вызовов, ни запустить код в виртуальной машине. Третий метод зафиксирует атаку, но только тогда, когда инфицирование уже произошло и работа программы была нарушена. Сигнатурный же анализ при соблюдении определенных условий не допустит переполнения буфера, поскольку будет проверять характерные признаки, например длины определенных строковых констант. В то же время, по словам ведущего специалиста по информационной безопасности компании Computer Associates Ханнеса Любиха, сегодня до 80% нападений выполняется с использованием переполнения буфера.