Вредоносные программы

09/17/94 07:22pm virusi.lek
Ф.Н.Шерстюк "Вирусы и антивирусы на компьютере IBM PC" серия "Библиотека информационной технологии" выпуск 2 М. Инфоарт 1991г.

Вредоносные программы.

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

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

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

  3. Собственно вирусы.

КОМПЬЮТЕРНЫЙ ВИРУС - программа, обладающая способностью к скрытому саморазмножению в среде СТАНДАРТНОЙ ОС, путем включения прямо или косвенно в исполняемый код своей, возможно модифицированной, копии, сохраняющий способность к дальнейшему размножению.

Классификация по последствиям:

  1. Отказ от выполнения функции;

  2. Выполнение функции не предусмотренной программой;

  3. Замедление выполнения программы;

  4. Раздражающие воздействия.

ПРИМЕЧАНИЕ: Вирус НЕ МОЖЕТ вывести из строя устройство, параметрами которого он не может управлять на физическом уровне, но к сожалению многие современные устройства позволяют изменять свои параметры программно!

Классификация по месту нахождения:

  1. Бутовые - заражают программу начальной загрузки;

  2. Файловые - заражают исполняемые файлы;

  3. Драйверные - заражают драйверы или запускают себя путем включения в config.sys дополнительной строки;

  4. Пакетные - написаны или используют язык управления заданиями;

  5. Компилируемые - включают свой код в исходный текст программы перед ее компиляцией;

  6. Сетевые (черви)- самостоятельно распространяются по сетям передачи данных.

  7. Специализированные системные - заражают системные файлы (io.sys, msdos.sys, command.com) не удлиняя их.

  8. В отдельную группу можно отнести вирусы, поражающие стандартные антивирусные системы.

ПРИМЕЧАНИЯ: Вирус не может заразить что-нибудь, пока он не получит управление.
Наиболее распространены бутовые, файловые и сетевые вирусы.

Бутовый (загрузочный) вирус

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

При загрузке ОС в начале загружается и исполняется вирус а уже потом запускается истинная программа начальною загрузки. Таким образом компьютер оказывается зараженным изначально. При попытке прочитать или записать BOOT - сектор вирус переадресует обращение к резервной области, делая свое обнаружение практически невозможным. Избавиться от вируса можно единственным способом - осуществить перезагрузку системы со стерильной дискеты посредством кнопки "сброс" или выключения питания с последующей переустановкой ОС. Рекомендуется хранить копии загрузочных секторов (на жестком диске их неменее двух) на дискете и при возникновении подозрения осуществлять их копирование, предварительно перезагрузившисть с дискеты.

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

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

Сетевые вирусы (черви)

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

Структурно любой вирус состоит из четырех частей:

  1. Установочная часть - с ее помощью вирус поподает в память ЭВМ;

  2. Распространяющая часть - осуществляет подключение вируса к файлам;

  3. Активирующая - описывает условия активности вируса;

  4. Основная часть - содержит алгоритм вредительской деятельности вируса.

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

Обнаружение вирусов:

  1. По нежелательным эффектам - ручной метод, требует от пользователя особой внимательности (реально практически не используется);

  2. По сигнатурам - специализированные антивирусные программы;

  3. По внешним параметрам - ревизоры и стражи (хранят параметры файлов и осуществляют сравнение реальных параметров с заявленными);

  4. В момент внедрения - резидентные антивирусы (протоколируют обращения к внешней памяти или просят подтверждения операций).

  5. Эвристический анализ - по "странностям" в алгоритме программы (например по факту выполнения попытки изменения настроек систем непосредственно не относящихся к открываемому файлу).

Стражи

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

СТРАЖ - специальная программа, подключаемая к исполняемому модулю и сравнивающая его действительные параметры (длину, контрольную сумму) с параметрами на момент установки.

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

1 При загрузке файл подвергается настройке. Информация для настройки содержится в "RELOCATION TABLE":

смещение

название

содержимое

00h

sign

тип файла - для EXE = 5A4Dh, COM = любое другое значение

02h

partpag

длина недозаполненного сектора

04h

pagecnt

длина файла в секторах, включая неполный

06h

relocnt

количество элементов в таблице размещения

08h

hdrsize

длина заголовка в параграфах (параграф = 16 байтам)

0Ah

minmem

минимальный объем дополнителиной памяти в параграфах

0Ch

maxmem

максимальный объем дополнителиной памяти в параграфах

0Eh

reloss

начальное значение сегмента стека (SS)

10h

exesp

начальное значение указателя стека (SP)

12h

chksum

контрольная сумма

14h

exeip

стартовый адрес (IP)

16h

relocs

начальное значение сегмента кода (CS)

В соответствии с таблицей длина исполняемого файла должна быть равна 512*(pagecnt-1)+partpag, но в каталоге может быть указана большая величина. Это объясняется тем, что к файлу может быть присоединена информация для отладчика, оверлейные модули или прочая информация. После дозаписи стража эта информация будет считаться загружаемой частью и модифицированная программа не поместится в память.
Если решение о присоединении принято, то необходимо изменить ячейки: partpag=(lf+511) mod 512 и pagecnt=(lf dev 512)+1, где lf - длина полученного файла си всеми добавками.

2 При загрузке программы в память ей выделяется участок памяти, начинающийся с граници параграфа. И в начале участка создается "Префикс программного сегмента" - Program Segment Prefix длиной 256 байт.
Далее осуществляется настройка программы и ее выполнение:

настройка COM файла

настройка EXE файла

CS=PSP

CS=relocs+PSP+10h

DS=PSP

DS=PSP

ES=PSP

ES=PSP

SS=PSP

SS=reloss+PSP+10h

AX=некоторая информация

AX=некоторая информация

SP=FFFEh (или меньшее значение)

SP=exesp

IP=100h

IP=exeip

Для получения управления стражем необходимо для COM файла записать в его начало команду безусловного перехода на его начало JMP <адрес>, естественно сохранив то что там было; а для EXE файла изменить поля relocs и exeip, кроме этого может понадобиться изменение reloss и exesp для защиты стража от повреждения стеком.

3 Для осуществления проверки страж должен знать имя файла и путь к нему. Эта информация может быть указана при присоединении, но лучше получить ее из PSP (это возможно не всегда).
В сегменте PSP со смещения 2Ch находится ENVIRONMENT - сегмент переменных среды, состоящий из стандартной и нестандартной частей.

Стандартная часть состоит из нескольких текстовых строк, разделенных кодом 00h, и содержащих информацию о месте расположения command.com, промпте, путях поиска исполняемых файлов ...

Заканчивается стандартная часть пустой строкой (за последней записью стоит код 00h дважды).
Слово, стоящее за стандартной частью определяет количество строк в нестандартной. Если это значение 0001h, то обычно далее указывается строка, определяющая путь к данному файлу. Строка как и в стандартной части заканчивается кодом 00h.
Если путь определить не удалось, то контроль не производится.

4 После выполнения контрольных операций (контролировать надо информацию на диске а не в памяти) страж должен передать управление прграмме - хозяйке.

Если это COM файл, то восстанавливаются значения CS, DS, ES, AX (при запуске страж должен помещать их в стек) и байты, замененные командой JMP <адрес> (в памяти а не в файле); затем передать управление по адресу PSP:100h.
Если программа в EXE формате, то восстанавливают вначале регистры DS, ES, AX; затем SS и SP, причем с помощью команд MOV для устранения сбоя при выполнения аппаратного прерувания; в завершении осуществляют "далекий" JMP <адрес> (данные для перехода берутся из таблици загрузки при установке стража).

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

Такое решение может оказаться полезным, т.к. многие вирусы осуществляют контроль на повторное заражение.

Некоторые соображения о стратегии вируса:

  1. Вирус не должен заражать уже инфицированную (им) программу;

  2. Моменты установки вируса в памяти и дальнейшего его распространения должны быть разделены во времени;

  3. При установке вирус должен проверять инфицированность (собой) ОС;

  4. Должен существовать инкубационный период от момента заражения программы до момента инфицирования ОС.


Stay-at-home