Часть вторая. Принципы работы антивирусных программ
(Продолжение. Начало в №37)
В первой части статьи, продолжение которой вы только что начали читать, я рассказывал о видах вирусов, которые можно подцепить, блуждая по Всемирной паутине или покупая пиратские компакт-диски. Впрочем, если помните, кроме вирусов, там были и трояны, и эксплойты, и многое другое. Так вот, запугав вас этими жуткими вредоносными программами, я пообещал рассказать, как антивирусы с ними борются. Что ж, раз пообещал - рассказываю.
Общие сведения
Вообще говоря, защита от вредоносного программного обеспечения бывает разная. Часть антивирусных программ работает в фоновом режиме и проверяет все запускаемые на компьютере программы; часть сканирует лежащие на диске файлы только когда их специально запустит пользователь, а некоторые из антивирусов работают на серверах и фильтруют трафик. Есть даже такая антивирусная защита, которую именуют аппаратной - правда, так говорить не совсем корректно, поскольку проверку потока данных на вирусы всё равно осуществляет программа, пусть и сидящая в "мозгах" какого-то отдельного периферийного устройства.
Тем не менее, несмотря на кажущееся обилие антивирусных программ, все они построены на одних и тех же принципах. Хотя, конечно, время от времени какой-нибудь из производителей антивирусного ПО и бьёт себя кулаком в грудь по поводу изобретения "революционной технологии", большая часть этих "революций" - просто модернизация уже существующих идей, повышающая качество фильтрации или производительность антивируса.
Основные три метода - это сигнатурный поиск, эвристический анализ и детектирование аномального поведения программы. Практически все остальные методы антивирусной защиты основываются на этих способах работы, идеи которых, как мы с Вами сейчас увидим, очень просты для понимания. Хотя, конечно, реализация их в комплексе, причём имеющая достаточно высокое быстродействие, - задача не то чтобы очень простая.
Сигнатурный поиск
Исторически самым первым из методов появился сигнатурный поиск. В те славные годы, когда вирусы были простыми и глупыми, антивирусы и сами были не лучше. Поэтому вся их работа сводилась к тому, что они открывали файл, просматривали его содержимое, и, если там встречался кусок, идентичный тому, который в базе данных антивируса значился как вирусный код, то этот кусок нещадно вырезался, а то и удалялся весь файл.
Кусок кода, который идентифицировал вирус, назвали сигнатурой, что впоследствии дало название и всему методу. Сигнатурой может служить не весь программный код вируса, а только какой-то его небольшой кусок, содержащий уникальную для данного вируса последовательность байтов. База сигнатур обычно у каждого антивируса своя, и никакие другие антивирусы в неё залезть не могут. Хотя есть и свободные сигнатурные базы, например, та, которую обновляют и пополняют разработчики свободного антивирусного пакета Clam Antivirus.
И хотя всё выглядело очень хорошо, вскоре простое сравнение с эталоном стало для антивирусов невозможным, поскольку изменилось поведение самих вирусов. Они со временем стали полиморфными - то есть, тело вируса в каждом новом файле могло отличаться от тела этого же вируса в предыдущем. Так что антивирус уже не мог стопроцентно полагаться на свою базу данных, которой его снабдили разработчики. Это послужило толчком развитию новых методов, которые стали использоваться в новых поколениях антивирусных программ.
Сигнатурный поиск, тем не менее, вовсе себя не изжил. До сих пор обновление баз антивирусов обусловлено именно активным использованием данного метода обнаружения вредоносных программ. Тем не менее, для самих разработчиков антивирусов он довольно невыгоден с экономической точки зрения, поскольку требует тщательного и своевременного создания сигнатурных баз. А это такой процесс, который должны выполнять грамотные и довольно высоко оплачиваемые специалисты, поскольку компьютерной программе пока поручить его не представляется возможным. Хотя такое неудобство хоть и немного, но всё же искупается преимуществами: сигнатурный поиск даёт меньше ложных обнаружений, он довольно скор, и реализация его, с точки зрения программиста, проще, чем остальных методов, к разговору о которых мы прямо сейчас и перейдём.
Эвристический анализ
Как говорит нам Википедия, "Эвристика (греч. отыскиваю, открываю) - наука, изучающая творческую деятельность, методы, используемые в открытии нового и в обучении. Эвристические методы (другое название Эвристики) позволяют ускорить процесс решения задачи. Значительный интерес к их исследованию возник в связи с возможностью решения ряда задач (распознавание объектов, доказательство теорем и т. д.), в которых человек не может дать точный алгоритм решения, с помощью технических устройств. Назначением Эвристики является построение моделей процесса решения какой-либо новой задачи". Именно эвристика лежит в основе работы механизмов антивируса, которые должны противостоять тем вирусам, для которых сигнатур ещё не было разработано.
Практически в каждом современном антивирусном продукте есть такая часть, как эвристический анализатор. Чем же он занимается? Дело в том, что вирусы не бывают на 100% оригинальными (впрочем, то же самое можно сказать и о любом другом вредоносном программном обеспечении). В каждом из вирусов, например, есть код, отвечающий за самокопирование; в каждом spyware есть клавиатурный шпион, а каждый троян по своей природе и дня не может прожить без "общения" с кем-нибудь по сети. Такой код имеет очень похожие участки во всех программах определённого класса, и эвристический анализатор как раз и занимается тем, что ищет такие "общевирусные" куски кода в файлах.
Несмотря на то, что эвристический поиск кажется более удобным методом обнаружения вредоносных программ, нежели сигнатурный, у него есть свои недостатки. Самый существенный из них - просто чудовищно гигантское количество ложных срабатываний, поскольку, например, код клавиатурного шпиона есть и в Punto Switcher, широко известном средстве замены фраз типа "jq? Z pf,sk gthtrk.xbnm hfcrkflre rkfdbfnehs" на "ой, я забыл переключить раскладку клавиатуры". Но эвристические анализаторы сейчас находят всё большее распространение, поскольку совершенствуются алгоритмы их работы.
Детектирование аномального
поведения
Этот метод тоже прост и встроен во множество антивирусных программных продуктов, но вот насчёт единого имени для него разработчики антивирусов договориться как-то не удосужились. Поэтому для этого способа обнаружения вредоносных программ можно встретить самые разные названия, среди которых - обнаружение аномалий, детектирование потенциально вредоносных действий и проактивная защита (правда, последний термин некоторые производители антивирусов понимают по-своему, но об этом ниже).
Основывается этот вид защиты, как и эвристический анализ, на том, что поведение всех представителей определённого класса вредителей имеет общие черты. Только если эвристический анализатор пытается угадать, что будет делать подозрительная программа, ещё до того, как она запущена, то детектор аномалий запускает её в защищённой среде (виртуальной машине, встроенной в антивирус) и там уже наблюдает её в действии. Причём иногда даже не надо виртуальной машины для того, чтобы оценить намерения вредоносного кода.
Этот метод имеет схожие с эвристическим анализом плюсы и минусы. То есть, с его помощью, конечно же, можно отловить те вирусы, трояны и шпионы, которые ещё не попали в сигнатурную базу. С другой стороны, многие программы, как я уже говорил, делают все "вирусные" действия без какого-либо злого умысла. И если пользователь видит, что антивирус принял его любимую утилиту за какой-нибудь злобный троян, то доверие к такому продукту резко падает, что отражается на прибылях разработчиков. Так что этот метод работы применяется чаще не в антивирусах, а брандмауэрах (файрволах), которые имеют несколько иные задачи. Но и в антивирусах детектирование аномального поведения используется не так уж редко, но, в основном, как вспомогательный метод.
Что касается проактивной защиты, то раскрученный в СНГ российский разработчик антивирусного ПО "Лаборатория Касперского" понимает под этим не только детектирование аномалий, но и дополнительную защиту в виде подсчёта контрольных сумм файлов, сравнение текущего состояние важных ключей реестра с эталонным, и некоторые другие подобные методы. Но, по сути, основой проактивной защиты по Касперскому всё равно остаётся именно обнаружение потенциально вредоносного поведения программ.
Замечания и дополнения
Современные антивирусные программы всегда дополняют один способ поиска вирусов другим. Например, сигнатурные методы и детектирование аномального поведения в любом случае "живут" в симбиозе. То есть, всё потенциально вредоносное поведение забито в базу данных антивируса в виде шаблонов, поскольку как бы иначе антивирус мог отличить нормальное поведение программы от аномального?
Разработка методов работы для антивирусов - один из приоритетных разделов теоретического программирования. Но пока, как видите, ничего такого, что можно было бы назвать радикально новым, не изобрели. Идёт совершенствование сигнатурных методов, и основная конкуренция разработчиков антивирусного ПО разворачивается на стараниях максимально быстро реагировать на выход новых вирусов и обновлять сигнатурные базы своих продуктов.
И, в общем-то, на мой взгляд, теперешняя распространённость вирусов, троянов, эксплойтов и прочего связана, прежде всего, с низкой технической подготовленностью пользователя. Ведь для защиты от троянов намного эффективнее даже не ставить антивирус, а просто не открывать пришедшие по почте письма с исполняемыми вложениями. То же самое касается и spyware, и эксплойтов - ведь бережёного Бог бережёт. На самом деле, мне кажется, продвинутому пользователю достаточно защиты только от самораспространяющихся вредоносных программ.
Вадим СТАНКЕВИЧ
Горячие темы