logo
otvety_po_uib

33. Методы обнаружения и удаления компьютерных вирусов

Способы противодействия компьютерным вирусам можно разделить на несколько групп:

— профилактика вирусного заражения и уменьшение предполагаемого ущерба от такого заражения;

— использование антивирусных программ, в том числе для обезвреживания и удаления известного вируса;

— обнаружение и удаление неизвестного вируса.

Антивирусные программы

Сканеры

Принцип работы антивирусных сканеров основан на проверке файлов, секторов и системной памяти и поиске в них известных и новых (неизвестных сканеру) вирусов. Для поиска известных вирусов используются так называемые маски. Маской вируса является некоторая постоянная последовательность кода, специфичная для этого конкретного вируса. Если вирус не содержит постоянной маски или длина этой маски недостаточно велика, то используются другие методы. Примером такого метода является алгоритмический язык, описывающий все возможные варианты кода, которые могут встретиться при заражении подобного типа вирусом. Такой подход используется некоторыми антивирусами для детектирования поли-морфик-вирусов.

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

К достоинствам сканеров относится их универсальность, к недостаткам — размеры антивирусных баз, которые сканерам приходится "таскать за собой", и относительно небольшая скорость поиска вирусов.

CRC-сканеры

Принцип работы CRC-сканеров основан на подсчете CRC-сумм (контрольных сумм) для присутствующих на диске файлов/системных секторов. Эти CRC-суммы затем сохраняются в базе данных антивируса, как, впрочем, и некоторая другая информация: длины файлов, даты их последней модификации и т. д. При последующем запуске CRC-сканеры сверяют данные, содержащиеся в базе данных, с реально подсчитанными значениями. Если информация о файле, записанная в базе данных, не совпадает с реальными значениями, то CRC-сканеры сигнализируют о том, что файл был изменен или заражен вирусом.

CRC-сканеры, использующие "антистелс"-алгоритмы, являются довольно сильным оружием против вирусов: практически 100% вирусов оказываются обнаруженными почти сразу после их появления на компьютере. Однако у этого типа антивирусов есть врожденный недостаток, который заметно снижает их эффективность. Этот недостаток состоит в том, что CRC-сканеры не способны поймать вирус в момент его появления в системе, а делают это лишь через некоторое время, уже после того, как вирус разошелся по компьютеру. CRC-сканеры не могут детектировать вирус в новых файлах (в электронной почте, на дискетах, в файлах, восстанавливаемых из backup или при распаковке файлов из архива), поскольку в их базах данных отсутствует информация об этих файлах. Более того, периодически появляются вирусы, которые используют эту "слабость" CRC-сканеров, заражают только вновь создаваемые файлы и остаются, таким образом, невидимыми для CRC-сканеров.

Мониторы

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

К достоинствам мониторов относится их способность обнаруживать и блокировать вирус на самой ранней стадии его размножения, что, кстати, бывает очень полезно в случаях, когда давно известный вирус постоянно "выползает неизвестно откуда". К недостаткам относятся существование путей обхода защиты монитора и большое количество ложных срабатываний, что, видимо, и послужило причиной для практически полного отказа пользователей от подобного рода антивирусных программ (мне, например, неизвестно ни об одном мониторе для Windows 95/NT — нет спроса, нет и предложения).

Необходимо также отметить такое направление антивирусных средств, как антивирусные мониторы, выполненные в виде аппаратных компонентов компьютера ("железа"). Наиболее распространенной является встроенная в BIOS защита от записи в MBR винчестера. Однако, как и в случае с программными мониторами, такую защиту легко обойти прямой записью в порты контроллера диска, а запуск DOS-утилиты FDISK немедленно вызывает ложное срабатывание защиты.

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

Иммунизаторы

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

Второй тип иммунизации защищает систему от поражения вирусом какого-то определенного вида. Файлы на дисках модифицируются таким образом, что вирус принимает их за уже зараженные (пример — печально известная строка MSDos, предохраняющая от ископаемого вируса Jerusalem). Для защиты от резидентного вируса в память компьютера заносится программа, имитирующая копию вируса, при запуске вирус натыкается на нее и считает, что система уже заражена.

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

Обнаружение неизвестного вируса

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

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

Если нет уверенности в собственных силах — обратитесь к системному программисту, который поможет локализовать и удалить вирус (если это действительно вирус) или найти другую причину странного поведения компьютера.

Не следует звонить в антивирусные фирмы с вопросом: "Наверное, у меня в компьютере вирус. Что мне делать?". Помочь вам не смогут, поскольку для удаления вируса требуется больше информации. Для того чтобы антивирусная фирма могла оказать реальную помощь, на ее адрес следует выслать образец вируса— зараженный файл в случае файлового вируса или зараженную дискету (или ее файл-образ) в случае загрузочного вируса. Каким образом обнаруживаются зараженные файлы/диски, будет рассказано ниже.

Не забывайте перед использованием антивирусных программ и утилит загрузиться с резервной копии DOS, расположенной на заведомо не имеющей вирусов и защищенной от записи дискете, и в дальнейшем использовать программы только с дискет. Это необходимо для того, чтобы застраховаться от резидентного вируса, так как он может блокировать работу программ или использовать их работу для инфицирования проверяемых файлов/дисков. Более того, существует большое количество вирусов, уничтожающих данные на диске, если они "подозревают", что их код может быть обнаружен. Конечно же это требование никак не относится к макровирусам и к дискам, размеченным одним из новых форматов (NTFS, HPFS). После загрузки DOS такой винчестер окажется недоступным для DOS-программ.

Обнаружение загрузочного вируса

В загрузочных секторах дисков расположены, как правило, небольшие программы, назначение которых состоит в определении размеров и границ логических дисков (для MBR винчестера) или загрузке ОС (для загрузочного сектора).

Вначале следует проверить содержимое сектора, подозрительного на наличие вируса. Для этой цели удобно использовать DISKEDIT из "Нортонов-ских утилит" или AVPUTIL из профессионального комплекта AVP.

Некоторые загрузочные вирусы практически сразу можно обнаружить по наличию различных текстовых строк (например, вирус Stoned содержит строки: "Your PC is now Stoned!", "LEGALISE MARIJUANA!"). Некоторые вирусы, поражающие загрузочные сектора дисков, наоборот, определяются по отсутствию строк, которые обязательно должны быть в загрузочном секторе. К таким строкам относятся имена системных файлов (например, строка IOSYSMSDOS SYS) и строки сообщений об ошибках. Отсутствие или изменение строки-заголовка загрузочного сектора (строка, содержащая номер версии DOS или название фирмы — производителя ПО, например MSDOS5.0 или MSWIN4.0) также может служить сигналом о заражении вирусом, если на компьютере не установлена Windows 95/NT, так как эти системы по неизвестной мне причине записывают в заголовок загрузочных секторов дискет случайные строки текста.

Стандартный загрузчик MS-DOS, расположенный в MBR, занимает меньше половины сектора, и многие вирусы, поражающие MBR винчестера, довольно просто заметить по увеличению длины кода, расположенного в секторе MBR.

Однако существуют вирусы, которые внедряются в загрузчик без изменения его текстовых строк и с минимальными изменениями кода загрузчика. Для того чтобы обнаружить такой вирус, в большинстве случаев достаточно отформатировать дискету на заведомо незараженном компьютере, сохранить в виде файла ее загрузочный сектор, затем некоторое время использовать ее на зараженном компьютере (записать/прочитать несколько файлов), а после этого на незараженном компьютере сравнить ее загрузочный сектор с оригинальным. Если в коде загрузочного сектора произошли изменения — вирус пойман.

Существуют также вирусы, использующие более сложные приемы заражения, например, изменяющие при инфицировании MBR всего 3 байта Disk Partition Table, соответствующие адресу активного загрузочного сектора. Для идентификации такого вируса придется провести более детальное исследование кодов загрузочного сектора вплоть до полного анализа алгоритма работы его кода.

Приведенные рассуждения основываются на том, что стандартные загрузчики (программы, записываемые операционной системой в загрузочные сектора) реализуют стандартные алгоритмы загрузки ОС и оформляются в соответствии с ее стандартами. Если же диски отформатированы утилитами, не входящими в состав DOS (например, Disk Manager), то для обнаружения в них вируса следует проанализировать алгоритм работы и оформление загрузчиков, создаваемых такой утилитой.

Обнаружение файлового вируса

Как отмечалось, вирусы делятся на резидентные и нерезидентные.

Встречавшиеся до сих пор резидентные вирусы отличались гораздо большим коварством и изощренностью, чем нерезидентные. Поэтому для начала рассмотрим простейший случай — поражение компьютера неизвестным нерезидентным вирусом. Такой вирус активизируется при запуске какой-либо зараженной программы, совершает все, что ему положено, передает управление программе-носителю и в дальнейшем (в отличие от резидентных вирусов) не мешает ее работе. Для обнаружения такого вируса необходимо сравнить длины файлов на винчестере и в дистрибутивных копиях (упоминание о важности хранения таких копий уже стало банальностью). Если это не поможет, то следует побайтно сравнить дистрибутивные копии с используемыми программами. В настоящее время разработано достаточно много утилит для такого сравнения файлов, самая простейшая из них (утилита СОМР) содержится в DOS.

Можно также просмотреть дамп выполняемых файлов. В некоторых случаях можно сразу обнаружить присутствие вируса по наличию в его коде текстовых строк. Многие вирусы, например, содержат строки: ".СОМ", "*.СОМ", ".ЕХЕ", "*.ЕХЕ", "*.*", "MZ", "COMMAND" и т. д. Эти строки часто встречаются в начале или в конце зараженных файлов.

Существует и еще один способ визуального определения зараженного вирусом DOS-файла. Он основан на том, что выполняемые файлы, исходный текст которых написан на языке высокого уровня, имеют вполне определенную структуру. В случае Borland или Microsoft C/C++ сегмент кода программы находится в начале файла, а сразу за ним — сегмент данных, причем в начале этого сегмента стоит строка-копирайт фирмы — изготовителя компилятора. Если в дампе такого файла за сегментом данных следует еще один участок кода, то вполне вероятно, что файл заражен вирусом.

То же справедливо и для большинства вирусов, заражающих файлы Windows и OS/2. В выполняемых файлах этих ОС стандартным является размещение сегментов в следующем порядке: сегмент(ы) кода, за ним сегменты данных. Если за сегментом данных идет еще один сегмент кода, это также может служить сигналом о присутствии вируса.

Пользователям, знакомым с языком Ассемблер, можно попробовать разобраться в кодах подозрительных программ. Для быстрого просмотра лучше всего подходит HIEW (Hacker's View) или AVPUTIL. Для более подробного изучения потребуется дизассемблер — Sourcer или IDA.

Рекомендуется запустить одну из резидентных антивирусных программ-мониторов и следить за ее сообщениями о подозрительных действиях программ (запись в СОМ- или ЕХЕ-файлы, запись на диск по абсолютному адресу и т. п.). Существуют мониторы, которые не только перехватывают такие действия, но и сообщают адрес, откуда поступил подозрительный вызов (к таким мониторам относится AVPTSR.COM). Обнаружив подобное сообщение, следует выяснить, от какой программы оно пришло, и проанализировать ее коды при помощи резидентного дизассемблера (например, AVPUTIL.COM). При анализе кодов программ, резидентно находящихся в памяти, большую помощь часто оказывает трассирование прерываний 13h и 21h.

Следует отметить, что резидентные DOS-мониторы часто оказываются бессильны, если работа ведется в DOS-окне под Windows 95/NT, поскольку Windows 95/NT позволяют вирусу работать в обход монитора (как, впрочем, и всех остальных резидентных программ). DOS-мониторы неспособны остановить также распространение Windows-вирусов.

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

Обнаружение макровируса

Характерными проявлениями макровирусов являются:

• в документах Word:

— невозможность конвертирования зараженного документа Word в другой формат;

— зараженные файлы имеют формат Template (шаблон), поскольку при заражении Word-вирусы конвертируют файлы из формата Word Document в Template;

• только в Word 6:

— невозможность записи документа в другой каталог/на другой диск по команде Save As;

• в Excel/Word:

— в STARTUP-каталоге присутствуют чужие файлы;

• в таблицах Excel версий 5 и 7:

— наличие в Книге (Book) лишних и скрытых Листов (Sheets). Для проверки системы на наличие вируса можно использовать пункт меню Tools/Macro. Если обнаружены чужие макросы, то они могут принадлежать вирусу. Однако этот метод не работает в случае "стелс"-вирусов, которые запрещают работу этого пункта меню, что, в свою очередь, является достаточным основанием считать систему зараженной.

Многие вирусы имеют ошибки или некорректно работают в различных версиях Word и Excel, в результате чего программы выдают сообщения об ошибке, например:

WordBasic Err = номер ошибки Если такое сообщение появляется при редактировании нового документа или таблицы и при этом заведомо не используются какие-либо пользовательские макросы, то это также может служить признаком заражения системы.

Сигналом о вирусе являются и изменения в файлах и системной конфигурации Word, Excel и Windows. Многие вирусы тем или иным образом меняют пункты меню Tools/Options: разрешают или запрещают функции Prompt to Save Normal Template, Allow Fast Save, Virus Protection. Некоторые вирусы устанавливают на файлы пароль при их заражении. Большое количество вирусов создает новые секции и/или опции в файле конфигурации Windows (WIN.INI).

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

Обнаружение резидентного вируса

Если в компьютере обнаружены следы деятельности вируса, но видимых изменений в файлах и системных секторах дисков не наблюдается, то вполне возможно, что компьютер поражен одним из "стелс"-вирусов. В этом случае необходимо загрузить DOS с заведомо не имеющей вирусов дискеты, содержащей резервную копию DOS, и действовать, как и при поражении нерезидентным вирусом. Однако иногда это нежелательно, а в ряде случаев невозможно (известны, например, случаи покупки новых компьютеров, зараженных вирусом). Тогда придется обнаружить и нейтрализовать резидентную часть вируса, выполненную по технологии "стеле". Возникает вопрос: где в памяти и как искать вирус или его резидентную часть? Существует несколько способов инфицирования памяти.

DOS-вирусы

1. Вирус может проникнуть в таблицу векторов прерываний. Лучший способ обнаружить такой вирус — просмотреть карту распределения памяти, содержащую список резидентных программ (пример такой карты приведен в табл. 3.1). Подробная карта памяти сообщает информацию обо всех блоках, на которые разбита память: адрес блока управления памятью МСВ, имя программы — владельца блока, адрес ее префикса программного сегмента (PSP) и список перехватываемых блоком векторов прерываний.

При наличии вируса в таблице векторов прерываний (табл. 3.2) утилиты, отображающие карту распределения памяти (например, AVPTSR.COM, AVPUTIL.COM), начинают "шуметь".

Другой, более надежный, но требующий высокой квалификации пользователя способ — просмотреть таблицу векторов прерываний с помощью дизассемблера. Если при этом будут обнаружены коды какой-то программы, значит, код вируса (или участок кода) найден.

2. Вирус может несколькими способами встроиться в DOS: в произвольный системный драйвер, в системный буфер, в другие рабочие области DOS (например, в область системного стека или в свободные места таблиц DOS и BIOS).

Наиболее "популярный" способ инфицирования вирусом произвольного системного драйвера — прикрепление тела вируса к файлу, содержащему драйвер, и модификация заголовка поражаемого драйвера. Если при этом вирус оформляет себя как отдельный драйвер', то его можно обнаружить при просмотре карты распределения памяти, содержащей список системных драйверов. Если при этом в списке присутствует драйвер, который не описан в файле CONFIG.SYS, то он и может быть вирусом. Если же вирус "приклеивается" к расположенному перед ним драйверу, не выделяя свои коды как отдельную программу-драйвер, то обнаружить его можно методами, описанными ниже.

Вирус, встраивающийся в системный буфер, должен уменьшать общее число буферов; в противном случае он будет уничтожен последующими операциями считывания с диска. Совсем не сложно написать программу, которая подсчитывает число буферов, реально присутствующих в системе, и сравнивает полученный результат со значением команды BUFFERS, расположенной в файле CONFIG.SYS (если команда BUFFERS отсутствует, то со значением, устанавливаемым DOS по умолчанию)

Существует достаточно способов внедрения вируса в системные таблицы или область стека DOS. Однако реализация этих способов потребует от автора вируса досконального знания различных версий DOS. К тому же свободного места в DOS не так уж много, и поэтому написание полноценного "стелс"-вируса такого типа маловероятно. Если же все-таки подобный вирус появится, то обнаружить его код можно дизассемблированием подозрительных участков DOS.

3. Вирус может проникнуть в область программ в виде-

— отдельной резидентной программы или отдельного блока памяти (МСВ);

— внутри или "приклеившись" к какой-либо резидентной программе. Если вирус внедряется в отведенную для прикладных программ область памяти в виде нового блока, создавая для себя собственный МСВ, или как отдельная резидентная программа, его можно обнаружить при просмотре подробной карты распределения памяти, отображающей адреса всех блоков МСВ. Обычно такой вирус выглядит как отдельный блок памяти (табл. 3.3, 3.4), не имеющий имени и перехватывающий один или несколько векторов прерываний (например, INT 8, 13h, ICh, 21h). Следует отметить, что вирус может выделить себе блок памяти как в обычной (conventional), так и в верхней памяти (UMB).

  1. Виды антивирусных программ.

см.33+

Антивирусные программы, наиболее известные в России

ADINF

AIDSTEST

AVP

DrWeb

SCAN

NAV

VIRUS

Другие антивирусные программы

К антивирусам, которые зарекомендовали себя как достаточно надежные сканеры, можно отнести AVAST (Avil Software, Чехия), Dr.Solomon's AVTK (Anti-Virus Toolkit, S&S International, Великобритания), NVC (Norman Virus Control, Norman pie, Норвегия). Эти три программы вместе с AVP в последние годы показывают стабильно высокие результаты во всех антивирусных тестах. Неплохим сканером является также IBM Anti-Virus.

За ними следуют F-PROT (Frisk Software, Исландия) и TBAV (Thunderbyte Anti-Virus, ESaSS, Нидерланды). Эти две программы, пожалуй, представляют собой наиболее мощные и популярные в мире условно-бесплатные сканеры.

Нельзя не отметить антивирус SWEEP (Sophos pie, Великобритания). Имея не очень высокий уровень детектирования вирусов и не обладая такими необходимыми функциями, как лечение вирусов, эвристический сканер и т. д., SWEEP тем не менее является антивирусом с самым широким охватом платформ — от DOS до Alpha-компьютеров и Banyan Network.