Информационные технологииStfw.Ru 🔍

Базисный вирус С-648 (Vienna - Вена)

🕛 12.02.2009, 15:35
Неформальное название вируса связано с местом его первого обнаружения и, по-видимому, разработки. Формально вирус С-648 - файловый нерезидентный вирус, поражающий файлы с расширением СОМ. Функционирует на версиях MS DOS, начиная с 2.0.

Стратегия заражения - поиск файла с расширением СOM в каталогах, сцепленных в PATH. Заражение СOMMAND.COM выполняется так же, как и заражение любого другого COM-файла: никаких механизмов по поиску размещения командного процессора вирус не содержит. При заражении он дописывается в конец программы и одновременно вставляет в первые три байта COM-файла команду перехода на тело вируса. При этом размер файла увеличивается на 648 байтов, дата создания файла и атрибуты файла не меняются. Заражение выполняется однократно. Минимальный размер заражаемых файлов - 10 байтов (0Ah), максимальный - 64000 байтов (FA00h). Поскольку вирус определяет тип файла только по расширению, заражение EXE-файлов с расширением COM выполняется неправильно. Это приводит к потере работоспособности зараженных файлов указанного типа: их запуск обычно ведет к зависанию системы. После обработки такой программы фагом работоспособность восстанавливается.

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

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

Заражение выполняется стандартным способом - путем дописывания тела вируса в конец файла с простановкой в начало команды перехода на тело вируса. Как уже указывалось, при заражении вирус не проверяет тип файла, т.е. не является ли потенциальная жертва на самом деле файлом типа EXE (начинающимся с "MZ"), ошибочно или намеренно "замаскированным" под файл типа COM. Указанные файлы после заражения теряют работоспособность, которая может быть восстановлена путем выкусывания вируса.

Следует отметить, что защита файлов атрибутами READ ONLY и HIDDEN в MS DOS недостаточно эффективна, поскольку вирус легко изменяет эти атрибуты. Сначала вирус запоминает атрибуты, дату и время создания заражаемого файла. Затем сбрасывает атрибут READ ONLY, если он был установлен, открывает файл на запись и считывает текущее время. Если выданное по прерыванию 21h (функция 2С) содержимое регистра DH содержит в последних трех битах нули (т.е. системные часы показывают 0, 8, 16, 24, 32, 40, 48 или 56 с), то вирус предпринимает попытку уничтожения "потенциальной жертвы". Иначе выполняется попытка заражения. Другими словами, приблизительно в 12% пораженных вирусом программ уничтожены первые пять байтов.

Уничтожение файла выполняется путем записи в первые пять байтов команды перехода на подпрограмму перезагрузки BIOS (переход по адресу F000:FFF0). В дальнейшем при попытке выполнить "пораженную" программу вместо ее выполнения будет выполняться перезагрузка MS DOS. Если при этом программа входит в AUTOEXEC.BAT, то при загрузке произойдет зацикливание и с винчестера или данной системной дискеты загрузиться нельзя без корректировки AUTOEXEC.BAT.

При заражении, которое выполняется, только если хотя бы один из последних трех битов времени создания файла равен единице, вирус переписывает свой код в конец файла и заносит в первые три байта команду JMP для передачи ему управления. После этого С-648 восстанавливает дату, время и атрибуты уже зараженного файла, и управление передается программе-вирусоносителю. При восстановлении даты количество секунд устанавливается равным 62 (т.е. последним четырем битам присваивается значение 1111). По этому значению вирус отличает зараженные файлы от незараженных, что обеспечивает однократность заражения. Впрочем, при архивировании зараженных файлов поле секунд может теряться (количество секунд во времени создания файла не выдается ни одной командой MS DOS), что приведет к повторному заражению.

Поскольку вирус C-648 не проверяет, находится ли заражаемый или уничтожаемый файл на защищенной дискете или нет, то в этом случае выдается обычное сообщение операционной системы
Write protect error writing device <лог.имя.устр.> Abort, Retry, Ignore, Fail?

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

Исторические сведения. Данный вирус является первым вирусом европейской разработки, который получил распространение во всем мире. Помимо Вены, предполагаемым местом разработки может являться Гамбург (Германия). В качестве распространителя вируса также выступала книга Р.Бургера [Burger87], содержавшая исходный код вируса. В результате появились штаммы, отличавшиеся друг от друга только используемым ассемблером, что не наблюдалось ни для какого другого компьютерного вируса. Пик эпидемии в Западной Европе наблюдался в 1988 г. Фактически данный вирус был первым компьютерным вирусом, вызвавшим эпидемию в Европе, включая СССР. Об этом, в частности, свидетельствуют даты создания первых детекторов и фагов для этого вируса (среди них попадались немецкие, польские, чешские и австрийские программы).

В СССР вирус С-648 появился приблизительно в августе 1988 г., когда он был обнаружен в лаборатории Института программных систем (Переславль-Залесский). Возможно, он попал туда во время проведения институтом (совместно с ЮНЕСКО) Международного детского компьютерного летнего лагеря. Поскольку этот вирус к середине 1988 г. был уже довольно распространен в Европе, он несомненно завозился в СССР неоднократно, c различного рода новыми версиями программного обеспечения и компьютерными играми. В Киеве этот вирус появился в конце 1988 г., а наибольшее распространение получил примерно в апреле 1989 г., после чего его эпидемия пошла на убыль, что прежде всего связано с достаточной распространенностью средств защиты от этого вируса. Одним из переносчиков этого вируса в Киеве являлся адаптированный вариант программы SideKick (шестерка). К сожалению, по стране распространяется откомментированный исходный текст данного вируса, который, в частности, был включен В.Бончевым в его "вирусную" дискету.

Первыми антивирусными программами, попавшими в Киев и ориентированными на борьбу с этим вирусом, были зарубежные программы, распространявшиеся в виде случайного набора на дискете. Среди них наибольшей популярностью на начальном этапе пользовались детектор Diag и фаг Cure Д.Сопчека (Польша), DR_NO, Fag_OM и др. Отечественные средства появились несколько позднее, однако к концу 1989 г. основным средством борьбы стали такие отечественные полифаги, как Aidstest, Doctor, Vdeath и др.

Неформальные названия. Данный вирус имеет не менее десятка неформальных названий. Среди них: Vienna (Вена), DOS-62, Time Bomb (Часовая мина), Flea (Блоха), вирус перезагрузки, VHP-648, Restart (Рестарт - О.Г.Котик), Rebooter (Перезагрузчик), P-virus, Omega (Омега). Полидетектор Scan называет данный вирус "Vienna (DOS 62) Virus - Version A [Vienna]".

Методы и средства защиты. Для данного вируса имеется огромное количество программ типа детекторов и фагов разработки 1988-89 гг. При этом большинство из них не указывают, для какого типа вируса они предназначены. Пользоваться этими фагами ни при каких условиях не рекомендуется, т.к. у них отсутствует проверка на самозаражение, и они могут оказаться уже зараженными. Уничтоженные вирусом файлы, т.е. файлы, в которых вместо первых пяти байтов записана команда безусловного перехода на перезагрузку MS DOS (EA F0 FF 00 F0), можно восстановить, только если первые байты программы были предварительно записаны в справочном файле программой-ревизором (типа CRCDOS). В настоящее время все полидетекторы и все полифаги обрабатывают программы, зараженные данным вирусом. Автор рекомендует полифаг Aidstest. Защита винчестера от данного вируса облегчается при использовании программы Advanced Disk Manager (ADM), которая позволяет устанавливать защиту записи и для разделов винчестера. Вакцина от данного вируса может быть создана двумя способами. Во-первых, поскольку при поиске слова PATH вирус фактически ищет подстроку "PATH=", его можно "навести на ложный аэродром", вставив в AUTOEXEC.BAT строку вида
SET XPATH = Х:\DUMMY

до "настоящей" строки
SET PATH =

В приведенном примере DUMMY - несуществующий каталог, а первая (или несколько первых) букв в имени ловушки могут быть произвольными. В этом случае вирус "поймает" первую букву "P", входящую в слово XPATH и будет пытаться искать файлы на несуществующем диске Х и в несуществующем каталоге DUMMY. Аналогичную ловушку можно ставить и на COMSPEC, и хотя для данного вируса она не нужна, важно понимать, что данную идею "обмана" вирусов можно развить в нескольких направлениях. Другими словами, она может быть обобщена до некоторого универсального приема использования особенностей кодировки соответствующих частей вируса. Кроме того, целесообразно создать каталог BAT (имя может быть произвольным) и записать в него пакеты для вызова часто используемых программ в виде BATCH-файлов. В этом случае достаточно указать в PATH только этот каталог, что вполне безопасно, поскольку ни одного файла типа COM в нем нет. Этот способ, наряду с повышением безопасности, ускоряет вызов программ, позволяет настроить среду и передать стандартные параметры. Поэтому его стоит использовать как можно шире.

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

Следует отметить, что вместо "лечения" файлов зачастую проще и безопасней восстановить их с дистрибутивных копий.
Фрагмент дампа дрозофилы, зараженной вирусом C-648
+- команда передачи управления телу +-+ вируса
000: E90D009090909090 9090909090909090 .
+- ****** - J-сигнатура (звездочками поме | чены изменяемые вирусом байты)
010: 51BA0903FC8BF281 C60A00BF0001B903 Q...
020: 00F3A48BF2B430CD 213C007503E9C701 ...0.!<.u.
030: 06B42FCD21899C00 008C84020007BA5F ../.!._
040: 009003D6B41ACD21 06568E062C00BF00 .!.V..,...
050: 005E5681C61A00AC B90080F2AEB90400 .^V.
060: ACAE75EDE2FA5E07 89BC16008BFE81C7 ..u...^...
... .. .. .. .. .. .. .. .. . . . . . . . .
1E0: 00BA1F009003D6CD 211EB41A8B940000 ..!.
1F0: 8E9C0200CD211F59 33C033DB33D233F6 ..!.Y3.3.3.3.
200: BF00015733FFC2FF FF8000ED251B0121 ...W3.%..!
210: 002000909090E90D 002A2E434F4D001C . .*.COM..
220: 002006504154483D 473634382E434F4D . .PATH=G648.COM
230: 2020202020202020 2020202020202020
*** последующие строки идентичны предыдущей ***
260: 2020202020202020 033F3F3F3F3F3F3F .???????
270: 3F434F4D030500EE 0200000000201B01 ?COM... ..
280: 2100100000004736 34382E434F4D004D !..G648.COM.M
290: 000000EAF0FF00F0 ..
Фрагмент дампа дрозофилы, "уничтоженной" вирусом С-648

000: EAF0FF00F0909090 9090909090909090 .
... .. .. .. .. .. .. .. .. . . . . . . . .

Вирусы   Теги:

Читать IT-новости в Telegram
Информационные технологии
Мы в соцсетях ✉