Вирусы в загружаемых драйверах
Драйвер является расширением операционной системы, предназначенным, как правило, для работы с тем или иным периферийным устройством. Обычно в составе любой операционной системы имеется набор драйверов, предназначенных для разных устройств.
Что касается операционной системы MS-DOS, то для нее все драйверы можно разделить на встроенные в ядро и подгружаемые через файл CONFIG.SYS.
Встроенные и подгружаемые драйверы после загрузки объединяются в цепочку, адрес которой можно найти с использованием недокументированных средств, описанных нами в 18 томе “Библиотеки системного программиста”.
Для того чтобы понять, каким образом вирус может заразить драйвер, вспомним, что в самом начале драйвера находится заголовок следующего формата:
Смещение, байт | Размер, байт | Описание | |||
0 | 4 | Указатель на заголовок драйвера, следующего в цепочке. Если смещение адреса следующего драйвера равно 0FFFFh, это последний драйвер в цепочке | |||
4 | 2 | Атрибуты драйвера | |||
6 | 2 | Смещение программы стратегии драйвера | |||
8 | 2 | Смещение программы обработки прерывания для драйвера | |||
0Ah | 8 | Имя устройства для символьных устройств или количество обслуживаемых устройств для блочных устройств |
Обратите внимание на поля смещений программы стратегии и обработки прерывания драйвера. Эти поля используются операционной системой MS-DOS для вызова драйвера.
Вызов драйвера представляет собой двухступенчатый процесс.
Вначале операционная система вызывает программу стратегии, пользуясь смещением, полученным из заголовка драйвера (поле со смещением 6). Перед этим она формирует в своей области данных запрос, передавая программе стратегии адрес соответствующего блока данных в регистрах ES:BX. Программа стратегии обычно очень проста, так как ее задача заключается в запоминании адреса блока данных, содержащего запрос, в области памяти, принадлежащей драйверу.
Запрос операционной системы к драйверу содержит заголовок, имеющий фиксированный формат и длину 13 байт, а также структуру переменного размера и формата, которые зависят от выполняемой функции (переменная область запроса).
Формат первой области запроса приведен ниже:
Смещение, байт |
Размер, байт |
Описание |
0 |
1 |
Общий размер блока запроса в байтах |
1 |
1 |
Номер устройства. Используется для блочных устройств; указывает, с каким именно устройством (из числа обслуживаемых данным драйвером) будет работать операционная система |
2 |
1 |
Код команды, которую требуется выполнить |
3 |
2 |
Слово состояния устройства. Заполняется драйвером перед возвращением управления операционной системе |
5 |
8 |
Зарезервировано |
Заражение драйвера, загруженного в оперативную память, выполняется достаточно просто. Вирус находит в цепочке драйверов жертву и изменяет заголовок драйвера, либо подменяет несколько команд, расположенных в начале программ стратегии и обработки прерывания. После этого вирус становится способен контролировать выполнение всех команд, поступающих в драйвер.
Dir-II (1,2)
Неопасные резидентные вирусы, встраивающиеся в цепочку дисковых драйверов.
Вирусы записывают свой код в последний кластер диска. Для файлов с расширениями имени COM и EXE устанавливают указатели первого кластера данных на последний кластер диска, содержащий вирусный код
Заражение файла с драйвером выполняется примерно также, как и заражение файла обычной исполнимой программы с расширением имени EXE. Для определения смещения программ стратегии и прерывания вирус должен проанализировать заголовок драйвера, который находится в самом начале файла, содержащего драйвер. Дальнейшие действия вируса очевидны - замена нескольких начальных команд и дописывание в конец файла вирусного кода.
ExeHeader.Dragon
Инсталлируется в память и внедряется в цепочку дисковых драйверов.
Содержит в своем теле строку "DRAGON-2 Anti"