Раздел: Документация
0 ... 16 17 18 19 20 21 22 ... 102 ELF- заголовок К°Д и ДАННЫЕ программы ELF-заголовок вируса КОД и ДАННЫЕ вируса Оригинальный ELF-заголовок КОД и ДАННЫЕ программы p"c2tT1--- Файла nvT Иповая схема заражения исполняемого №n er° поглощения . шие/запись файла) и опционально функция поиска файлов на диске/в сети. В противном случае вирус просто нссможет реализовать свои репродуктивные возможности, и это уже не вирус получится, а Троянский Конь! Существует по меньшей мере три пути для решения этой задачи: 1Использовать системные функции жертвы (если они у нее, конечно, есть). 2Дополнить таблицу импорта жертвы всем необходимым. 5 Использовать native-API операционной системы. Ассемблерные вирусы (а таковых среди UNIX-вирусов подавляющее большинство) рачительно отличаются от откомпилированных программ нетипичным для языков высокого уровня лаконичным, но в то же время излишне прямолинейным стилем. Поскольку упаковщики исполняемых файлов в мире UNIX практически не используются, всякая посторонняя «нашлепка» на исполняемый файл с высокой степенью вероятности является троянским компонентом или вирусом. Теперь рассмотрим каждый из вышеперечисленных пунктов во всех подробностях. ЗАРАЖЕНИЕ ПОСРЕДСТВОМ ПОГЛОЩЕНИЯ ФАЙЛА Вирусы этого типа пишутся преимущественно начинающими программистами, еще не успевшими освоить азы архитектуры операционной системы, но уже стремящимися кому-то сильно напакостить. Алгоритм заражения в общем виде выглядит так: вирус находит жертву, убеждается, что она еще не заражена и что все необходимые права на модификацию этого файла у него присутствуют. Затем он считывает жертву в память (временный файл) и записывает себя поверх заражаемого файла. Оригинальный файл дописывается в хвост вируса как оверлей либо же помещается в сегмент данных (рис. 2.1,2.2). Рис. 2.2. Пример файла, поглощенного вирусом UNIX.a.out. Крохотный, всего в 300 байт, размер кодовой секции указывает на высокую вероятность заражения Получив управление, вирус извлекает из своего тела содержимое орнгинад, ного файла, записывает его во временный файл, присваивает ему атрибут иенщ. нясмого и запускает «излеченный» файл на выполнение, а после завершение удаляет вновь. Поскольку подобные манипуляции редко остаются незамеченными, некоторые вирусы отваживаются на «ручную» загрузку жертвы с диска Впрочем, корректный загрузчик elf-файла написать ой как нелегко и еще сложнее его отладить, поэтому появление таких вирусов представляется достаточно маловероятным (ELFdto вам не простенький a.out!) Характерной чертой подобных вирусов является крошечный сегмент кода, за которым следует огромный сегмент данных (оверлей), представляющий сотой самостоятельный исполняемый файл. Попробуйте контекстным поиском найти elf/coff/a.out-заголовок — в зараженном файле их будет два! Только не пытайтесь дизассемблировать оверлей/сегмент данных, — осмысленного кода все равно не получится, так как, во-первых, для этого требуется знать точное расположение точки входа, а во-вторых, расположить хвост дезассемблируемого файла но его «законным» адресам. К тому же оригинальное содержимое файла может быть умышленно зашифровано вирусом, и тогда дизассемблер вернет бессодержательный мусор, в котором будет непросто разобраться. Впрочем,это Не сильно затрудняет анализ. Код вируса навряд ли будет очень большим, и на восстановление алгоритма шифрования (если тот действительно имеет место) не уйдет много времени. Хуже, если вирус переносит часть оригинального файла в сегмент данных, а часть — в сегмент кода. Такой файл выглядит как обыкновенная программ за тем единственным исключением, что большая часть кодового сегмента при" ставляет собой «мертвый код», никогда не получающий управления. Сегмент данных на первый взгляд выглядит как будто бы нормально, однако при вН" мательном рассмотрении обнаруживается, что все перекрестные ссылки (на пример, ссылки на текстовые строки) смешены относительно их «родных»* ресов. Как нетрудно догадаться — величина смещения и представляет со длину вируса. Дизассемблирование выявляет характерные для вирусов этого тина ФУ11*" exec и fork, использующиеся для запуска «вылеченного» файла, функцию спи00 для присвоения файлу атрибута исполняемого и т. д. заражение посредством расширения последней секции Фь№* Простейший способ иеразрушающего заражения файла состоит в paciiinpc,j"" следней секции/сегмента жертвы и дозаписи своего тела в ее конец (рис. 2.3. gLF-эаголовок КОДиДАННЫЕ программы Модифицированный ELF-заголовок КОД и ДАННЫЕ программы КОД и ДАННЫЕ вируса рис. 2.3. Типовая схема заражения исполняемого файла путем расширения его последней секции г-Н- dat<):088499№ .data:BBB499C0 ОЁЗЩШШ LIME END: stosb retn IDR View-H -2-1Tl 1" mou mou mou mou int mou eax. ebx. ecx. edx. 8flh ecx, 4 1 offset qen msq 2Dh ; I INUX 32h Rlternatiue name is main sys write ger ll: push mou mou f moc int pustr mou mou mou mou mou call pop mou mou add mou mou int mou co»h xRti: .Алкл-.тл.чхтц еск cax. ebx. ......•еон-. 8§i„ ......-eax" eax, ebx. ecx, edx, ebp. IIME ebx eax. (offset host msg»20h) JfDh >; LINUX - sys..creat 0 Offset hlSi 4Dh e entry 4 d«t«:eat499CB data:8884991» <ЬПв-.688ДО07 ddla:68«499DC date:08e499DC deta:88B4990C rin Id:68649900 datd:fl88499E2 date.eeei99E/ data:«8B499EC data:888499FF ilata:888499EF data:086499F4 data:888499F9 deta-.emasiE t!ata:88849fi03 data: 0864 Ш9 dala-.B8B49f»E deta:88e49fleF ifeta:88e49fil4 data в8й49Й19 data:88B49filF data 68Й4ЭД25 (1а1а:в8В49Й2В . data:«1в49Н20- - - „.„ „,„ ,... l-*88499Cl:ЧЗШШ... рис. 2.4. Внешний вид файла, зараженного вирусом PolyEngine.Linux.LIME.poly; вирус внедряет свое тело в конец секции данных и устанавливает "а него точку входа. Наличие исполняемого кода в секции ных делает присутствие вируса чрезвычайно заметным Далее по тексту просто «секции», хотя применительно к ELF-файлам это будет "сколько некорректно, так как системный загрузчик исполняемых ELF-фай-ловработает исключительно с сегментами, а секции игнорирует. Строго говоря это утверждение не совсем верно. Последней секцией файла, правило, является секция .bss, предназначенная для хранения неинициа- есх edx offsefelf head : "UELFO 74h ----------•--------— p filsz, edx p memsz. edx 80h; I.INUK - sys write eax. 6 0 ... 16 17 18 19 20 21 22 ... 102
|