Осторожно компьютерные вирусы

       

Изменение вирусами структуры памяти


Система управления памятью, встроенная в MS-DOS, является чисто символической, так как ее нормальная работа зависит от того, будут ли программы выполнять заранее оговоренные соглашения, или нет. Однако ничто не помешает программе стать “нарушителем”, полностью разрушив всю операционную систему или внеся в нее те или иные “незаконные” изменения.

Например, программа может запросить у MS-DOS блок памяти размером 10 Кбайт. В ответ соответствующая функция MS-DOS предоставит программе сегментный адрес выделенного блока. Используя полученный адрес как указатель на массив, программа может записать в этот массив не 10, а 20 или 30 Кбайт данных, и ничто не помешает ей в этом, так как MS-DOS не будет проверять значение указателя на предмет выхода за пределы массива.

Какие же изменения могут внести вирусы в структуру памяти?

Вспомним, как распределен первый мегабайт оперативной памяти в операционной системе MS-DOS:

Диапазон адресов

Описание

0000h:0000h



Векторы прерываний

0000h:0400h

Область данных BIOS

0000h:0500h

Область данных MS-DOS

xxxx:0000h

Область программ MS-DOS.

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

xxxx:0000h

Резидентная часть командного процессора COMMAND.COM

xxxx:0000h

Резидентные программы (если загружены)

xxxx:0000h

Запущенные прикладные программы

xxxx:0000h

Транзитная часть командного процессора COMMAND.COM

0A000h:0000h

Память видеоадаптера EGA

0B000h:0000h

Память монохромного видеоадаптера

0B800h:0000h

Память видеоадаптера CGA

0C800h:0000h

Внешнее ПЗУ или адреса периферийных устройств, отображаемые на память

0F600h:0000h

ПЗУ интерпретатора BASIC или адреса периферийных устройств, отображаемые на память

0FE00h:0000h

ПЗУ BIOS

Первый килобайт памяти занимает таблица векторов прерываний. Она содержит 256 элементов, имеющих размер 4 байта.
Таблица содержит адреса обработчиков прерываний, состоящие из компонент сегмента и смещения.

Таблица векторов прерываний - любимый объект для нападения вирусов. Вирусы могут изменять содержимое этой таблицы прерываний напрямую или с помощью соответствующего сервиса, предоставляемого операционной системой MS-DOS.

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

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

Область памяти с адресами 0000h:0400h - 0000h:04FFh занимает область данных BIOS. Это внутренние переменные BIOS. Здесь хранится важная информация, например, параметры жеских дисков, накопителей на гибких магнитных дисках, текущие параметры операционной системы и т. д. В некоторых случаях вирусы намеренно изменяют некоторые параметры, расположенные в этой области, нарушая нормальную работу операционной системы, или хранят собственные параметры и флаги. Например, вирусы могут отключать накопитель на гибком магнитном диске с целью затруднения загрузки MS-DOS с чистой дискеты.

В области памяти, которая начинается с адреса 0000h:0500h, располагается область данных MS-DOS. Здесь MS-DOS  хранит свои внутренние таблицы, переменные и структуры данных. Вслед за областью данных находятся модули системы ввода/вывода MS-DOS, обработчики прерываний MS-DOS, внутренние буферы и внутренние структуры данных, а также загружаемые драйверы.


После драйверов располагается резидентная часть командного процессора COMMAND.COM.

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

Далее в оперативной памяти располагаются резидентные программы и программа, которая выполняется в текущий момент времени.

В нижней части адресного пространства (до адреса 0A000h:0000h) находится транзитная часть командного процессора COMMAND.COM, которая может перекрываться выполняющейся программой.

Область адресов от 0A000h:0000h до 0C800h:0000h используется видеоадаптерами. Так как в этом диапазоне адресов может располагаться оперативная память (которая физически установлена в видеоадаптере), здесь тоже могут “жить” вирусы.

Вся оперативная память, принадлежащая MS-DOS, разделена на фрагменты, перед которыми расположены блоки управления памятью MCB (Memory Control Block). Внутри блока MCB хранится длина описываемого данным MCB фрагмента памяти. Следующий фрагмент памяти начинается сразу за предыдущим. При этом все блоки MCB связаны в список.

В ранних версиях MS-DOS формат блока MCB не был документирован, что, тем не менее, не останавливало разработчиков вирусов от попыток изменения структуры памяти на уровне этих блоков. Теперь же сведения о формате блока MCB можно почерпнуть из руководства программиста, полученного в Microsoft:

Смещение, байт

Размер, байт

Описание

0

1

Тип блока MCB (M или Z)

1

2

Сегментная компонента адреса владельца блока или 0, если блок описывает сам себя

3

2

Число параграфов в этом блоке (размер параграфа равен 16 байт)

5

11

Зарезервировано

Блоки MCB бывают двух типов - M и Z. M-блоки - это промежуточные блоки. Блок типа Z является последним блоком в списке и может быть только один.

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


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

Sayha.DieHard

Опасный резидентный шифрованный вирус. Перехватывает прерывания INT 10h, 13h, 21h. Вирус трассирует данные  прерывания для выяснения адресов оригинальных обработчиков  и  для попытки "внедрения" в цепочки обработчиков прерываний.

Когда происходит открывание ASM-файлов, вирус записывает в них следующий текст:

        .model small

        .code

        org 256

        s:      push    cs

                pop     ds

                call    t

        db      'Tе$'

        t:      pop     dx

                mov     ah,9

                int     33

                mov     ah,76

                int     33

        end s

Аналогично, при открывании файлов с расширением имени PAS в них записывается такой текст:

        begin

        write('Tе');

        end.

При установке графического режима с номером 13h (разрешение 320x200, 256 цветов) вирус рисует в центре экрана буквы "SW".

Если возникают ошибки при попытке записи на диск (переход за границу 64 Kбайт при работе с DMA или если данные были скорректированы с использованием ECC), вирус пытается их исправить!

В своем теле вирус одержит текстовые строки "SW Error", "SW DIE HARD 2"

Тщательно изучая структуру блоков MCB (например, при помощи программы MEM.EXE, которая входит в состав MS-DOS), при наличии достаточного опыта вы сможете обнаружить фрагменты памяти, созданные вирусами. Для этого вы должны знать, какие резидентные программы и драйверы загружаются через файлы AUTOEXEC.BAT и CONFIG.SYS, какие они создают блоки, а также понимать назначение блоков памяти, принадлежащих MS-DOS. Более полную информацию об этом вы можете получить из 18 тома нашей серии книг “Библиотека системного программиста”, которая называется “MS-DOS для программиста”.


Содержание раздела