Поиск вируса
Когда во время работы компьютер начинает вести себя как-то необыч-
но, первая мысль, приходящая на ум любому пользователю - уж не ви-
рус ли это. В такой ситуации важно правильно оценить свои подозре-
ния и сделать выводы.
Как правило, человек, обладающий некоторым опытом и владеющий со-
ответствующим программным инструментарием, справляется с этой зада-
чей без особых затруднений. Наиболее сложная ситуация - когда дей-
ствовать приходится в "полевых" условиях, например, на чужой машине.
Типичный вариант: стандартная PC (286, 386...Pentium), как минимум
1Мбайт ОЗУ, как минимум 400Мбайт HDD; возможно наличие прин-
тера, звуковой карты, CDD и прочей периферии. Программное обеспе-
чение: Windows 95, возможно Windows 3.1x, но работают все равно под
DOS. Джентльменский набор: Norton Commander 3.0-5.0, Norton Utility
6.0-8.0, свежие антивирусы: AidsTest и DrWeb, русификаторы, архивато-
ры, резидентные программы и прочее. В качестве обязательного усло-
вия - наличие заведомо "чистой" защищенной от записи загрузочной
дискеты, содержащей (хотя бы в урезанном виде) вышеупомянутый
комплект программ.
Итак, по мнению хозяина компьютер ведет себя странно. Например,
программы, которые раньше работали правильно, начинают сбоить или
вообще перестают запускаться, компьютер периодически "виснет", эк-
ран и динамик воспроизводят необычные видео- и аудиоэффекты. Что
будем делать?
1. Усаживаем перед собой хозяина компьютера и подробно расспраши-
ваем его о событиях, предшествующих возникновению сбоев. Выяс-
нить нужно следующее.
Кем и как используется машина? Если сотрудники или хозяин час-
то приносят мелкие игрушки, гороскопы, устанавливают и стирают
различные бухгалтерские программы, то вероятность наличия виру-
са в машине весьма высока. Крупные игрушки, которые с трудом
умещаются даже в упакованном виде в коробку дискет, переносятся
с машины на машину редко. При этом они, чаще всего, тщательно
проверяются на наличие вирусов.
а) Когда впервые замечены симптомы вируса? Некоторые вирусы
любят приурочивать свою деятельность к определенной дате или
времени: 1 мая, 7 ноября, 13-е число, пятница, пять часов вечера,
а также 6 марта, 15 ноября, 11-я минута каждого часа.
б) Не связаны ли изменения в работе компьютера с первым запус-
ком какой-либо программы? Если да, то эта программа - первая
в очереди на "медкомиссию".
в) Не связано ли появление симптомов заражения с распаковкой
какого-либо старого архива и запуском программ из него? Неко-
торые современные антивирусы (AVP, DrWeb) умеют проверять
архивы наиболее популярных форматов. Но ведь изредка еще
встречаются архивы .ice, .arc, .zoo, .bsa, .uc2, .ha, .pak, .chz, .eli
и прочие - их антивирусы диагностировать не могут.
г) Не имеет ли хозяин (хозяйка) компьютера привычку оставлять
дискеты в дисководе при перезагрузке? Загрузочный вирус мо-
жет годами жить на дискете, никак себя не проявляя.
2. В присутствии хозяина (хозяйки) включаем компьютер. Вниматель-
но следим за процессом загрузки. Сначала запускается программа
POST, записанная в ПЗУ BIOS. Она тестирует память, тестирует и
инициализирует прочие компоненты компьютера и завершается ко-
ротким одиночным гудком. Если "вирус" проявляет себя уже на
этом этапе - он здесь ни при чем. Теоретически вирус может суще-
ствовать и в BIOS: предполагается, что первые вирусы на террито-
рию СССР "приехали" внутри болгарских ПЗУ (современные ПЗУ
часто не являются "постоянными запоминающими устройствами",
они предусматривают возможность перезаписи BIOS).
3. В присутствии хозяина (хозяйки) пытаемся вызвать необычное по-
ведение компьютера.
а) Идеально, если вирус (если это действительно он) самостоятель-
но извещает всех о своем присутствии, например, выводит на эк-
ран сообщение типа "I am VIRUS!".
Вирусы проявляют себя различными способами: проигрывают ме-
лодии, выводят на экран посторонние картинки и надписи, имити-
руют аппаратные сбои, заставляя дрожать экран.
Но, к сожалению,
чаще всего вирусы специально себя не обнаруживают. К антиви-
русным программам прилагаются каталоги с описаниями вирусов
(для AidsTest они хранятся в файле aidsvir.txt, для DrWeb -
в файле virlist.web). Наиболее полным является гипертекстовый
каталог avpve, входящий в состав антивирусного пакета Е. Каспер-
ского. В нем можно не только прочитать достаточно подробное
описание любого вируса, но и понаблюдать его проявления.
От настоящих вирусов следует отличать так называемые "студен-
ческие шутки", особенно широко распространенные на компью-
терах ВУЗов и школ. Как правило, это резидентные программы,
которые периодически производят напоминающие работу виру-
сов видео- и аудиоэффекты. В отличие от настоящих вирусов,
эти программы не умеют размножаться. Наличие такого рода
программ на "бухгалтерских" компьютерах маловероятно.
б) Очень часто сбои вызываются вирусами не преднамеренно,
а лишь в силу их несовместимости с программной средой, возни-
кающей из-за наличия в алгоритме вируса ошибок и неточнос-
тей. Если какая-либо программа "зависает" при попытке запуска,
существует очень большая вероятность, что именно она и зараже-
на вирусом. Если компьютер "виснет" в процессе загрузки (пос-
ле успешного завершения программы POST), то при помощи по-
шагового выполнения файлов config.sys и autoexec.bat (клавиша
F8 в DOS 6.x) можно легко определить источник сбоев.
4. Не перегружая компьютер, запускаем (можно прямо с винчестера)
антивирус, лучше всего DrWeb с ключом /hal. Вирус (если он есть)
попытается немедленно заразить DrWeb. Последний достаточно на-
дежно детектирует целостность своего кода и в случае чего выведет
сообщение "Я заражен неизвестным вирусом!" Если так и произой-
дет, то наличие вируса в системе доказано. Внимательно смотрим на
диагностические сообщения типа "Файл такой-то ВОЗМОЖНО за-
ражен вирусом такого-то класса" (СОМ, EXE, TSR, BOOT, MACRO
и т.п.).
Подозрения на ВООТ-вирус в 99% бывают оправданы.
Однажды DrWeb 3.20 "ругался" на ВООТ-сектор дискеты, "вылечен-
ной" AidsTest от вируса LzExe, поэтому антивирусным программам
тоже не всегда можно доверять. Наличие большого количества фай-
лов, предположительно зараженных вирусом одного и того же клас-
са, с большой достоверностью указывает на присутствие в компьюте-
ре неизвестного вируса. Но могут быть и исключения - DrWeb
версии 3.15 и ниже активно "ругался" на стандартные DOC-компо-
ненты WinWord 2.0.
Кроме того, DrWeb определяет наличие в памяти компьютера неиз-
вестных резидентных вирусов и Stealth-вирусов. Ошибки при их
определении (в последних версиях антивируса) достаточно редки.
Версия 3.15, не умеющая лечить вирус Kaczor, исправно заподозри-
ла наличие агрессивного резидента в памяти. Версия же 3.18, умею-
щая его лечить, в инфицированной системе вообще ничего не заме-
тила, а детектировала и вылечила вирус лишь при загрузке с чистой
дискеты. При этом нужно иметь в виду, что предупреждения типа
"Странная дата файла", единичные подозрения на СОМ-, ЕХЕ-ви-
русы и прочее вряд ли могут быть расценены как бесспорное дока-
зательство наличия вируса.
MACRO-вирусы живут исключительно в Windows и никакого нега-
тивного влияния на DOS-программы оказать не могут, за исключе-
нием того случая, когда они что-либо стерли в Windows-сеансе.
5. Нередко сбои бывают вызваны естественными причинами, никако-
го отношения к вирусам не имеющими.
а) Аппаратные сбои. Исключить эту возможность поможет загрузка
с чистой дискеты и запуск (с нее) диагностической программы
ndiags. Тестируем память, основную плату, порты и все осталь-
ное. Иногда достаточен простой внешний осмотр компьютера -
может быть, что-то неправильно подключено.
б) Нарушения в логической структуре диска. Загружаемся с чистой
дискеты и запускаем (с нее) ndd. Сначала просто отмечаем наличие
ошибок (перекрестных цепочек, потерянных кластеров и так далее).
Если ошибок очень много и подавляющее их число относится
к СОМ- и ЕХЕ-файлам, то ни в коем случае нельзя выполнять опе-
рацию исправления ошибок: это может быть DIR-подобный вирус,
и такое "лечение" диска может стать для многих программ фаталь-
ным. Если ошибки есть и их относительно немного, рискуем и ле-
чим диск. Вновь загружаемся с винчестера. Сбои пропали?
в) Конфликты между различными компонентами операционной си-
стемы и прикладными программами. Особенно "вредоносными"
являются дисковые драйверы-обманщики, активно видоизменяю-
щие (пусть и с благородными целями) информацию, считывае-
мую или записываемую на диск:
- дисковые кэш (SMARTDRV, NC_CASHE);
- упаковщики дисков (DblSpace, DrvSpace, Stacker);
- системы безопасности (антивирусные мониторы типа PROTECT,
HDPROT, ADM и прочие, системы разграничения доступа
DISKMON, DISKREET). Нередко сбоят устаревшие пристыковоч-
ные системы защиты от несанкционированного копирования, типа
NOTA или CERBERUS.
6. Наконец, самый интересный случай - вирус явно не обнаружен,
но подозрения на его наличие 'по-прежнему остаются. Достаточно
подробно эту тему изложил Е. Касперский в своей книге "Компью-
терные вирусы в MS-DOS", избранные фрагменты которой можно
найти в гипертекстовом каталоге avpve того же автора. Остается
только привести краткое изложение этих глав с уточнениями и за-
мечаниями (может быть, весьма спорными).
а) Обнаружение загрузочного вируса. Загружаемся с чистой дискеты
и, запустив DiskEditor, заглядываем в сектор 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. Его внешний вид для
сравнения можно найти как в вышеупомянутой книге Е. Касперс-
кого, так и на любой "чистой" машине. Итак, если вирус обнару-
жен, при помощи DiskEditor переписываем в файл зараженный
объект: MBR 0/0/1 (а лучше всю нулевую дорожку), boot 0/1/1
и все остальное. Желательно отправить этот комплект вирусоло-
гам. Копию, при желании, оставляем себе - для опытов.
б) Обнаружение файлового вируса. Нерезидентные файловые виру-
сы специально не скрывают своего наличия в системе. Поэтому
основным признаком заражения файла является увеличение его
длины, которое легко заметить даже в инфицированной операци-
онной системе. Резидентные вирусы могут скрывать изменение
длины файла (да и вообще наличие своего кода внутри файла-
жертвы), если они написаны по Stealth-технологии. Но при заг-
рузке с "чистой" дискеты это можно увидеть. Некоторые вирусы
не изменяют длину заражаемых программ, используя "пустые"
участки внутри файла программы или кластерный "хвост" фай-
ла, расположенный после последнего заполненного сектора.
В этом случае основной признак заражения - изменение конт-
рольной суммы байт файла.
Это легко обнаруживают антивиру-
сы-инспектора типа Adinf. В качестве крайней меры можно рас-
сматривать прямое изучение кода программ, подозрительных
с точки зрения наличия в них вируса. Одно из лучших программ-
ных средств для оперативного изучения кода вирусов - програм-
ма HackerView (hiew.exe by SEN). Но, поскольку "по умолча-
нию" компьютер чужой, hiew, td, softice, ida и подобных
программ на нем может просто не оказаться. Зато стандартный
отладчик debug присутствует точно. Загружаем подозреваемую
на наличие вируса программу (в чистой операционной системе)
в память при помощи команды debug <имя_программы>. Коман-
да и позволяет дизассемблировать фрагмент кода, команда d -
просмотреть его в шестнадцатеричном формате, команда g <ад-
рес> запускает программу на выполнение с остановом в указан-
ной точке, команда t обеспечивает пошаговую трассировку кода,
команда г отображает текущее содержимое регистров. Чтобы ви-
зуально распознать наличие вируса по коду, конечно, необходим
определенный опыт. Вот на что надо обращать особое внимание:
- Наличие в начале программы последовательности команд подоб-
ного типа крайне подозрительно:
Start:
call Metka
Metka: pop<r>
- Наличие в начале файла строк типа "PkLite", "Ь291"или "diet"
подразумевает обработку программы соответствующим упаковщиком;
если начало программы не содержит последовательности команд, ха-
рактерных для упаковщика, не исключен факт ее заражения.
- Программы, написанные на языках высокого уровня, часто содер-
жат в своем начале сегмент кода, затем сегмент данных. Наличие
еще одного сегмента кода, располагающегося в конце файла про-
граммы, весьма подозрительно.
- Подозрение вызывают расположенные в начале программы, напи-
санной на языке высокого уровня, фрагменты видоизменения соб-
ственного кода, вызовы DOS- или BIOS-прерываний и прочее. Же-
лательно визуально помнить характерные начала программ,
скомпилированных в той или иной системе программирования (на-
пример, начала программ, написанных на Turbo Pascal, содержат
большое количество дальних вызовов подпрограмм call xxxx:xxxx).
- Наконец, о наличии вируса могут свидетельствовать "посторон-
ние" строки типа "Eddie lives." внутри файла.
7. Ловля вируса "на живца". Итак, допустим, что наличие вируса в си-
стеме доказано одним из предложенных выше методов, и заражен-
ные вирусом объекты определены. Теперь можно начать изучение
вируса и, вслед за этим, попытаться удалить его с машины. Жела-
тельно послать образец вируса профессиональным вирусологам.
А для этого необходимо выделить вирус в чистом виде.
а) Выделение загрузочного вируса. Как уже говорилось выше, если
вирус заразил винчестер, необходимо при помощи программы
DiskEditor сохранить в файле образ зараженного объекта (напри-
мер, сектора 0/0/1 или всей нулевой дорожки). Но, как известно,
загрузочные вирусы только "живут" в системных областях вин-
честера, размножаются же они, заражая системные области дис-
кет. Поэтому смотрим на лицевую панель компьютера. Если
в наличии дисководы обоих типов (3.5" и 5.25"), то придется
/•
отформатировать 4 дискеты на 4 стандартных формата: 360Кбайт,
720Кбайт, 1.2Мбайт и 1.44Мбайт. Затем при помощи программы
DiskEditor внимательно рассмотрим и постараемся запомнить
внешний вид boot-секторов этих дискет (0/0/1), хотя бы первые
байты (естественно, все это делается на чистой машине). Встав-
ляем не защищенные от записи дискеты по очереди в дисководы
"больной" машины и (обязательно) обращаемся к ним: пытаемся
прочитать каталог, записать, прочитать и удалить какие-либо
файлы. Наконец, на чистой машине при помощи DiskEditor
вновь просматриваем сектор 0/0/1. Если на какой-либо дискете
он изменился, при помощи того же DiskEditor снимаем образ
всей дискеты в файл. Вирус пойман. Можно упаковать файл ка-
ким-нибудь архиватором и послать его вирусологу. Некоторые
хитрые вирусы хранят свое тело на дополнительной, специально
отформатированной дорожке, так называемом инженерном ци-
линдре дискеты. В этом случае без пакета копирования ключевых
дискет типа fda, teledisk или copymaster не обойтись.
б) Выделение резидентного вируса. Как известно, резидентный ви-
рус постоянно находится в памяти ПЭВМ, выбирая жертву для
заражения. Наиболее часто в качестве жертв выступают запуска-
емые программы. Однако файлы программ могут заражаться при
открытии, копировании на дискету или с нее (вирус OneHalf), во
время поиска при помощи DOS-функций FindFirst или FindNext.
Необходимо подобрать подходящего претендента на "конт-
рольное" заражение - небольшую программу простой структуры,
приманку. Некоторые вирусы пытаются распознать приманку
и отказываются от ее заражения. Не подходят для таких целей
слишком короткие программы или такие, большая часть которых
состоит из повторяющихся байт (например, 90h - код команды
NOP). В качестве приманки с большим успехом можно использо-
вать программы test.com и test.exe. Вот их исходные тексты
на языке Assembler.