|
|
|
||
Андрей Кустов vip@ucapital.ru
|
||
Знание алгоритмов работы вирусов – обычно удел только вирусописателей и разработчиков антивирусных средств. Вместе с тем складывается ситуация, когда пользователи просто не имеют никакого представления о том, что же там происходит в тот момент, когда антивирус “излечивает” компьютер. При всем своем многообразии вирусные программы
поддаются довольно точной классификации по способам заражения и образу
действия. В задачу данной статьи не входит описание всего многообразия
вирусов, интересующиеся могут ознакомиться со специализированными источниками
данных (например, с “Энциклопедией доктора Касперского“ на http://www.avpe.ru).
Значительно более полезным будет освещение самих основ работы вирусных
программ. В качестве примера антивирусного средства, методы работы которого и будут анализироваться в разделе “Основы работы ревизоров”, используется Activator Project Pro’98 (AP’98), в настоящее время – малоизвестный, но активно развивающийся антивирусный продукт. Основными преимуществами AP’98 являются два качества – скорость и простота. Продукт антивирусной лаборатории DiZet, AP’98, представляет собой ревизор-анализатор – это симбиоз простого CRC-ревизора и антивирусного детектора, т. е. ревизор-анализатор не только следит за изменениями, но и обнаруживает уже известные вирусы. Этот продукт сможет работать самостоятельно или с уже установленным на вашем компьютере ревизором ADinf (ЗАО “Диалог Наука”) или AVP Inspector (ЗАО “Лаборатория Касперского”), что прекрасно будет дополнять ранее установленный ревизор. К тому же AP’98 совершенно не мешает работе любого другого антивируса-полифага. Более подробно об AP’98 можно прочитать на http://dizet.com.ua. Кстати, там же можно подписаться на интересное антивирусное обозрение. Основы работы полифагов Антивирусы-полифаги – наиболее распространенные средства по борьбе с вредоносными программами. Исторически они появились первыми и до сих пор удерживают несомненное лидерство в этой области. В основе работы полифагов стоит простой
принцип – поиск в программах и документах знакомых участков вирусного
кода (так называемых сигнатур вирусов). Под сигнатурой могут пониматься
разные вещи. Первоначально антивирусы-полифаги работали по очень простому принципу – осуществляли последовательный просмотр файлов на предмет нахождения в них вирусных программ. Если сигнатура вируса была обнаружена, то производилась процедура удаления вирусного кода из тела программы или документа. Прежде чем начать проверку файлов, программа-фаг всегда проверяет оперативную память. Если в оперативной памяти оказывается вирус, то происходит его деактивация. Это вызвано тем, что зачастую вирусные программы производят заражение тех программ, которые запускаются или открываются в тот момент, когда вирус находится в активной стадии (это связано со стремлением экономить на усилиях по поиску объектов заражения). Таким образом, если вирус останется активным в памяти, то тотальная проверка всех исполняемых файлов приведет к тотальному заражению системы. Тем более в настоящее время вирусные программы значительно усложнились. Например, появились так называемые “stealth- вирусы”. В основе их работы лежит тот факт, что операционная система при обращении к периферийным устройствам (в том числе и к жестким дискам) использует механизм прерываний. Здесь для неискушенного читателя необходимо сделать “лирическое” отступление на тему “Как работает механизм прерываний”. При возникновении прерывания управление передается специальной программе – ”Обработчику прерывания”. Эта программа отвечает за ввод и вывод информации в/из периферийного устройства. Кроме того, прерывания делятся на уровни взаимодействия с периферией (в нашем случае – с жесткими и гибкими дисками). Есть уровень операционной системы (в среде MS DOS – прерывание 25h), есть уровень базовой системы ввода/вывода (уровень BIOS – прерывание 13h). Опытные системные программисты могут работать и напрямую, обращаясь к портам ввода/вывода устройств. Но это – уже довольно серьезная и трудная задача. Столь многоуровневая система сделана, прежде всего, с целью сохранения переносимости приложений. Именно благодаря такой системе, скажем, оказалось возможным осуществлять запуск DOS-приложений в многозадачных средах типа MS Windows или IBM OS/2. Но в такой системе изначально скрыта и уязвимость: управляя обработчиком прерываний, можно управлять потоком информации от периферийного устройства к пользователю. Stealth-вирусы, в частности, используют механизм перехвата управления при возникновении прерывания. Заменяя оригинальный обработчик прерывания своим кодом, stealth-вирусы контролируют чтение данных с диска. В случае, если с диска читается зараженная программа, вирус “выкусывает” собственный код (обычно код не буквально ”выкусывается”, а происходит подмена номера читаемого сектора диска). В итоге пользователь получает для чтения “чистый” код. Таким образом, до тех пор пока вектор обработчика прерываний изменен вирусным кодом, сам вирус активен в памяти компьютера, обнаружить его простым чтением диска средствами операционной системы невозможно. Схожий механизм маскировки используется и загрузочными вирусами, о которых будет сказано дальше. В целях борьбы со stealth-вирусами ранее рекомендовалось (и, в принципе, рекомендуется и сейчас) осуществлять альтернативную загрузку системы с гибкого диска и только после этого проводить поиск и удаление вирусных программ. В настоящее время загрузка с гибкого диска может оказаться проблематичной (для случая с win32 антивирусными приложениями запустить их не удастся). Ввиду всего вышесказанного, антивирусы-полифаги оказываются максимально эффективными только при борьбе с уже известными вирусами, то есть с такими, чьи сигнатры и методы поведения знакомы разработчикам. Только в этом случае вирус со 100-процентной точностью будет обнаружен и удален из памяти компьютера, а потом – и из всех проверяемых файлов. Если же вирус неизвестен, то он может достаточно успешно противостоять попыткам его обнаружения и лечения. Поэтому главное при пользовании любым полифагом – как можно чаще обновлять версии программы и вирусные базы. Для удобства пользователей базы вынесены в отдельный модуль, и, например, пользователи AVP могут обновлять эти базы ежедневно при помощи Интернета. Особняком тут стоят так называемые эвристические анализаторы. Дело в том, что существует большое количество вирусов, алгоритм которых практически скопирован с алгоритма других вирусов. Как правило, такие вариации создают непрофессиональные программисты, которые по каким-то причинам решили написать вирус. Для борьбы с такими “копиями” и были придуманы эвристические анализаторы. С их помощью антивирус способен находить подобные аналоги известных вирусов, сообщая пользователю, что у него, похоже, завелся вирус. Естественно, надежность эвристического анализатора не 100%, но все же его коэффициент полезного действия больше 0,5. Вирусы, которые не распознаются антивирусными детекторами, способны написать только наиболее опытные и квалифицированные программисты. Эвристическим анализатором кода называется набор подпрограмм, анализирующих код исполняемых файлов, памяти или загрузочных секторов для обнаружения в нем разных типов компьютерных вирусов. Основной частью эвристического анализатора является эмулятор кода. Эмулятор кода работает в режиме просмотра, то есть его основная задача – не эмулировать код, а выявлять в нем всевозможные события, т. е. совокупность кода или вызов определенной функции операционной системы, направленные на преобразование системных данных, работу с файлами или часто используемые вирусные конструкции. Грубо говоря, эмулятор просматривает код программы и выявляет те действия, которые эта программа совершает. Если действия этой программы укладываются в какую-то определенную схему, то делается вывод о наличии в программе вирусного кода. Конечно, вероятность как пропуска, так и ложного срабатывания весьма высока. Однако правильно используя механизм эвристики, пользователь может самостоятельно прийти к верным выводам. Например, если антивирус выдает сообщение о подозрении на вирус для единичного файла, то вероятность ложного срабатывания весьма высока. Если же такое повторяется на многих файлах (а до этого эвристик ничего подозрительного в этих файлах не обнаруживал), то можно говорить о заражении вашей системы вирусом с вероятностью, близкой к 100%. Наиболее мощным эвристическим анализатором в настоящее время обладает антивирус Dr.Web (http://www.drweb.ru). Если и уступает ему, то ненамного AVP (http://www.avp.com). Использование эвристического анализатора,
помимо всего вышеперечисленного, позволяет также бороться с вирус-генераторами
и полиморфными вирусами. Классический метод с определением вирусов по
сигнатуре в этом случае вообще оказывается Основы работы ревизоров Антивирусные программы-ревизоры позволяют обнаружить вирус. Чаще всего обнаружением вируса дело и заканчивается. Существует блок лечения для популярного антивируса-ревизора Adinf, так называемый Cure Module, но такой блок позволяет лечить лишь те файлы, которые были не заражены на момент создания базы данных программы. Однако обнаружить вирус на компьютере (или даже подозрение на него) антивирусы-ревизоры могут с большой степенью надежности. Обычно наиболее оптимальным является связка полифаг и ревизор. Ревизор служит для обнаружения факта заражения системы. Если система заражена, то в дело пускается полифаг. Если же ему не удалось уничтожить вирус, то можно обратиться к разработчику антивирусных средств, – скорее всего на ваш компьютер попал новый, неизвестный разработчикам вирус. Основу работы ревизоров составляет контроль за изменениями, характерными для работы вирусных программ. Далее мы рассмотрим, как этот контроль осуществляется. Как уже говорилось выше, в качестве примера будет рассматриваться работа антивируса AP’98. При установке программы создаются специальные таблицы. В них содержится информация: о контрольных суммах неизменяемых файлов, содержимом системных областей, адресах обработчиков прерываний, размере доступной оперативной памяти и т. п. Вся остальная работа ревизора состоит в сравнении текущего состояния диска с ранее сохраненными данными, поэтому крайне важно, чтобы все контрольные таблицы создавались не на зараженной машине. Только в этом случае работа ревизора будет достаточно эффективной. Итак, перейдем к стадиям работы программы-ревизора. Контроль оперативной памяти. Эта стадия проверки включает в себя процедуры обнаружения следов активных загрузочных и stealth-вирусов в памяти компьютера. Если такие алгоритмы будут найдены, вы получите соответствующее предупреждение. Так как AP’98 является симбиозом полифага и ревизора, то сначала программа ищет уже знакомые вирусы. Далее программа проверяет, изменился ли обработчик Int13h. Если он изменился, то с вероятностью 90% можно сказать, что компьютер инфицирован загрузочным вирусом (загрузочные вирусы вынуждены перехватывать это прерывание с тем, чтобы после своей активизации передать управление “нормальному” загрузочному сектору и система загрузилась без сбоев). Ревизор выдаст вам предупреждение об этом и сообщит адрес в памяти, по которому находится новый обработчик Int13h. В принципе информация о местонахождении обработчика необходима программистам и системным администраторам, а рядовому пользователю следует обратить внимание на предупреждение. Даже если ревизор устанавливается уже на зараженный вирусом компьютер и реальный адрес обработчика Int13h маскируется вирусом, в 85% случаев ревизору AP98.EXE удается обнаружить истинный адрес обработчика Int13h в BIOS и работать, используя его. Если по каким-либо причинам ревизору не удалось получить реальный адрес обработчика, то выдается предупреждение. Истинный адрес обработчика прерывания достигается путем пошагового просмотра тела вируса (по алгоритму своей работы загрузочный вирус вынужден в конце концов передавать управление оригинальному обработчику). Некоторые вирусы блокируют трассировку прерываний: при попытке трассировать их коды они “завешивают” систему, перезагружают компьютер и т. д. Поэтому, если при трассировке прерываний компьютер начинает вести себя “странно”, то следует быть очень осторожным – не исключено, что оперативная память поражена вирусом. Важным параметром является и размер свободной оперативной памяти. Обычно ревизор запускается самым первым, до загрузки каких-либо еще программ. Если же размер оперативной памяти уменьшился – это верный признак присутствия в ОЗУ еще какой-то программы. Скорее всего программа эта – вирус. Контроль системных областей. Контроль системных областей предназначен для обнаружения вирусов, которые используют для своей активации механизм загрузки. Как известно, первой с диска загружается загрузочная запись (boot record), которая содержит в себе мини-программу, управляющую дальнейшей загрузкой. Для жесткого диска первой производится загрузка главной загрузочной записи (MasterBootRecord или MBR). Тут необходимо сделать очередное “лирическое” отступление, посвященное обнаружению загрузочных вирусов. В случае, если система поражена загрузочным вирусом, то именно ему передается управление при попытке загрузиться с пораженного диска. В этом сила вируса – если поражен жесткий диск, то управление вирусу будет передаваться при каждом включении компьютера. Загрузочные вирусы в чистом виде передаются исключительно через дискеты, причем заражение осуществляется при попытке загрузиться с пораженной дискеты. Со временем использование дискет вообще и загрузочных дискет, в частности, сократилось до минимума. Однако способ захвата управления оказался столь удобен, что в настоящее время очень распространены вирусы, которые могут поражать как файлы, так и загрузочные сектора. Попав на “чистый” копьютер, такие вирусы первым делом поражают главную загрузочную запись. Однако методы обнаружения именно загрузочных вирусов в настоящее время крайне эффективны и приближаются к 100% надежности. Чтобы понять, как происходит обнаружение вируса, рассмотрим обнаружение такого вируса “вручную”. Произведем загрузку с чистой дискеты (при этом прерывание 13h гарантировано не будет перехвачено загрузочным вирусом) и рассмотрим сектор 0/0/1 винчестера (это физический адрес сектора главной загрузочной записи). Если винчестер разделен (при помощи fdisk) на логические диски, то код занимает приблизительно половину сектора и начинается с байтов FAh 33h COh (вместо 33h иногда может быть 2Bh). Заканчиваться код должен текстовыми строками типа “Missing operating system”. В конце сектора размещаются внешне разрозненные байты таблицы разделов. Нужно обратить внимание на размещение активного раздела в таблице разделов. Если операционная система расположена на диске С, а активен 2, 3 или 4 раздел, то вирус мог изменить точку старта, сам разместившись в начале другого логического диска (заодно нужно посмотреть и там). Но также это может говорить о наличии на машине нескольких операционных систем и какого-либо boot-менеджера, обеспечивающего выборочную загрузку. Проверяем всю нулевую дорожку. Если она чистая, то есть ее сектора содержат только байт-заполнитель, все в порядке. Наличие мусора, копий сектора 0/0/1 и прочего может говорить о присутствии загрузочного вируса. Впрочем, антивирусы при лечении загрузочных вирусов лишь “обезглавливают” противника (восстанавливают исходное значение сектора 0/0/1), оставляя тело “догнивать” на нулевой дорожке. Проверяем boot-сектор MS-DOS, он обычно расположен в секторе в 0/1/1. Его внешний вид для сравнения можно найти как в книге Е. Касперского, так и на любой “чистой” машине. Примерно таким же способом действуют и программы-ревизоры. Их особенность в том, что они не могут судить об изначальной “чистоте” оперативной памяти, поэтому чтение Master Boot Record происходит тремя различными способами:
Если считанная информация не совпадает, налицо действие stealth-алгоритмов. Для большей надежности AP’98 производит чтение MBR через IDE-порты жесткого диска. На сегодня в “дикой природе” не встречались вирусы, которые могут маскироваться от ревизора, обладающего такой функцией. Аналогичным образом проводится проверка и простого (не главного) загрузочного сектора. Обычно за счет того, что ревизор сохраняет резервную копию системных областей, восстановление повреждений от загрузочного вируса происходит довольно прозаично: если пользователь дает на то свое согласие, ревизор просто записывает системные области заново, используя сохраненные ранее данные. Контроль неизменяемых файлов. Последняя стадия проверки, направленная на обнаружение деятельности файловых вирусов – контроль изменения файлов. Для всех файлов, которые активно используются и в то же время не должны изменяться (обычно это программы типа win.com и т. п.) создаются контрольные таблицы. В них содержатся значения контрольных сумм и размеров файлов. Затем, в ходе дальнейшего использования ревизора, информация с дисков сравнивается с эталонной, хранящейся в таблицах. Если информация не совпадает, то весьма вероятно нахождение в системе файлового вируса. Самый явный признак – изменение размера или содержимого файла без изменения даты создания файла. Очень важно определить, какие именно файлы являются неизменяемыми. Ap’98 использует для этого DAT-файлы. DAT-файл (FILES.DAT) содержит список имен файлов и каталогов подлежащих контролю ревизором. Имена файлов и каталогов заносятся в DAT-файл в обычном текстовом виде (ASCII), что позволяет редактировать этот файл любым текстовым редактором. Каждая строка DAT-файла содержит одно имя или маску. Для того чтобы добавить новый файл для контроля, необходимо вставить в DAT-файл новую строку и записать в нее имя и полный путь необходимого файла(ов). После того как DAT-файл был изменен, необходимо удалить файл AP98F.TBL и пересоздать таблицу. В принципе, рекомендуется внести в разряд “неизменяемых” те исполняемые файлы, путь к которым указан в переменной PATH. Они чаще всего становятся жертвой файловых вирусов. Чтобы не дать stealth-вирусам “обмануть” систему, чтение данных также происходит как средствами операционной системы, так и средствами BIOS. Если эти данные не совпали, то можно говорить о том, что в системе активно действует вирус-“невидимка”. После того как все файлы проверены, ревизоры часто сохраняют дополнительные области памяти, которые могут быть испорчены вирусами. Это FLASH- и CMOS-память. Эти области памяти также изменяются достаточно редко и поэтому их изменения могут быть подозрительны. Еще раз скажем, что наиболее эффективной антивирусной защитой будет использование “связки” ревизор – полифаг. Ревизор позволяет отследить активность вируса на вашем диске, а полифаг служит для проверки новых файлов, а также удаления уже известных вирусов. Но при работе с антивирусными средствами надо четко представлять их реальные возможности, общие алгоритмы работы и следовать тем рекомендациям, которые мы вам дали. |
||
Материал с сайта: www.atlant.ru |