Записки исследователя компьютерных вирусов
Шрифт:
Листинг 2.3. Фрагмент вируса UNIX.Head.b, внедряющегося в начало файла (оригинальные строки файла-жертвы выделены курсивом)
Некоторые весьма немногочисленные вирусы внедряются в середину файла, иногда перемешиваясь с его оригинальным содержимым. Естественно, для того, чтобы процесс репродуцирования не прекратился, вирус должен каким-либо образом помечать «свои» строки (например, снабжать их комментарием "# MY LINE ") либо же внедряться в фиксированные строки (например, начиная с тринадцатой строки каждая нечетная строка файла содержит тело вируса). Первый алгоритм слишком нагляден, второй – слишком нежизнеспособен (часть вируса
Таким образом, наиболее вирусоопасными являются начало и конец всякого файла. Их следует изучать с особой тщательностью, не забывая о том, что вирус может содержать некоторое количество «отвлекающих» команд, имитирующих ту или иную работу.
Встречаются и вирусы-спутники, вообще не «дотрагивающиеся» до оригинальных файлов, но во множестве создающие их «двойников» в остальных каталогах. Поклонники чистой командной строки, просматривающие содержимое директорий через Is, могут этого и не заметить, так как команда Is вполне может иметь «двойника», предусмотрительно убирающего свое имя из списка отображаемых файлов.
Не стоит забывать и о том, что создателям вирусов не чуждо элементарное чувство беспечности, и откровенные наименования процедур и/или переменных в стиле «Infected», «Virus», «ZARAZA» – отнюдь не редкость.
Иногда вирусам (особенно полиморфным и зашифрованным) требуется поместить часть программного кода во временный файл, полностью или частично передав ему бразды правления. Тогда в теле скрипта появляется команда chmod+х, присваивающая файлу атрибут исполняемого. Впрочем, не стоит ожидать, что автор вируса окажется столь ленив и наивен, что не предпримет никаких усилий для сокрытия своих намерений. Скорее всего, нам встретится что-то вроде chmod $ attr IFileName.
Таблица 2.1. Сводная таблица наиболее характерных признаков наличия вируса с краткими комментариями
Листинг 2.4. Ключевой фрагмент Perl-вируса UNIX.Demo
Эльфы в заповедном лесу
За всю историю существования UNIX было предложено множество форматов двоичных исполняемых файлов, однако к настоящему моменту в более или менее употребляемом виде сохранились лишь три из них: a.out, COFF и ELF.
Формат a.out (Assembler and link editor OUTput files) – самый простой и наиболее древний из трех перечисленных, появился еще во времена господства PDP-11 и VAX. Он состоит из трех сегментов:.text (сегмента кода), data (сегмента инициализированных данных) и. bss (сегмента неинициализированных данных), – двух таблиц перемещаемых элементов (по одной для сегментов кода и данных), таблицы символов, содержащей адреса экспортируемых/импортируемых функций, и таблицы строк, содержащей имена последних. К настоящему моменту формат a.out считается устаревшим и практически не используется. Краткое, но вполне достаточное для его освоения руководство содержится в man'e Free BSD. Также рекомендуется изучить включаемый файл a.out.h, входящий в комплект поставки любого UNIX-компилятора.
Формат COFF (Common Object File Format) – прямой наследник a.out – представляет собой существенно усовершенствованную и доработанную версию последнего. В нем появилось множество новых секций, изменился формат заголовка (и в том числе появилось поле длины, позволяющее вирусу вклиниваться между заголовком и первой секцией файла), все секции получили возможность проецироваться по любому адресу виртуальной памяти (для вирусов, внедряющихся в начало и/или середину файла, это актуально) и т. д. Формат COFF широко распространен
Формат ELF (Executable and Linkable Format, хотя не исключено, что формат сначала получил благозвучное название, под которое потом подбиралась соответствующая аббревиатура, – среди UNIX-разработчиков всегда было много толкиенистов) очень похож на COFF и фактически является его разновидностью, спроектированной для обеспечения совместимости с 32– и 64-разрядными архитектурами. В настоящее время – это основной формат исполняемых файлов в системах семейства UNIX. He то чтобы он всех сильно устраивал (та же Free BSD сопротивлялась нашествию Эльфов, как могла, но в версии 3.0 была вынуждена объявить ELF-форматом, используемый по умолчанию, поскольку последние версии популярного компилятора GNU С древних форматов уже не поддерживают), но ELF – это общепризнанный стандарт, с которым приходится считаться, хотим мы того или нет. Поэтому в настоящей главе речь главным образом пойдет о нем. Для эффективной борьбы с вирусами вы должны изучить ELF-формат во всех подробностях. Вот два хороших руководства на эту тему:(«Executable and Linkable Format – Portable Format Specification») и(«Linux Viruses – ELF File Format»).
He секрет, что у операционных систем Windows NT и UNIX много общего, и механизм заражения ELF/COFF/a.out-файлов с высоты птичьего полета ничем не отличается от механизма заражения форматов семейства new-exe. Тем не менее, при всем поверхностном сходстве между ними есть и различия.
Существует по меньшей мере три принципиально различных способа заражения файлов, распространяемых в формате a.out:
1. «Поглощение» оригинального файла с последующей его записью в tmp и удалением после завершения выполнения (или «ручная» загрузка файла-жертвы как вариант).
2. Расширение последней секции файла и дозапись своего тела в ее конец.
3. Сжатие части оригинального файла и внедрение своего тела на освободившееся место.
Переход на файлы форматов ELF или COFF добавляет еще четыре:
1. Расширение кодовой секции файла и внедрение своего тела на освободившееся место.
2. Сдвиг кодовой секции вниз с последующей записью своего тела в ее начало.
3. Создание своей собственной секции в начале, середине или конце файла.
4. Внедрение между файлом и заголовком.
Внедрившись в файл, вирус должен перехватить на себя управление, что обычно осуществляется следующими путями:
– созданием собственного заголовка и собственного сегмента кода/данных, перекрывающего уже существующий;
– коррекцией точки входа в заголовке файла-жертвы;
– внедрением в исполняемый код файла-жертвы команды перехода на свое тело;
– модификацией таблицы импорта (в терминологии a.out – таблицы символов) для подмены функций, что особенно актуально для Stealth-вирусов.
Всем этим махинациям (кроме приема с «поглощением») очень трудно остаться незамеченными, и факт заражения в подавляющем большинстве случаев удается определить простым визуальным просмотром дизассемблерного листинга анализируемого файла. Подробнее об этом мы поговорим чуточку позже, а пока обратим свое внимание на механизмы системных вызовов, используемые вирусами для поддержания своей жизнедеятельности.
Для нормального функционирования вирусу необходимы по меньшей мере четыре основных функции для работы с файлами (как то: открытие/закрытие/
С Д. Том 16
16. Сердце дракона
Фантастика:
боевая фантастика
рейтинг книги
Ротмистр Гордеев 2
2. Ротмистр Гордеев
Фантастика:
попаданцы
альтернативная история
рейтинг книги
Хуррит
Фантастика:
героическая фантастика
попаданцы
альтернативная история
рейтинг книги
Наследник с Меткой Охотника
1. Десять Принцев Российской Империи
Фантастика:
попаданцы
альтернативная история
аниме
рейтинг книги
Двойник Короля
1. Двойник Короля
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Последняя Арена 3
3. Последняя Арена
Фантастика:
постапокалипсис
рпг
рейтинг книги
Третий. Том 2
2. Отпуск
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Возлюби болезнь свою
Научно-образовательная:
психология
рейтинг книги
