Новый насущный вопрос современности

Как это ни странно, но некоторые определенно закономерные и неизбежные вещи человечество склонно не замечать вовсе. К примеру, создавая атомную энергетику, правительства абсолютно всех стран мира знали о том, что в определенном и не столь уж далеком будущем они столкнуться с проблемой утилизации ядерных высокотоксичных отходов. Тем не менее принято было считать, что эта сложность, во-первых, не столь уж и велика, а во-вторых, к моменту их захоронения наука найдет какое-нибудь приемлемое решение. В результате к настоящему времени Человечество попало в замкнутый круг, когда крайне сложно и дорого утилизировать отработанный ядерный материал, и в то же время пока не существует сколько-нибудь действенной альтернативы атомным электростанциям, производящим едва ли не половину всей электроэнергии в мире.
Примерно так же обстоят дела с открытостью компьютерных систем. С одной стороны, бурный прогресс вычислительной техники стал свершившимся фактом в самую первую очередь именно благодаря открытости программного обеспечения. Любой знающий человек имеет возможность реализовать в программном коде любую собственную идею. При этом компьютер берет на себя выполнение всей черновой работы, оставляя пользователю лишь выдавать команды и получать конечный результат. Таким образом, на самом деле никто, кроме самих разработчиков, не в состоянии с уверенностью сказать, что на самом деле в тот или иной момент делает компьютер. И это стало широкими воротами, сквозь которые хлынул бурный поток компьютерных вирусов самого разного характера.
Конечно, на сегодняшний день нет и, судя по всему, в ближайшее время не появится ни программного обеспечения, на сто процентов устойчивого к вирусным атакам, ни абсолютно действенных рекомендаций, способных подсказать единственно верное решение. Однако, как говорится, врага нужно знать в лицо, что позволит быстро находить достаточно действенные собственные решения для каждой конкретной ситуации. В свете этого весьма любопытным представляется обзорный материал Александра Поволоцкого ( http://freebsd.svib.ru ) ПЕРВЫЙ УДАР ( http://www.hackzone.ru/articles/ ).

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

Говорят, что термин "демон" (daemon) пошел от аббревиатуры Disk And Execution MONitor — Монитор Диска и Исполнения, но, откуда бы этот термин ни взялся, он стал означать программу, неспособную взаимодействовать с пользователем напрямую. Собственно, именно "демоны" обслуживают сервисы Интернета. Наиболее важными действующими лицами этой истории из "демонов" являются Сендмейл (Sendmail) — почтовый демон, и фингерди (fingerd) — демон специальной услуги, называемой "фингер" — палец (finger). Функции сендмейла заключаются в приеме электронной почты и информации о том, кто и кому ее послал. Он же осуществляет рассылку. Фингерди, демон гораздо более простой, понимает специальные запросы — на вопрос о пользователе отвечает, когда тот в последний раз регистрировался в системе, когда в последний раз читал почту и так далее.
Термин "вирус" произошел из научной фантастики, но удручающе быстро стал часто встречаться в реальности. К компьютерам этот термин был приложен впервые в 1983 году, Фредом Кохеном. По его утверждению, он написал первого вируса в процессе подготовки докторской диссертации, третьего ноября 1983 года — по иронии судьбы, почти ровно за пять лет до Червя. Впрочем, к теме данной статьи вирусы имеют лишь косвенное отношение. Тип программ, к которым принадлежал Червь Морриса, так и называется — черви.

Что такое червь? Червь — это программа, созданная для того, чтобы работать на нескольких компьютерах, копировать себя из машины в машину и там запускать. Впервые термин "Червь" был использован в 1975 году в научной фантастике. До 88-го года многие корпорации, такие, как Xerox, экспериментировали с разделяемыми задачами. К примеру, весьма известен в то время был червь, названный Вампиром. Вечером, когда люди уходили из лаборатории, он запускал процессы, требующие больших затрат ресурсов компьютера. Утром, прежде чем сотрудники возвращались, он сохранял состояние задач и освобождал компьютеры. Кстати, с одним из подобных червей была связана первая проблема, похожая на атаку "Червя". Из-за ошибки в программировании он не прекратил свою работу утром. Более того, когда машины выключали и включали снова, черви из соседних компьютеров запускали свои копии на вновь включенные, срывая таким образом работу. Однако, во-первых, эти черви не были предназначены для таких действий (это был их внештатный режим); во-вторых, все это происходило в локальной сети, в зоне ответственности одного администратора, и все было под рукой, но 2 ноября была запущена, наверное, не имевшая себе аналогов, агрессивная и живучая программа.
Итак, что же делал Червь? Используя ошибки программного обеспечения того времени (которых сейчас, впрочем, не стало меньше, они просто стали другими), Червь внедрял свою копию на удаленные компьютеры и запускал ее. Каждый зараженный компьютер стремился заразить и все прочие связанные с ним машины. Червь не был специализирован на какой-либо одной операционной системе, но и особенно многофункциональным он тоже не был. Он был рассчитан на операционную систему UNIX, а именно, на BSD Unix, работавший на машинах типа Vax и Sun-3. Обнаружив, что такие машины подключены к зараженной, Червь копировался на удаленный компьютер, запускался там, стремясь получить максимальный доступ к информации (используя ее только для продолжения взлома), и заражал соседние машины.
Поскольку каждый компьютер в Интернет соединен с несколькими, заражение распространялось лавинообразно. Более того, попытки выключить компьютер и снова включить приводили к тому, что через несколько минут на машине вновь, одна за другой, запускались копии "Червя" и загружали ее неимоверно. В UNIX под загрузкой подразумевается количество задач, которые были готовы выполниться за определенный промежуток времени, но не смогли. Нормальной считается загрузка в единицу или в двойку. Загрузка же в 4 или в 5 — выше среднего. При загрузке более 10 работать уже невозможно. На отдельных серверах в моменты наибольшей активности "Червя" загрузка достигала 30, что фактически означало остановку компьютера.

Первые несколько часов никто ничего не понимал. Приблизительно в 2.50 ночи 3 ноября в один из интернетовских списков рассылки было послано сообщение: "Нас атакуют!". Впрочем, списки рассылки, весьма удобное и практичное средство Интернет, в тот момент не работали из-за неимоверной перегрузки систем.
Так уж повелось (традиция такая), что системным администраторам не привыкать работать в ночь. Достаточно вспомнить, что программное обеспечение еще для Арпанета — самое первое — писалось как раз в ночь с пятницы на понедельник. Это была долгая и тяжелая ночь, но программа была написана в срок.
Так вот, к утру один из типов атаки стал ясен системным администраторам, и были выпущены предварительные "заплаты" к сендмейлу ("заплатой", или патчем, от английского patch, называют описания изменений, которые нужно внести в файл). Несколько часов спустя выяснилось, что они не помогают, компьютеры заражаются каким-то другим способом — не через сендмейл. По прошествии еще нескольких часов разные люди в разных лабораториях независимо друг от друга закончили патчи для фингерди. Первые три-четыре патча по странной случайности не попали в сеть, но уже к вечеру 5 ноября большинство компьютеров в Интернете было свободно от Червя, программное обеспечение было исправлено и началась интенсивная работа по декомпиляции вируса.
В принципе, пик эпидемии был сбит через двое суток, хотя, по данным лиц, еще тогда пожелавших остаться анонимными, на отдельных машинах Червь бродил еще в начале декабря. Работа по декомпилированию Червя (то есть, восстановлению исходного текста по двоичному файлу) была закончена достаточно быстро: Червь был программой нетривиальной, но и боролись с ним отнюдь не студенты-первокурсники. Алгоритм его работы был прост, хотя и не лишен изящества. Программа Червя состояла из трех частей: загрузчика (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% паролей были вскрыты таким образом. В работе Червя было еще несколько деталей, впрочем, они не важны для понимания механизма его работы.
Одна из легенд, связанных с Червем, гласит, что этого монстра выпустил на волю студент первого курса — юное дарование, компьютерный гений. Как и в большинстве легенд, в ней содержится правда, хотя и не вся. Действительно, Роберт Моррис младший был человеком неглупым и учился на первом курсе. Отец его, Роберт Моррис — старший, в период написания Червя был известным программистом, специалистом по безопасности операционных систем, сотрудничавший с NASA. Безусловно, информацией, принадлежавшей отцу, мог воспользоваться и сын. Зачем он это сделал — навсегда останется загадкой. По его собственным утверждениям, это был всего лишь эксперимент, вышедший из-под контроля. Впрочем, строго говоря, Червь и не нанес прямого ущерба.
Да, двое суток работы системного администратора стоят дорого — сотни, а то и тысячи долларов, а работал их не один десяток. Да, компьютеры простаивали, но ни один файл не был уничтожен; хранящаяся в машинах конфиденциальная информация не была разослана куда бы то ни было. С этой точки зрения вполне можно допустить, что Червь был действительно безобидным, вышедшим из-под контроля экспериментом.

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

Обнаружил и подготовил,Александр Запольскис


Компьютерная газета. Статья была опубликована в номере 50 за 1998 год в рубрике безопасность :: вирусология

©1997-2024 Компьютерная газета