Учебник хакера

         

Как это было...


Итак, что же делал Червь? Используя ошибки программного обеспечения того времени (которых сейчас, впрочем, не стало меньше; они просто стали другими), Червь внедрял свою копию на удаленные компьютеры и запускал ее. Каждый зараженный компьютер стремился заразить и все прочие связанные с ним машины. Червь не был специализирован на какой-либо одной операционной системе, но и особенно многофункциональным он тоже не был. Он был расчитан на операционную систему UNIX, а именно, на BSD Unix, работавший на машинах типа Vax и Sun-3. Обнаружив, что такие машины подключены к зараженной, Червь копировался на удаленный компьютер, запускался там, стремясь получить максимальный доступ к информации (используя ее только для продолжения взлома), и заражал соседние машины.

Поскольку каждый компьютер в Интернете соединен с несколькими, заражение распространялось лавинообразно. Более того, попытки выключить компьютер и снова включить приводили к тому, что через несколько минут на машине вновь, одна за другой, запускались копии "Червя" и загружали ее неимоверно. В UNIX под загрузкой подразумевается количество задач, которые были готовы выполниться за определенный промежуток времени, но не смогли.

Нормальной считается загрузка в единицу или в двойку. Загрузка же в 4 или в 5 - выше среднего. При загрузке более 10 работать уже невозможно. На отдельных серверах в моменты наибольшей активности "Червя" загрузка достигала 30, что фактически означало остановку компьютера.

Первые несколько часов никто ничего не понимал. Приблизительно, в 2.50 ночи 3 ноября в один из интернетовских списков рассылки было послано сообщение: “Нас атакуют!”. Впрочем, списки рассылки,весьма удобное и практичное средство Интернета, в тот момент не работали, из-за неимоверной перегрузки систем.

Так уж повелось (традиция такая), что системным администраторам не привыкать работать в ночь. Достаточно вспомнить, что программное обеспечение еще для Арпанета - самое первое - писалось как раз в ночь с пятницы на понедельник.
Это была долгая и тяжелая ночь, но прогорамма была написана в срок.

Так вот, к утру один из типов атаки стал ясен системным администраторам, и были выпущены предварительные "заплаты" к сендмейлу ("заплатой", или патчем, от английского patch, называют описания изменений, которые нужно внести в файл). Несколько часов спустя выяснилось, что они не помогают, компьютеры заражаются каким-то другим способом - не через сендмейл. По прошествии еще нескольких часов разные люди в разных лабораториях независимо друг от друга закончили патчи для фингерди. Первые три - четыре патча по странной случайности не попали в сеть, но уже к вечеру 5 ноября большинство компьютеров в Интернете было свободно от Червя, программное обеспечение было исправлено, и началась интенсивная работа по декомпиляции вируса.

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

Алгоритм его работы был прост, хотя и не лишен изящества. Здесь он излагается в весьма упрощенном виде, более подробные описания (на английском), в формате html и PostScript, доступны в Интернете (напр. http://freebsd.svib.ru/cgi-bin/showlinks.pl, в разделе Internet History).

Программа Червя состояла из трех частей: загрузчика (99 строк на языке C), собственно Червя, скомпилированного для VAX, и того же Червя, но скомпилированного под Sun.

В BSD-Unix'е и его многочисленных потомках существует набор сервисов для удаленного выполнения программ. Сегодня для подобных целей используется программа ssh (ссылки на соответствующие ресурсы можно найти там же, на http://freebsd.svib.ru/cgi-bin/showlinks.pl), запрещенная в России печально знаменитым Указом о криптографии, во времена же древние его место занимали так называемые r-программы.




Наиболее уязвимым местом в них была идея "доверия" - пользователи компьютеров, бывшие в списках "доверенных узлов", имели право запускать свои программы на "доверяющей" машине без какой-либо дополнительной проверки. Кроме того, отношение доверия часто было симметричным - если, к примеру, машина alpha доверяет пользователю luser с машины beta, то и машина beta, скорее всего, доверяет пользователю luser с машины alpha.

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

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

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

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

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



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

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

Действительно, Роберт Моррис - младший был человеком неглупым, и действительно учился на первом курсе. Отец его, Роберт Моррис - старший, в период написания Червя был известным программистом, специалистом по безопасности операционных систем, сотрудничавший с NSA Безусловно, информацией, принадлежавшей отцу, мог воспользоваться и сын.

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

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

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

Например, Червь использовал некоторые весьма нетривиальные технологии, включающие аутентификацию при пересылке (Червь пытался "убедиться", что пересылает файлы именно копии Червя, он шифровал свои, хранящиеся на диске, файлы), и, в то же время, атака на fingerd работала только на Vax'е, а определение типа машины делалось попытками последовательно запустить два выполняемых файла.Похоже, Моррис действительно упустил свою программу на раннем этапе тестирования...

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

Кстати, к моменту, когда в ФБР поняли, кто виновен в произошедшем, Моррис уже шел сдаваться. Он, похоже, сам не ожтдал такого эффекта - по некоторым данным, он пытался предупредить компьютерное сообщество, потом обсуждал происшествие с несколькими друзьями, даже говорил (анонимно) по телефону с корреспондентом...

Наконец, посоветовавшись с адвокатом, он явился с повинной.


Содержание раздела