Легенды вирусостроения: червь Морриса

PDF Печать E-mail

21 год назад произошло событие навеки впечатавшее себя в историю интернета.

2 ноября 1988 года 99 строк кода вызвали двухдневный шоковый паралич еще молодого и неопытного в делах безопасности интернета.

Около 6000 VAX машин под управлением операционных систем SUN и BSD UNIX оказались зараженными невиданной доселе заразой. Многие администраторы были вынуждены отключить своих подопечных, чтобы хоть как-то остановить перегрузку компьютеров и распространение заразы.

Это был Червь Морриса или в простонародье просто Великий Червь. Из-за разрушительных последствий, которые он оказал на интернет как в плане общего простоя системы, так и психологического воздействия на представление о безопасности и надежности в сети. Неожиданность атаки и некоторые встроенные в червя механизмы вводили многих админов того времени в пограничные эмоциональные состояния. Реакция размазывалась по спектру от «отключить все!» до панического «нас атакуют!».

Создатель и инициатор червя, на тот момент студент Корнельского университета, Роберт Моррис-младший (старший в это время занимался прямо противоположными вещами, он занимал должность научного руководителя NCSC (National Computer Security Center)) запустил своего монстра с компьютера MIT (prep.ai.mit.edu — машина с открытым доступом), чтобы не привлекать внимания к своему университету. Зачем он это сделал — навсегда останется загадкой. По его собственным утверждениям, это был всего лишь эксперимент, вышедший из-под контроля. Впрочем, строго говоря, Червь и не нанес никакого прямого ущерба.

Небольшой список атакованных компьютеров

MIT, Университет штата Миннесота, Северная Каролина, Питтсбургский Университет, машины корпорации RAND, Стэнфорд, Беркли, Университет Карнеги-Меллона, Университет Мэриленда, Университет Пенсильвании, снова Массачусетский Технологический, машины Лаборатории Баллистических Исследований, Университет штата Колорадо и Университет Пурдью а также многие другие.

Векторы атаки Червя

Для распространения червь использовал несколько различных путей, сводящихся к эксплуатированию уязвимостей и простейшему подбору паролей доступа.

Червь состоял из двух частей: загрузчика (99 строк на языке C) и ядра, состоявшего из двух бинарных модулей — кода скомпилированного для BSD и такого же кода только под архитектуру Sun. Имена всех внутренних процедур имели осмысленные названия (например, doit или cracksome), что довольно сильно в дальнейшем облегчило дизассемблирование бинарников.

Червь внедрял свою копию на удаленные компьютеры и запускал ее. Каждый зараженный компьютер стремился заразить и все прочие связанные с ним машины. Червь был заточен для использования в BSD UNIX и SUN-3. Обнаружив, что такие машины подключены к зараженной, червь копировался на удаленный компьютер, запускался там, стремясь получить максимальный доступ к информации (используя ее только для продолжения взлома), и заражал соседние машины. Лавинообразно распространяясь по незащищенной сети червь множил свои копии в полном соответствии с теорией самовоспроизводящихся механизмов, основы которой заложил еще Джон фон Нейман.

Первое время никто ничего не понимал, но уже через несколько часов самые продвинутые админы начали действовать, кто как мог, кто-то отключал своих подопечных от сети и пытался их перезагружать в надежде снять перегрузку (что было совершенно напрасно, так как при перезапуске системы червь создавал еще несколько своих копий и загрузка системы только увеличивалась), кто-то бросался в панику отправляя в списки рассылки послания — «Нас атакуют!» (что тоже было напрасно, так как из-за действий червя списки не работали уже несколько часов), а кто-то искал причины мгновенного распространения червя.

В Беркли уже вечером того же дня понимают, что атака ведется через rsh и sendmail. В качестве меры предосторожности, начинается блокирование сетевых сервисов.

Через некоторое время, осознав масштаб возникшей проблемы Моррис сообщает своим друзьям о вышедшем из-под контроля эксперименте. Через некоторое время появился анонимный постинг в рассылку TCP-IP, вкратце описывающий, как остановить Червя. Автор постинга (Andy Sudduth) послал это сообщение после телефонного разговора с Моррисом, но, из-за перегрузки сетей и компьютеров, письмо не было отослано в течение примерно суток.

В скором времени независимо друг от друга разными людьми стали обнаруживаться векторы атаки червя.

Первым был выпотрошен демон sendmail. Кейт Бостик отправляет предупреждение о Черве и патчи к sendmail в список рассылки TCP-IP, новостную группу 4bsd-ucb-fixes и нескольким системным администраторам.

Червь использовал функцию «debug» демона sendmail, которая устанавливала отладочный режим для текущего сеанса связи. Дополнительная возможность отладочного режима заключается в том, чтобы посылать сообщения, снабженные программой-получателем, которая запускается на удаленной машине и осуществляет прием сообщения. Эта возможность, не предусмотренная протоколом SMTP, использовалась разработчиками для отладки программы и в рабочей версии была оставлена по ошибке.

Через sendmail червь заражал компьютеры двух типов — VAX и Sun, поэтому пересылались двоичные коды для каждой архитектуры, оба запускались, но исполняться мог только один. В компьютерах других архитектур программы не могли функционировать, хотя и поглощали системные ресурсы в момент компиляции.

Несколько часов спустя выяснилось, что заплатки sendmail не помогают, компьютеры заражаются каким-то другим способом. Из-за действий червя MILNET и ARPANET оказываются разъединены.

По прошествии еще нескольких часов разные люди в разных лабораториях независимо друг от друга обнаружили уязвимость и закончили патчи для демона fingerd.

Фрагмент кода fingerd:

{
char buf[512]:
...
gets(buf);
}

Налицо классическая ситуация переполнения буфера (тогда она, видимо, еще не была классикой). Червь передавал специально подготовленную строку из 536 байт, которая вызывала в конечном итоге функцию execve («/bin/sh», 0, 0). Указанным способом атаковались только машины VAX с операционной системой 4.3 BSD, на компьютерах Sun такие атаки терпели неудачу.

Но и это еще не все. В никсах как тогда, так и сейчас имеется набор сервисов для удаленного выполнения программ сегодня для подобных целей используется ssh, а тогда его место занимали так называемые r-программы. Наиболее уязвимым местом в них была идея «доверия» — пользователи компьютеров, бывшие в списках «доверенных узлов», имели право запускать свои программы на «доверяющей» машине без какой-либо дополнительной проверки. Кроме того, отношение доверия часто было обоюдным. Червь пытался использовать программу запуска удаленного интерпретатора rsh для атаки других машин с полученным именем и паролем текущего пользователя либо вообще без аутентификации, если атакуемая машина «доверяла» данной.

Итак, Червь проникал на соседние с зараженной машины, используя дыру в sendmail, дыру в fingerd или «доверие» и rsh. При проникновении на атакуемый компьютер забрасывался загрузчик, команда на компиляцию и выполнение загрузчика, и стирание всех временных файлов. Затем загрузчик втягивал все три файла и пытался запустить сначала одно, потом другое тело. Если ни одно из двух тел не запускалось, загрузчик просто стирал и их, и себя, и прекращал работу.

Запустившись, Червь всячески маскировался — стирал свой выполняемый файл, шифровал оба тела, читал их в память, а с диска тоже стирал, и, насколько это возможно, модифицировал информацию о себе в таблице процессов.

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

Это имело ключевое значение для жизнестойкости червя: многие машины заражались повторно, нагрузка на системы и сеть увеличивалась и становилась весьма ощутимой, часто приводящей к отказу в обслуживании, в результате чего червь собственно и был обнаружен и обезврежен намного быстрей, чем если бы повторных заражений не было, хотя многократно зараженные машины распространяли червь быстрее, вероятно, пропорционально числу копий червь на машине, что и повлияло на молниеносность распространения, а отказы в обслуживании привели к панике и выходу из строя некоторых ключевых узлов, в результате чего сеть на время развалилась на подсети.

Подбор паролей осуществлялся довольно простым, но, в то же время, эффективным способом: использовалось четыре вариации на тему login пользователя, а также, список из примерно 200-400 слов. По некоторых сведениям, на отдельных компьютерах больше половины паролей были вскрыты таким образом.

Уже к вечеру 5 ноября основная масса зараженных узлов была вылечена, заплатки наложены, а в Беркли спецы вовсю препарировали бездыханную тушку Червя.

К моменту, когда в ФБР поняли, кто виновен в произошедшем, Моррис уже шел сдаваться с повинной.

След в истории

Для компьютерного сообщества это был шок. Были пересмотрены фундаментальные основы компьютерной безопасности. Ущерб, принесенный Червем Морриса был оценён примерно в 100 миллионов долларов (к таким оценкам следует относиться весьма и весьма осторожно, поскольку каковы методы их оценки, какие параметры считают, а какие нет — неизвестно).

По некоторым данным, Червь это единственная в истории компьютерная программа, потеснившая на первых полосах материалы о президентских выборах в США. Многие институты и организации на несколько недель и даже месяцев отключились от Интернета. Администраторы, не представляя о реальных масштабах опасности, решили перестраховаться.

Наиболее разумной мерой противодействия взлому, спровоцированной Червем, явилось образование CERT.

P.S.

В любом программном обеспечении могут быть ошибки, грозящие различными уязвимостями. Постепенно интернет затягивает нас все глубже и глубже, вызывая катастрофическую зависимость, тем временем средняя квалификация пользователей падает ниже плинтуса. Пользователь ничего не желает знать о компьютере (и это, конечно, не так уж страшно, это просто неизбежно).

Вот системный администратор обязан быть бдителен, должен постоянно следить за безопасностью своих подопечных. Впрочем, увы, сплошь и рядом это не так и на должностях системных администраторов сидят эникейщики.

Хороший администратор — всегда параноик.

В тему:

Источник
 
Обнаружены уязвимости в протоколе WPA2
28.07.2010
Независимая группа исследователей сообщила об обнаружении уязвимости в протоколе шифрования данных WPA2. Этот протокол применяется при защите информации в сетях WiFi и на сегодня считается...
Оптимизации криптоанализа SHA-1 позволили просчитать коллизии до 73 раундов
28.07.2010
В 2007 году исследователи Christophe De Canni`re, Florian Mendel и Christian Rechberger опубликовали в своей работе Collisions for 70-step SHA-1: On the Full Cost of Collision Search методику автоматизированного поиска коллизий в SHA-1 для...
В прошивке серверов Dell найдено вредоносное программное обеспечение
23.07.2010
Производитель серверов Dell сегодня распространил сообщение, в котором говорится, что "небольшое число" материнских плат новых серверов PowerEdge R410 может содержать вредоносное программное...
Украинцы получили право сохранять номер мобильного телефона при смене оператора
23.07.2010
Право украинцев сохранять номер мобильного телефона при смене оператора связи отныне закреплено законодательно. Соответствующий Закон Украины №2392–VІ был подписан Президентом Украины...
Экономика резервирования данных
Необходимость резервирования данных обычно осознается лишь при их полной или частичной потере. Лихорадочные попытки восстановления крупиц информации (и внушительные суммы, выплаченные специалистам по восстановлению) «открывают глаза» и способствуют принятию целого...