Вирусы в UNIX, или Гибель Титаника II


Заражение посредством расширения последней секции файла - часть 3


Однако в суровых условиях реальной жизни этот элегантный прием заражения перестает работать, поскольку среднестатистическое 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; вирус внедряет свое тело в конец секции данных и устанавливает на него точку входа. Наличие исполняемого кода в секции данных делает присутствие вируса чрезвычайно заметным.




- Начало -  - Назад -  - Вперед -



Книжный магазин