Доклад: Методы борьбы с вирусами
Как исследовать алгоритм работы вируса
Ситуация, когда компьютер оказался заражен неизвестным вирусом,
встречается не очень часто, но полностью сбрасывать со счетов такую
возможность нельзя. Выше рассматривались способы обнаружения ви-
руса и выделения его в чистом виде. Сейчас переходим к исследованию
алгоритма работы файловых вирусов для успешной борьбы с ними.
1. Прежде чем перейти к рассмотрению этого вопроса, вспомним неко-
торые принципы функционирования MS DOS.
Структура СОМ- и ЕХЕ-программ. Вообще говоря, следует отли-
чать СОМ- и ЕХЕ-программы от СОМ- и ЕХЕ-файлов. Дело в том,
что в настоящее время расширение СОМ или ЕХЕ является просто
признаком (кстати, необязательным) запускаемой программы. Спо-
соб загрузки программы в память и ее запуска определяется опера-
ционной системой по внутреннему формату программы. Этот факт
часто не учитывали авторы первых вирусов, что приводило к унич-
тожению некоторых программ вместо их заражения.
СОМ-программа представляет собой часть кода и данных, которая
начинается с исполняемой команды и занимает не более 64Кбайт.
Например, такую структуру имеет командный процессор
COMMAND.СОМ операционной системы MSDOS до версии 6.22
включительно.
Структура ЕХЕ-программы гораздо сложнее. В начале файла
ЕХЕ-программы располагается заголовок (см. приложение). Поля
ReloCS и ExelP определяют расположение точки входа в программу,
поля ExeSP и ReloSS - расположение стека, поля PartPag
и PageCnt - размер корневого сегмента программы. Размер некоторых
6-1436
программ, вычисленный по полям PartPag и PageCnt, может не со-
впадать с реальным размером файла. Такие программы называются
"сегментированными" или "содержащими внутренние оверлеи".
Опытные авторы вирусов избегают заражать такие программы. Пос-
ле заголовка может размещаться специальная таблица, точное место
расположения которой определяется полем TablOff, а размер - по-
лем ReloCnt. В этой таблице хранятся адреса тех слов в коде про-
граммы, которые модифицируются операционной системой во время
загрузки программы. Например, просматривая файл программы при
помощи утилиты HackerView, можно видеть команду call
0000:1234h. В процессе загрузки программы MS-DOS подставит вме-
сто нулей нужный сегментный адрес, и все будет работать коррект-
но. Кстати, если в поле TablOff указано число 40h или больше,
то, скорее всего, это программа в формате Windows. Подобный
формат имеет, например, командный процессор Windows 95
COMMAND.COM. Несмотря на свое расширение, он имеет в нача-
ле знаменитые символы "MZ" и длину 95Кбайт.
2. Приступаем к исследованию конкретного файлового вируса и разра-
ботке алгоритма его лечения. В качестве жертвы "показательного
вскрытия" возьмем широко известный в начале 90-х годов вирус
SVC-1740. Выбор определился следующими обстоятельствами:
- это очень простой вирус с четкой структурой;
- он не содержит деструктивных функций;
- не содержит грубых ошибок в алгоритме;
- он стандартно заражает СОМ- и ЕХЕ-программы.
Запустив SVC вирус на своей машине, можно наблюдать следую-
щие его проявления.
а) В MS-DOS успели заразиться файлы ARCVIEW.EXE,
HIEW.EXE и LEX.EXE. В результате HackerView, проверяющий
целостность своего кода, отказался работать, сообщив: "HIEW
bad, work is aborted".
6) Windows 3.11 и Windows 95 сначала запустились корректно, но
затем продемонстрировали разноцветные горизонтальные полосы
в видеорежиме 800х600х256 (вирус не заражал какие-либо драй-
вера, просто в момент старта Windows в памяти находился ви-
русный обработчик прерывания INT 21h).
Излечение пришло после использования антивирусов:
DrWeb с: /сир /а1
и
AidsTest с: /f /g /q
3. При помощи ранее описанных методов заразим две приманки:
TEST.COM и TEST.EXE. Увеличение их длины на 1740 байт мож-
но увидеть только на "чистой" машине (Stealth-эффект). Несколь-
ко слов об инструментарии. Вообще говоря, выбор дизассемблеров
весьма широк. В свое время была широко известна программа
DisDoc. По признанию Е. Касперского, он активно пользуется инте-
рактивным дизассемблером IDA. Быстро просмотреть код програм-
мы позволяет утилита HackerView. Также возможно использование
любого отладчика. В данном случае для изучения кода зараженных
приманок использовался дизассемблер Sourcer v5.04. Несмотря на
отсутствие некоторых полезных опций и ошибки при дизассембли-
ровании (достаточно редкие), пользоваться программой удобно -
упакованная PkLite, она занимает на дискете всего 48Кбайт.
Итак, запускаем дизассемблер командой sr test-сом. На экране появи-
лась темно-синяя лицевая страница. Нажав клавишу "а", можно пе-
рейти на страницу опций. Рекомендуется установить опцию "а" -
обязательно дизассемблировать фрагмент программы, располагаю-
щийся после команд jmp/ret/iret - это позволяет получить ассемб-
лерный код тех фрагментов программ, в которые нет явного перехо-
да (процедуры обработки прерываний, скрытые подпрограммы и так
далее). Нажав Enter, вернемся на первую страницу. Запустим процесс
дизассемблирования нажатием клавиши "g". В зависимости от про-
изводительности компьютера, процесс дизассемблирования длится от
нескольких секунд до нескольких минут. Для грубой оценки размера
листинга можно принять, что один килобайт кода соответствует деся-
ти-пятнадцати килобайтам текста. 6740 байт зараженной приманки
дают 96Кбайт текста+файл test.sdf. Этот очень интересный файл хра-
нит в текстовом виде как опции, использованные при дизассемблиро-
вании, так и параметры полученного текста (размещение фрагментов
кода и данных, место расположения символических имен и прочее).
Если изменить эти параметры, переименовать файл в test.def и пере-
дать его Sourcer в командной строке в качестве параметра, то дизас-
семблер будет работать в соответствии с новыми инструкциями. Ана-
логичную операцию проделаем для файла testexe.
б*
4. Займемся анализом полученного листинга. Поверхностно изучая за-
раженные приманки, видим:
- файлы увеличили свою длину на 1740 байт;
- в их конце явно видны посторонние коды;
- изменилось время создания файлов, точнее, изменилось количе-
ство секунд - оно стало равным 60;
- в начале файла test.coM появилась команда jmp;
- в заголовке файла test.exe изменились значения полей ReloCS,
ExelP, ExeSP, ReloSS, PartPag и PageCnt.
Итак.
а) В начале вирусного кода содержится последовательность команд
вида: