Найди врага в своем доме! Deeoni$ Спецвыпуск: Хакер, номер #048, стр. 048-074-3 В общем случае червь сначала засылает в систему свою голову (загрузчик). Она может внедряться и через дыры в ПО, и через ресурсы со слабыми паролями, и, например, в электронном послании в виде VBS-скрипта или вложенного файла. Загрузчик выполняет минимальные действия в системе, его задачей является подтягивание основного тела вируса с последующей передачей ему главной роли. Он создает TCP-соединения, выполняет действия по адаптации паразита (определяет ОС, права пользователя, адреса системных вызовов и т.д.), а затем чаще всего погибает. Голова, использующая дыры, часто представляет собой shell-код и служит лишь для ограниченного числа задач, необходимых остальной части зверька. После попадания хвоста вируса на компьютер он должен спрятаться в каком-нибудь процессе или файле, а если имеет место полиморфизм, то и расшифроваться. Червь может и не закрепляться в системе, а вести кочевой образ жизни. Это значительно уменьшает нагрузку на сеть и обеспечивает большую незаметность. Самым распространенным (но не самым лучшим) решением является создание отдельного файла с последующим его автозапуском. Более изощренные вирусы внедряют подложную библиотеку в директорию более или менее часто используемого приложения. Извращенцы могут регистрировать в системе свои ловушки (hooks), модифицировать таблицу импорта процесса-носителя, вставлять в кодовый сегмент команды перехода на свое тело, сканировать память в поисках таблиц виртуальных функций и модифицировать их по своему усмотрению. Еще раз отмечу, что только самые примитивные черви создают новый процесс (вспомним MSBlast), поскольку есть возможность внедриться в чужое адресное пространство, используя межпроцессные средства взаимодействия. Далее следует фаза размножения. На этой стадии червь должен зашифровать критичные участки кода или сгенерировать абсолютно новый код (полиморфизм), без чего он рискует потерять добрую половину своих копий. Существует несколько вариантов распространения: импорт данных из адресных книг, просмотр локальных файлов на наличие сетевых адресов, генерация IP-адресов и сканирование IP-диапазона. Найдя подходящую жертву, вирус проверяет наличие своей копии на машине. Делается это чаще всего «рукопожатием»: машине посылается определенное слово, на что следует особый ответ. Как же определить наличие червя на тачке? Если код написан грамотно и относится к ресурсам бережно, то сделать это довольно сложно. Точный ответ о присутствии червя может дать лишь дизассемблирование (притом, что вирус может вообще не трогать файловую систему, а выполняться в памяти) или эвристик. Анализировать всю оперативку немногим под силу. Однако существует ряд признаков, по которым можно определить присутствие инородного тела в системе. Посмотрим на таблицу. |