Полезная информация

Первый удар

Александр Поволоцкий, http://freebsd.svib.ru/

Автор выражает глубокую признательность
Юджину Спаффорду за ответы на вопросы.

Действующие лица

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

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

Итак, что же произошло 2 ноября 1988 года? Главные действующие лица этой истории - не только люди, но и особые программы - "Червь" и "демоны". Что вообще, такое "демон"? Что такое "вирус"? Что такое "червь"?

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

Говорят, что термин "демон" (daemon) пошел от аббревиатуры Disk And Execution MONitor - Монитор Диска и Исполнения, но, откуда бы этот термин не взялся, он стал означать программу, не способную взаимодействовать с пользователем напрямую.

Собственно, именно "демоны" обслуживают сервисы Интернета. Наиболее важными действующими лицами этой истории из "демонов" являются Сендмейл (Sendmail) - почтовый демон, и фингерди (fingerd) - демон специальной услуги, называемой "фингер" - палец (finger).

Функции сендмейла заключаются в приеме электронной почты и информации о том, кто и кому ее послал. Он же осуществляет рассылку.

Фингерди, демон гораздо более простой, понимает специальные запросы - на вопрос о пользователе отвечает, когда тот в последний раз регистрировался в системе, когда в последний раз читал почту и так далее.

Что такое вирус? Вирус - это программа, распространяющая себя на компьютере. Как правило, это делается путем модификации некоторых исполняемых файлов - вируc "добавляет" себя к программе.

Термин "вирус" произошел из научной фантастики, но удручающе быстро стал часто встречаться в реальности. К компьютерам этот термин был приложен впервые в 1983 году, Фредом Кохеном. По его утверждению, он написал первого вируса в процессе подготовки докторской диссертации, третьего ноября 1983 года - по иронии судьбы, почти ровно за пять лет до Червя. Впрочем, к теме данной статьи вирусы имеют лишь косвенное отношение. Тип программ, к которым принадлежал Червь Морриса, так и называется - черви.

Что такое червь? Червь - это программа, созданная для того, чтобы работать на нескольких компьютерах, копировать себя из машины в машину и там запускать. Впервые термин "Червь" был использован в 1975 году в научной фантастике. До 88-го года многие корпорации, такие, как Xerox, экспериментировали с разделяемыми задачами. К примеру, весьма известен в то время был червь, названный Вампиром. Вечером, когда люди уходили из лаборатории, он запускал процессы, требующие больших затрат ресурсов компьютера. Утром, прежде чем сотрудники возвращались, он сохранял состояние задач и освобождал компьютеры. Кстати, с одним из подобных червей была связана первая проблема, похожая на атаку "Червя". Из-за ошибки в программировании он не прекратил свою работу утром. Более того, когда машины выключали и включали снова, черви из соседних компьютеров запускали свои копии на вновь включенные, срывая таким образом работу. Однако, во-первых, эти черви не были предназначены для таких действий (это был их внештатный режим); во-вторых, все это происходило в локальной сети, в зоне ответственности одного администратора, и все было под рукой - но 2 ноября была запущена, наверное, не имевшая себе аналогов, агрессивная и живучая программа.

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

Итак, что же делал Червь? Используя ошибки программного обеспечения того времени (которых сейчас, впрочем, не стало меньше; они просто стали другими), Червь внедрял свою копию на удаленные компьютеры и запускал ее. Каждый зараженный компьютер стремился заразить и все прочие связанные с ним машины. Червь не был специализирован на какой-либо одной операционной системе, но и особенно многофункциональным он тоже не был. Он был расчитан на операционную систему 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'е, а определение типа машины делалось попытками последовательно запустить два выполняемых файла. Похоже, Моррис действительно упустил свою программу на раннем этапе тестирования...

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

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

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

Последствия и уроки

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

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

Итак, Червь был пойман, заплаты выпущены и поставлены, сам Червь дизассемблирован и проанализирован.

Закончилась реакция техников, началась реакция правящих кругов. Первым отозвалось Министерство Обороны. (Известно, что Арпанет был создан именно там).

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

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

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

Наиболее разумной мерой противодействия взлому явилось образование CERT (Computer Emergency Responce Team - группа немедленного реагирования по компьютерам) Это был консультативный орган, не обладавший никакими официальными полномочиями. Однако, по сей день он действует и является признанным авторитетом в деле поддержании безопасности компьютеров. В настоящее время CERT принимает сведения о возможных дырах и взломах в системе и публикует рекомендации по их профилактике, учитывая особенности конкретной операционной системы. Вскоре таких организаций образовалось несколько.

Кроме того, были созданы списки рассылки и news-группы, посвященные различным аспектам безопасности. Любой уважающий себя хакер и системный администратор регулярно читают эти конференции и списки рассылки, потому что отставать от жизни нельзя. Несколько месяцев назад после обнаружения достаточно серьезной дыры в популярном pop3-сервере (pop3, Post Office Protocol, позволяет кдаленным пользователям забирать свою почту с сервера) на множество Интернет-узлов обрушился настоящий шквал попыток взлома. В отдельные дни я наблюдал 5 - 6 таких попыток только на своем, достаточно малоизвестном, сервере.

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

В любом программном обеспечении могут быть ошибки, грозящие возможностью удаленного взлома. Сегодня, десять лет спустя, мы наблюдаем настоящий взрыв активности троянских коней, типа Back Orifice, NetBus и десятков (сотен? тысяч?) им подобных, с успехом компенсирующие невозможность удаленной работы под Win'95.

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

Простенькая программа, внедрающаяся в популярный irc-клиент mIRC, по оценкам, приведенным в bugtraq (http://www.geek-girl.com/bugtraq/1998_4/0016.html), захватила примерно пятнадцать тысяч компьютеров, дав ее автору возможность полного управления "трофеем". Таким образом, один хакер получил доступ к большему числу машин большей производительности, чем мог когда-то получить Моррис.

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

Сам же системный администратор системный администратор обязан быть бдителен, должен постоянно следить за безопасностью компьютеров в своей зоне ответственности. Впрочем, увы, сплошь и рядом это не так. По некоторым данным, около 20% компьютеров уязвимы к простым и хорошо известным способам атаки, причем эта цифра как минимум не уменьшается - это прямая вина админа. Выживает только параноик. Be quick - or be dead.

История Червя: даты и время

2 ноября
примерно 17:00
Червь запущен
примерно 18:00
Машина prep.ai.mit.edu, машина с открытым доступом, заражена.
18:30
Зараженная машина Питтсбургского Университета заражает машины корпорации RAND
21:00
Червь в Стэнфорде
21:30
Первая машина в Университете штата Миннесота заражена
22:04
Калифорнийский Университет, Беркли. Майк Карелс и Фил Лапсли вскоре обнаружили Червя по необычно высокой загрузке машины.
22:40-23:40
Северная Каролина, SRI, Университет Карнеги-Меллона, Университет Мэрилэнда, Университет Пенсильвании, Массачусетский Технологический... Червь победоносно шагает по Сети.
23:40
В Беркли понимают, что атака ведется через rsh и sendmail. В качестве меры предосторожности, начинается блокирование сетевых сервисов.
23:45
Машины Лаборатории Баллистических Исследований заражены
23:49
Заражены машина Университета штата Юта, в течение следующего часа загрузка возросла до 100.
3 ноября
до 2:00
Продолжается заражение...
2:38
Peter Yee посылает в список рассылки TCP-IP сообщение "Нас атакуют"
3:34
Анонимный постинг в TCP-IP, вкратце описывающий, как остановить Червя. Автор постинга (Andy Sudduth) послал это сообщение после телефонного разговора с Моррисом, но, из-за перегрузки сетей и компьютеров, письмо не было отослано в течение примерно суток
примерно 4:00
Университет штата Колорадо и Университет Пурдью атакованы
5:54
Кейт Бостик отправляет предупреждение о Черве и заплаты к sendmail в список рассылки TCP-IP, ньюсгруппу 4bsd-ucb-fixes и нескольким системным администраторам
6:45
Клиффорд Столл сообщает о Черве в Национальный Центр Компьютерной Безопасности
7:30
Юджин Спаффорд обнаруживает необычную загрузку компьютеров. Считая, что дело в неисправности, он перезагружает машины.
8:07
Эдвард Ванг в Беркли разбирается с атакой через fingerd, но его письмо остается неотправленным в течение более чем полусуток
8:18
Юджин Спаффорд читает письмо Кейта, и отправляет кго в ньюсгруппу news.announce.important, в список рассылки nntp-managers и более чем 30 системным администраторам.
10:36
Юджин Спаффорд делает первое описание атаки Червя (атака через fingerd еще неизвестна)
11:30
Арпанет и Милнет разъединены
14:50
Машины в Пурдью, с исправленным sendmail'ом, вновь инфицированы.
18:00
Майк Спицер и Майк Рован, Пурдью, обнаруживают ошибку в fingerd. Из-за сбоя почтовой системы их письмо не отправляется
19:00
Билл Соммерфилд их Массачусетского Технологического Института звонит в Беркли и сообщает об атаке через fingerd. Однако, никаких писем и постингов не следует
19:19
Кейт Бостик публикует повые патчи к sendmail и fingerd. Письмо портится при передаче, а многие узлы получают его лишь на следующий день.
19:37
Тим Бекер из Рочестерского Университета рассылает описание атаки через fingerd.
23:10
В Беркли начинается работа по декомпиляции Червя

К утру 4 ноября, в Беркли и в Массачусетсе работы по декомпиляции были завершены. К 11 часам связь между Арпанет и Милнет была восстановлена. К 8 ноября: в целом, Интернет работал уже в обычном режиме.