в суровых условиях реальной жизни
Однако в суровых условиях реальной жизни этот элегантный прием заражения перестает работать, поскольку среднестатистическое UNIX-приложение содержит порядка десяти различных секций всех назначений и мастей.
Взгляните, например, на строение утилиты ls, позаимствованной из следующего дистрибьютива UNIX: Red Hat 5.0:
Name Start End Align Base Type Class 32 es ss ds fs gs
.init 08000A10 08000A18 para 0001 publ CODE Y FFFF FFFF 0006 FFFF FFFF
.plt 08000A18 08000CE8 dword 0002 publ CODE Y FFFF FFFF 0006 FFFF FFFF
.text 08000CF0 08004180 para 0003 publ CODE Y FFFF FFFF 0006 FFFF FFFF
.fini 08004180 08004188 para 0004 publ CODE Y FFFF FFFF 0006 FFFF FFFF
.rodata 08004188 08005250 dword 0005 publ CONST Y FFFF FFFF 0006 FFFF FFFF
.data 08006250 08006264 dword 0006 publ DATA Y FFFF FFFF 0006 FFFF FFFF
.ctors 08006264 0800626C dword 0007 publ DATA Y FFFF FFFF 0006 FFFF FFFF
.dtors 0800626C 08006274 dword 0008 publ DATA Y FFFF FFFF 0006 FFFF FFFF
.got 08006274 08006330 dword 0009 publ DATA Y FFFF FFFF 0006 FFFF FFFF
.bss 080063B8 08006574 qword 000A publ BSS Y FFFF FFFF 0006 FFFF FFFF
extern 08006574 08006624 byte 000B publ N FFFF FFFF FFFF FFFF FFFF
abs 0800666C 08006684 byte 000C publ N FFFF FFFF FFFF FFFF FFFF
Листинг 5 так выглядит типичная карта памяти нормального файла
Секция .data
расположена в самой "гуще" файла и, чтобы до нее добраться, вирусу придется позаботиться о модификации семи остальных секций, скорректировав их поля p_offset
(смещение секции от начала файла) надлежащим образом. Некоторые вирусы этого не делают, в результате чего зараженные файлы не запускаются.
С другой стороны, секция .data
рассматриваемого файла насчитывает всего 10h байт, поскольку львиная часть данных программы размещена в секции .rodata (секции данных, доступной только на чтение). Это – типичная практика современных линкеров, и большинство исполняемых файлов организованы именно так. Вирус не может разместить свой код в секции .data поскольку это делает его слишком заметным, не может он внедриться и в .rodata, т. к. в этом случае он не сможет себя расшифровать (выделить память на стеке и скопировать туда свое тело – не предлагать: для современных вирусописателей это слишком сложно). Да и смысла в этом будет немного. Коль скоро вирусу приходится внедряться не в конец, а в середину файла, уж лучше ему внедриться не в секцию данных, а в секцию .text, содержащую машинный код. Там вирус будет не так заменен (он об этом мы поговорим позже см. "Заражение посредством расширения кодовой секции файла").
Рисунок 3 0x005 типовая схема заражения исполняемого файла путем расширения его последней секции
Рисунок 4 0x009 внешний вид файла, зараженного вирусом PolyEngine.Linux.LIME.poly; вирус внедряет свое тело в конец секции данных и устанавливает на него точку входа. Наличие исполняемого кода в секции данных делает присутствие вируса чрезвычайно заметным.
Содержание Назад Вперед