СОМ-программа представляет собой участок кода и данных, начинающийся с исполняемой команды и занимающий не более 64Кбайт. Например, такую структуру имеет командный процессор COMMAND.СОМ операционной системы MSDOS, версий до 6.22 включительно.
ЕХЕ-программа имеет гораздо более сложную структуру. В начале файла ЕХЕ-программы располагается заголовок длиной 28 байт, содержащий следующие данные:
• MZiu — признак ЕХЕ-файла;
• PartPag — длина файла по модулю 512;
• PageCnt — длина файла в 512-байтовых страницах;
• ReloCnt — размер настроечной таблицы;
• HdrSize — размер заголовка;
• MinMem — минимум требуемой памяти;
• MaxMem — максимум требуемой памяти;
• Relo-SS — относительный сегмент стека;
• ExeSP — смещение указателя стека;
• ChkSum — контрольная сумма файла;
• ExelP — смещение точки входа;
• ReloCS — относительный сегмент точки входа;
• TablOff — смещение настроечной таблицы;
• Overlay — номер оверлейного сегмента.
Поля ReloCS и ExelP определяют местоположение точки входа в программу, поля ExeSP и ReloSS — местоположение стека, поля PartPag и PageCnt — размер корневого сегмента программы.
Вычисленный по PartPag и PageCnt размер программы может не совпадать с реальным размером файла. Такие программы называются «сегментированными» или «содержащими внутренние оверлеи». Грамотные авторы вирусов избегают заражать такие программы.
После заголовка может располагаться специальная таблица, точное местоположение которой определяется полем TablOff, а размер — полем ReloCnt. В этой таблице хранятся адреса тех слов в коде программы, которые модифицируются операционной системой во время загрузки программы.
Стандартные методы заражения.
Случай СОМ-программы. Тело вируса приписывается к концу файла, где-то внутри его сохраняются несколько (обычно, три) байтов оригинального начала программы, на их место записываются команды перехода на начало вируса. Когда вирус заканчивает выполнение предусмотренных им действий, он восстанавливает оригинальные байты начала программы и передает туда управление.
Случай ЕХЕ-программы. Тело вируса приписывается к концу файла, в заголовке его модифицируются значения полей, определяющих местоположение точки входа и размер программы (иногда еще — местоположения стека). В результате управление получает вирусный код. По окончании работы вирус, используя сохраненные при заражении значения измененных полей, осуществляет переход на оригинальное начало программы.
4. ОСНОВНЫЕ ВИДЫВИРУСОВ И СХЕМЫИХ ФУНКЦИОНИРОВАНИЯ
Среди всего разнообразия вирусов можно выделить следующие основные группы: - загрузочные - файловые - файлово-загрузочные 2.1. Загрузочные вирусы Что происходит, когда вы включаете компьютер? Первым делом управление передается программе начальной загрузки, которая хранится в постоянно запоминающем устройстве (ПЗУ) т.е. ПНЗ ПЗУ.Эта программа тестирует оборудование и при успешном завершении проверок пытается найти дискету в дисководе А: Всякая дискета размечена на т.н. секторы и дорожки. Секторы объединяются в кластеры, но это для нас несущественно.Среди секторов есть несколько служебных, используемых операционной системой для собственных нужд (в этих секторах не могут размещаться ваши данные). Среди служебных секторов нас пока интересует один - т.н. сектор начальной загрузки (boot-sector).В секторе начальной загрузки хранится информация о дискете – количество поверхностей, количество дорожек, количество секторов и пр. Но нас сейчас интересует не эта информация, а небольшая программа начальной загрузки (ПНЗ), которая должна загрузить саму операционную систему и передать ей управление.Таким образом, нормальная схема начальной загрузки следующая:ПНЗ (ПЗУ) - ПНЗ (диск) - СИСТЕМАТеперь рассмотрим вирус. В загрузочных вирусах выделяют две части - т.н. голову и т.н. хвост. Хвост, вообще говоря, может быть пустым.Пусть у вас имеются чистая дискета и зараженный компьютер, под которым мы понимаем компьютер с активным резидентным вирусом. Как только этот вирус обнаружит, что в дисководе появилась подходящая жертва - в нашем случае незащищенная от записи и еще не зараженная дискета, он приступает к заражению. Заражая дискету, вирус производит следующие действия:- выделяет некоторую область диска и помечает ее как недоступную операционной системе, это можно сделать по-разному, в простейшем и традиционном случае занятые вирусом секторы помечаются как сбойные (bad)- копирует в выделенную область диска свой хвост и оригинальный (здоровый) загрузочный сектор- замещает программу начальной загрузки в загрузочном секторе (настоящем) своей головой- организует цепочку передачи управления согласно схеме.Таким образом, голова вируса теперь первой получает управление, вирус устанавливается в память и передает управление оригинальному загрузочному сектору. В цепочкеПНЗ (ПЗУ) - ПНЗ (диск) - СИСТЕМАпоявляется новое звено:ПНЗ (ПЗУ) - ВИРУС - ПНЗ (диск) - СИСТЕМАМораль ясна: никогда не оставляйте (случайно) дискет в дисководе А. Мы рассмотрели схему функционирования простого бутового вируса, живущего в загрузочных секторах дискет. Как правило, вирусы способны заражать не только загрузочные секторы дискет, но и загрузочные секторы винчестеров. При этом в отличие от дискет на винчестере имеются два типа загрузочных секторов, содержащих программы начальной загрузки, которые получают управление. При загрузке компьютера с винчестера первой берет на себя управление программа начальной загрузки в MBR (Master Boot Record - главная загрузочная запись). Если ваш жесткий диск разбит на несколько разделов, то лишь один из них помечен как загрузочный (boot). Программа начальной загрузки в MBR находит загрузочный раздел винчестера и передает управление на программу начальной загрузки этого раздела. Код последней совпадает с кодом программы начальной загрузки, содержащейся на обычных дискетах, а соответствующие загрузочные секторы отличаются только таблицами параметров. Таким образом, на винчестере имеются два объекта атаки загрузочных вирусов - программа начальной загрузки в MBR и программа начальной загрузки в бут-секторе загрузочного диска. 2.2. Файловые вирусы Рассмотрим теперь схему работы простого файлового вируса. В отличие от загрузочных вирусов, которые практически всегда резидентны, файловые вирусы совсем не обязательно резидентны. Рассмотрим схему функционирования нерезидентного файлового вируса. Пусть у нас имеется инфицированный исполняемый файл. При запуске такого файла вирус получает управление, производит некоторые действия и передает управление «хозяину» (хотя еще неизвестно, кто в такой ситуации хозяин).Какие же действия выполняет вирус? Он ищет новый объект для заражения - подходящий по типу файл, который еще не заражен (в том случае, если вирус «приличный», а то попадаются такие, что заражают сразу, ничего не проверяя). Заражая файл, вирус внедряется в его код, чтобы получить управление при запуске этого файла. Кроме своей основной функции - размножения, вирус вполне может сделать что-нибудь замысловатое (сказать, спросить, сыграть) - это уже зависит от фантазии автора вируса. Если файловый вирус резидентный, то он установится в память и получит возможность заражать файлы и проявлять прочие способности не только во время работы зараженного файла. Заражая исполняемый файл, вирус всегда изменяет его код - следовательно, заражение исполняемого файла всегда можно обнаружить. Но, изменяя код файла, вирус не обязательно вносит другие изменения: - он не обязан менять длину файла - неиспользуемые участки кода - не обязан менять начало файлаНаконец, к файловым вирусам часто относят вирусы, которые «имеют некоторое отношение к файлам», но не обязаны внедряться в их код.Рассмотрим в качестве примера схему функционирования вирусов известного семейства Dir-II. Нельзя не признать, что появившись в 1991 г., эти вирусы стали причиной настоящей эпидемии чумы в России. Рассмотрим модель, на которой ясно видна основная идея вируса. Информация о файлах хранится в каталогах. Каждая запись каталога включает в себя имя файла, дату и время создания, некоторую дополнительную информацию, номер первого кластера файла и т.н. резервные байты. Последние оставлены «про запас» и самой MS-DOS не используются.При запуске исполняемых файлов система считывает из записи в каталоге первый кластер файла и далее все остальные кластеры. Вирусы семейства Dir-II производят следующую «реорганизацию» файловой системы: сам вирус записывается в некоторые свободные секторы диска, которые он помечает как сбойные. Кроме того, он сохраняет информацию о первых кластерах исполняемых файлов в резервных битах, а на место этой информации записывает ссылки на себя.Таким образом, при запуске любого файла вирус получает управление (операционная система запускает его сама), резидентно устанавливается в память и передает управление вызванному файлу. 2.3. Загрузочно-файловые вирусы Мы не станем рассматривать модель загрузочно-файлового вируса, ибо никакой новой информации вы при этом не узнаете. Но здесь представляется удобный случай кратко обсудить крайне «популярный» в последнее время загрузочно-файловый вирус OneHalf, заражающий главный загрузочный сектор (MBR) и исполняемые файлы. Основное разрушительное действие – шифрование секторов винчестера. При каждом запуске вирус шифрует очередную порцию секторов, а зашифровав половину жесткого диска, радостно сообщает об этом. Основная проблема при лечении данного вируса состоит в том, что недостаточно просто удалить вирус из MBR и файлов, надо расшифровать зашифрованную им информацию. Наиболее «смертельное» действие – просто переписать новый здоровый MBR. Главное - не паникуйте. Взвесьте все спокойно, посоветуйтесь со специалистами. 2.4. Полиморфные вирусы Большинство вопросов связано с термином «полиморфный вирус». Этот вид компьютерных вирусов представляется на сегодняшний день наиболее опасным.Полиморфные вирусы - вирусы, модифицирующие свой код в зараженных программах таким образом, что два экземпляра одного и того же вируса могут не совпадать ни в одном бите.Такие вирусы не только шифруют свой код, используя различные пути шифрования, но и содержат код генерации шифровщика и расшифровщика, что отличает их от обычных шифровальных вирусов, которые также могут шифровать участки своего кода, но имеют при этом постоянный код шифровальщика и расшифровщика.Полиморфные вирусы - это вирусы с самомодифицирующимися расшифровщиками. Цель такого шифрования: имея зараженный и оригинальный файлы вы все равно не сможете проанализировать его код с помощью обычного дизассемблирования. Этот код зашифрован и представляет собой бессмысленный набор команд. Расшифровка производится самим вирусом уже непосредственно во время выполнения. При этом возможны варианты: он может расшифровать себя всего сразу, а может выполнить такую расшифровку «по ходу дела», может вновь шифровать уже отработавшие участки. Все это делается ради затруднения анализа кода вируса.