Архивы: по дате | по разделам | по авторам

Классификация гадов

Архив
автор : Андрей Васильков   03.09.2003

К сожалению, прогресс приносит отнюдь не только блага.

К сожалению, прогресс приносит отнюдь не только блага. Компьютер полушутя называют устройством, которое «…было создано для решения проблем, до его изобретения попросту не существовавших». Компьютеризация и осетенение принесли с собой помимо преимуществ в работе с информацией еще и огромную головную боль — саморазмножающиеся программы, получившие устрашающее название «вирусы». Сегодня из них наиболее активно развивается класс «червей». Вот о нем и поговорим.

Эпидемии сетевых червей со времен творения Морриса (1988) до наших дней вызывают панику среди пользователей и наносят убытки на миллионы долларов. За пятнадцать лет они заметно эволюционировали, став гораздо быстрее и опаснее. С одной стороны, это обусловлено увеличением популярности средств удаленной связи, а с другой — совершенствованием собственно кода червей. Анализ последнего делает очевидными причины успешных сетевых пандемий.

Начнем разбор с первого в истории червя, автором которой является Роберт Таппан Моррис-младший. В свои 23 года он решил проверить на практике гипотезу о возможности существования саморазмножающихся программ. Идея эксперимента заключалась в создании такой программы, которая распространялась бы по IP-сети, отдавая предпочтение серверам электронной почты. Первая копия обнаружилась 2 ноября 1988 года в 18:24 на компьютере компании Rand (тихоокеанское побережье США). Затем червь попадает в Беркли, через полтора часа его находят в штате Мэриленд, еще через час — в Юте… далее — повсеместно. Следующим утром в 05:07 специалисты Беркли пытаются разослать черновые рецепты локализации червя. Однако Интернет уже перегружен трафиком, сгенерированным детищем Морриса, и многие просто не смогли получить сообщения. Официальное заявление о завершении исследования кода червя объединенными усилиями специалистов Беркли и МТИ было сделано 04.11.88 в 12:36. Его подробное описание вы можете найти по адресу world.std. com/~franl/worm.html. А нас будут интересовать следующие моменты:

1 Cамый первый в мире сетевой червь уже имел простейшую модульную структуру. Он состоял из загрузочного модуля (99 строк на языке Си) и объектного файла, объемом примерно 3200 строк на Си (включая комментарии).
2 Перед инфицированием планировалась проверка хоста на предмет уже запущенной на нем копии червя. Однако Роберт по каким-то причинам сделал так, что в одном из семи случаев допускалась одновременная работа нескольких копий.
3 Для проникновения червь использовал метод подбора паролей «атака по словарю» и уязвимости программ sendmail и finger.
4 Чтобы распространиться повсеместно, вирусу понадобилось чуть больше трех часов.
5 Безвредный по своей сути код (не выполняющий деструктивных действий) нанес немалый урон только благодаря самому факту своего существования.

Термином «червь» мы обязаны фантасту Джону Браннеру, который еще в 1975 году написал рассказ The Shockwave Rider, в котором борец с тоталитарным режимом будущего запускал в компьютерную сеть программу tapeworm.
Однако предшественники червей не обладали деструктивными свойствами. Напротив, они были полезны — например, Creeper Боба Томаса (Bob Thomas) служил для привлечения внимания авиадиспетчеров, когда контроль над самолетом передавался от одного компьютера к другому. Существенное отличие Creeper от нынешних червей в том, что он не мог реплицировать себя.
В начале 80-х разработкой червей занимались в исследовательском центре Xerox в Пало-Альто. Именно там подобные программы начали называть червями. Эти черви также выполняли полезные функции, однако уже в то время разработчики начали обсуждать опасность неправильного применения подобного ПО. Первым звоночком стал сбой в работе червя, перераспределяющего вычислительную нагрузку между компьютерами. Тогда же была написана первая «вакцина».
В течение полутора десятков лет черви интересовали, в основном, узких специалистов, однако благодаря Роберту Моррису-младшему термин «компьютерный червь» сегодня понятен любому. Сам Роберт утверждал, что вовсе не собирался писать опасную для работоспособности Сети программу и даже заложил в нее ограничения, которые дали бы ему возможность «измерить» Интернет, не причиняя никому неудобств. Причиной того, что червь Морриса вышел из-под контроля, стали ошибки в коде.

Успех червя Морриса во многом объясняется тем, что он был первым в своем роде. В узких кругах возможность подобной угрозы обсуждалась задолго до инцидента, но всерьез ее никто не принимал. Триумфальному шествию червя способствовало и то, что он забил своими копиями каналы Интернета. Таким образом, специалисты были лишены полноценной связи, а персонал, обслуживающий еще не зараженные машины, — возможности быть своевременно информированным о надвигающейся опасности. Для своего времени скорость распространения у червя была феноменальной. Частично это объясняется использованием сразу двух способов проникновения.
Теперь обратим внимание на «родственников» червя Морриса, живущих в наши дни.

За пятнадцать лет последователи Роберта породили целых шесть классов (выделяемых по способу распространения), которые в порядке уменьшения частоты встречаемости располагаются следующим образом:

Почтовые черви. Изначально для рассылки своих копий они использовали установленный на инфицированном компьютере почтовый клиент по умолчанию и адресную книгу. Для активизации присланной копии требовались действия пользователя: запуск аттачмента на выполнение либо клик на ссылку (ведущую на веб-страницу, HTML-код которой был составлен с использованием ошибок в системе безопасности браузера, позволяющих скрыто передать/запустить червя). Однако в последнее время производители ПО стали активно сопротивляться этому безобразию, интегрируя в почтовые программы антивирусы и вводя ограничения, делающие несанкционированную отправку писем затруднительной. Вирусописатели ответили внедрением в тела червей модулей, выполняющих прямое соединение с SMTP-сервером. Также черви научились использовать уязвимости непосредственно в популярных почтовых клиентах или их общих с браузером компонентах (не будем тыкать пальцем в MS Outlook). Черви такого типа запускаются автоматически, как только пользователь откроет HTML-письмо. Подкласс почтовых червей самый многочисленный. На его долю, по данным «Лаборатории Касперского», приходится более 95%.

LAN-черви. Распространяются через общие ресурсы локальных сетей. Примером может служить Worm.Win32.Datom (по классификации Евгения Касперского). Он является многокомпонентным. Кроме того, он ищет и пытается закрыть запущенные копии брандмауэра ZoneAlarm, что иллюстрирует наличие у некоторых червей функции противодействия защитному ПО.

P2P-черви. Ярким представителем когорты Peer-to-Peer-червей является Worm.P2P.Relmony. Распространяется через общедоступные каталоги пользователей этих сетей, создавая файлы с порнографическими названиями.

IRC-черви пока обладают наименьшей численностью, однако существующие экземпляры лишний раз доказывают возможность подцепить заразу где угодно. Сервис Internet Relay Chat (передача текстовых сообщений в реальном времени по Интернету) был придуман Джарко Ойкариненом (Jarkko Oikarinen) в год буйства червя Морриса (1988) и до сих пор считается наименее подверженной вирусным атакам технологией коммуникации. Но все же система команд IRC-клиентов позволяет на основе их скриптов создавать червей. Представителем для DOS-платформы является семикилобайтный малютка IRC-Worm.Kazimas. Из Windows-ориентированных наибольший интерес представляет IRC-Worm.Adrenaline.

Черви со смешанным механизмом проникновения. За примером далеко ходить не надо — тот же червь Морриса, а из современных — Fizzer, распространяющийся по e-mail и через сеть KaZaA.

Exploit-черви. Есть тип сетевых червей, которые вирусологи выделяют в отдельный класс, но при этом до сих пор не дали ему четкого названия. Предлагаю исправить ситуацию, приняв термин Exploit-червь. К этому классу следует отнести тех представителей, которые используют для проникновения на инфицируемый хост исключительно эксплоиты общего характера, непосредственно не связанные с сервисами e-mail, P2P, IRC и т. п. К ним относятся такие черви, как IIS-Worm.CodeRed, Worm.SQL.Helkern и по сей день активный Worm. Win32.Lovesan.

Последний известен также под именами Lovsan, Blaster, Msblast, Poza. Он написан на языке Cи, с использованием компилятора LCC. Благодаря методу упаковки UPX, имеет размер 6 Кбайт. Размножается в виде файла с именем msblast.exe через уязвимость в сервисе DCOM RPC операционной системы MS Windows1. Червь не содержит в своем коде деструктивных (по отношению к пользователю) или шпионских функций. Его вред ограничивается перегрузкой каналов передачи данных путем рассылки своего кода и запрограммированной атакой на web-сайт windowsupdate.com начиная с 16 августа 2003 года.

Механизм размножения довольно оригинален: червь сканирует IP-адреса, начинающиеся с base address, и пытается соединиться с двадцатью IP-адресами для инфицирования уязвимых компьютеров. После этого следует пауза, а затем продолжается сканирование следующей порции из двадцати IP-адресов. Процесс повторяется бесконечно.

Любопытно, что между попытками заражения других компьютеров червь выдерживает паузу в 1,8 секунды. Далее я постараюсь показать, что это действительно много и достаточно для того, чтобы последствия пандемии были не столь катастрофичны, как в случае с Helkern.

Залогом успеха сетевых червей является скорость распространения. Она максимальна у Exploit-червей в силу абсолютной независимости от действий пользователей. Николас Уивер (Nicholas C. Weaver) в статье «Warhol Worms: The Potential for Very Fast Internet Plagues»2 утверждает, что при использовании специальных методик оптимизации для инфицирования 1 млн. уязвимых хостов понадобится всего около восьми минут (sic!). Соответственно, в среднем за каждую секунду можно инфицировать более двух тысяч хостов. Теперь задержка в 1,8 секунды уже не кажется вам маленькой? Дальнейшее ускорение ограничивается лишь пропускной способностью каналов, временем отклика аппаратуры… и скоростью света, преодолеть которую пока никому не удавалось.

Теперь чуть подробнее. Одним из главных факторов, сдерживающих темп распространения червя, является время, за которое он инфицирует первые несколько тысяч компьютеров, так как количество копий растет экспоненциально (см. верхний график). Соответственно, можно исключить эту временную потерю. Лучший вариант — снабдить червя готовым хит-листом со списком, скажем, десяти тысяч потенциально уязвимых хостов (см. нижний график). Составить такой список нетрудно. Для этого даже не обязательно выполнять предварительное сканирование. Достаточно воспользоваться, к примеру, сайтом www. netcraft.com, который поможет сгенерировать лист для разных уязвимостей. Далее необходимо сделать так, чтобы новые копии червя эффективно взаимодействовали между собой; были частью единого растущего организма, а не боролись друг с другом за право инфицировать один и тот же компьютер, теряя на этом время. Самый эффективный прием — предварительная отсылка хосту запроса перед попыткой инфицирования в сочетании с изменением червем его ответа в случае, если уже одна копия на хосте запущена. Также можно создать алгоритм распределения копий червя в заданных интервалах диапазона IP-адресов, причем — с динамической коррекцией. Тогда каждый экземпляр будет планомерно заражать хосты из своей области, не мешая своим собратьям. Разумеется, этим варианты не исчерпываются. Просто тема слишком обширна. Желающие могут скачать исходные коды симулятора, позволяющего смоделировать динамику распространения червей, и сделать собственные выводы (www. cs.berkeley.edu/~nweaver/warhol.c, www.cs.berkeley.edu/~nweaver/division.c, www.cs.berkeley.edu/~nweaver/random.c).

В заключение — прогноз на будущее. Без сомнения, нам предстоит пережить эпидемии еще множества червей. Соотношение между классами будет постепенно изменяться в сторону преобладания Exploit-типов. Эпизодически будут появляться многовекторные черви, способные использовать сразу несколько способов размножения. В некоторые будут обладать деструктивными способностями.

Хороший червь — мертвый червь

По иронии судьбы, за пару дней до отправки номера появился червь Welchia, схожий по структуре с Lovesan (см. стр. 19). Однако, в отличие от Lovesan, червь Welchia — «хороший». Он не только не производит никаких деструктивных действий, но еще и лечит компьютеры, зараженные Lovesan, устанавливая на них необходимые заплатки. Интересно, что в Welchia встроен и механизм саморазрушения. Если на компьютере в качестве системной даты установлен 2004 год, червь убивает сам себя.
Хоть Welchia явно на стороне простого пользователя, проблем он доставляет немало за счет дополнительной нагрузки на Интернет-каналы. Так что даже если его автор руководствовался лучшими убеждениями, услуга получилась медвежья.

В тоже время я не склонен к излишнему пессимизму. Со времени обнаружения потенциально опасной уязвимости обычно проходит несколько дней (а то и недель), прежде чем она будет использована в новом вирусе. За это время разработчики проприетарного софта обычно успевают выпустить патч, а пользователи ПО с открытым исходным кодом имеют возможность устранить любую дыру самостоятельно. По большому счету вина за пандемии лежит на лентяях, которые вовремя не заделывают бреши в защите используемых ими программ и таким образом превращают свои компьютеры в источник заразы. Разумеется, время от времени будут регистрироваться отдельные случаи заражения, но чтобы они не переросли в пандемию, достаточно соблюдать элементарнейшие правила информационной безопасности. Почему-то, чтобы ездить на машине, нужно сначала сдать экзамен и получить водительские права. А для того, чтобы блуждать по Интернету, не обязательно даже знать определение компьютерного вируса и отличать *.jpg от *.jpg.exe.


1 (назад)См. Microsoft Security Bulletin MS03-026. (www.microsoft. com/technet/treeview/default.asp?url=/technet/security/bulletin/MS03-026.asp). До Lovesan эту брешь использовал другой червь — Autorooter, в котором функция автоматического размножения не была полностью реализована.
2 (назад) www.cs.berkeley.edu/~nweaver/warhol.html.

© ООО "Компьютерра-Онлайн", 1997-2024
При цитировании и использовании любых материалов ссылка на "Компьютерру" обязательна.