Maximize
Bookmark

VX Heavens

Library Collection Sources Engines Constructors Simulators Utilities Links Forum

Прежде чем лечить доктора

Евгений Каспеpский
КомпьютерПресс N8/1992 (стр. 57-65)
ISSN 0868-6157
Август 1992

[Вернуться к списку] [Комментарии (0)]

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

- Доктор, я умру?
- Обязательно !!!

Наши создатели вирусов недолго плелись в хвосте мирового компьютерного хулиганства - пропорционально числу ввозимых компьютеров росло и поголовье электронных насекомых, неизвестных знаменитым SCAN'ам и TNTVIRUS'ам. И, как следствие, практически все пользователи компьютеров рано или поздно (а кое-кто и постоянно) встречаются с вирусом. И, как еще одно следствие, далеко не всегда антивирусные программы правильно опознают этот вирус, и, что гораздо важнее, далеко не все антивирусы правильно его удаляют.

Естественно, что если за соседним столом работает системный программист, который за 2-3 часа выловит гостя и стерилизует компьютер (не прибегая при этом к команде "FORMAT C:"), или вы сами являетесь таковым, то можно спать спокойно. Но если это не так, то придется либо самому становиться системным программистом, либо выделить вирус и отослать его разработчику (или разработчикам) антивирусных программ, а затем с нетерпением ждать ответа.

Ниже приведены рекомендации пользователям, оказавшимся в подобной ситуации. Естественно, что эти рекомендации отражают только Мой личный опыт, и специалисты в области вирусов, особенно их авторы, могут со мной поспорить. В первую очередь, описаны правила использования антивирусных программ, затем методы выделения вируса и наиболее общие способы анализа и удаления вируса. Часть материала, приведенного ниже, впервые опубликована в журнале "Интеркомпьютер", #6, 1990 г.

1. Методика использования антивирусных программ

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

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

Если обнаружены зараженные файлы, то следует:

Следует отметить, что качество восстановления файлов многими антивирусными программами оставляет желать лучшего. Многие популярные антивирусы частенько необратимо портят файлы вместо их лечения. Поэтому если потеря файлов нежелательна, то выполнять перечисленные выше пункты следует в полном объеме.

Необходимо обращать особое внимание на чистоту модулей, сжатых утилитами типа LZEXE, PKLITE или DIET, файлов в архивах (ZIP, ARC, ICE, ARJ и т.д.) и данных в самораспаковывающихся файлах, созданных утилитами типа ZIP2EXE. Если случайно упаковать файл, зараженный вирусом, то обнаружение и удаление такою вируса без распаковки файла практически невозможно. В данном случае типичной будет ситуация, при которой все антивирусные программы сообщат о том, что от вирусов очищены все диски, но через некоторое время вирус появится опять.

Штаммы вируса могут проникнуть и в backup-копии программного обеспечения при обновлении этих копий. Причем архивы и backup-копии являются основными поставщиками давно известных вирусов. Вирус может годами "сидеть" в дистрибутивной копии какого-либо программного продукта и неожиданно проявиться при установке программ на новом компьютере.

Никто не может гарантировать полного уничтожения всех копий компьютерного вируса, так как файловый вирус может поразить не только выполняемые файлы, но и оверлейные модули с расширениями имени, отличающимися от СОМ или EXE. Загрузочный вирус может остаться на какой-либо дискете и внезапно проявиться при случайной попытке перезагрузить с нее. Поэтому целесообразно некоторое время после удаления вируса постоянно пользоваться резидентным антивирусным монитором типа утилиты -D.СОМ, входящей в комплекс "'Доктор' Касперский". При помощи резидентного монитора можно перехватить момент появления подавляющего большинства вирусов. Если вирус нерезидентный, то монитор перехватит обращение к файлам типа СОМ или ЕХЕ. Если вирус резидентный, то отслеживаются изменения в блоках памяти и в таблице векторов прерываний. При этом следует выяснить, как резидентный вирус выглядит на карте оперативной памяти, и после дезактивации вируса периодически просматривать карту памяти на предмет обнаружения этого вируса.

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

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

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

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

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

Существуют специальные утилиты, которые не только сравнивают содержимое файлов и их параметров (длина, атрибуты, время последней модификации), но и сообщают о наличии в разных файлах повторяющихся одинаковых участков кода или проверяют файлы на наличие "подозрительных" команд (например, утилиты Virus Locator А.Шеховцова или Lie Detector Е.Сусликова, алгоритм теста на "подозрительность" включен и в программу-фаг -V.ЕХЕ). Такие утилиты очень удобны, но иногда начинают "ругаться" на широко распространенные упаковщики ЕХЕ- файлов, некоторые файлы DOS, на антивирусные "насадки" к файлам, плохо обнаруживают вирусы, часть кода которых зашифрована. К тому же, в последнее время появляется все большее количество вирусов-"призраков", у которых два штамма одного вируса практически никогда не имеют ни одного совпадающего байта (в большинстве случаев это достигается сложными шифровками тела вируса и многочисленными модификациями кодов в блоке расшифровки).

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

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

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

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

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

Некоторые загрузочные вирусы практически сразу обнаруживают свое присутствие различными текстовыми строками (например, вирус "Stone" содержит строки: "Your РС is now Stoned!", "LEGALISE MARIJUANA!"). Некоторые вирусы, поражающие Boot-секторы дисков, проявляются отсутствием строк, обязательно присутствующих в Boot-секторе. К таким строкам относятся: строка-заголовок Boot-сектора, содержащая номер версии DOS или название фирмы-производителя программного обеспечения (например, строка "MSDOS3.3"); имена системных файлов (например, строка "IO SYSMSDOS SYS"); строки сообщений об ошибках.

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

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

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

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

2.3. Обнаружение резидентной части вируса

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

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

    При наличии вируса в таблице векторов прерываний утилиты, отображающие карту распределения памяти (например, -D.СОМ, -UTIL.COM), начинают "шуметь".

    Таблица 1. Карта распределения незараженной памяти

    Адрес блока MCBАдрес PSPРазмер блока MCB (Кб)Имя программы владельца блока MCBНомера векторов прерываний
    0E9A 0E9B 3,20K COMMAND.COM 22,24,2E
    0F6E 0F6F 0,04K блок свободен  
    0F72 0E9B 0,15K COMMAND.COM  
    0F7D 0F85 23,20K -D.COM 10,1B,1C,23,26,27,28,2F,40,EF,FF
    1545 1546 0,10K блок свободен  
    154D 154E 3,90K PLUCK.COM 09,13,16,21
    1648 0E9B 549,30K COMMAND.COM 30,EE,F2,F3,F4,F5,F6,F7,F8,FE

    Таблица 2. Таблица векторов прерываний поражена вирусом

    Адрес блока MCBАдрес PSPРазмер блока MCB (Кб)Имя программы владельца блока MCBНомера векторов прерываний
    0E9A 0E9B 3,20K COMMAND.COM 22,24,2E,EB
    0F6E 0F6F 0,04K блок свободен  
    0F72 0E9B 0,15K COMMAND.COM  
    0F7D 0F85 23,20K -D.COM 10,1B,1C,23,26,27,28,2F,40,CA,D3
    1546 1547 0,10K блок свободен  
    154E 154F 3,90K PLUCK.COM 09,13,16,91
    164C 0E9B 549,30K COMMAND.COM
    30,85,89,8E,90,93, 95,97,98,9D,9E,9F, A2,A7,A9,AB,AE,AF, B1,B3,BB,BE,BF,C0, C4,C9,CE,CF,D0,D1, D2,D4,D5,D8,D9,DA, DB,DD,DF,E0,E4,E5, E6,E7,E8,E9,EA,ED, EE,F3,F4,F5,F7,F8, F9"Шум"

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

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

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

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

  3. Вирус может проникнуть в область программ в виде:
    • отдельной резидентной программы или отдельного блока памяти (MCB);
    • внутри или "приклеившись" к какой-либо, резидентной программе.

    Если вирус внедряется в отведенную для прикладных программ область памяти в виде нового блока, создавая для себя собственный MCB, или как отдельная резидентная программа, то его можно обнаружить при просмотре подробной карты распределения памяти, отображающей адреса всех блоков MCB. Обычно такой вирус выглядит как отдельный блок памяти (табл. 3), не имеющий имени и перехватывающий один или несколько векторов прерываний (например, int 8h, 13h, 1Ch, 21h).

    Таблица 3. Вирус в области пользовательских программ

    Адрес блока MCBАдрес PSPРазмер блока MCB (Кб)Имя программы владельца блока MCBНомера векторов прерываний
    0E9A 0E9B 3,20K COMMAND.COM 22,24,2E
    0F6E 0F6F 0,04K блок свободен  
    0F72 0E9B 0,15K COMMAND.COM  
    10D1 10DA 23,20K -D.COM 10,1B,23,26,27,28,2F,40
    17AF 17B0 1,70K ? 08 (Обнаружен вирус "Yankee Doodle")
    1820 0E9B 539,30K COMMAND.COM 30,31
    9F04 0000 3,90K ? 1C,21 (Обнаружен вирус "Jerusalem")
  4. Вирус может проникнуть за границу памяти, выделенной для DOS. Все загрузочные и некоторые файловые вирусы располагаются за пределами памяти, выделенной для DOS, уменьшая значение слова, расположенного по адресу [0040:0013]. Обнаружить такие вирусы очень просто - достаточно узнать емкость оперативной памяти и сравнить ее с реальной. Если вместо 640 или 512 Кбайт система сообщит меньшее значение, то следует просмотреть дизассемблером "отрезанный" участок памяти. Если на этом участке будут обнаружены коды какой-то программы, то, скорее всего, вирус найден.

    Внимание!

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

  5. Вирус может встраиваться в конкретные, заведомо резидентные программы или "приклеиться" к уже имеющимся блокам памяти. Возможно инфицирование вирусом файлов DOS, которые являются резидентными (например, IО.SYS, MSDOS.SYS, COMMAND.COM), загружаемых драйверов (ANSY.SYS, COUNTRY.SYS, RAMDRIVE.SYS) и др. Обнаружить такой вирус гораздо сложнее вследствие малой скорости его распространения, но, однако, вероятность атаки подобного вируса значительно меньше. Все чаще стали встречаться "хитрые" вирусы, которые корректируют заголовки блоков памяти или "обманывают" DOS таким образом, что блок с кодами вируса становится одним целым с предыдущим блоком памяти.

    В этом случае обнаружить вирус гораздо сложнее - необходимо знать реальную длину программ, размещенных в памяти, и список прерываний, которые они перехватывают. Но этот способ не очень удобен и иногда не срабатывает. Поэтому рекомендуется использовать другой метод, который может облегчить выявление вируса в подобной ситуации. Он основан на следующем свойстве - подавляющее большинство вирусов для обнаружения незараженных файлов или секторов дисков перехватывают прерывания 13h или 21h, встраиваясь в обработчик прерывания. В таком случае для обнаружения вируса достаточно просмотреть текст (команды ассемблера) обработчиков указанных прерываний (например, при помощи программы -UTIL.СОМ). Правда, для того, чтобы отличить вирус от обычных программ, требуется достаточный опыт работы с вирусами и некоторое представление о структуре обработчика на незараженном компьютере. К тому же следует быть осторожным: существует несколько вирусов, которые "завешивают" систему при попытке трассировки их кодов.

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

Конечно, возможны и другие, достаточно экзотические способы инфицирования памяти вирусом, например, внедрение вируса в видеопамять (что уже встречалось) или в расширенную память, но подобные вирусы встречаются достаточно редко и всегда проявлялись хотя бы одним из перечисленных выше признаков. Возможно, конечно, создание монстров, использующих виртуальные режимы процессоров 80386 и 80486 (а что будет в 80586?), но, во-первых, это будет слишком заметно, а во-вторых, программист подобной квалификации всегда найдет для себя более осмысленную задачу.

3. Анализ алгоритма вируса

На мой взгляд, наиболее удобным для хранения и анализа вируса объектом является файл, содержащий его (вируса) тело. Как показывает практика, для анализа файлового вируса удобнее иметь несколько зараженных файлов различных, но не очень больших, длин. При этом желательно иметь зараженные файлы всех типов (COM, EXE и SYS), которые могут быть поражены вирусом. Если необходимо проанализировать часть оперативной памяти, то при помощи некоторых утилит (например, -UTIL.СОМ) довольно просто выделить участок, где расположен вирус, и скопировать этот участок на диск. Если же требуется анализ сектора MBR или Вооt-сектора, то скопировать их в файлы можно при помощи популярных "Нортоновских утилит". Для хранения загрузочного вируса наиболее удобен файл-образ зараженного диска. Для его получения необходимо отформатировать дискету (лучше 360 Кбайт), заразить ее вирусом, скопировать образ дискеты (все сектора, начиная с 0-го и кончая последним) в файл и, при необходимости, скомпрессировать его (эту процедуру можно проделать при помощи "Нортоновских утилит", программ TELEDISK или DISKDUPE).

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

При анализе алгоритма вируса предстоит выяснить:

При решении этих задач не обойтись без дизассемблера или отладчика (это могут быть отладчики Quaid Analyzer, Advanced Trace86, FULSCREEN DEBUG или дизассемблеры DisDoc, Sourcer или IDA).

И отладчики, и дизассемблеры имеют и положительные, и отрицательные черты - каждый выбирает то, что он считает более удобным. Несложные короткие вирусы быстро "вскрываются" стандартным отладчиком DEBUG; при анализе объемных и высокосложных (типа вируса "V-4096") не обойтись без дизассемблера. Если необходимо быстро обнаружить метод восстановления пораженных файлов, то достаточно пройтись отладчиком по началу вируса до того места, где он восстанавливает загруженную программу перед тем, как передать ей управление (фактически именно этот алгоритм чаще всего используется при лечении вируса). Если же требуется получить детальную картину работы вируса или хорошо документированный листинг, то, кроме дизассемблера Sourcer и его возможности восстанавливать перекрестные ссылки, здесь вряд ли что поможет. К тому же, следует учитывать, что, во-первых, некоторые вирусы достаточно успешно блокируют попытки протрассировать их коды, а во-вторых, при работе с отладчиком существует ненулевая вероятность того, что вирус вырвется из-под контроля.

При анализе файлового вируса необходимо выяснить, какие файлы (COM, EXE, SYS) поражаются вирусом, в какое место (места) в файле записывается код вируса - в начало, конец или середину файла, в каком объеме возможно восстановление файла (полностью или частично), в каком месте вирус хранит восстанавливаемую информацию.

При анализе загрузочного вируса основная задача - выяснение адреса (адресов) сектора, в котором вирус сохраняет первоначальный загрузочный сектор (если, конечно, вирус сохраняет его).

Для резидентного вируса также необходимо выделить участок кода, создающий резидентную копию вируса, и вычислить возможные адреса точек входа в перехватываемые вирусом прерывания. Необходимо также выяснить, каким образом и где в оперативной памяти выделяет вирус место для своей резидентной копии: записывается ли вирус по фиксированным адресам в системные области DOS и BIOS, уменьшает размер памяти, выделенной под DOS (слово по адресу [0000:0413]), создает для себя специальный MCB-блок, либо использует какой-либо другой способ.

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

4. Восстановление пораженных объектов

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

4.1. Дезактивация оперативной памяти

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

Оптимальный алгоритм обнаружения кодов вируса зависит от способа инфицирования вирусом оперативной памяти. Если вирус записывает свою резидентную копию по фиксированным адресам, то и искать ее нужно по этим адресам. Если вирус создает для своей TSR-копии новый MCB-блок, то следует пройти все MCB-блоки, начиная с первого и кончая последним, и в каждом блоке по фиксированным адресам искать коды вируса. Если вирус записывается за пределами памяти DOS, предварительно уменьшая размер выделенной под DOS памяти, то следует провести полное сканирование "отрезанного" от DOS участка. Практически для всех способов инфицирования вирусом оперативной памяти подходит метод трассировки прерываний, используемый вирусами семейства "Yankee".

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

Исходный код вируса                     Код дезактивированного вируса
........        ...............         ........	...........
80 FC 3D	CMP AH, 3Dh 	        80 FC 3D	CMP AH, 3Dh
74 хх 		JE  Infect_File 	90		NOP
Е9 хх хх 	JMP Continue		90		NOP
					Е9 хх хх	JMP Continue
........	...............		........	...........

При дезактивации TSR-копии вируса следует учитывать, что вирус может предпринимать специальные меры для восстановления своих кодов (например, некоторые вирусы семейства "Yankee"), и в этом случае придется нейтрализовать и механизм самовосстановления вируса.

4.2. Восстановление загрузочных секторов

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

При восстановлении системных загрузчиков следует соблюдать особую осторожность, поскольку результатом неправильного исправления сектора MBR или Boot-сектора может быть потеря всей информации на диске (дисках). Поэтому даже довольно простую процедуру считывания и восстановления оригинального загрузочного сектора нужно обязательно проверить на корректность. Простейшая проверка состоит в выяснении наличия в конце загрузочного сектора сигнатуры AA55h.

4.3. Восстановление файлов

При лечении файлов следует учесть следующие правила:

Само лечение файла производится в большинстве случаев довольно просто. Если вирус записывается в конец файла, то необходимо восстановить старое начало файла (у ЕХЕ-файлов особое внимание следует обратить на корректность полей восстанавливаемых заголовков) и затем отрезать вирус от файла (пример программы, восстанавливающей файлы, пораженные вирусом "Vienna-648", приведен в Приложении). Если вирус записался в начало файла, то следует переписать старое содержимое файла в его (файла) начало и укоротить файл.

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

Е.Касперский
Москва, Тессинский пер. 9/16, АО "Ками"
Телефоны (095) 499-15-00, 928-21-38
Е-mail: eugene@kami.npimsu.msk.su

Термины

Дизассемблер
- утилита, осуществляющая преобразование, обратное ассемблированию, то есть переводящая машинные коды в язык ассемблера. Такие утилиты крайне необходимы не только при отладке программ (для чего они и создаются), но и при анализе вируса.
Дизассемблирование
- перевод машинных кодов какой-либо программы в ее представление на языке ассемблера.
Монитор (программа-монитор, блокировщик)
- резидентно находящаяся в оперативной памяти утилита, которая позволяет выявлять "подозрительные" действия пользовательских программ: изменение и переименование выполняемых программ (COM- и EXE-файлов), запись на диск по абсолютному адресу, форматирование диска и т.д. При обнаружении "подозрительной" функции программа-монитор либо выдает на экран сообщение, либо блокирует выполнение перехваченной функции, либо совершает другие специальные действия.
Призрак (вирусы-"призраки")
- вирусы, предпринимающие специальные меры для затруднения их поиска и анализа. Не имеют сигнатур, то есть не содержат ни одного постоянного участка кода. В большинстве случаев два образца одного и того же вируса-"призрака" не будут иметь ни одного совпадения. Это достигается шифрованием основною тела вируса и модификациями программы-расшифровщика.
Стелс (Stealth) - "стелс"-вирусы (вирусы-невидимки)
представляют собой программы, которые перехватывают обращения DOS к пораженным файлам или секторам дисков и "подставляют" вместо себя незараженные участки информации. Кроме этого, такие вирусы при обращении к файлам используют достаточно оригинальные алгоритмы, позволяющие "обманывать" резидентные антивирусные мониторы. К "стелс"-вирусам относятся вирусы "V-4096", "Fish #6", "Brain" и некоторые другие.

Программа-доктор для файла пораженного вирусом "Vienna-649"

	Offset_3_Bytes=206h

SEGA	SEGMENT BYTE PUBLIC
	ASSUME	CS:SEGA, DS:SEGA

	ORG	100H

CURE	PROC
START:
	PUSH	CS				; Код и данные
	POP	DS				;  в одном сегменте

	MOV	DX, OFFSET File_Name		; Открыть файл
	MOV	AX, 3D02h
	INT	21h
	JC	Error

	MOV	Handle, AX

	MOV	CX, 3				; Прочитать первые
	MOV	DX, OFFSET Buffer		;  3 байта файла
	MOV	BX, Handle
	MOV	AH, 3Fh
	INT	21h
	JC	Error

	XOR	CX, CX				; Вычислить адрес
	MOV	AX, WORD PTR Buffer+1		;  первоначального
	ADD	AX, Offset_3_Bytes		;  начала файла
	ADC	CX, 0				;  (старые 3 байта)

	MOV	DX, AX				; Установить указатель
	MOV	BX, Handle			;  на старые 3 байта
	MOV	AX, 4200h
	INT	21h
	JC	Error

	MOV	CX, 3				; Прочитать старое
	MOV	DX, OFFSET Buffer+3		;  начало файла
	MOV	BX, Handle
	MOV	AH, 3Fh
	INT	21h
	JC	Error

	XOR	CX, CX				; Переместить указатель
	XOR	DX, DX				;  на начало файла
	MOV	BX, Handle
	MOV	AX, 4200h
	INT	21h
	JC	Error

	MOV	CX, 3				; Восстановить начало файла
	MOV	DX, OFFSET Buffer+3
	MOV	BX, Handle
	MOV	AH, 40h
	INT	21h
	JC	Error

	XOR	CX, CX				; Переместить указатель
	MOV	DX, WORD PTR Buffer+1		;  на начало вируса
	ADD	DX, 3
	ADC	CX, 0
	MOV	BX, Handle
	MOV	AX, 4200h
	INT	21h
	JC	Error

	MOV	CX, 0				; Укоротить файл
	MOV	BX, Handle
	MOV	AH, 40h
	INT	21h

Error:
	MOV	BX, Handle			; Закрыть файл
	MOV	AH, 3Eh
	INT	21h

	MOV	AX, 4C00h			; Выход в DOS
	INT	21h

Handle		DW	?
File_Name	DB	"INFECT.COM"
Buffer		DB	6 DUP (?)

CURE	ENDP
SEGA	ENDS
	EBD	START

Приложение

Дамп сектора, содержащего MBR

С адреса 0000 по адрес 00E1 - программа загрузки активного Boot-сектора.

С адреса 01C0 по адрес 01FD - таблица разбиения диска (Disk Partition Table).

Dump: программа загрузки активного Boot-сектора

Дамп сектора, содержащего нормальный Boot-сектор

Dump1: таблица разбиения диска (Disk Partition Table)

Дамп сектора, содержащего усеченный Boot-сектор

Dump2: усеченный Boot-сектор

Дамп сектора, зараженного вирусом "Stone"

Dump3: Дамп сектора, зараженного вирусом Stone [Вернуться к списку] [Комментарии (0)]
deenesitfrplruua