Структура бутового вируса
🕛 10.02.2009, 13:17
Бутовые вирусы являются весьма специализированной разновидностью резидентных файловых вирусов. Упрощенно бутовый вирус можно представить себе как специализированный резидентный вирус, который заражает единственный "файл" - загрузочный сектор гибкого или жесткого диска. Четкой границы между резидентными файловыми вирусами и бутовыми вирусами не существует: в последнее время появились гибриды, сочетающие заражение файлов с заражением бут-сектора винчестера. Это подчеркивает близость основных принципов организации этих двух типов вирусов.Этот тип вирусов распространяется, инфицируя дискеты, причем как загружаемые (т.е. содержащие копию MS DOS), так и незагружаемые (т.е. содержащие любую информацию). Заражение незагружаемых дискет связано с определенным психологическим расчетом, который, к сожалению, слишком часто оправдывается: при перезагрузке MS DOS пользователи обычно забывают проверить, вставлена ли дискета в дисковод A, и часто перезагрузка выполняется с вставленной в указанный дисковод дискетой, с которой вирус и попадает на винчестер.
Инфицированная дискета всегда содержит часть кода вируса в бут-секторе, поэтому бутовые вирусы легко обнаружить. При просмотре бут-сектора дискеты на незараженном компьютере легко видеть изменения загрузчика (дамп стандартного бут-сектора приведен в прил.5). Структура стандартного загрузчика лишь незначительно меняется от версии к версии MS DOS, поэтому изменения легко выявить визуально (особенно первых трех байтов, содержащих команду JMP на начало загрузчика) или с помощью подходящей программы (Scan, Aidstest и др.). Такая проверка должна обязательно проводиться для всех поступающих дискет.
Как уже указывалось, файловые вирусы обычно состоят из одного сегмента. Впрочем, первую команду JMP, подставляемую большинством файловых вирусов, дописывающих свое тело в конец COM-файла, можно рассматривать как вырожденный сегмент. Бутовый вирус всегда состоит из нескольких сегментов. Обычно таких сегментов два, и мы будем называть их головой и хвостом.
Положение головы бутового вируса на дискете определено однозначно: она всегда расположена в бут-секторе и занимает ровно сектор. На винчестере ситуация немного сложнее: голова бутового вируса может располагаться в одном из его двух бут-секторов - главном (MBR - Master Boot Record, расположенном по абсолютному дисковому адресу 0/0/1) или бут-секторе логического диска С, обычно занимающего первый сектор соответствующего логического диска. Для наиболее распространенных 40 M винчестеров это обычно абсолютный сектор 18 (при 17 секторах на трек его адрес равен 1/0/1).
Хвост бутового вируса может располагаться в разных местах, например: в кластерах, отмеченных на диске как сбойные и тем самым исключенных из дальнейшего распределения (псевдосбойные кластеры); в последних физических секторах дискеты или винчестера, поскольку они обычно всегда свободны (при этом вирус может не отмечать их как занятые, предполагая, что его никто не затрет); в неиспользуемых блоках FAT, главного каталога или одного из подкаталогов; на дополнительных дорожках дискеты или винчестера (40 и последующие дорожки для 360К дискет).
Положение хвоста в большинстве случаев можно определить глобальным контекстным поиском по дискете или винчестеру (исключением является случай использования для хвоста дополнительных дорожек на дискете или винчестере).
Для всех бутовых вирусов механизм заражения однотипен. Когда MS DOS загружается с зараженного диска, бутовый вирус получает управление и сначала копирует себя в старшие адреса памяти. Затем он уменьшает размер памяти, заменяя значение в слове 0:413h (40:13h), которое можно получить, вызвав системную функцию int 12h, с тем, чтобы защитить резидентную часть вируса, и 13h с тем, чтобы перехватывать обращения к диску. Таким образом, при любом обращении к диску управление получает обработчик этого прерывания, составляющий основную часть тела вируса. После этих действий вирус запускает стандартный системный загрузчик, который загружает IBMBIO.COM и IBMDOS.COM (или IO.SYS и MSDOS.SYS), т.е. происходит стандартная загрузка системы.
Получив управление по прерыванию по чтению, вирус анализирует, относится оно к дискете или к винчестеру. Если это прерывание относится к дискете, то сначала вирус проверяет, заражена уже данная дискета или нет. Для этой цели считывается бут-сектор и проверяется его содержимое. Если дискета еще не заражена, то вирус заражает дискету, а затем обрабатывает команду READ. В случае, если дискета уже заражена, вирус сразу переходит к обработке команды READ; так же он поступает в случае, если дискета защищена от записи.
Что касается места, в котором бутовый вирус прячет свой хвост, то, как было отмечено выше, оно различается от вируса к вирусу. Наиболее часто бутовые вирусы размещают свой хвост в свободном кластере(ах), помечаемом как сбойный. Последнее необходимо для того, чтобы занятый вирусом кластер(ы) не был использован MS DOS при создании нового файла и, вместе с тем, является неплохим методом маскировки, поскольку пользователи обычно плохо представляют структуру диска и не следят за количеством сбойных кластеров на нем.
Еще раз подчеркнем, что бутовые вирусы инфицируют любые дискеты, а не только системные, по скольку с несистемной дискеты также может выполняться попытка загрузки MS DOS. Чаще всего такая ситуация возникает после зависания операционной системы. Если при перезагрузке инфицированная дискета окажется в "готовом" дисководе А, то естественно, загрузка будет сначала выполняться с нее. В этом случае программа начальной загрузки считывает зараженный бут-сектор и передает ему управление. Вирус загружает себя в оперативную память и имитирует сообщение, выдаваемое в этом случае стандартным загрузчиком:
Non system disk
При этом, если пользователь откроет дисковод с дискетой и нажмет клавишу Enter (Ввод), то вирус останется в памяти, заразит винчестер и в дальнейшем будет заражать все вставляемые дискеты, к которым производится хотя бы одно обращение (достаточно команды DIR). Поскольку все бутовые вирусы перехватывают прерывание 13h, они обычно конфликтуют с драйверами, поддерживающими нестандартные форматы (например, 720K). В лучшем случае при этом происходит зависание системы или выдача сообщения о делении на нуль. В худшем случае операционная система остается работоспособной, на дискету что-то пишется, но потом ничего прочитать с нее нельзя. Особое внимание стоит обратить на тот факт, что некоторые бутовые вирусы перехватывают прерывание с клавиатуры и могут пережить в оперативной памяти мягкую перезагрузку (т.е. перезагрузку с помощью нажатия клавиш Ctrl-Alt-Del). Из выявленных в CCCР вирусов к этому типу относится вирус WM-1F.JSH (Joshy).
Как уже отмечалось, голова бутового вируса всегда находится в бут-секторе, и для контроля дискет на зараженность необходимо просмотреть содержимое бут-сектора. Поскольку подавляющее большинство дискет не является загружаемыми, целесообразно вакцинировать их с помощью специальной бутовой вакцины VitaminB, разработанной А.В.Сессой (cм. Софтпанорама, т.3, No. 2).
Следует отметить, что число известных чисто бутовых вирусов намного меньше, чем файловых и, кроме того, скорость их размножения ниже (число дискет заведомо меньше, чем количество файлов на них). В целом, заражение "чистым" бутовым вирусом является признаком беспечности и недостаточной квалификации пользователя в большей степени, чем заражение файловым вирусом. При соблюдении приведенных выше несложных рекомендаций его можно полностью исключить.