Файловые вирусы (продолжение)
Файловые вирусы (продолжение)
Вирусы без точки входа
Отдельно следует отметить довольно незначительную группу вирусов, не имеющих "точки входа" (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". При заражении системы они записывают свое тело в последний кластер логического диска. При заражении файла вирусы корректируют лишь номер первого кластера файла, расположенный в соответствующем секторе каталога. Новый начальный кластер файла будет указывать на кластер, содержащий тело вируса. Таким образом, при заражении файлов их длины и содержимое кластеров диска, содержащих эти файлы, не изменяется, а на все зараженные файлы на одном логическом диске будет приходиться только одна копия вируса.
До заражения данные каталога хранят адрес первого кластера файла, после заражения данные каталога указывают на вирус, т.е. при запуске файла управление получают не файлы, а вирус.
OBJ-, LIB-вирусы и вирусы в исходных текстах
Вирусы, заражающие библиотеки компиляторов, объектные модули и исходные тексты программ, достаточно экзотичны и практически не распространены. Всего их около десятка. Вирусы, заражающие OBJ- и LIB-файлы, записывают в них свой код в формате объектного модуля или библиотеки. Зараженный файл, таким образом, не является выполняемым и не способен на дальнейшее распространение вируса в своем текущем состоянии. Носителем же "живого" вируса становится COM- или EXE-файл, получаемый в процессе линковки зараженного OBJ/LIB-файла с другими объектными модулями и библиотеками. Таким образом, вирус распространяется в два этапа: на первом заражаются OBJ/LIB-файлы, на втором этапе (линковка) получается работоспособный вирус.
Заражение исходных текстов программ является логическим продолжением предыдущего метода размножения. При этом вирус добавляет к исходным текстам свой исходный код (в этом случае вирус должен содержать его в своем теле) или свой шестнадцатеричный дамп (что технически легче). Зараженный файл способен на дальнейшее распространение вируса только после компиляции и линковки (например, вирусы "SrcVir", "Urphin").
Вирусы без точки входа
Отдельно следует отметить довольно незначительную группу вирусов, не имеющих "точки входа" (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". При заражении системы они записывают свое тело в последний кластер логического диска. При заражении файла вирусы корректируют лишь номер первого кластера файла, расположенный в соответствующем секторе каталога. Новый начальный кластер файла будет указывать на кластер, содержащий тело вируса. Таким образом, при заражении файлов их длины и содержимое кластеров диска, содержащих эти файлы, не изменяется, а на все зараженные файлы на одном логическом диске будет приходиться только одна копия вируса.
До заражения данные каталога хранят адрес первого кластера файла, после заражения данные каталога указывают на вирус, т.е. при запуске файла управление получают не файлы, а вирус.
OBJ-, LIB-вирусы и вирусы в исходных текстах
Вирусы, заражающие библиотеки компиляторов, объектные модули и исходные тексты программ, достаточно экзотичны и практически не распространены. Всего их около десятка. Вирусы, заражающие OBJ- и LIB-файлы, записывают в них свой код в формате объектного модуля или библиотеки. Зараженный файл, таким образом, не является выполняемым и не способен на дальнейшее распространение вируса в своем текущем состоянии. Носителем же "живого" вируса становится COM- или EXE-файл, получаемый в процессе линковки зараженного OBJ/LIB-файла с другими объектными модулями и библиотеками. Таким образом, вирус распространяется в два этапа: на первом заражаются OBJ/LIB-файлы, на втором этапе (линковка) получается работоспособный вирус.
Заражение исходных текстов программ является логическим продолжением предыдущего метода размножения. При этом вирус добавляет к исходным текстам свой исходный код (в этом случае вирус должен содержать его в своем теле) или свой шестнадцатеричный дамп (что технически легче). Зараженный файл способен на дальнейшее распространение вируса только после компиляции и линковки (например, вирусы "SrcVir", "Urphin").
Компьютерная газета. Статья была опубликована в номере 34 за 1999 год в рубрике безопасность :: разное