Записки исследователя компьютерных вирусов
Шрифт:
Листинг 2.17. Альтернативный пример нормальной стартовой функции
Большинство зараженных файлов выглядит иначе. В частности, стартовый код вируса PolyEngine.Linux.LIME.poly (листинг 2.18).
Листинг 2.18. Стартовый код вируса PolyEngine.Linux.LIME.poly
Перехват управления путем модификации таблицы импорта
Перехват управления, осуществляемый путем модификации таблицы импорта заражаемого файла, – вероятно, самый громоздкий и неуклюжий способ внедрения вирусной заразы, какой только есть. Забавно, но многие исследователи не имеют о нем вообще никакого представления. В elf-файлах используется
Классический механизм импорта внешних функций из/в elf-файлов в общем виде выглядит так: на первом этапе вызова импортируемой функции из секции. text вызывается «переходник», расположенный в секции. pit ( Procedure Linkable Table) и ссылающийся, в свою очередь, на указатель на функцию pri ntf, расположенный в секции. got ( Global Offset Tables), ассоциированной с таблицей строк, содержащей имена вызываемых функций (или их хеши).
Ниже приведена схема вызова функции pri ntf утилитой Is, позаимствованной из комплекта поставки Red Hat 5.0 (листинг 2.19).
Листинг 2.19. Схема вызова функции printf утилитой Is
В какое место этой цепочки может внедриться вирус? Ну, прежде всего он может создать подложную таблицу строк, перехватывая вызовы всех интересующих его функций. Чаще всего заражению подвергается функция pri ntf /f pri ntf/sprintf (поскольку без этой функции не обходится практически ни одна программа) и функции файлового ввода/вывода, что автоматически обеспечивает прозрачный механизм поиска новых жертв для заражения.
Вирусы-спутники поступают иначе, создавая специальную библиотеку-перехватчик, во всех заражаемых файлах. Поскольку IDA Pro при дизассемблировании elf-файлов не отображает имя импортируемой библиотеки, заподозрить что-то неладное в этой ситуации нелегко. К счастью, НЕХ-редакторы еще никто не отменял и присутствие вируса распознается с первого взгляда…
Часть IIЧерви
Глава 3
ЖИЗНЕННЫЙ ЦИКЛ ЧЕРВЕЙ
Глава 4
ОШИБКИ ПЕРЕПОЛНЕНИЯ БУФЕРА ИЗВНЕ И ИЗНУТРИ,
в которой карма переполняющихся буферов медленно перетекает в Дао, подрывающее уязвимое приложение изнутри
Глава 5
ПОБЕГ ЧЕРЕЗ БРАНДМАУЭЕР ПЛЮС ТЕРМИНАЛИЗАЦИЯ ВСЕЙ NT,
к концу которой выясняется, что брандмауэер не такая уж и надежная штука
…червями принято называть сетевые вирусы, проникающие в зараженные машины вполне естественным путем, без каких-либо действий со стороны пользователя. Они ближе всех остальных вирусов подобрались к модели своих биологических прототипов и потому чрезвычайно разрушительны и опасны. От них не защищают никакие превентивные меры, антивирусные сканеры и вакцины до сих пор остаются крайне неэффективными средствами борьбы. Нашествие червей невозможно предвидеть и нереально предотвратить. Но все-таки черви уязвимы.
Чтобы одолеть червя, вы должны знать структуру его программного кода, основные повадки, наиболее вероятные алгоритмы внедрения и распространения. Глобальная сеть – это настоящий лабиринт, и вам понадобится его подробная карта с отметками секретных троп и черных ходов, используемых червями для скрытого проникновения в нервные узлы жертвы.
Первым широко известным почтовым червем стал небезызвестный вирус Морриса, который наглядно продемонстрировал, какие последствия может иметь небрежное тестирование сетевых программ массового использования. Но, как водится, жизнь нас ничему не учит, и, однажды наступив на грабли, мы даже не задумываемся их убрать.
Короче, после Морриса никаких кардинальных изменений в отношении безопасности так и не произошло. Отчасти это объясняется тем, что новые черви долгое время не появлялись, создавая тем самым обманчивую иллюзию благополучия. Между тем дыры в программном обеспечении как были, так и остались. С течением времени они непрерывно мутировали, стремительно росли и безудержно размножались. Лишь по счастливой случайности вирусописатели не обращали на них никакого внимания. Но все хорошее рано или поздно кончается и…
Глава 3Жизненный цикл червей
– Червь придет обязательно?
– Обязательно.
Френк Херберт. «Дюна»Исторически сложилось так, что титул первого Интернет-червя закрепился за так называемым «Вирусом Морриса», а некоторые даже присуждают ему звание первого компьютерного вируса вообще. На самом же деле это утверждение неверно. Черви в изобилии водились в глобальных (локальных) сетях еще до Морриса, а «заслуга» последнего состоит лишь в том, что ошибки, допущенные при реализации вируса, привели к чрезмерной активности червя и, как следствие, колоссальному росту сетевого трафика, плотно загрузившего межсетевые узлы непосильным объемом работы. Случившийся паралич сети вызвал массовую истерию сродни той, что сопровождалась недавней атакой на SQL-серверы. Тем не менее никаких уроков из случившегося человечество так и не извлекло. Ведущие разработчики ПО как не несли, так и не несут никакой ответственности за его качество и не предпринимают ничего, чтобы это качество хоть немного повысить. Вместо того чтобы сосредоточиться на одной конкретной версии и довести ее до ума, лидеры софтверной индустрии предпочитают вкладывать деньги в наращивание избы точной функциональности продукта, только приумножающей его дыры. Как ни печально, но эта тенденция (если не сказать эпидемия) проникла и в мир UNIX'а.
В 1992 году, если верить «Вирусной Энциклопедии» Евгения Касперского:
…вирусы для не-IBM-PC и не-MS-DOS практически забыты: «дыры» в глобальных сетях закрыты, ошибки исправлены, и сетевые вирусы-черви потеряли возможность для распространения.
Утверждение насчет отсутствия дыр – это сильно, но слишком уж неубедительно. Многие из дыр, обнаруженных еще до червя Морриса, остаются не заткнутыми до сих пор, не говоря уже о том, что буквально каждый день обнаруживаются все новые. Короче, «дальше так жить нельзя». Анекдот.
Конец затишья перед бурей?
Информационные бюллетени, выходящие в последнее время, все больше и больше напоминают боевые сводки с полей сражений (табл. 3.1). Только за первые три года нового тысячелетия произошло более десятка разрушительных вирусных атак, в общей сложности поразивших несколько миллионов компьютеров. Более точную цифру привести затруднительно, поскольку всякое информационное агентство склонно оценивать размах эпидемии по-своему, и различия на пару порядков – вполне обычное явление. Но как бы там ни было, затишье, длившееся еще со времен Морриса, закончилось, и вирусописатели, словно проснувшиеся после долгой спячки, перешли в наступление. Давайте вспомним, как все это начиналось.