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

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

Внедрение файлового вируса возможно практически во все исполняемые файлы всех популярных ОС. На сегодняшний день известны вирусы, поражающие все типы выполняемых объектов стандартной DOS: командные файлы (BAT), загружаемые драйверы (SYS, в том числе специальные файлы IO.SYS и MSDOS.SYS) и выполняемые двоичные файлы (EXE, COM). Существуют вирусы, поражающие исполняемые файлы других операционных систем - Windows 3.x, Windows95/NT, OS/2, Macintosh, UNIX, включая VxD-драйвера Windows 3.x и Windows95.

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

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

Overwriting

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

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

Parasitic

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

Внедрение вируса в начало файла

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

+-----------------------------+ Внедрение вируса в начало| Файл | файла первым способом+-----------------------------+ +-------------------------------+ V+ - - - --------------------------------+|Свободно| Файл | |+ - - - --------------------------------+



+---------------------------------------+- - +|Вирус | Файл | | |+---------------------------------------+- - +





+-----------------------------+ Внедрение вируса в начало| Файл | файла вторым способом+-----------------------------+| +----------++--------+ | V V+ - - - ---------------------------------+|Свободно| Файл |+ - - - ---------------------------------+



+----------------------------------------+- - +|Вирус | Файл | |+----------------------------------------+- - +



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



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

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

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

DOS COM-файл DOS EXE-файл New EXE-файл +---------+ +---------+ +---------++--|JMP | | +----|Заголовок| |DOS stub || |----+ | | |---------| |---------|| |Программа| | |Программа| |New EXE || | | | | | +----|заголовок|| |---------| V | | | |---------|| |Вирус | Стартовый |---------| | |Программа|+->| | адрес |Вирус | | | | | | --------->| | V | | +---------+ | | Стартовый |---------| +---------+ адрес |Вирус | --------->| | | | +---------+



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



+--------------------------------+ Незараженный файл-драйвер|Заголовок| Драйвер |+--------------------------------+



+------------------------------------+ Зараженный файл-драйвер | +-------------------------------+ | | | V V+------------------------------------------------------------+|Заголовок| Драйвер | Вирус |+------------------------------------------------------------+



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

+--------------------------------+ Незараженный файл-драйвер|Заголовок| Драйвер |+--------------------------------+



+--------------------------------+ Зараженный файл-драйвер | V+------------------------------------------------------------+|Заголовок| Драйвер |Заголовок| Вирус |+------------------------------------------------------------+



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

Внедрение вируса в середину файла

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

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

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

Вирусы без точки входа

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

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

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

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

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



Компаньон-вирусы

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

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

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

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

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



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

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

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

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



Link-вирусы

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

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

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

Сектор каталога Диск +--------------+ +----------------------+ |Имя 1 |------>|+--------------------+| |- - - - - - - | ||Файл 1 || |Имя 2 | |+--------------------+| |- - - - - - - |------>|+--------------------+| | | ||Файл 2 || |- - - - - - - | |+--------------------+| | | |- - - - - - - | | | |Имя n |------>|+--------------------+| +--------------+ ||Файл n || |+--------------------+| | | +----------------------+



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

Сектор каталога Диск +--------------+ +----------------------+ |Имя 1 |----+ |+--------------------+| |- - - - - - - | | ||Файл 1 || |Имя 2 | | |+--------------------+| |- - - - - - - |--->| |+--------------------+| | | | ||Файл 2 || |- - - - - - - | | |+--------------------+| | | | |- - - - - - - | | | | |Имя n |--->| |+--------------------+| +--------------+ | ||Файл n || | |+--------------------+| | | | | | %%%%%%%%%%%%%%%%%%%% | +->| % Вирус %%%%%%%%%%%% | | %%%%%%%%%%%%%%%%%%%% | +----------------------+





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

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

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



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

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

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

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

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

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



Прочие замечания



Внедрение вируса в DOS COM- и EXE-файлы

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

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

Один из наиболее часто встречающися примеров некоррекного заражения файла - COMMAND.COM от Windows95. Этот файл по сути является EXE-файлом, более того имеет размер более 90K, что невозможно для COM-файла. Поэтому вирусы, которые различают COM/EXE файлы по расширению имени и не проверяют длины заражаемых COM-файлов (например, "Junkie"), портят такой COMMAND.COM, и он становится неработоспособным.

Примитивная маскировка

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

Скорость распространения

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

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

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

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





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

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

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

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

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

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

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

Незараженный диск 0 1 2 . . . (Номер сектора)+--------------------- ------------------------------------|%%%%%| | | | | | | | |+--------------------- ------------------------------------ | +-- Boot-сектор или Master Boot Record



Зараженный диск (подмена boot/MBR) 0 1 2 . . .+--------------------- ------------------------------------|#####| | | | |%%%%%|#####|#####|#####|+--------------------- ------------------------------------ | | | | ... | +-- Начало вируса | +---------------+ | +-- Продолжение вируса | +-- Сохраненный Boot-сектор или Master Boot Record



Зараженный диск (подмена активного boot-cектора в Disk Partition Table) 0 1 2 . . .+--------------------- ------------------------------|%%%%#| | | | |#####|#####|#####|+--------------------- ------------------------------ | ^ | | ... | +-- Модифицированная -------+ |-----------+ Disk Partition Table +-- Основной код вируса





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

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

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

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

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

Второй способ - запись данных за пределами физического разбиения диска. В случае флоппи-дисков вирусу для этого приходится форматировать на диске дополнительный трек (метод нестандартного форматирования), например, 40-й трек на 360K дискете или 80-й трек на 1.2M и 1.4M дискетах. Существуют вирусы, записывающие свой код за пределами доступного пространства винчестера, если, разумеется, это допускается установленным оборудованием (см. вирус "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), что блокирует вирус и делает невозможным дальнейшее его распространение, код вируса все-таки, хоть и очень редко, получает управление при перезагрузке системы. Поэтому вирус "March6", например, может годами "жить" в MBR сервера и никак не влиять при этом на его (сервера) работу и производительность. Однако при случайной перезагрузке 6-го марта этот вирус полностью уничтожит все данные на диске.



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

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

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

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

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

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





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

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

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

1) привязки программы на макро-языке к конкретному файлу;2) копирования макро-программ из одного файла в другой;3) возможность получения управления макро-программой без вмешательства пользователя (автоматические или стандартные макросы);



Данным условиям удовлетворяют редакторы Microsoft Word, Office97 и AmiPro, а также электронная таблица Excel и база данных Microsoft Access. Эти системы содержат в себе макро-языки: Word - Word Basic, Excel, Office97 (включая Word97, Excel97 и Access) - Visual Basic for Applications. При этом:

1) макро-программы привязаны к конкретному файлу (AmiPro) или находятся внутри файла (Word, Excel, Office97);2) макро-язык позволяет копировать файлы (AmiPro) или перемещать макро-программы в служебные файлы системы и редактируемые файлы (Word, Excel, Office97);3) при работе с файлом при определенных условиях (открытие, закрытие и т.д.) вызываются макро-программы (если таковые есть), которые определены специальным образом (AmiPro) или имеют стандартные имена (Word, Excel, Office97).



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

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



Word/Excel/Office97-вирусы: общие сведения

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

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

По причине такой сложности форматов файлов Word, Excel и Office97 представить расположение макро-вируса в файле можно лишь схематично:

Незараженный файл-документ Вирус в файле-документеили таблица или таблице+----------------+ +----------------+|заголовок файла | |заголовок файла ||----------------| |----------------||служебные данные| |служебные данные||(каталоги, FAT) | |(каталоги, FAT) ||----------------| |----------------||текст | |текст || | | ||----------------| |----------------||шрифты | |шрифты ||----------------| |----------------||макросы | |макросы ||(если есть) | |(если есть) ||----------------| | - - - - - - - -||прочие данные | |макросы вируса | . . . |----------------|| | |прочие данные || | . . .+----------------+ +----------------+



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

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

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



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

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

Следует также отметить тот факт, что некоторые версии OLE2.DLL содержат небольшой недочет, в результате которого при работе с документами Word, Excel и особенно Office97 в блоки "мусора" могут попасть случайные данные с диска, включая конфиденциальные (удаленные файлы, каталоги и т.д.). В эти блоки могут попасть также команды вируса. В результате после лечения зараженных документов активный код вируса удаляется из файла, но в блоках "мусора" могут остаться часть его команд. Такие следы присутствия вируса иногда видимы при помощи текстовых редакторов и даже могут вызвать реакцию некоторых антивирусных программ. Однако эти остатки вируса совершенно безвредны: Word и Excel не обращают на них никакого внимания.





Word/Excel/Office97-вирусы: принципы работы

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

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

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

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

Word Excel Office97---- ----- --------AutoOpen Auto_Open Document_OpenAutoClose Auto_Close Document_CloseAutoExecAutoExitAutoNew Document_New Auto_Activate Auto_Deactivate



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

Английский Датский Голландский Финский


FileNew FilerNyt BestandNieuw TiedostoUusiFileOpen Filer+bn BestandOpenen TiedostoAvaaFileClose FilerLuk BestandSluiten TiedostoSuljeFileSave FilerGem BestandOpslaan TiedostoTallennaFileSaveAs FilerGemSom BestandOpslaanAls TiedostoTallennaNimellфFileTemplates FilerSkabeloner BestandSjablonen TiedostoMallitToolsMacro FunkMakro ExtraMacro Ty0kalutMakro





Французский Немецкий Итальянский


FichierNouveau DateiNeu FileNuovoFichierOuvrir Datei+ffnen FileApriFichierFermer DateiSchlie#en FileChiudiFichierEnregistrer DateiSpeichern FileSalvaFichierEnregistrerSous DateiSpeichernUnter FileSalvaConNomeFichierModшles DateiDokVorlagen FileModelliOutilsMacro ExtrasMakro StrumMacro





Португальский Испанский Шведский Бразильский


FicheiroNovo ArchivoNuevo ArkivNytt ArquivoNovoFicheiroAbrir ArchivoAbrir Arkiv+ppna ArquivoAbrirFicheiroFechar ArchivoCerrar ArkivStфng ArquivoFecharFicheiroGuardar ArchivoGuardar ArkivSpara ArquivoSalvarFicheiroGuardarComo ArchivoGuardarComo ArkivSparaSom ArquivoSalvarComoFicheiroModelos ArchivoPlantillas ArkivMallar ArquivoModelosFerramentasMacro HerramMacro VerktygMakro FerramMacro





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



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

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



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



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

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

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

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

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



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

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



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



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

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

Следует отметить, что существует два возможных варианта расположения кода макро-вирусов в таблицах Excel. Подавляющее большинство таких вирусов записывают свой код в формате VBA (Visual Basic for Applications), однако существуют вирусы, хранящие свой код в старом формате Excel версии 4.0. Такие вирусы по своей сути ничем не отличаются от VBA-вирусов, за исключением отличий в формате расположения кодов вируса в таблицах Excel.

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



Алгоритм работы вирусов для Access

Поскольку Access является частью пакета Office97 Pro, то вирусы для Access представляют собой такие же макросы на языке Visual Basic, как и прочие вирусы, заражающие приложения Office97. Однако в данном случае вместо авто-макросов в системе присутствуют автоматические скрипты, которые вызываются системой при различных событиях (например, Autoexec). Данные скрипты затем могут вызывать различные макро-программы.

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

Следует отметить, что в терминах Access скрипты называются макросами (macro), а макросы - модулями (module), однако в дальнейшем будет использоваться унифицированная терминология - скрипты и макросы.

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



AmiPro-вирусы

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

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

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

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







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

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

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



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

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

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



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

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

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

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





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

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



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

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

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

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

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

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



Intended-вирусы

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

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

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



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

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

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



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

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

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

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





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

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

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

DOS-вирусы

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

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

При инфицировании файлов нерезидентные и некоторые резидентные вирусы ищут на диске (дисках) эти файлы при помощи функций DOS FindFirst и FindNext (INT 21h, AH=11h,12h,4Eh,4Fh). Резидентные вирусы используют более широкий список функций DOS, при обращении к которым происходит заражение файла. Фактически в этом списке присутствуют все функции, по значениям входных или выходных параметров которых можно определить имя файла, к которому идет обращение (к таким параметрам относятся значения соответствующих регистров или областей памяти). В результате к "вирусоопасным" функциям прерывания 21h относятся функции выполнения (EXEC, AX=4B00), загрузки в память (AH=4Bh), поиска (FindFirst и FindNext, AH=11h,12h,4Eh,4Fh) создания (Create, AH=3Ch), открытия (Open, AH=3Dh), закрытия (Close, AH=3Eh), изменения атрибутов (ChMode, AH=43h), переименования (Rename, AH=56h), и некоторые другие функции работы с файлами.

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

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



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

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

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

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

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

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

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

Windows-вирусы

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

Самый простой способ - зарегистрировать программу как одно из приложений, работающих в данный момент. Для этого программа регистрирует свою задачу, окно которой может быть скрытым, регистрирует свой обработчик системных событий и т.д. Второй способ - выделить блок системной памяти при помощи DPMI-вызовов и скопировать в него свой код (вирус "Ph33r"). Третий способ - остаться резидентно как VxD-драйвер (Wnidows 3.xx и 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-файла.

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

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

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



Стелс-вирусы

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

MOV reg_1, count ; reg_1, reg_2, reg_3 выбираются из MOV reg_2, key ; AX,BX,CX,DX,SI,DI,BP MOV reg_3, _offset ; count, key, _offset также могут меняться_LOOP: xxx byte ptr [reg_3], reg_2 ; xor, add или sub DEC reg_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-битный полиморфик-вирус, заражающий EXE-файлы Windows95.

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



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

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

Уровень 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. Постоянство длины расшифровщика



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



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

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

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

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