Секреты покорения эльфов Крис Касперски ака мыщъх Хакер, номер #083, стр. 083-106-1 Внедрение троянов в ELF-файлы Если загрузить исполняемый файл в hex-редактор, мы увидим цифры. Много цифр. Можно нажать на ноль, наслаждаясь, как машинный код стирается под натиском нашей силы, но... это слишком просто и неинтересно. Лучше собраться с умом и дописать несколько осмысленных ассемблерных строк! В этой статье говорится о том, как устроены ELF-файлы, как они загружаются в память, и как хакеры внедряют в них свои имплантанты. [введение] Ворвавшись в нашу жизнь, Linux прочно обосновался на операционной арене, и все чаще и чаще на компакт-дисках гламурных журналов оказываются программы для этой оси. Причем, в отличие от Windows, большинство линуксовых приложений не требует установки и спокойно копируется с одного компьютера на другой, что способствует интенсивному обмену файлами. Помнишь MS-DOS? Какие там дистрибутивы! Наше поколение таких слов тогда вообще не знало! Считается, будто бы обмен исполняемыми файлами в мире Linux намного ниже, чем в Windows, что большинство пользователей качает исходники и компилирует их самостоятельно. Да как бы не так! Исходники занимают намного больше места, а модем не резиновый - это раз. Далеко не всегда сборка проходит гладко, и тогда приходится колдовать над компилятором и исправлять ошибки разработчиков, что требует квалификации - это два. Наконец, компиляция больших проектов занимает довольно продолжительное время, зачастую намного превышающее время скачки (десятки минут или даже часы) - это три. Есть и другие причины, которые мы не будем здесь перечислять. Важно одно - очень многие пользователи предпочитают сливать готовые бинарники, скомпилированные для своей оси. Часто такие файлы лежат прямо на официальном сайте производителя. Часто, но не всегда! Есть и другая проблема. Линуховые программисты не заморачиваются с интерактивными конфигураторами и серьезно злоупотребляют «дефайнами» - директивами условной компиляции. Например, для однопроцессорной машины создается одна сборка, для двух- или четырехпроцессорной - другая. Таких опций может быть очень много и выложить все разновидности сборок на официальный сайт просто нереально. А компилировать самостоятельно - лень. Вот и приходится рыскать по сети в поисках готовых сборок, откомпилированных независимыми разработчиками, и качать их. При этом возникает естественная угроза нарваться на вирус, закладку или троян, и такие происшествия уже случались! Доработать исходные тексты проще всего, но что делать, если есть только исполняемый файл и больше ничего? Берем hex-редактор и в самых ответственных местах правим yes на no - пускай юзеры потом удивляются! А еще круче внедрить «часовой механизм», который в определенный момент выведет приветственное сообщение на экран или выполнит некоторое событие. Вот об этом мы сейчас и поговорим. [анатомия эльфов и их репродуктивные возможности] Изначально *nix поддерживали множество исполняемых форматов, ожесточенно конкурирующих между собой, но теперь поле боя опустело, и среди дымящихся обломков минувших сражений остался один ELF, ставший стандартом де-факто для Linux и BSD. Кое-где еще встречается древний a.out, но на него можно не обращать внимания. |