Глава 2. Классификация компьютерных вирусов

Вирусы можно разделить на классы по следующим основным признакам:

— среда обитания;

— операционная система (ОС);

— особенности алгоритма работы;

— деструктивные возможности. В зависимости от среды обитания вирусы можно разделить на:

— файловые;

— загрузочные;

— макровирусы;

— сетевые.

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

Загрузочные вирусы записывают себя либо в загрузочный сектор диска (boot-сектор), либо в сектор, содержащий системный загрузчик винчестера (Master Boot Record), либо меняют указатель на активный boot-сектор.

Макровирусы заражают файлы-документы и электронные таблицы нескольких популярных редакторов.

Сетевые вирусы используют для своего распространения протоколы или команды компьютерных сетей и электронной почты.

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

Заражаемая операционная система (вернее, ОС, объекты которой подвержены заражению) является вторым уровнем деления вирусов на классы. Каждый файловый или сетевой вирус заражает файлы какой-либо одной или нескольких ОС — DOS, Windows, Win95/NT, OS/2 и т. д. Макровирусы заражают файлы форматов Word, Excel, Office 97. Загрузочные вирусы также ориентированы на конкретные форматы расположения системных данных в загрузочных секторах дисков.

Среди особенностей алгоритма работы вирусов выделяются следующие:

— резидентность;

— использование "стелс"-алгоритмов;

— самошифрование и полиморфичность;

— использование нестандартных приемов.

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

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

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

Использование "стеле"-алгоритмов позволяет вирусам полностью или частично скрыть себя в системе. Наиболее распространенным "стелс"-алго-ритмом является перехват запросов ОС на чтение-запись зараженных объектов и затем "стелс"-вирусы либо временно лечат их, либо подставляют вместо себя незараженные участки информации. В случае макровирусов наиболее популярный способ — запрет вызовов меню просмотра макросов. Один из первых файловых "стелс"-вирусов — вирус Frodo, первый загрузочный "стелс"-вирус — Brain.

Самошифрование и полиморфичность используются практически всеми типами вирусов для того, чтобы максимально усложнить процедуру обнаружения вируса. Полиморфик-вирусы (polymorphic) достаточно трудно поддаются обнаружению; они не имеют сигнатур, т. е. не содержат ни одного постоянного участка кода. В большинстве случаев два образца одного и того же полиморфик-вируса не будут иметь ни одного совпадения. Это достигается шифрованием основного тела вируса и модификациями программы-расшифровщика.

Различные нестандартные приемы часто используются в вирусах для того, чтобы как можно глубже спрятать себя в ядре ОС (как это делает вирус "ЗАРАЗА"), защитить от обнаружения свою резидентную копию (вирусы TPVO, Trout2), затруднить лечение от вируса (например, помещают свою копию в Flash-BIOS) и т. д.

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

— безвредные, т. е. никак не влияющие на работу компьютера (кроме уменьшения свободной памяти на диске в результате своего распространения);

— неопасные, влияние которых ограничивается уменьшением свободной памяти на диске и графическими, звуковыми и прочими эффектами;

— опасные вирусы, которые могут привести к серьезным сбоям в работе компьютера;

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

Но даже если в алгоритме вируса не найдено ветвей, наносящих ущерб системе, этот вирус нельзя с полной уверенностью назвать безвредным, так как проникновение его в компьютер может вызвать непредсказуемые и порой катастрофические последствия. Ведь вирус, как и всякая программа, имеет ошибки, в результате которых могут быть испорчены как файлы, так и сектора дисков (например, вполне безобидный на первый взгляд вирус DenZuk довольно корректно работает с 360-килобайтовыми дискетами, но может уничтожить информацию на дискетах большего объема). До сих пор попадаются вирусы, определяющие СОМ или ЕХЕ не по внутреннему формату файла, а по его расширению. Естественно, что при несовпадении формата и расширения имени файл после заражения оказывается неработоспособным. Возможно также "заклинивание" резидентного вируса и системы при использовании новых версий DOS, при работе в Windows или с другими мощными программными системами. И так далее.

2.1. Файловые вирусы

К данной группе относятся вирусы, которые при своем размножении тем или иным способом используют файловую систему какой-либо (или каких-либо) ОС.

Файловые вирусы могут внедряться практически во все исполняемые файлы всех популярных ОС. На сегодняшний день известны вирусы, поражающие все типы выполняемых объектов стандартной DOS: командные файлы (ВАТ), загружаемые .драйверы (SYS, в том числе специальные файлы IO.SYS и MSDOS.SYS) и выполняемые двоичные файлы (ЕХЕ, СОМ). Существуют вирусы, поражающие исполняемые файлы других ОС — Windows З.х, Windows 95/NT, OS/2, Macintosh, Unix, включая VxD-драйверы Windows З.х и Windows 95.

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

По способу заражения файлов вирусы делятся на overwriting, паразитические (parasitic), компаньон-вирусы (companion), link-вирусы, вирусы-черви и вирусы, заражающие объектные модули (OBJ), библиотеки компиляторов (LIB) и исходные тексты программ.

2.1.1. Overwriting-вирусы

Данный метод заражения является наиболее простым : вирус записывает свой код вместо кода заражаемого файла, уничтожая его содержимое. Естественно, что при этом файл перестает работать и не восстанавливается. Такие вирусы очень быстро обнаруживают себя, так как ОС и приложения довольно быстро перестают работать. Мне не известно ни одного случая, когда подобного типа вирусы были бы обнаружены "в живом виде" и стали причиной эпидемии.

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

2.1.2. Parasitic-вирусы

К паразитическим относятся все файловые вирусы, которые при распространении своих копий обязательно изменяют содержимое файлов, оставляя сами файлы при этом полностью или частично работоспособными. Основными типами таких вирусов являются вирусы, записывающиеся в начало файлов (prepending), в конец файлов (appending) и в середину файлов (inserting). В свою очередь, внедрение вирусов в середину файлов происходит различными методами — путем переноса части файла в его конец или внедрения в заведомо неиспользуемые данные файла (cavity-вирусы).

Внедрение вируса в начало файла. Известны два способа внедрения паразитического файлового вируса в начало файла. Первый способ (см. рис. 2.1) заключается в том, что вирус переписывает начало заражаемого файла в его конец, а сам копируется на освободившееся место. При заражении файла вторым способом (см. рис. 2.2) вирус создает в оперативной памяти свою копию, дописывает к ней заражаемый файл и сохраняет полученную конкатенацию на диск. Некоторые вирусы при этом дописывают в конец файла блок дополнительной информации (например, вирус Jerusalem по этому блоку отличает зараженные файлы от незараженных).

Рис. 2.1 Внедрение вируса  начало файла первым способом

21.jpg

Рис. 2.2 Внедрение вируса в начало файла вторым способом

22.jpg

Внедрение вируса в начало файла применяется в подавляющем большинстве случаев при заражении ВАТ- и СОМ-файлов в системе DOS. Известно несколько вирусов, записывающих себя в начало ЕХЕ-файлов операционных систем DOS, Windows и даже Linux. При этом вирусы, чтобы сохранить работоспособность программы, либо лечат зараженный файл, повторно запускают его, ждут окончания его работы и снова записываются в его начало (иногда используется временный файл, в который записывается обезвреженный файл), либо восстанавливают код программы в памяти компьютера и настраивают необходимые адреса в ее теле (т. е. дублируют работу ОС).

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

В DOS СОМ-файле в большинстве случаев это достигается изменением его первых трех (или более) байтов на коды инструкции JMP Loc_Virus (или в более общем случае — на коды программы, передающей управление на тело вируса). DOS ЕХЕ-файл переводится в формат СОМ-файла и затем заражается как СОМ-файл либо модифицируется заголовок файла. В заголовке DOS ЕХЕ-файла изменяются значения стартового адреса (CS:IP) и длины выполняемого модуля (файла), реже — регистры — указатели на стек (SS:SP), контрольная сумма файла и т. д. В выполняемых файлах Windows и OS/2 (NewEXE — NE, РЕ, LE, LX) изменяются поля в NewEXE-заголовке. Структура этого заголовка значительно сложнее заголовка DOS ЕХЕ-файлов, поэтому изменению подлежит большее число полей — значение стартового адреса, количество секций в файле, характеристики секций и т. д. Дополнительно к этому длины файлов перед заражением могут увеличиваться до значения, кратного параграфу (16 байт) в DOS или секции в Windows и OS/2 (размер секции зависит от параметров заголовка ЕХЕ-файла).

Рис. 2.3 Внедрение вируса в конец файла

23.jpg

Вирусы, внедряющиеся в DOS SYS-файлы, приписывают свои коды к телу файла и модифицируют адреса программ стратегии (Strategy) и прерывания (Interrupt) заражаемого драйвера (встречаются вирусы, изменяющие адрес только одной из программ). При инициализации зараженного драйвера (см. рис. 2.4) вирус перехватывает соответствующий запрос ОС, передает его драйверу, ждет ответа на этот запрос, корректирует его и остается в одном блоке в оперативной памяти вместе с драйвером. Такой вирус может быть чрезвычайно опасным и живучим, так как он внедряется в оперативную память при загрузке DOS раньше любой антивирусной программы, если она, конечно, тоже не является драйвером.

Рис. 2.4

Зараженный системный драйвер

24.jpg

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

Рис. 2.5 Зараженный системный драйвер в виде цепочки драйверов

25.jpg

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

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

Второй метод — cavity, при котором вирус записывается в заведомо неиспользуемые области файла. Вирус может быть скопирован в незадействованные области таблицы настройки адресов DOS ЕХЕ-файла (см. BootExe) или заголовок NewEXE-файла (Win95.Murkry), в область стека файла СОМ-MAND.COM (Lehigh) или в область текстовых сообщений популярных компиляторов (NMSG). Некоторые вирусы заражают только те файлы, которые содержат блоки, заполненные каким-либо постоянным байтом, при этом вирус записывает свой код вместо такого блока.

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

Вирусы без точки входа. Отдельно следует отметить довольно незначительную группу вирусов, не имеющих точки входа (ЕРО-вирусы — Entry Point Obscuring viruses). К ним относятся вирусы, не записывающие команд передачи управления в заголовок СОМ-файлов (JMP) и не изменяющие адрес точки старта в заголовке ЕХЕ-файлов. Такие вирусы записывают команду перехода на свой код в какое-либо место в середину файла и получают управление не непосредственно при запуске зараженного файла, а при вызове процедуры, содержащей код передачи управления на тело вируса. Причем выполняться эта процедура может крайне редко (например, при выводе сообщения о какой-либо специфической ошибке). В результате вирус может долгие годы "спать" внутри файла и выскочить на свободу только при некоторых ограниченных условиях.

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

Первый способ — поиск в файле последовательности стандартного кода Си/Паскаль (вирусы Lucretia, Zhengxi). Эти вирусы ищут в заражаемых файлах стандартные заголовки процедур Си/Паскаль и записывают вместо них свой код.

Второй способ — трассировка или дизассемблирование кода файла (CNTV, Midlnfector, NexivDer). Такие вирусы загружают файл в память, затем трассируют или дизассемблируют его и в зависимости от различных условий выбирают команду (или команды), вместо которой записывается код перехода на тело вируса.

Третий способ применяется только резидентными вирусами — при запуске файла они контролируют какое-либо прерывание (чаще — INT 21h). Как только заражаемый файл вызывает это прерывание, вирус записывает свой код вместо команды вызова прерывания (см., например, Avatar. Positron, Markiz).

2.1.3. Companion-вирусы

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

Наиболее распространены компаньон-вирусы, использующие особенность DOS первым выполнять .СОМ-файл, если в одном каталоге присутствуют два файла с одним и тем же именем, но различными расширениями имени — .СОМ и .ЕХЕ. Такие вирусы создают для ЕХЕ-файлов файлы-спутники, имеющие то же самое имя, но с расширением .СОМ, например, для файла XCOPY.EXE создается файл XCOPY.COM. Вирус записывается в СОМ-файл и никак не изменяет ЕХЕ-файл. При запуске такого файла DOS первым обнаружит и выполнит СОМ-файл, т. е. вирус, который затем запустит и ЕХЕ-файл. Некоторые вирусы используют не только вариант СОМ-ЕХЕ, но также и ВАТ-СОМ-ЕХЕ.

Вторую группу составляют вирусы, которые при заражении переименовывают файл, давая ему какое-либо другое имя, запоминают его (для последующего запуска файла-хозяина) и записывают свой код на диск под именем заражаемого файла. Например, файл XCOPY.EXE переименовывается в XCOPY.EXD, а вирус записывается под именем XCOPY.EXE. При запуске управление получает код вируса, который затем запускает оригинальный XCOPY, хранящийся под именем XCOPY.EXD. Интересен тот факт, что данный метод работает, наверное, во всех ОС — подобного типа вирусы были обнаружены не только в DOS, но и в Windows, и OS/2.

В третью группу входят так называемые Path-companion-вирусы, которые "играют" на особенностях DOS PATH. Они либо записывают свой код под именем заражаемого файла, но "выше" на один уровень PATH (DOS, таким образом, первым обнаружит и запустит файл-вирус), либо переносят файл-жертву выше на один подкаталог и т. д.

Возможно существование компаньон-вирусов, использующих иные оригинальные идеи или особенности других ОС.

2.1.4. Link-вирусы

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

На сегодняшний день известен единственный тип link-вирусов — вирусы семейства Dir_II. При заражении системы они записывают свое тело в последний кластер логического диска. При заражении файла вирусы корректируют лишь номер первого кластера файла, расположенный в соответствующем секторе каталога. Новый начальный кластер файла будет указывать на кластер, содержащий тело вируса. Таким образом, при заражении файлов их длина и содержимое кластеров с этими файлами не изменяются, а на все зараженные файлы на одном логическом диске будет приходиться только одна копия вируса.

До заражения данные каталога хранят адрес первого кластера файла (см. рис. 2.6):

26.jpg

Рис. 2.6 Каталог до заражения

После заражения данные каталога указывают на вирус, т. е. при запуске файла управление получают не файлы, а вирус (см. рис. 2.7):

Рис 2.7 Каталог после заражения

27.jpg

2.1.5. Файловые черви

Файловые черви (worms) являются в некотором смысле разновидностью компаньон-вирусов, но при этом никоим образом не связывают свое присутствие с каким-либо выполняемым файлом. При размножении они всего лишь копируют свой код в какие-либо каталоги дисков в надежде, что эти новые копии будут когда-либо запущены пользователем. Иногда эти вирусы дают своим копиям "специальные" имена, чтобы подтолкнуть пользователя на запуск своей копии, например INSTALL.EXE или WINSTART.BAT.

Существуют вирусы-черви, использующие довольно необычные приемы, например, записывающие свои копии в архивы (ARJ, ZIP и пр.). К таким вирусам относятся "ArjVirus" и "Winstart". Некоторые вирусы записывают команду запуска зараженного файла в ВАТ-файлы (см., например, "Worm.Info").

Не следует путать файловые вирусы-черви с сетевыми червями. Первые используют только файловые функции какой-либо операционной системы, вторые же при своем размножении пользуются сетевыми протоколами.

2.1.6. OBJ-, LIB-вирусы и вирусы в исходных текстах

Вирусы, заражающие библиотеки компиляторов, объектные модули и исходные тексты программ, достаточно экзотичны и практически не распространены. Всего их около десятка. Вирусы, заражающие OBJ- и ЫВ-файлы, записывают в них свой код в формате объектного модуля или библиотеки.

Зараженный файл при этом не является выполняемым и не способен на дальнейшее распространение вируса в своем текущем состоянии. Носителем же "живого" вируса становится СОМ- или ЕХЕ-файл, получаемый в процессе компоновки зараженного OBJ/LIB-файла с другими объектными модулями и библиотеками. Таким образом, вирус распространяется в два этапа: на первом заражаются OBJ/LIB-файлы, на втором (компоновка) получается работоспособный вирус.

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

2.1.7. Алгоритм работы файлового вируса

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

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

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

— возвращает управление основной программе (если она есть). Паразитические вирусы при этом либо восстанавливают программу (но не файл) в исходном виде (например, у СОМ-программы восстанавливается несколько первых байтов, у ЕХЕ-программы вычисляется истинный стартовый адрес, у драйвера восстанавливаются значения адресов программ стратегии и прерывания), либо лечат файл, выполняют его, а затем снова заражают. Компаньон-вирусы запускают на выполнение своего "хозяина", вирусы-черви и overwriting-вирусы возвращают управление DOS.

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

2.1.8. Особые случаи

Внедрение вируса в DOS СОМ- и ЕХЕ-файлы. Выполняемые двоичные файлы DOS имеют форматы СОМ или ЕХЕ, различающиеся заголовком и способом запуска программ на выполнение. Расширение имени файла (.СОМ или .ЕХЕ) не всегда соответствует действительному формату файла, что, правда, никак не влияет на работу программы. Файлы СОМ и ЕХЕ заражаются по-разному, следовательно, вирус должен отличать файлы одного формата от другого. Вирусы решают эту задачу двумя способами: одни анализируют расширение имени файла (.СОМ, .ЕХЕ), другие — заголовок файла. Первый способ далее будет называться заражением .СОМ-файлов (или .ЕХЕ-файлов), второй — заражением СОМ-файлов (или ЕХЕ-файлов).

В большинстве случаев вирус инфицирует файл корректно, т. е. по информации, содержащейся в теле вируса, можно полностью восстановить зараженный файл. Но, как и большинство программ, они часто содержат незаметные с первого взгляда ошибки. Из-за этого даже вполне корректно написанный вирус может необратимо испортить файл при его заражении. Например, вирусы, различающие типы файлов по расширению имени (.СОМ, .ЕХЕ), очень опасны, так как портят файлы, у которых расширение имени не соответствует внутреннему формату.

Один из наиболее часто встречающихся примеров некорректного заражения файла — COMMAND.СОМ в Windows 95. Этот файл, по сути, является ЕХЕ-файлом, более того, имеет размер более 90 Кб, что невозможно для СОМ-файла. Поэтому вирусы, которые различают СОМ/ЕХЕ-файлы по расширению имени и не проверяют длины заражаемых СОМ-файлов (например, Junkie), портят такой COMMAND.СОМ, и он становится неработоспособным.

Примитивная маскировка. При инфицировании файла вирус может производить ряд действий, маскирующих и ускоряющих его распространение. К подобным действиям можно отнести обработку атрибута read-only, снятие его перед заражением и восстановление после. Многие файловые вирусы считывают дату последней модификации файла и восстанавливают ее после заражения. Для маскировки своего распространения некоторые вирусы перехватывают прерывание DOS, возникающее при обращении к защищенному от записи диску (INT 24h), и самостоятельно обрабатывают его.

Скорость распространения. Говоря про файловые вирусы, необходимо отметить такую их черту, как скорость распространения. Чем быстрее распространяется вирус, тем вероятнее возникновение эпидемии этого вируса. Чем медленнее распространяется вирус, тем сложнее его обнаружить (если, конечно, этот вирус пока неизвестен антивирусным программам). Понятия "быстрого" и "медленного" вируса (Fast infector, Slow infector) являются достаточно относительными и используются только как характеристика вируса при его описании.

Нерезидентные вирусы часто являются медленными — большинство из них при запуске заражает один или два-три файла и не успевает заполонить компьютер до запуска антивирусной программы (или появления новой версии антивируса, настроенной на данный вирус). Существуют, конечно, нерезидентные быстрые вирусы, которые при запуске ищут и заражают все выполняемые файлы, однако такие вирусы очень заметны: при запуске каждого зараженного файла компьютер некоторое (иногда достаточно длительное) время активно работает с винчестером, что демаскирует вирус.

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

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

2. 2. Загрузочные вирусы

Загрузочные вирусы заражают загрузочный (boot) сектор гибкого диска и boot-сектор или Master Boot Record (MBR) винчестера. Принцип действия загрузочных вирусов основан на алгоритмах запуска ОС при включении или перезагрузке компьютера: после необходимых тестов установленного оборудования (памяти, дисков и т. д.) программа системной загрузки считывает первый физический сектор загрузочного диска и передает управление на А:, С: или CD-ROM, в зависимости от параметров, установленных в BIOS Setup.

В случае дискеты или CD-диска управление получает boot-сектор диска, который анализирует таблицу параметров диска (ВРВ — BIOS Parameter Block), высчитывает адреса системных файлов ОС, считывает их в память и запускает на выполнение. Системными файлами обычно являются MSDOS.SYS и IO.SYS, либо IBMDOS.COM и IBMBIO.COM, либо другие в зависимости от установленной версии DOS, и/или Windows, или других ОС. Если же на загрузочном диске отсутствуют файлы операционной системы, программа, расположенная в boot-секторе диска, выдает сообщение об ошибке и предлагает заменить загрузочный диск.

В случае винчестера управление получает программа, расположенная в MBR винчестера. Она анализирует таблицу разбиения диска (Disk Partition Table), вычисляет адрес активного boot-сектора (обычно этим сектором является boot-сектор диска С:), загружает его в память и передает на него управление. Получив управление, активный boot-сектор винчестера проделывает те же действия, что и boot-сектор дискеты.

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

Заражение дискет производится единственным известным способом: вирус записывает свой код вместо оригинального кода boot-сектора дискеты (см. рис. 2.8). Винчестер заражается тремя возможными способами: вирус записывается либо вместо кода MBR (см. рис. 2.9), либо (см. рис. 2.10) вместо

Рис. 2.8 Незараженный диск

28.jpg

Рис. 2.9 Зараженный диск (подмена boot/MBR)

29.jpg

Рис. 2.10

Зараженный диск (подмена активного boot-сектора в Disk Partition Table)

210.jpg

кода boot-сектора загрузочного диска (обычно диска С:), либо модифицирует адрес активного boot-сектора в Disk Partition Table, расположенный в MBR винчестера.

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

Существует несколько вариантов размещения на диске первоначального загрузочного сектора и продолжения вируса: в сектора свободных кластеров логического диска; в неиспользуемые или редко используемые системные сектора; в сектора, расположенные за пределами диска.

Если продолжение вируса размещается в секторах, которые принадлежат свободным кластерам диска (при поиске этих секторов вирусу приходится анализировать таблицу размещения файлов — FAT), то, как правило, вирус помечает в FAT эти кластеры как сбойные (так называемые "псевдосбойные" кластеры). Этот способ приемлем в вирусах Brain, Ping-Pong и некоторых других.

В вирусах семейства Stoned задействован другой метод. Эти вирусы размещают первоначальный загрузочный сектор в неиспользуемом или редко используемом секторе — одном из тех (если такие есть), что расположены между MBR и первым boot-сектором, а на дискете соответствующий сектор выбирается из последних секторов корневого каталога.

Некоторые вирусы записывают свой код в последние сектора винчестера, поскольку они используются только тогда, когда винчестер полностью заполнен информацией, что бывает довольно редко, если учесть размеры современных дисков. Однако такие вирусы приводят к порче файловой системы OS/2, которая иногда хранит активный boot-сектор и системные данные как раз в последних секторах винчестера.

Реже используется метод сохранения продолжения вируса за пределами диска. Достигается это двумя способами. Первый сводится к уменьшению размеров логических дисков: вирус вычитает необходимые значения из соответствующих полей ВРВ boot-сектора и Disk Partition Table винчестера (если заражается винчестер), уменьшает таким образом размер логического диска и записывает свой код в "отрезанные" от него сектора.

Второй способ — запись данных за пределами физического разбиения диска. В случае жестких дисков вирусу для этого приходится форматировать на диске дополнительный трек (метод нестандартного форматирования), например, 40-й трек на 360 Кб дискете или 80-й трек на 1,2 Мб и 1,4 Мб дискетах. Имеются вирусы, записывающие свой код за пределами доступного пространства винчестера, если, разумеется, это допускается установленным оборудованием (см., например, вирус Hare).

Конечно, существуют и другие методы размещения вируса на диске, например, вирусы семейства Azusa содержат в своем теле стандартный загрузчик MBR и при заражении записываются поверх оригинального MBR без его сохранения.

При заражении большинство вирусов копирует в код своего загрузчика системную информацию, хранящуюся в первоначальном загрузчике (для MBR этой информацией является Disk Partition Table, для Boot-сектора дискет — BIOS Parameter Block). В противном случае система окажется неспособной загрузить себя, поскольку дисковые адреса компонентов системы высчитываются на основе этой информации. Такие вирусы довольно легко удаляются переписыванием заново кода системного загрузчика в boot-секторе и MBR. Для этого необходимо пользователю загрузиться с незараженной системной дискеты и использовать команды SYS для обезвреживания дискет и логических дисков винчестера или FDISK/MBR для лечения зараженного MBR-сектора.

Однако некоторые 100%-ные "стелс"-вирусы не сохраняют эту информацию или даже более того — преднамеренно шифруют ее. При обращении системы или других программ к зараженным секторам вирус подставляет их незараженные оригиналы, и загрузка системы происходит без каких-либо сбоев, однако лечение MBR при помощи FDISK/MBR в этом случае приводит к потере информации о разбиении диска (Disk Partition Table). Диск может быть "оживлен" либо переформатированием с потерей всей информации, либо восстановлением Disk Partition Table вручную, что требует определенной квалификации.

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

Пользователям новых ОС (Novell, Win95, OS/2) загрузочные вирусы также могут доставить неприятности. Несмотря на то что перечисленные выше системы работают с дисками напрямую (минуя вызовы BIOS), что блокирует вирус и делает невозможным дальнейшее его распространение, код вируса все-таки, хотя и очень редко, получает управление при перезагрузке системы. Поэтому вирус МагсЬб, например, может годами жить в MBR сервера и никак не влиять при этом на его (сервера) работу и производительность. Однако при случайной перезагрузке 6 марта этот вирус полностью уничтожит все данные на диске.

Алгоритм работы загрузочного вируса

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

— как правило, уменьшает объем свободной памяти (слово по адресу 0040:0013), копирует в освободившееся место свой код и считывает с диска свое продолжение (если оно есть). В дальнейшем некоторые вирусы ждут загрузки DOS и восстанавливают это слово в его первоначальном значении. В результате они оказываются расположенными не за пределами DOS, а как отдельные блоки DOS-памяти;

— перехватывает необходимые векторы прерываний (обычно — INT 13H), считывает в память оригинальный boot-сектор и передает на него управление.

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

Существуют нерезидентные загрузочные вирусы, при загрузке они заражают MBR винчестера и дискеты, если те присутствуют в дисководах. Затем такие вирусы передают управление оригинальному загрузчику и на работу компьютера более не влияют.

2.3 Макровирусы

Макровирусы (macro viruses) являются программами на языках (макроязыках), встроенных в некоторые системы обработки данных (текстовые редакторы, электронные таблицы и т. д.). Для своего размножения такие вирусы используют возможности макроязыков и при их помощи переносят себя из одного зараженного файла (документа или таблицы) в другие. Наибольшее распространение получили макровирусы для Microsoft Word, Excel и Office 97.

Для существования вирусов в конкретной системе необходимо наличие встроенного в систему макроязыка с возможностями:

1) привязки программы на макроязыке к конкретному файлу;

2) копирования макропрограмм из одного файла в другой;

3) получения управления макропрограммой без вмешательства пользователя (автоматические или стандартные макросы).

Данным условиям удовлетворяют редакторы Microsoft Word, Office 97 и AmiPro, а также электронная таблица Excel. Эти системы содержат в себе макроязыки (Word — Word Basic, Excel и Office 97 — Visual Basic), a также:

1) макропрограммы привязаны к конкретному файлу (AmiPro) или находятся внутри файла (Word, Excel, Office 97);

2) макроязык позволяет копировать файлы (AmiPro) или перемещать макропрограммы в служебные файлы системы и редактируемые файлы (Word, Excel, Office 97);

3) при работе с файлом при определенных условиях (открытие, закрытие и т. д.) вызываются макропрограммы (если таковые есть), которые определены специальным образом (AmiPro) или имеют стандартные имена (Word, Excel, Office 97).

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

На сегодняшний день известны четыре системы, для которых существуют вирусы, — Microsoft Word, Excel, Office 97 и AmiPro. В этих системах вирусы получают управление при открытии или закрытии зараженного файла, перехватывают стандартные файловые функции и затем заражают файлы, к которым каким-либо образом идет обращение. По аналогии с MS-DOS можно сказать, что большинство макровирусов являются резидентными: они активны не только в момент открытия/закрытия файла, но до тех пор, пока активен сам редактор.

2.3.1. Word-, Excel-, Office 97-вирусы

Общие сведения. Физическое расположение вируса внутри файла зависит от его формата, который в случае продуктов Microsoft чрезвычайно сложен. Все файлы-документы Word, Office 97 или таблицы Excel представляют собой последовательность блоков данных (каждый из которых также имеет свой формат), объединенных между собой при помощи большого количества служебных данных. Этот формат носит название OLE2 — Object Linking and Embedding. Структура файлов Word, Excel и Office 97 напоминает усложненную дисковую файловую систему DOS: "корневой каталог" файла-документа или таблицы указывает на основные подкаталоги различных блоков данных, несколько таблиц FAT содержат информацию о расположении блоков данных в документе и т. д.

Более того, система Office Binder, поддерживающая стандарты Word и Excel позволяет создавать файлы, одновременно содержащие один или несколько документов в формате Word и одну или несколько таблиц в формате Excel. При этом Word-вирусы способны поражать Word-документы, a Excel-вирусы — Excel-таблицы, и все это возможно в пределах одного дискового файла. То же справедливо и для Office 97.

По причине такой сложности форматов файлов Word, Excel и Office 97 представить расположение макровируса в файле можно лишь схематично (см. рис. 2.11).

Следует отметить, что Word версий 6 и 7 позволяет шифровать имеющиеся в документе макросы. Таким образом, некоторые Word-вирусы присутствуют в зараженных документах в зашифрованном (Execute only) виде.

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

Рис. 2.11 Расположение макровируса • файле

211.jpg

Вирусы для Word могут заражать компьютеры любого класса, а не только IBM PC. Заражение возможно в том случае, если на данном компьютере установлен текстовый редактор, полностью совместимый с Microsoft Word версии 6 или 7 (например, MS Word for Macintosh). To же справедливо для Excel и Office 97.

Следует также отметить, что сложные форматы документов Word, таблиц Excel и особенно Office 97 имеют следующую особенность: в файлах-документах и таблицах присутствуют "лишние" блоки данных, т. е. данные, которые никак не связаны с редактируемым текстом или таблицами либо являются случайно оказавшимися там копиями прочих данныу файла. Причиной возникновения таких блоков данных является кластерная организация данных в ОЕЕ2-документах и таблицах, так как даже если введен всего один символ текста, то под него выделяется один, а иногда и несколько кластеров данных. При сохранении документов и таблиц в кластерах, не заполненных "полезными" данными, остается "мусор", который попадает в файл вместе с прочими данными. Количество "мусора" в файлах может быть уменьшено отменой пункта настройки в Word и Excel "Allow Fast Save", однако это лишь уменьшает общее количество "мусора", но не убирает его полностью.

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

Следует также отметить тот факт, что некоторые версии OLE2.DLL содержат небольшой недочет, в результате которого при работе с документами Word, Excel и особенно Office 97 в блоки "мусора" могут попасть случайные данные с диска, включая конфиденциальные (удаленные файлы, каталоги и т. д.).

Принципы работы. При работе с документом Word версий 6 и 7 выполняет различные действия: открывает документ, сохраняет, печатает, закрывает и т. д. При этом Word ищет и выполняет соответствующие "встроенные макросы": при сохранении файла по команде File/Save вызывается макрос FileSave, при сохранении по команде File/SaveAs — File-SaveAs, при печати документов — FilePrint и т. д., если, конечно, таковые макросы определены.

Существует также несколько автомакросов, автоматически вызываемых при различных условиях. Например, при открытии документа Word проверяет его на наличие макроса AutoOpen. Если такой макрос присутствует, то Word выполняет его. При закрытии документа Word выполняет макрос AutoClose, при запуске Word вызывается макрос AutoExec, при завершении работы — AutoExit, при создании нового документа — AutoNew.

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

Таким образом, к автоматическим макросам/функциям относятся:

Word Excel Office 97
AutuOpen AutoClose Auto0pen Auto Close Document0pen Document Close
AutoExec    
AutoExit    
AutoNew Document New  
    AutoDeactivate


 

Имена некоторых стандартных макросов Word (даны имена в различных локализованных версиях Word) приведены ниже:

Английский Датский Голландский Финский
Fik'New FileOpen FileClose FilcSave FileSaveAs FilcTemplates ToolsMacro FilerNyt Filer+bn FilerLuk FilerGem FilerGemSom FilerSkabeloner FunkMakro BestandNieuw BestandOpenen BestandSluiten BestandOpslaan BestandOpslaanAls BestandSjablonen ExtraMacro TiedostoUusi TiedostoAvaa TiedostoSulje TiedostoTallenna TiedostoTallennaNimellf TiedostoMallit TyJkalutMakro
Французский Немецкий Итальянский  
FichierNouveau FichierOuvrir FichierFermer FichierEnregistrer FichierEnregistrerSous FichierModules OutilsMacro DateiNeu Dateiffnen DateiSchlie-en DateiSpeichern DateiSpeichernUnter DateiDokVorlagen ExtrasMakro FileNuovo FileApri FileChiudi FileSalva FileSalvaConNome FileModelli Strum Macro  
Португальский Испанский Шведский Бразильский
FicheiroNovo , FicheiroAbrir FicheiroFechar FicheiroGuardar FicheiroGuardarComo FicheiroModelos FerrameiitasMacro ArchivoNuevo ArchivoAbrir ArchivoCerrar ArchivoGuardar ArchivoGuardarComo ArchivoPlantillas HerramMacro ArkivNytt Arkivrppna ArkivStфпg ArkivSpara ArkivSparaSom ArkivMallar VerktygMakro ArquivoNovo ArquivoAbrir ArquivoFechar ArquivoSalvar ArquivoSalvarComo ArquivoModelos FerramMacro


 

Автоматически (т. е. без участия пользователя) выполняются также макросы/функции, ассоциированные с какой-либо клавишей либо моментом времени или датой, т. е. Word и Excel вызывают макрос-функцию при нажатии на конкретную клавишу (или комбинацию клавиш) либо при достижении какого-либо момента времени. В Office 97 возможности по перехвату событий несколько расширены, но принцип используется тот же.

Макровирусы, поражающие файлы Word, Excel или Office 97, как правило, пользуются одним из трех приемов, перечисленных выше: в вирусе либо присутствует автомакрос (автофункция), либо переопределен один из стандартных системных макросов (ассоциированный с каким-либо пунктом меню), либо макрос вируса вызывается автоматически при нажатии на какую-либо клавишу или комбинацию клавиш. Существуют также полувирусы, которые не используют всех этих приемов и размножаются, только когда пользователь самостоятельно запускает их на выполнение.

Таким образом, если документ заражен, при его открытии Word вызывает зараженный автоматический макрос AutoOpen (или AutoClose при закрытии документа) и запускает код вируса, если это не запрещено системной переменной DisableAutoMacros. Если вирус содержит макросы со стандартными именами, они получают управление при вызове соответствующего пункта меню (File/Open, File/Close, File/SaveAs). Если же переопределен какой-либо символ клавиатуры, то вирус активизируется только после нажатия на соответствующую клавишу.

Большинство макровирусов содержат все свои функции в виде стандартных макросов Word, Excel, Office 97. Существуют, однако, вирусы, скрывающие свой код и хранящие его в виде немакросов. Известно три подобных приема, все они используют возможность макросов создавать, редактировать и исполнять другие макросы. Как правило, подобные вирусы имеют небольшой (иногда — полиморфный) макрос — загрузчик вируса, который вызывает встроенный редактор макросов, создает новый макрос, заполняет его основным кодом вируса, выполняет и затем, как правило, уничтожает (чтобы скрыть следы присутствия вируса). Основной код таких вирусов находится либо в самом макросе вируса в виде текстовых строк (иногда — зашифрованных), либо хранится в области переменных документа или в области Auto-text.

2.3.2. Алгоритм работы Word-макровирусов

Большинство известных Word-вирусов (версий 6, 7 и Word 97) при запуске переносят свой код (макросы) в область глобальных макросов документа ("общие" макросы), для этого они используют команды копирования макросов MacroCopy, Organizer. Сору либо при помощи редактора макросов. Вирус вызывает его, создает новый макрос, вставляет в него свой код, который и сохраняет в документе.

При выходе из Word глобальные макросы (включая макросы вируса) автоматически записываются в DOT-файл глобальных макросов (обычно это NORMAL.DOT). Таким образом, при следующем запуске Word вирус активизируется в тот момент, когда WinWord грузит глобальные макросы, т. е. сразу.

Затем вирус переопределяет (или уже содержит в себе) один или несколько стандартных макросов (например, FileOpen, FileSave, FileSaveAs, FilePrint) и перехватывает команды работы с файлами. При вызове этих команд вирус заражает файл, к которому идет обращение. Для этого вирус конвертирует файл в формат Template (что делает невозможным дальнейшие изменения формата файла, т. е. конвертирование в какой-либо не-Template-формат) и записывает в файл свои макросы, включая автомакрос.

Таким образом, если вирус перехватывает макрос FileSaveAs, то заражается каждый DOC-файл, сохраняемый через перехваченный вирусом макрос. Если перехвачен макрос FileOpen, то вирус записывается в файл при его считывании с диска.

Второй способ внедрения вируса в систему используется значительно реже. Он базируется на так называемых Add-in-файлах, т. е. файлах, являющихся служебными дополнениями к Word. В этом случае NORMAL.DOT не изменяется, a Word при запуске загружает макросы вируса из файла (или файлов), определенного как Add-in. Этот способ практически полностью повторяет заражение глобальных макросов за тем исключением, что макросы вируса хранятся не в NORMAL.DOT, а в каком-либо другом файле.

Возможно также внедрение вируса в файлы, расположенные в каталоге STARTUP. Word автоматически подгружает файлы-темплейты из этого каталога, но такие вирусы пока не встречались.

Рассмотренные выше способы внедрения в систему представляют собой некоторый аналог внедрения резидентных DOS-вирусов. Макровирусы, которые не переносят свой код в область системных макросов можно рассматривать аналогом нерезидентных вирусов. Для заражения других файлов-документов они либо ищут их при помощи встроенных в Word функций работы с файлами, либо обращаются к списку последних редактированных файлов (Recently used file list). Затем такие вирусы открывают документ, заражают его и закрывают.

2.3.3. Алгоритм работы Excel-макровирусов

Методы размножения Excel-вирусов (включая Excel 97) в целом аналогичны методам Word-вирусов. Различия заключаются в командах копирования макросов (например, Sheets.Copy) и в отсутствии NORMAL.DOT, его функцию (в вирусном смысле) выполняют файлы в STARTUP-каталоге Excel.

2.3.4. AmiPro-вирусы

При работе с каким-либо документом редактор AmiPro создает два файла — непосредственно текст документа (расширение имени файла — SAM) и дополнительный файл, содержащий макросы документа и, возможно, прочую информацию (расширение имени — SMM). Формат обоих файлов достаточно прост. Они представляют собой обычный текстовый файл, в котором как редактируемый текст, так и команды управления присутствуют в виде обычных текстовых строк.

Документу можно поставить в соответствие какой-либо макрос из SMM-файла (команда AssignMacroToFile). Этот макрос является аналогом AutoOpen и AutoClose в MS Word и вызывается редактором AmiPro при открытии или закрытии файла.

Видимо, в AmiPro отсутствует возможность помещать макросы в общую область, поэтому вирусы для AmiPro могут заразить систему только при открытии зараженного файла, но не при загрузке системы, как это происходит с MS Word после заражения файла NORMAL.DOT.

Как и MS Word, AmiPro позволяет переопределять системные макросы (например, SaveAs, Save) командой ChangeMenuAction. При вызове переопределенных функций (команд меню) управление получают зараженные макросы, т. е. код вируса.

2.4. Сетевые вирусы

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

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

Наибольшую известность приобрели сетевые вирусы конца 80-х, их также называют сетевыми червями (worms). К ним относятся вирус Морриса, вирусы Cristmas Tree и Wank Worm. Для своего распространения они использовали ошибки и недокументированные функции глобальных сетей того времени. Вирусы передавали свои копии с сервера на сервер и запускали их на выполнение. Эпидемия вируса Морриса захватила в свое время несколько глобальных сетей в США

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

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

Вновь проблема сетевых вирусов возникла лишь в начале 1997 г. с появлением вирусов Macro.Word.ShareFun и Win.Homer. Первый из них использует возможности электронной почты Microsoft Mail. Он создает новое письмо, содержащее зараженный файл-документ (ShareFun является макровирусом), затем выбирает из списка адресов MS-Mail три случайных адреса и рассылает по ним зараженное письмо. Поскольку многие пользователи устанавливают параметры MS-Mail таким образом, что при получении письма автоматически запускается MS Word, то вирус "автоматически" внедряется в компьютер адресата зараженного письма.

Этот вирус иллюстрирует первый тип современных сетевых вирусов, которые объединяют возможности встроенного в Word и Excel языка Бейсик, протоколы и особенности электронной почты и функции автозапуска, необходимые для распространения вируса.

Второй вирус (Homer) использует для распространения протокол FTP (File Transfer Protocol) и передает свою копию на удаленный ftp-сервер в каталог Incoming. Поскольку сетевой протокол FTP не позволяет запускать файлы на удаленном сервере, этот вирус можно охарактеризовать как полусетевой, однако это реальный пример возможностей вирусов по использованию современных сетевых протоколов и поражению глобальных сетей.

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

2.5. Прочие вредные программы

К вредным программам помимо вирусов относятся также "троянские кони" (логические бомбы), intended-вирусы, конструкторы вирусов и полиморфик-генераторы.

2.5.1. "Троянские кони" (логические бомбы)

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

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

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

Следует отметить также "злые шутки" (hoax). К ним относятся программы, которые не причиняют компьютеру какого-либо прямого вреда, однако выводят сообщения о том, что такой вред уже причинен, либо будет причинен при каких-либо условиях, либо предупреждают пользователя о несуществующей опасности. К "злым шуткам" относятся, например, программы, которые "пугают" пользователя сообщениями о форматировании диска (хотя никакого форматирования на самом деле не происходит), определяют вирусы в незараженных файлах (как это делает широко известная программа ANTITIME), выводят странные вирусоподобные сообщения (драйвер диска CMD640X от какого-то коммерческого пакета) и т. д. — варианты зависят от чувства юмора автора такой программы. Видимо, к "злым шуткам" относится также строка CHOLEEPA во втором секторе винчестеров фирмы Seagate. К этой же категории шуток можно отнести заведомо ложные сообщения о новых супервирусах. Такие сообщения периодически появляются в электронных конференциях и обычно вызывают среди пользователей панику.

2.5.2. Intended-вирусы

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

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

Появляются intended-вирусы чаще всего при неумелой перекомпиляции уже существующего вируса либо по причине недостаточного знания языка программирования, либо из-за незнания технических тонкостей ОС.

2.5.3. Конструкторы вирусов

Конструктор вирусов — это утилита, предназначенная для изготовления новых компьютерных вирусов. Известны конструкторы вирусов для DOS, Windows и макровирусов. Они позволяют генерировать исходные тексты вирусов (ASM-файлы), объектные модули и/или непосредственно зараженные файлы.

Некоторые конструкторы (VLC, NRLG) снабжены стандартным оконным интерфейсом, позволяющим при помощи системы меню выбрать тип вируса, поражаемые объекты (СОМ и/или ЕХЕ), наличие или отсутствие самошифровки, противодействие отладчику, внутренние текстовые строки, выбрать эффекты, сопровождающие работу вируса, и т. п. Прочие конструкторы (PS-MPC, G2) не имеют интерфейса и считывают информацию о типе вируса из конфигурационного файла.

2.5.4. Полиморфные генераторы

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

Обычно полиморфные генераторы распространяются их авторами без ограничений в виде файла-архива. Основным файлом в архиве любого генератора является объектный модуль, содержащий этот генератор. Во всех встречавшихся генераторах этот модуль содержит внешнюю (external) функцию — вызов программы генератора. То есть автору вируса, если он желает создать настоящий полиморфик-вирус, не приходится корпеть над кодами собственного за/расшифровщика. При желании он может подключить к своему вирусу любой известный полиморфик-генератор и вызывать его из кодов вируса. Физически это достигается следующим образом: объектный файл вируса связывается с объектным файлом генератора, а в исходный текст вируса перед командами его записи в файл вставляется вызов полиморфик-генератора, который создает коды расшифровщика и шифрует тело вируса.

2.6. Резидентные вирусы

Под термином "резидентность" (005'овский термин TSR — Terminate and Stay Resident) понимается способность вирусов оставлять свои копии в операционной системе, перехватывать некоторые события (например, обращения к файлам или дискам) и вызывать при этом процедуры заражения обнаруженных объектов (файлов и секторов). Таким образом, резидентные вирусы активны не только в момент работы зараженной программы, но и после того, как программа закончила свою работу. Резидентные копии таких вирусов остаются жизнеспособными вплоть до очередной перезагрузки, даже если на диске уничтожены все зараженные файлы. Часто от таких вирусов невозможно избавиться восстановлением всех копий файлов с дистрибутивных дисков или backup-копий. Резидентная копия вируса остается активной и заражает вновь создаваемые файлы. То же верно и для загрузочных вирусов, форматирование диска при наличии в памяти резидентного вируса не всегда вылечивает диск, поскольку многие резидентные вирусы заражают его повторно после того, как он отформатирован.

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

2.6.1. DOS-вирусы

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

драйверами, указываемыми в CONFIG.SYS, и при помощи функции KEEP (INT 21h, AH=31h или INT 27h). Многие файловые вирусы для маскировки своего распространения используют другой способ — обработку системных областей, управляющих распределением памяти (МСВ). Они выделяют для себя свободный участок памяти (включая UMB), помечают его как занятый и переписывают туда свою копию. Некоторые вирусы внедряют свои TSR-KO-пии в свободные участки памяти в таблице векторов прерываний, в видеопамять, в рабочие области DOS, в память, отведенную под системные буферы и в НМА-память. Подробнее эти способы описаны в разделе 3.9 "Обнаружение резидентного вируса".

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

При инфицировании файлов нерезидентные и некоторые резидентные вирусы ищут на диске (дисках) эти файлы при помощи функций DOS FindFirst и FindNext (INT 21h, AH=llh,12h,4Eh,4Fh). Резидентные вирусы используют более широкий список функций DOS, при обращении к которым происходит заражение файла. Фактически в этом списке присутствуют все функции, по значениям входных или выходных параметров которых можно определить имя файла, к которому идет обращение (к таким параметрам относятся значения соответствующих регистров или областей памяти). В результате к "вирусоопасным" функциям прерывания 21h относятся функции выполнения (ЕХЕС, АХ=4ВОО), загрузки в память (AH=4Bh), поиска (FindFirst и FindNext, AH-llh.^MEMFh), создания (Create, АН-ЗСЬ), открытия (Open, AH=3Dh), закрытия (Close, AH=3Eh), изменения атрибутов (ChMode, AH=43h), переименования (Rename, AH=56h) и некоторые другие функции работы с файлами.

Известно несколько способов проверки резидентным вирусом наличия своей копии в памяти компьютера. Первый заключается в том, что вирус вводит новую функцию некоторого прерывания, действие которой заключается в возврате значения "я здесь". При старте вирус обращается к ней, и если возвращенное значение совпадает со значением "я здесь", значит, память компьютера уже заражена и повторное заражение не проводится. При проверке вторым способом вирус записывает значение "я здесь" в какую-либо редко используемую область памяти — в таблицу векторов прерываний или в область данных BIOS (0040:00??). При последующих стартах зараженных программ вирус проверяет это значение и не вызывает процедуру заражения памяти. Существуют и другие способы, например, есть вирусы, которые просто сканируют память компьютера.

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

2.6.2. Загрузочные вирусы

Подавляющее большинство резидентных загрузочных вирусов для выделения системной памяти для своей резидентной копии использует один и тот же прием: они уменьшают объем DOS-памяти (слово по адресу 0040:0013) и копируют свой код в "отрезанный" блок памяти. Объем DOS-памяти обычно уменьшается на единицу (1 Кб) в случае коротких загрузочных вирусов, код которых занимает один сектор дискового пространства (512 байт). Вторая половина килобайта используется такими вирусами, как буфер чтения-записи при заражении дисков. Если же размер вируса больше 1 Кб, он использует нестандартные методы заражения, требующие большего объема буфера чтения-записи. Соответственно объем памяти уменьшается на несколько килобайтов (среди известных вирусов максимальное значение у вируса RDA.Fighter - 30 Кб).

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

Эти вирусы используют несколько способов перехвата момента загрузки DOS. Наиболее популярный способ — проверка значения INT 21h (прерывание DOS-функций). Если это значение изменилось, вирусы считают, что инсталляция DOS завершена. Проверка значения INT 21h проводится при вызовах INT 8, ICh (для этого вирусы помимо прерываний обращения к дискам перехватывают также прерывания таймера) или при вызовах INT 13h. Менее популярный способ — проверка данных, считываемых с диска (для этого требуется только перехват INT 13h). Если буфер чтения содержит заголовок ЕХЕ-файла, вирусы считают, что загрузка DOS завершена, поскольку в память для выполнения загружается ЕХЕ-файл.

Для того чтобы перехватить обращения к дискам, большинство загрузочных вирусов перехватывают INT 13h — основное прерывание для работы с дисками. Реже используется перехват INT 40h — прерывание для работы с гибкими дисками. Еще реже используются различные экзотические способы перехвата прерываний BIOS и DOS, возникающих при работе с дискетами.

В случае перехвата INT 13h/40h вирусы обрабатывают команды чтения-записи секторов (АН=2,3), проверяют диск на зараженность и записывают в его загрузочный сектор или в MBR винчестера свой код. Реже перехватываются другие команды — от команды Reset Disk (AH=0) вплоть до команд "длинного" чтения-записи (AH=OAh,OBh).

Большая часть загрузочных вирусов не проверяет системную память на наличие своей уже установленной TSR-копии: они либо используют "стелс"-приемы, при которых повторный запуск кода вируса невозможен, либо ориентируются на то, что код вируса загружается однократно в момент загрузки DOS, после этого коды загрузочных секторов дисков больше не выполняются ни при каких условиях. Часть вирусов проверяет наличие своей копии. Для этого используются либо специальные вызовы INT 13h с каким-нибудь нестандартным значением, либо помечается заведомо неиспользуемый байт (или слово) в таблице векторов прерываний или в области данных BIOS (0040:00??). Существуют и другие способы обнаружения своей TSR-копии.

2.6.3. Windows-вирусы

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

Самый простой способ — зарегистрировать программу как одно из приложений, работающих в данный момент. Для этого программа регистрирует свою задачу, окно которой может быть свернутым, регистрирует свой обработчик системных событий и т. д. Второй способ — выделить блок системной памяти при помощи DPMI-вызовов и скопировать в нем свой код (вирус Ph33r). Третий способ — остаться резидентно как VxD-драйвер (Wnidows З.хх и Windows95) или как драйвер Windows NT.

Перехват обращений к файлам производится одним из двух способов: либо перехватываются вызовы INT 21h (Hook_V86_Int_Chain,Get/Set_V86_Int_Vector, Get/Set_PM_Int_Vector), либо перехватывается системный вызов API. Затем резидентные Windows-вирусы действуют примерно так же, как и DOS-вирусы: перехватывают обращения к файлам и заражают их.

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

2.6.4. Макровирусы

Большинство макровирусов можно считать резидентными, поскольку они присутствуют в области системных макросов в течение всего времени работы редактора. Они, так же как резидентные, загрузочные и файловые вирусы, перехватывают системные события и используют их для своего размножения. К подобным событиям относятся различные системные вызовы, возникающие при работе с документами Word и таблицами Excel (открытие, закрытие, создание, печать и т. д.), вызов пункта меню, нажатие на какую-либо клавишу или достижение определенного момента времени. Для перехвата событий макровирусы переопределяют один или несколько системных - макросов или функций.

При заражении некоторые макровирусы проверяют наличие своей копии в заражаемом объекте и повторно себя не копируют. Другие макровирусы не делают этого и переписывают свой код

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

2.7. "Стелс"-вирусы

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

2.7.1. Загрузочные вирусы

Загрузочные "стелс"-вирусы для скрытия своего кода используют два основных способа. Первый из них заключается в том, что вирус перехватывает команды чтения зараженного сектора (INT 13h) и подставляет вместо него незараженный оригинал. Этот способ делает вирус невидимым для любой DOS-программы, включая антивирусы, неспособные "лечить" оперативную память компьютера. Возможен перехват команд чтения секторов на уровне более низком, чем INT 13h.

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

С некоторыми оговорками "стелс"-вирусами можно назвать вирусы, которые вносят минимальные изменения в заражаемый сектор (например, при заражении MBR правят только активный адрес загрузочного сектора — изменению подлежат только 3 байт) либо маскируются под код стандартного загрузчика.

2.7.2. Файловые вирусы

Большинство файловых "стелс"-вирусов использует те же приемы, что приведены выше: они либо перехватывают DOS-вызовы обращения к файлам (INT 21h), либо временно лечат файл при его открытии и заражают при закрытии. Так же как и для загрузочных вирусов, существуют файловые вирусы, использующие для своих "стелс"-функций перехват прерываний более низкого уровня — вызовы драйверов DOS, INT 25h и даже INT 13h.

Полноценные файловые "стелс"-вирусы, использующие первый способ скрытия своего кода, в большинстве своем достаточно громоздки, поскольку им приходится перехватывать большое количество DOS-функций работы с файлами: открытие-закрытие, чтение-запись, поиск, запуск, переименование и т. д., причем необходимо поддерживать оба варианта некоторых вызовов (FCB/ASCII), а с появлением Windows 95/NT необходимо также обрабатывать третий вариант — функции работы с длинными именами файлов.

Некоторые вирусы используют часть функций полноценного "стелс"-ви-руса. Чаще всего они перехватывают функции DOS FindFirst и FindNext (INT 21h, AH=llh, 12h, 4Eh, 4Fh) и уменьшают размер зараженных файлов. Такой вирус невозможно определить по изменению размеров файлов, если, конечно, он резидентно находится в памяти. Программы, которые не обращаются к указанным функциям DOS (например, Norton'oBCKHe утилиты), а напрямую используют содержимое секторов, хранящих каталог, показывают правильную длину зараженных файлов.

2.7.3. Макровирусы

Реализация "стеле"-алгоритмов в макровирусах является, наверное, наиболее простой задачей — достаточно всего лишь запретить вызов меню File/Templates или Tools/Macro. Достигается это либо удалением этих пунктов меню из списка, либо их подменой на макросы FileTemplates и ToolsMacro.

Частично "стелс"-вирусами можно назвать небольшую группу макровирусов, которые хранят свой основной код не в самом макросе, а в других областях документа — в его переменных или в Auto-text.

2.8. Полиморфик-вирусы

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

Полиморфизм различной степени сложности встречается в вирусах всех типов — от загрузочных и файловых DOS-вирусов до Windows-вирусов и даже макровирусов.

2.8.1. Полиморфные расшифровщики

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

MOV гед_1, count ;гед_1, гед_2, гед_3 выбираются из

MOV гед_2, key ; AX,BX,CX,DX,SI,DI,ВР

MOV гед_3, _offset ;count, key, _offset также могут меняться

„LOOP:

ххх byte ptr [гед_3], гед_2 ;хог, add или sub

DEC гед_1

Jxx „loop ;ja или jnc

;дальше следуют зашифрованные код и данные вируса

Более сложные полиморфик-вирусы используют значительно более сложные алгоритмы для генерации кода своих расшифровщиков: приведенные выше инструкции (или их эквиваленты) переставляются местами от заражения к заражению, разбавляются ничего не меняющими командами типа NOP, STI, CLI, STC, CLC, DEC неиспользуемый регистр, XCHG неиспользуемые регистры и т. д.

Полноценные же полиморфик-вирусы используют очень сложные алгоритмы, в результате работы которых в расшифровщике вируса могут встретиться операции SUB, ADD, XOR, ROR, ROL и другие в произвольном количестве и порядке. Загрузка и изменение ключей и других параметров шифровки производится также произвольным набором операций, в котором могут встретиться практически все инструкции процессора Intel (ADD, SUB, TEST, XOR, OR, SHR, SHL, ROR, MOV, XCHG.JNZ, PUSH, POP...) со всеми возможными режимами адресации. Появляются также полиморфик-вирусы, расшифровщик которых использует инструкции вплоть до Intel386, а летом 1997 г. обнаружен 32-разрядный полиморфик-вирус, заражающий ЕХЕ-файлы Windows 95.

В результате в начале файла, зараженного подобным вирусом, идет набор бессмысленных на первый взгляд инструкций, причем некоторые комбинации, которые вполне работоспособны, не берутся фирменными дизассембле-рами (например, сочетание CS:CS: или CS:NOP). И среди этой "каши" из команд и данных изредка проскальзывают MOV, XOR, LOOP,JMP — инструкции, которые действительно являются "рабочими".

2.8.2. Уровни полиморфизма

Существует деление полиморфик-вирусов на уровни в зависимости от сложности кода, который встречается в расшифровщиках этих вирусов. Такое деление впервые предложил д-р. Алан Соломон, через некоторое время Вессе-лин Бончев расширил его.

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

Примеры: Cheeba, Slovakia, Whale.

Уровень 2. Расшифровщик вируса содержит одну или несколько постоянных инструкций, основная же его часть непостоянна.

Уровень 3. Расшифровщик содержит неиспользуемые инструкции — мусор типа NOP, CLI, STI и т. д.

Уровень 4. В расшифровщике используются взаимозаменяемые инструкции и изменение порядка следования (перемешивание) инструкций. Алгоритм расшифровки при этом не изменяется.

Уровень 5. Используются все перечисленные выше приемы, алгоритм расшифровки непостоянен, возможно повторное шифрование кода вируса и даже частичное шифрование самого кода расшифровщика.

Уровень 6. Permutating-вирусы. Изменению подлежит основной код вируса — делится на блоки, которые при заражении переставляются в произвольном порядке. Вирус при этом остается работоспособным. Подобные вирусы могут быть не зашифрованы.

Приведенное выше деление не свободно от недостатков, поскольку производится по единственному критерию — возможности обнаруживать вирус по коду расшифровщика при помощи стандартного приема вирусных масок:

Уровень 1. Для обнаружения вируса достаточно иметь несколько масок.

Уровень 2. Обнаружение по маске с использованием wildcards.

Уровень 3. Обнаружение по маске после удаления инструкций-"мусора".

Уровень 4. Маска содержит несколько вариантов возможного кода, т. е. становится алгоритмической.

Уровень 5. Невозможность детектирования вируса по маске.

Недостаточность такого деления продемонстрирована в вирусе 3-го уровня полиморфичности, который так и называется — Level3. Этот вирус, являясь одним из наиболее сложных полиморфик-вирусов, по приведенному выше делению попадает в уровень 3, поскольку имеет постоянный алгоритм расшифровки, перед которым стоит большое количество команд-"мусора". Однако в этом вирусе алгоритм генерирования "мусора" доведен до совершенства: в коде расшифровщика могут встретиться практически все инструкции процессора i8086.

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

1. Степень сложности полиморфик-кода (процент от всех инструкций процессора, которые могут встретиться в коде расшифровщика).

2. Использование антиэмуляторных приемов.

3. Постоянство алгоритма расшифровщика.

4. Постоянство длины расшифровщика.

Мне не хотелось бы излагать эти пункты подробнее, поскольку это может подтолкнуть вирусописателей к созданию подобных монстров.

2.8.3. Изменение выполняемого кода

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

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

Еще реже этот прием встречается у файловых вирусов, ведь им приходится полностью менять свой код, а для этого требуются достаточно сложные алгоритмы. На сегодняшний день известны всего два таких вируса, один из которых (Ply) случайным образом перемещает свои команды по своему телу и заменяет их на команды JMP или CALL. Другой вирус (ТМС) использует более сложный способ — каждый раз при заражении он меняет местами блоки своего кода и данных, вставляет "мусор", в своих ассемблерных инструкциях устанавливает новые значения адресов данных, меняет константы и т. д. В результате вирус и не шифрует свой код, он является полиморфик-вирусом, так как в его коде нет постоянного набора команд. Более того, при создании своих новых копий вирус меняет свою длину.

X