Большинство здравомыслящих пользователей ПК используют сейчас антивирусное ПО при работе на своих компьютерах. Однако большинство пользователей не знает, как работает антивирусное ПО. Эта статья содержит краткий обзор антивирусного механизма, известного как антивирусные сканеры «при обращении». Эти программы запускаются при загрузке системы и работают в фоновом режиме до выключения системы. В мире Microsoft Windows, на который ориентирована эта статья, они должны работать надежно и быстро, независимо от особенностей Windows.
Михаил Разумов, по материалам SecurityFocus
Большинство здравомыслящих пользователей ПК используют сейчас антивирусное ПО при работе на своих компьютерах. Однако большинство пользователей не знает, как работает антивирусное ПО. Эта статья содержит краткий обзор антивирусного механизма, известного как антивирусные сканеры «при обращении». Эти программы запускаются при загрузке системы и работают в фоновом режиме до выключения системы. В мире Microsoft Windows, на который ориентирована эта статья, они должны работать надежно и быстро, независимо от особенностей Windows. Они также должны быть в состоянии определить и обезвредить тысячи вирусов – известных и неизвестных. Сканеры «при обращении» должны стоять на страже и гарантировать, что ничто не пройдет на территорию, которую они защищают.
Антивирусные программы защищают компьютерную систему от вирусов путем анализа памяти компьютера и файловой системы на наличие признаков заражения вирусами. Этот процесс анализа называется сканированием. Используются две главные стратегии сканирования – «по требованию» и «при обращении». При сканировании «по требованию» пользователи самостоятельно активируют программу антивирусного сканирования каждый раз, когда они хотят проверить компьютер на наличие вирусов. В случае сканирования «при обращении», антивирусный сканер, анализирующий память и файловую систему компьютера, активируется каждый раз при обращении какой-либо программы к этим ресурсам.
В то время как сканеры «при обращении» и «по требованию» могут иметь некоторые сходства, включая некоторый программный код, сканеры «при обращении» должны делать больше, чем просто анализировать файлы: они берут на себя большую часть пользовательской заботы по защите от вирусов. Сканеры «при обращении» помещают себя между программами и операционной системой. Они анализируют программы, когда те взаимодействуют с файлами, памятью или сетью. Они должны анализировать подозрительное поведение программ, и предотвращать выполнение злонамеренного кода. Вирусы, трояны и разные злонамеренные Web-приложения – все должны задерживаться сканерами «при обращении». Одной из проблем эффективного сканера «при обращении» является необходимость сканирования каждого файла, к которому осуществляется доступ, не оказывая влияния на функциональность машины.
Сканеры «при обращении» должны быть бережливыми с системными ресурсами и сохранять быстродействие системы. Более того, они должны устанавливаться на все системы от Win95 до Win XP. Это довольно сложно, потому что существуют огромные различия в производительности и функциональности различных ОС Microsoft. Сканеры должны быть способны функционировать во всех этих средах с одинаковой эффективностью.
Операционные системы Microsoft характеризуются сложными взаимодействиями различных приложений, таких как текстовые процессоры и web-броузеры. Эта сложность может создавать огромные затруднения для разработчиков антивирусов. Более того, продукты Microsoft имеют тенденцию быстро развиваться: каждые пару лет появляется новая ОС. Таким образом, программистам антивирусного ПО приходится изучать тонкости работы операционных систем, рыночный срок жизни которых составляет всего несколько лет. Они должны обнаружить и защитить уязвимости до того, как создатели вирусов смогут их использовать.
Мало того, что сканер «при обращении» должен быть надежным, ему приходится работать с ограничениями, наложенными слабостями операционной системы. Антивирусные сканеры «при обращении» должны быть способны анализировать системные процессы, не подвергая риску их безопасность. Peter Szor, главный исследователь Symantec Security Response, утверждает, что не так просто совместить это, и чтобы все работало на большинстве систем. Хороший сканер «при обращении» должен иметь быстрый сканирующий движок и очень стабильный код.
Это особенно проявляется в большом ряду операционных систем Microsoft. Сканеры зависят от API файловых систем. В системах Windows 95 и 98 операции с файлами производятся через набор .vxd драйверов, которые управляют файловыми и сетевыми операциями. В мире NT файловые операции контролируются драйверами файловой системы. Таким образом, хотя стратегия в сканерах «при обращении» используется одна и та же, используемая тактика может меняться в зависимости от версии операционной системы Windows.
Обычно сканеры «при обращении» анализируют файлы при возникновении программного вызова открытия файла (OpenFile API) или закрытия файла (CloseFile API). Во время операции открытия файла, антивирусный сканер «при обращении» анализирует его содержимое в поисках признаков заражения вирусом. Проблемы могут проявиться из-за различий в обработке файлов драйверами файловых операций. Это стало очевидно, когда некоторые сканеры «при обращении» не смогли обнаружить вирусы, такие как Funlove или LoveLetter, когда они инфицировали файлы на сетевых дисках.
Проблема состоит в том, как осуществляется доступ к файлам. Легче всего для антивирусных сканеров «при обращении» контролировать файлы при открытии. CloseFile API используется не только для файлов, а еще для некоторых объектов. Это усложняет работу с закрытием файлов. Сетевой вирус может и не открывать файл для заражения системы. Вместо этого он создаст файл на удаленной машине, запишется в него и закроет. Сканеры, которые используют только OpenFile API, не смогут обнаружить заражение до тех пор, пока испорченный файл не будет открыт.
Vessilin Bontchev, антивирусный исследователь Frisk Software International, подтверждает эту проблему. Он говорит, что чтобы обнаружить вирусы на стадии заражения, сканеры «при обращении» должны быть способны работать не только при открытии файлов, а также при закрытии, что выполнимо, но не просто.
Когда антивирусные сканеры анализируют файлы, они могут использовать либо сигнатуры вирусов, либо эвристический анализ для определения вирусов. Сигнатуры вирусов, уникальные для каждого компьютерного вируса, являются источником информации для сканеров. Этот метод аналогичен вопросу о номерном знаке автомобиля, который только что сбил вас. Эвристические сканеры анализируют поведение программного кода, чтобы предсказать злонамеренные действия. Это равносильно вопросу о том, может ли эта машина попытаться сбить вас. Очевидная проблема такой методики состоит в том, что необходимо заранее знать сигнатуру вируса, что прекрасно подходит для атак, обнаруженных ранее, но мало чем защитит от новых или неизвестных типов атак.
Вирусные сигнатуры предлагают быстрый способ идентификации вирусов, но их польза уменьшается или становится бесполезной при обнаружении нового вируса. Для устранения этого недостатка могут использоваться «семейственные» процедуры обнаружения вирусов. Семейственные детекторы вирусов определяют семейства вирусов по уникальным характеристикам, найденным внутри вирусного кода и являющимся общими для большой группы вирусов. Например, интернет-черви такие как Анна Курникова и HomePage были созданы с использованием Visual Basic Script Worm Generator (VBSWG). Это простой конструктор червей, созданный аргентинским писателем вирусов (K)alimar, и обеспечивающий наличие в каждом созданном с его помощью черве уникальной сигнатуры, идентифицирующей его как червь, сделанный с помощью VBSWG. С такой характеристикой их становится легко распознавать.
В методе эвристического сканирования, сканер анализирует компьютерный код, прежде чем его запустить. Эвристический сканер ищет признаки кода, который может выполнять злонамеренные функции. Эвристические сканеры изначально были сосредоточены на вирусах, написанных на ассемблере. Этот метод, называемый статичной эвристикой, использовал список подозрительных программных вызовов, которые могли указывать на вирусную активность. Например, программный вызов на определение, является ли файл исполняемым, был бы расценен сканером как вирусная активность.
Хотя некоторые типы вирусной активности могут быть обнаружены таким способом, статичное эвристическое сканирование может создать множество ложных тревог. Разработчики антивирусов устраняют этот недостаток с помощью нового метода, называемого динамической эвристикой. В этом методе антивирусные программы создают безопасные места для анализа вирусного кода. Ранее антивирусные программы использовали подпрограммы отладки для пошагового исполнения программ. Теперь антивирусные сканеры «при обращении» создают виртуальный ПК в памяти, чтобы оценить программный код до того, как он запустится в реальной операционной системе. При использовании этого нового метода исполнение программы откладывается на время анализа ее кода антивирусным сканером в виртуальной копии операционной системы в поисках недобрых намерений. Эта виртуальная копия компьютера называется CPU эмулятором или эмулятором кода.
Однако, эмуляторы кода не могут использоваться во всех ситуациях. Согласно исследователю вирусов Petr Odehnal из Grisoft, Grisoft использует традиционное эвристическое сканирование для ассемблерных вирусов. Для вирусов, написанных на языках высокого уровня, макро-вирусов и скрипт-вирусов, эта чешская фирма использует семейственные процедуры и статичную эвристику, не основанную на эмуляции кода. Odehnal утверждает, что это быстрее, требует меньше памяти и дает неплохие результаты.
На этом завершается первая часть обзора антивирусного сканирования «при обращении». Теперь, когда мы исследовали некоторые из основных концепций этой антивирусной методики, в следующей статье мы рассмотрим некоторые стратегии, которые применяют создатели вирусов для обхода этих концепций и пути, которыми реагируют разработчики антивирусов на эти изменения.
Спойлер: мы раскрываем их любимые трюки