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

0 ... 17 18 19 20 21 22 23 ... 102

"1

64Глава 2. Вирусы в UNIX, или Гибель Тч

лизированных данных. Внедряться сюда можно, но бессмысленно, поп загрузчик не настолько глуп, чтобы тратить драгоценное процессорно.» ЬСУ

на загрузку неинициализированных данных с медленного диска. Правц было бы сказать «последней значимой секции», но давайте не будем раться, это ведь не научная статья, верно?

Перед секций .bss обычно располагается секция .data, содержащая иннци зированные данные. Вот она-то и становится основным объектом вирусной. ки! Натравив дизассемблер на исследуемый файл, посмотрите — в какой ции расположена точка входа. И если этой секцией окажется секция данпых исследуемый файл с высокой степенью вероятности заражен вирусом.

При внедрении в a.out-файл вирус в общем случае должен проделать следующщ. действия:

1.Считав заголовок файла, убедиться, что это действительно а.оЩ-файл.

2.Увеличить поле adata на величину, равную размеру своего тела.

3.Скопировать себя в конец файла.

4.Скорректировать содержимое поля aentry для перехвата управления (если вирус действительно перехватывает управление таким образом).

Внедрение в ELF-файлы происходит несколько более сложным образом:

1.Вирус открывает файл и, считывая его заголовок, убеждается, что это действительно ELF-файл.

2.Просматривая Program HeaderTable, вирус отыскивает сегмент, наиболеепод-ходящий для заражения (для заражения подходит любой сегмент с атрибутом PLL0AD; собственно говоря, остальные сегменты более или менее подходят тоже, но вирусный код в них будет смотреться несколько странно).

3.Найденный сегмент «распахивается » до конца файла и увеличивается на величину, равную размеру тела вируса, что осуществляется путем синхрон ной коррекции полей pfilez и pmemz.

4.Вирус дописывает себя в конец заражаемого файла.

5.Для перехвата управления вирус корректирует точку входа в файл (е-е" либо же внедряет в истинную точку входа jmp на свое тело (впрочем, дика перехвата управления — тема отдельного большого разговора)-

Маленькое техническое отступление. Секция данных, как правило, имеет лишь два атрибута: атрибут чтения (read) и атрибут записи (write). исполнения (execute) у нее по умолчанию отсутствует. Означает ли • выполнение вирусного кода в ней окажется невозможным? Вопрос но1]рр-однозначного ответа. Все зависит от особенностей реализации конкретн Il0r цессора и конкретной операционной системы. Некоторые из них "r,l° аПря-отсутствие атрибута исполнения, полагая, что право исполнения к0*вар1йй1 мую вытекает из права чтения. Другие же возбуждают исключение,» s,i-завершая выполнение зараженной программы. Для обхода этой сиТУ са>ц>"! русы могут присваивать секции данных атрибут execute, выдавая Ttl поЗ?Г себя с головой; впрочем, такие экземпляры встречаются крайне редко.


о» большинство вирусоиисателей оставляет секцию данных с атрибута-

гой немаловажный и неочевидный на первый взгляд момент. Задумайтесь, изменится поведение зараженного файла при внедрении вируса в пепо-\еднюю секцию .data, следом за которой расположена .bss? А никак не изменится! Несмотря на то что последняя секция будет спроецирована совсем не по •м адресам программный код об этом «не узнает» и продолжит обращаться - неинициализированным переменным по их прежним адресам, теперь запятим кодом вируса, который к этому моменту уже отработал и возвратил ориги-напыюму файлу все бразды правления. При условии, что программный код спроектирован корректно и не закладывается па начальное значение неинициализированных переменных, присутствие вируса не нарушит работоспособности программы.

Однако в суровых условиях реальной жизни этот элегантный прием заражения перестает работать, поскольку среднестатистическое UNIX-приложенне содержит порядка десяти различных секций всех назначений и мастей.

Взгляните, например, на строение утилиты Is, позаимствованной из следующего дпетрибыотнва UNIX: Red Hat 5.0 (листинг 2.5).

Листинг 2.5. Так выглядит типичная карта памяти нормального файла

NameStartEnd AlignBaseTypoClass32csssdsfs gs

init08GG0A1008000A18 para0001pub1:CODEYFFFFFFFF0006FF-F FFFF

Dt080O0A1808000CE8 dword0002pub!CODEYFFFFFFFF0006FFFF FFFF

text08000CFO08004180 para0003pub~CODEYFFFFFFFF0006FFFF FFFF

fini0800418008004188 para0004pub".CODEYFFFFFFFF0006ГГТ FFFF

•rodata0800418808005250 dword0005publCONSTYFFFFFFFF0006ГГТ FFFF

data0800625G08006264 dword0006publDATAYFFFFFFFF0006FFFF TFFF

-tors080062640800626C dword0007publDATAYFFFFFFFF0006FF-F FFFF

ftors080C626C08006274 dword0008publDATAYFFFFFFFF0006FFFF FFFF

90t0800627408006330 dword0009publDATAYFFFFFFFF0006FF~F FFFF

5S080063B808006574 qwordOOOApublBSSYFFFFFFFF0006FFrF TFFF

terr,0800657408006624 byteС00ВpublNFFFFFFFFFFFFFFFF FFFF

s0800666C08006684 byte0O0CpublNFFFFFFFFFrFFFFFF FFFF

вип<ЦИЯ data Расположена в самой «гуще» файла, и, чтобы до нее добраться,

Рек "РВДстся позаботиться о модификации семи остальных секций, скор-

°°Раз ав их Поля P offset (смещение секции от начала файла) надлежащим

1ы Э01И екотоРые вирусы этого не делают, в результате чего зараженные фай-

11е запускаются. Вместе г

Носко ТСМ секция -data рассматриваемого файла насчитывает всего 10h байт, "Чи д- К Льви1,ая часть данных программы размещена в секции . rodata (сек-МснНЬ]х ых доступной только для чтения). Это — типичная практика совре-так. gM Л1нкеров, и большинство исполняемых файлов организованы именно iToCj] P-Vt не может разместить свой код в секции .data, поскольку это делает Чаеоц 11(,к°м замстным, не может ои внедриться и в .rodata, так как в этом слу-1°может себя расшифровать (выделить намять на стеке и скопировать

3«» 9?6


туда свое тело — не предлагать: для современных вирусописателей это слищ. ком сложно). Да и смысла в этом будет немного. Коль скоро вирусу приходит, ся внедряться не в конец, а в середину файла, уж лучше ему внедриться не в секцию данных, а в секцию .text, содержащую машинный код. Там вирус будет щ. так заметен (но об этом мы поговорим позже, см. далее «Заражение посредством расширения кодовой секции файла»).

СЖАТИЕ ЧАСТИ ОРИГИНАЛЬНОГО ФАЙЛА

Древние считали, что истина в вине. Они явно ошибались. Истина в том, что день ото дня программы становятся все жирнее и жирнее, а вирусы все изощреннее и изощреннее. Какой бы уродливый код ни выбрасывала на рынок фирма Microsoft, он все же лучше некоторых UNIX-подделок. Например, файл cat, входящий в FreeBSD 4.5, занимает более 64 Кбайт. Не слишком ли много для простенькой утилиты?!

Просмотр файла под hex-редактором обнаруживает большое количество регулярных последовательностей (в большинстве своем — цепочек нулей), которые либо вообще никак не используются, либо поддаются эффективному сжатию. Вирус, соблазнившись наличием свободного места, может скопировать туда свое тело, пускай — ему и придется «рассыпаться» на несколько десятков пятен. Если же свободное место отсутствует — не беда! Практически каждый исполняемый файл содержит большое количество текстовых строк, а текстовые строки легко поддаются сжатию. На первый взгляд, такой алгоритм заражения кажется чрезвычайно сложным, но, поверьте, реализовать простейший упаковщик Хаффмана намного проще того шаманства с раздвижками секций, что приходится делать вирусу для внедрения в середину файла. К тому же при таком способе заражения длина файла остается неизменной, что частично скрывает факт наличия вируса.

Рассмотрим, как происходит внедрение вируса в кодовый сегмент. В простейшем случае вирус сканирует файл на предмет поиска более или менее длинной последовательности команд NOP, использующихся для выравнивания программного кода по кратным адресам, записывает в них кусочек своего тела и добавляет команду перехода на следующий фрагмент. Так продолжается до тех пор, пока вирус полностью не окажется в файле. На завершающем этане заражения вирус записывает адреса «захваченных» им фрагментов, после чего передает управление файлу-носителю (если этого не сделать, вирус не сможет скопировать свое тело в следующий заражаемый файл, правда, пара особо изощренных вирусов содержит встроенный трассировщик, автоматически собирающий тело вируса на лету, но это чисто лабораторные вирусы и на свободе им не гулять).

Различные программы содержат различное количество свободного места, расходующегося на выравнивание. В частности, программы, входящие в базовым комплект поставки Free BSD 4.5, преимущественно откомпилированы с выравниванием на величину 4-х байт. Учитывая, что команда безусловного перехода в х86-системах занимает но меньшей мере два байта, втиснуться в этот скромный объем вирусу просто нереально. С операционной системой Red Hat 5.0 дела



0 ... 17 18 19 20 21 22 23 ... 102