Раздел: Документация
0 ... 23 24 25 26 27 28 29 ... 102 84 Глава 2. Вирусы в UNIX, или Гибель Титан статическом анализе). Вместе с тем таких вирусов пока существует немНо (да и те — сплошь лабораторные), так что никаких поводов для паники п ° нет. Л вот шифрование критических к раскрытию участков вирусного т 9 встречается гораздо чаще. Однако для дизассемблера IDA PRO это не бог вес/ какая сложная проблема, и даже многоуровневая шифровка снимается 6езща лейшего умственного и физического напряжения.
coot ж:г: LINUX -2-ITl-j sub..8e4S4th-6Tp - LINUX - sys lseek : LINUX - o!d MBap Рис. 2.10. Фрагмент файла, зараженного вирусом VirTool.Linux.Mmap.443, демаскирующим свое присутствие прямым обращением к native-API операционной системы Впрочем, на каждую старуху есть проруха, и IDA Pro тому не исключение. При нормальном развитии событий IDA Pro автоматически определяет имена вы зываемых функций, оформляя их как комментарии. Благодаря этому замеча тельному обстоятельству для анализа исследуемого алгоритма нет нужды по стоянпо лезть в справочник. Такие вирусы, как, например, Linux.ZipWorm, не мо. ----------.....---— —---,-------....... .....----1 ---- ----гI ..р смириться с подобным положением дел и активно используют снециаль ------(.ZP IDA приемы программирования, сбивающие дизассемблер с толку. Тот же Linux-ZP Worm проталкивает номера вызываемых функций через стек, что вводт в замешательство, лишая ее возможности определения имен последних (-тинг 2.15). Листинг 2.15. .text:080483C0 .lext:080483C2 .text:080483C4 ,text:080483C6 Фрагмент вируса Linux.ZipWorm, активно и небезуспешно противостоящего дизассемблеру IDA PRO push push sub pop 13h 2 ecx. edx 08OJ83C7 .text С80483С8 pop eax ; // FAX := 2. эго вызов fork int 80h ; LINUX - <—IDA не смогла определить лмя вызова! t-J:gt*70 sub 8049278 IDfi View-fi proc near -2-1 lea inl jb rein endp : CODE XREF: sub 89C9C20-3CTp si;b .804967t>87i[» eax. large ds:8Fl)h aflh: LINUX - short loc 8849268 align 4 jmp loc 88537E8 align 4 \ II HOD! 1 N CODE HREF: c.ib..8049284*Sii procnear CODE XREF sub 3i!4<i8;U*25T. . :;иЬ..8й49.?!:(1-1.:-В1:) . leaeax. large ds:0M)h int80h ; LINUX - jbshort loc 88492/C retn endp ,e: :»927П : ------- Sfc»K loc 804927C 2 08049284 "08049284 1*1:08049284 „ 08049284 sub 8049284 1ех1:в8049284 text 08049284 text-081)4928(1 te*t:.08049?8C texl 0804928E „ „„ text:0804928E sub 884928t text:0804928E texl:0804928E . -------- -88949276: svfc .8849270-6 Рис. 2.11. Фрагмент «честного» файла cat из комплекта поставки Free BSD, аккуратно размещающего native-API вызовы в функциях-обертках С одной стороны, вирус действительно добился поставленной перед ним цели, и днзассемблерный листинг с отсутствующими автокомментариями с первого приступа не возьмешь. Но давайте попробуем взглянуть на ситуацию под другим углом. Сам факт применения антиотладочных приемов уже свидетельствует если не о заражении, то, во всяком случае, о ненормальности ситуации. Так что за противодействие анализу исследуемого файла вирусу приходится расплачиваться ослабленной маскировкой (в программистских кулуарах по этому случаю обычно говорят «из зараженного файла вирусные уши торчат»). Уши будут торчать еще и потому, что большинство вирусов никак не заботится 0 создании стартового кода или хотя бы плохонькой его имитации. В точке входа «честной» программы всегда (ну, или практически всегда) расположена нормальная функция с классическим прологом и эпилогом, автоматически распознаваемая дизассемблером IDA Pro (листинг 2.16). Лист Миг 2.16. Пример нормальной стартовой функции < te080480B8 start «*Е р р -ext:080480BB 58048136 ЗВ start I с классическим прологом и эпилогом proc near mov sub ret endp ebp. esp. esp OCh 86 Глава 2. Вирусы в UNIX, или Гибель Титаник ---HJKgj В некоторых случаях стартовые функции перелают бразды правления ] startjnain и заканчиваются по hit без ret. Это вполне нормальное явлец v «Вполне», потому что очень многие вирусы, написанные на ассемблере, полу" чают в «подарок» от линкера такой же стартовый код. Поэтому присутст стартового кода в исследуемом файле не дает нам никаких оснований счц-п * его здоровым (листинг 2.17).1 Листинг 2.17. Альтернативный пример нормальной стартовой функции .text.08048330 .text:08048330 .text-.08048330 .text:08048332 .text:08048333 .text:08048335 .text .-08048338 .text .-08048339 ,text:0804833A ,text:0804833B .text:08048340 .text-.08048345 .text -.08048346 .text-.08048347 .text:0804834C .text: 08048351 .text:08048352 .text:06C48353 .text.08048353 public start start start proc near xor pop mov and push push push PLiSh DUSh pusn push push call hit ncp nop endp ebp esi ecx esp eax esp edx offset offset ecx os". offset ebp esp 0FFFFFFF8h sub 804859C sud 8C482BC loc 8048430 llbc start main Большинство зараженных файлов выглядит иначе. В частности, стартовый код вируса PolyEngine.Linux.LIME.poly (листинг 2.18). Листинг 2.18. Стартовый код вируса PolyEngine.Linux.LIME.poly .data:080499Cl LIMLEND: .data:080499Сjmoveax.4 .data:080499C6movebx.1 .data:080499CB" movecx.offset genjnsg .data:08049900movedx.20h .data:080499D5int80h .data-.0804990/movecx.32h Alternative name is main "Generates 50 [LiMEJ encrypt l.INiUX sys write ПЕРЕХВАТ УПРАВЛЕНИЯ ПУТЕМ МОДИФИКАЦИИ ТАБЛИЦЫ ИМПОРТА Перехват управления, осуществляемый путем модификации таблицы вцс заражаемого файла, -- вероятно, самый г]юмоздкий и неуклюжий спос° ]fC.i дрения вирусной заразы, какой только есть. Забавно, но многие исслоД°,етс не имеют о нем вообще никакого представления. В elf-файлах исп(,-1Ь jpyfl сложный, хотя и хорошо документированный способ импорта внеппШ* 0 ... 23 24 25 26 27 28 29 ... 102
|