основанными на контекстном поиске; с (cipher) -- шифровка части
программы, исключая часть инсталлятора; d (antiDebugging
tricks) -- защита от трассировки; e (enter point) -- сохранение
точки входа в EXE-программах; f (fag) -- самоизлечивается при по-
пытке просмотра зараженной программы при резидентном вирусе;
h (hook) -- не обнаруживается сторожами типа FluShot+, контролирую-
щими состояние векторов прерывания; i (increment) -- имплантация
тела в программу без увеличения размеров файла; j (jump) -- cохра-
нение первого перехода в COM-файлах; l (length) -- маскировка уве-
личения длины зараженных файлов, путем подмены значения соответст-
вующего поля элемента оглавления при операциях FindFirst и
FindNext (21-11h и 21-12h) с предварительным вычитанием длины ви-
руса (при этом утилиты, которые не используют указанные функции
DOS, работая с каталогами непосредственно (например Norton
Commander), будут показывать увеличенную длину, а команда DIR --
уменьшенную); m (memory map) -- не обнаруживается системными сред-
ствами просмотра списка резидентных программ; о (overlay) -- сег-
ментация тела вируса на несколько подгружаемых частей; р
(polyinfection) -- заражение как файлов, так и исполняемых систем-
ных блоков (бутсектор, MBR); r (redirection) -- перехват и модифи-
кация дисковых операций с целью скрыть изменения в исполняемых
блоках (бутсектор, MBR); s (space) -- корректировка резидентным ви-
русом общего объема свободной памяти на диске с целью скрыть его
изменение в результате заражения вирусом программ; t (text) -- шиф-
ровка текстовых сообщений.
Здесь приведены только приемы, которые уже были использованы в
том или ином существующем вирусе, однако могут существовать и дру-
гие эффективные приемы маскировки. Конечно, граница между указан-
ными двумя поколениями условна и некоторые исследователи относят к
стелс-вирусам любой вирус, который использует хотя бы два из при-
веденных выше методов маскировки. Автору кажется, что критерий
должен быть несколько жестче. Ниже приведены описания двух виру-
сов, которые, по мнению автора, можно отнести к новому поколению.
5.7.1. RCE-04096 (Frodo -- Фродо, 4096)
Данный вирус принято считать первым стелс-вирусом. RCE-04096 был
разработан, по-видимому, в Израиле в конце 1989 г. Название "Фро-
до" связано с тем, что вирус содержит бутсектор в своем коде, хотя
он никогда не записывает свое тело в бутсектор. При записи этого
бутсектора в бутсектор дискеты и попытке загрузки выдается "пла-
катный текст"
FRODO
LIVES
("Фродо живет" или "Фродо жив"), выполненный буквами 8*5,
состоящими из символов псевдографики. По данным П.Хоффман, 22 сен-
тября это день рождения героев известной сказочной трилогии
Дж.Р.Толкиена Властелин колец" (Lord Of The Rings) -- Бильбо и
Фродо Баггинов (Bilbo and Frodo Baggin) [Толкиен83].
Формально данный вирус относится к файловым резидентным вирусам.
Заражает как COM-, так и EXE-файлы (включая оверлеи) при запуске
на выполнение или закрытии файла (функции 21-4B или 21-3E). Файлы
заражаются однократно. В качестве признака заражения используется
значение поля года даты создания файла. Для зараженных файлов ви-
рус изменяет поле года создания файла, увеличивая его на сто, на-
пример с 1990 до 2090. В дальнейшем это значение используется для
определения зараженности файла. Возможно заражение файлов, содер-
жащих данные. Приращение длины при заражении всегда равно 4096
байт, что объясняет такие неформальные названия, как 4096 и 4K.
Заражает COM-файлы длиной до 61440 (F000h) байт. При заражении
изменяет первые шесть байт файла. Выполняется выравнивание до па-
раграфа. При этом приращение длины файла равно ровно 4096 байт.
Командный процессор заражается как обычный COM-файл.
Заражаемые EXE-файлы могут иметь любую длину. При заражении из-
меняется заголовок. Тело вируса дописывается в хвост файла. Длина
зараженного EXE-файла увеличивается ровно на 4096 байт.
При инсталляции находит по COMSPEC и заражает COMMAND.COM. Затем
загружает себя в старшие адреса памяти, уменьшая размер на 6К. При
этом, возможно, каким-то образом маскирует уменьшение системной
памяти на 6К. Для определения положения обработчиков 13 и 21 пре-
рываний вирус проходит при инсталляции соответствующую часть кода
с флагом трассировки (как музыкальные самоеды). Для получения уп-
равления по 21 прерыванию вирус использует сплайсинг ("врезку" в
обработчик прерывания). Это первый вирус, использующий сплайсинг
для получения управления по прерыванию 21.
Тело вируса располагается в оперативной памяти в старших адре-
сах. Память резервируется путем манипуляций с MCB. В дальнейшем
положение тела может измениться: вирус способен перемещать свое
тело в область младших адресов. RCE-04096 обрабатывает порядка 20
(двадцати !) функций MS DOS (Create, FindFirst, FindNext, Read,
Write, Lseek, Open, Close, Exec и некоторые другие).
При наличии вируса в оперативной памяти приращение длины зара-
женных файлов маскируется и не видно при просмотре оглавления ко-
мандой DIR. Этот эффект обеспечен за счет перехвата операций, ис-
пользуемых командой DIR для считывания элементов каталога и вычи-
тания 4К из длины зараженных файлов. Первым такой метод маскировки
был использован в вирусе RCE-02000. Более того RCE-04096 маскиру-
ет и изменение заголовка.
Любая попытка доступа к зараженному файлу, за исключением выпол-
нения на зараженной машине ведет к "выкусыванию" тела вируса из
зараженного файла. Например, при чтении зараженного файла или за-
грузке его в память, вирус "подставляет" файл в незараженном виде.
При открытии файла для записи вирус "выкусывает" свое тело из за-
раженного файла (поскольку запись в файл может повредить тело ви-
руса или "загнать" его в середину файла), а затем снова заражает
при закрытии.
Описанный механизм обеспечивает обход детектирования заражения с
помощью ревизоров. Таким образом, данный вирус является первым ви-
русом, обходящим данный класс антивирусных программ. Если при ко-
пировании выполняемого файла создается файл с расширением, не ис-
пользуемым для исполняемых файлов (COM, EXE, BIN, SYS и т.д.), то
вирус "выкусывает" свое тело при копировании.
При кодировании вируса использованы достаточно сложные приемы,
затрудняющие трассировку. Из-за ошибки при кодировании вирус по-
вреждает некоторые файлы при заражении: после заражения не обнов-
ляет информацию в заголовке файла. При запуске таких файлов MS DOS
выдает диагностическое сообщение "ERROR in EXE File". Такие по-
вреждения можно устранить запустив CHKDSK/F, а затем соответствую-
щий фаг. Как уже отмечалось, вирус иногда заражает файлы данных.
Они могут быть восстановлены с помощью соответствующего фага.
Фаза проявления в имеющихся экземплярах вируса стерта в связи с
недостаточным размером памяти, отведенным под стек. Учитывая нали-
чие в теле вируса загрузчика, выдающего сообщение "Фродо жив", ло-
гично предположить, что она связана с записью в бутсектор этого
загрузчика. В результате первая же перезагрузка приведет к выдаче
на экран приведенного выше сообщения. Однако реально после 22 сен-
тября 1990 запуск любой зараженной программы вызывает зависание
операционной системы (вирус зацикливается), создавая впечатление
машинной неисправности. По данным П.Хоффман вирус также медленно
"сращивает" файлы на диске. Для этой цели вирус манипулирует FAT,
изменяя количество свободных секторов. Пользователь, использующий
команду CHKDSK/F, обнаруживает, что файлы имеют потерянные класте-
ры или кластеры, принадлежащие двум файлам одновременно. Это про-
явление выглядит как машинная неисправность.
Все авторы публикаций, включающих описание данного вируса, схо-
дятся в том, что вирус написан техно-крысой, хорошо знающей "внут-
ренности" операционной системы и алгоритмы работы антивирусных
программ. Странно, что программист такого уровня не нашел ничего
лучшего для приложения собственных способностей, как написание ви-
руса.
Исторические замечания. Вирус RCE-4096 был обнаружен в Израиле в
октябре 1989 г. В СССР обнаружен Д.Н.Лозинским в августе 1990 г.
Существует штамм 4096-B, аналогичный описанному, но использующий
шифровку своего тела.
Неформальные названия. Среди неформальных названий следует
отметить следующие: 4096, 4K, 100 Years virus ( 100 лет), Century
virus (столетие), Hiding (Прячущийся), IDF Virus (ИДФ-вирус),
Stealth Virus (Стелс вирус).
Методы и программные средства защиты. Данный вирус диагностиру-
ется полидетектором SCAN. Для визуального обнаружения можно ис-
пользовать год создания файла (у зараженных файлов увеличен на
100). Для этой цели можно просмотреть оглавление с помощью Turbo
C++ (единственная известная автору оболочка, показывающая год
создания файла полностью) или дамп кластеров с каталогами с по-
мощью Norton Utilities (в DIR и в Norton Commander видны только
две последние цифры года). Рекомендуемые фаги приведены в прил.1.
При отсутствии фага для "выкусывания" можно использовать упоминав-
шийся эффект, связанный с тем, что при копировании выполняемого
файла в файл с расширением, отличным от исполняемых (COM, EXE,
BIN, SYS и т.д.) резидентный вирус выполняет "выкусывание" своего
тела из файла. Для этой цели при резидентном вирусе можно свернуть
зараженные файлы в архив, а затем после перезагрузки с защищенной
дискеты, содержащей эталонную операционную систему, скопировать их
обратно. Другим вариантом является копирование с переименованием
расширения, например EXE в TTT, а COM в YYY.
Неясно, является ли увеличение года достаточным признаком зара-
женности файла, или вирус проверяет еще какие-то поля. Если этот
признак достаточен, то возможна пассивная вакцинация файлов путем
увеличения значения года создания на 100, как это делалось с се-
кундами создания файла при вакцинации от вируса C-648. Кроме того,
возможно создание резидентной вакцины, обеспечивающей увеличение
значения поля года при считывании элемента каталога.
5.7.2. Вирус RC-0-512 (512, 666)
Данный вирус имеет размер, совпадающий с типичным размером сек-
тора в MS DOS и использует специальный метод размножения, напоми-
нающий метод размножения бутовых вирусов. Вирус содержит текстовую
строку 666 в конце тела, поэтому его иногда называют 666. В коде
вируса используется ряд недокументированных функций MS DOS. Фор-
мально RC-0-512 представляет первый сегментированный резидентный
файловый вирус. В нем используется несовершенство распределения
дисковой памяти в MS DOS: размер кластера обычно превышает размер
сектора как минимум в два раза и поэтому можно использовать неза-
полненные "хвосты" в последнем секторе для хранения части тела ви-
руса (модификация первых команд остается обязательной, иначе вирус
не сможет получить управления). Фактически эту схему можно рас-
сматривать как попытку перенесения схемы бутового вируса на файло-
вый вирус. Как известно, бутовый вирус, в отличие от файлового,
сегментирован и состоит из головы и хвоста. Голова находится в
бутсекторе, а хвост храниться где-то в другом месте и его загрузка
выполняется головой. Аналогично вирус RC-0-512 рассматривает пер-
вый сектор COM-файла как бутсектор и заменяет его своим телом, а
хвост, представляющий собой оригинальный первый сектор зараженной
программы, прячет в неиспользуемый сектор последнего кластера.
Очевидно, что вирус может заражать на дискете только те файлы, у
которых второй сектор последнего кластера полностью свободен. На
винчестере возможно заражение большинства COM-файлов, так как раз-