Как вы распространяете информацию о том, что в компьютере есть дыра в безопасности? Некоторые молчат, опасаясь, что, рассказывая людям, как смешивать взрывчатые вещества, они побудят их делать бомбы. В этой книге я подробно описал некоторые из этих проблем безопасности, понимая, что люди в черных шляпах уже знают о них.
Я попытался реконструировать этот инцидент так, как я его пережил. Моими главными источниками являются мои бортовые журналы и дневники, которые я перепроверил, связавшись с другими участниками этого дела и сравнив отчеты других. Несколько человек фигурируют под псевдонимами, несколько телефонных номеров изменены, некоторые разговоры пересказаны по памяти, но никакого выдумывания.
Спасибо моим друзьям, коллегам и семье за поддержку на протяжении всего расследования и написания. Регина Вигген была моей редакторской опорой; спасибо также Йохену Сперберу, Джону Рохлису, Дину Чакону, Вайноне Смит, Стефану Столлу, Дэну Сэку, Дональду Альваресу, Лори Макферсон, Ричу Мюллеру, Джину Спаффорду, Энди Гольдштейну и Гаю Консолманьо. Спасибо также Биллу Стотту за книгу "Пиши по существу", которая изменила мой стиль письма.
Я отправил объявление в несколько компьютерных сетей с просьбой предложить варианты названия. Несколько сотен человек со всего мира ответили безумными идеями. Я благодарю Карен Андерсон из Сан-Франциско и Найджела Робертса из Мюнхена за название и подзаголовок.
Редакторы Doubleday, Дэвид Гернерт и Скотт Фергюсон, помогали мне во всем. Было весело работать с добрыми людьми из Pocket Books, включая Билла Гроуза, Дадли Фрейзера и кенгуру Герти, изображенного на обложке этой книги. Спасибо им, а также моему агенту Джону Брокману за вашу постоянную поддержку и мудрые советы.
Я в долгу перед каждым из этих людей; Я также должен большинству из них коробки печенья.
Лаборатория Лоуренса Беркли поддерживала меня на протяжении всего этого поиска; сотрудники Смитсоновской астрофизической обсерватории, особенно Джо Шварц и Стив Мюррей, оказали мне большую милость и поддержку, пока я писал эту книгу. Я выражаю глубокую благодарность моим друзьям из обоих институтов и выражаю надежду, что теперь я смогу вернуться к астрономии.
Мне было десять лет, когда Эрнст Бот из Музея науки Буффало пригласил меня посмотреть в телескоп, открыв для себя астрономическую вселенную. Интересно, смогу ли я когда-нибудь отблагодарить его должным образом.
Мне не нужно благодарить мою возлюбленную и жену, Марту Мэтьюз. Она была такой же частью написания этой книги, как и в истории.
-Клифф Столл Адреса
электронной почты:
Интернет: Cliff@cfa.harvard.edu
CompuServe: 71660,3013
Genie: CliffStoll
AOL: Cliffstoll
1
Я , волшебник? Еще неделю назад я был астрономом, с удовольствием проектировавшим оптику для телескопов. Оглядываясь назад, я понимаю, что жил в академической стране грез. Все эти годы, никогда не планируя будущее, вплоть до того дня, когда у меня закончились деньги на грант.
К счастью для меня, моя лаборатория перерабатывала бывших в употреблении астрономов. Вместо того, чтобы стоять в очереди на пособие по безработице, меня перевели из обсерватории Кека в лаборатории Лоуренса в Беркли в компьютерный центр в подвале того же здания.
Ну, черт возьми, я мог подделать достаточно вычислений, чтобы произвести впечатление на астрономов, и, может быть, понять это достаточно быстро, чтобы мои коллеги не заметили. Все-таки компьютерный волшебник? Не я - я астроном.
Что теперь? Пока я безразлично смотрел на свой компьютерный терминал, я все еще думал об орбитах планет и астрофизике. Как новичок в этом районе, у меня был выбор между кабинкой с окном, выходящим на мост Золотые Ворота, или непроветриваемым офисом со стеной книжных полок. Проглотив свою клаустрофобию, я выбрал кабинет, надеясь, что никто не заметит, когда я сплю под столом. По обеим сторонам располагались офисы двух системщиков, Уэйна Грейвса и Дейва Кливленда, старых сотрудников системы. Вскоре я познакомился со своими соседями по их ссорам.
Считая всех некомпетентными или ленивыми, Уэйн злился на остальных сотрудников. Тем не менее, он знал систему досконально, от программного обеспечения дисковода до микроволновых антенн. Уэйн был воспитан на компьютерах Vax от Digital Equipment Corporation и не потерпит ничего меньшего: ни IBM, ни Unix, ни Macintosh.
Дэйв Кливленд, наш безмятежный будда Unix, терпеливо слушал непрерывный поток компьютерных сравнений Уэйна. На редкой встрече не было подачи Уэйна: "Ваксы - это выбор ученых во всем мире, и они помогают создавать сильные программы двенадцатью способами". Дэйв возразил: "Послушайте, вы держите своих наркоманов Vax счастливыми, а я справлюсь с остальным миром".
Дэйв никогда не доставлял ему удовольствия быть раздраженным, и жалобы Уэйна в конце концов перешли в бормотание.
Большой. Первый рабочий день, зажатый между двумя персонажами, которые уже рушили мои мечты своими периодическими спорами.
По крайней мере, никто не мог пожаловаться на мой внешний вид. На мне была стандартная корпоративная форма Беркли: грязная рубашка, линялые джинсы, длинные волосы и дешевые кроссовки. Менеджеры иногда носили галстуки, но продуктивность в эти дни падала.
Вместе Уэйн, Дейв и я должны были управлять компьютерами в масштабе всей лаборатории. Мы управляли дюжиной мэйнфреймов - гигантских рабочих лошадок для решения физических задач, общей стоимостью около шести миллионов долларов. Ученые, использующие компьютеры, должны были увидеть простую, мощную вычислительную систему, столь же надежную, как электрическая компания. Это означало, что машины должны работать постоянно, круглосуточно. И точно так же, как электрическая компания, мы взимали плату за каждый использованный цикл вычислений.
Из четырех тысяч сотрудников лаборатории примерно четверть использовала главные компьютеры. Каждый из этих тысячи счетов ежедневно подсчитывался, а бухгалтерские книги хранились внутри компьютера. Поскольку час работы стоил триста долларов, наша бухгалтерия должна была быть точной, поэтому мы отслеживали каждую напечатанную страницу, каждый блок дискового пространства и каждую минуту процессорного времени. Отдельный компьютер собирал эту статистику и отправлял ежемесячные счета в лабораторные отделы.
И так случилось, что на второй день моей работы Дэйв забрел в мой кабинет, бормоча что-то о сбое в системе учета Unix. Кто-то, должно быть, использовал несколько секунд вычислительного времени, не заплатив за это. Бухгалтерские книги компьютера не совсем сбалансированы; счета прошлого месяца на 2387 долларов показали дефицит в размере 75 центов.
Теперь ошибка в несколько тысяч долларов очевидна, и ее нетрудно найти. Но ошибки в копеечной колонке возникают из-за глубоко запрятанных проблем, поэтому обнаружение этих ошибок является естественным испытанием для начинающего мастера программного обеспечения. Дэйв сказал, что я должен подумать об этом.
- Ограбление первой степени, да? Я ответил.
"Придумай это, Клифф, и ты всех удивишь", - сказал Дэйв. Что ж, это показалось мне забавной игрушкой, поэтому я покопался в бухгалтерской программе. Я обнаружил, что наше бухгалтерское программное обеспечение представляет собой лоскутное одеяло из программ, написанных давно ушедшими летними студентами. Каким-то образом эта мешанина работала достаточно хорошо, чтобы ее можно было игнорировать. Глядя на смесь программ, я нашел программное обеспечение на ассемблере, фортране и коболе, самом древнем из компьютерных языков. С таким же успехом это могли быть классический греческий, латынь и санскрит.
Как и в большинстве самодельных программ, никто не удосужился задокументировать нашу систему учета. Только дурак будет рыться в таком лабиринте без карты.
Тем не менее, это была игрушка на полдня и возможность исследовать систему. Дэйв показал мне, как система записывает каждый раз, когда кто-то подключается к компьютеру, регистрируя имя пользователя и терминал. Он ставил временную метку для каждого подключения, записывая, какие задачи выполнял пользователь, сколько секунд процессорного времени он использовал и когда он отключился.
Дэйв объяснил, что у нас есть две независимые системы учета. Обычное бухгалтерское программное обеспечение Unix просто сохраняло записи с временными метками в файл. Но, чтобы удовлетворить какого-то бюрократа, Дэйв построил вторую систему учета, в которой хранились более подробные записи о том, кто пользуется компьютером.
На протяжении многих лет несколько скучающих летних студентов писали программы для анализа всей этой бухгалтерской информации. Одна программа собирала данные и сохраняла их в файл. Вторая программа прочитала этот файл и вычислила, сколько брать за этот сеанс. Однако третья программа собирала все эти платежи и распечатывала счета для отправки по почте в каждый отдел. Последняя программа суммировала все платежи пользователей и сравнила эту сумму с результатом внутренней бухгалтерской программы компьютера. Два учетных файла, которые ведутся параллельно разными программами, должны давать один и тот же ответ.
В течение года эти программы работали без сбоев, но на этой неделе они не были идеальными. Очевидным подозреваемым была ошибка округления. Вероятно, каждая бухгалтерская запись была правильной, но при суммировании разница в десятые доли пенни накапливалась, пока не накопилась ошибка в 75 центов. Я должен быть в состоянии доказать это либо анализируя работу программ, либо тестируя их на разных данных.
Вместо того, чтобы пытаться понять код для каждого программа, я написал короткую программу для проверки файлов данных. Через несколько минут я проверил первую программу: действительно, она правильно собирала учетные данные. С первым проблем нет.
Вторая программа заняла у меня больше времени, чтобы понять. За час я налепил достаточно импровизированного кода, чтобы доказать, что он действительно работает. Он просто суммировал временные интервалы, а затем умножал их на то, сколько мы берем за компьютерное время. Так что ошибка в 75 центов возникла не из-за этой программы.
И третья программа работала отлично. Он просматривал список авторизованных пользователей, находил их лабораторные учетные записи, а затем распечатывал счет. Ошибка округления? Нет, все программы считали деньги с точностью до сотых долей. Странный. Откуда эта ошибка в 75 центов?
Ну, я потратил пару часов, пытаясь понять тривиальную проблему. Я заупрямился: черт возьми, я бы остался там до полуночи, если бы пришлось.
Спустя несколько тестовых программ я действительно начал доверять мешанине местных бухгалтерских программ. Несомненно, счета не сбалансировались, но программы, хотя и не пуленепробиваемые, не сбрасывали ни копейки. К этому времени я нашел списки авторизованных пользователей и выяснил, как программы используют структуры данных для выставления счетов различным отделам. Около 19:00 мне на глаза попался один пользователь, Хантер. У этого парня не было действительного платежного адреса.
Ха! Хантер использовал 75 центов времени в прошлом месяце, но за него никто не заплатил.
Вот источник нашего дисбаланса. Кто-то облажался при добавлении пользователя в нашу систему. Тривиальная проблема, вызванная тривиальной ошибкой.
Время праздновать. Пока я писал об этом первом маленьком триумфе на первых страницах моего блокнота, Марта, моя возлюбленная, остановилась, и мы отпраздновали это вечерним чашечкой капучино в кафе Беркли "Рома".
Настоящий волшебник решил бы проблему за несколько минут. Для меня это была неизвестная территория, и найти дорогу было нелегко. В качестве утешения я изучил систему бухгалтерского учета и попрактиковался в паре устаревших языков. На следующий день я отправил электронное сообщение Дейву, приведя себя в порядок, указав ему на проблему.
Около полудня Дэйв зашел, чтобы оставить кучу руководств, и мимоходом упомянул, что он никогда не добавлял пользователя по имени Хантер - это, должно быть, был кто-то из других системных администраторов. Краткий ответ Уэйна: "Это был не я. RTFM". Большинство его предложений заканчивались аббревиатурами, одно из которых означало "Читайте гребаный мануал".
Но я читал мануалы. Операторы не должны были добавлять нового пользователя без учетной записи. В других компьютерных центрах вы просто входите в систему с привилегированной учетной записью и указываете системе добавить нового пользователя. Так как мы также должны были сделать несколько бухгалтерских проводок, мы не могли запустить такую ванильную систему. Наша система была настолько сложной, что у нас были специальные программы, которые автоматически занимались бумажной работой и жонглированием системами.
Оглядевшись, я обнаружил, что все согласны с тем, что автоматическая система настолько превосходна, что никто не стал бы вручную добавлять нового пользователя. И автоматическая система не допустила бы этой ошибки.
Ну, я не мог понять, кто сделал эту ерунду. Никто не знал Хантера, и для него не было выставлено счетов. Поэтому я стер это имя из системы - когда он пожалуется, мы сможем его правильно настроить.
Через день малоизвестный компьютер по имени Dockmaster прислал нам сообщение по электронной почте. Его системный администратор утверждал, что кто-то из нашей лаборатории пытался проникнуть в его компьютер на выходных.
Обратный адрес начальника дока мог быть где угодно, но знаки указывали на Мэриленд. Электронное письмо прошло через дюжину других компьютеров, и на каждом остался почтовый штемпель.
Дэйв ответил на сообщение уклончивым "Мы рассмотрим это". О, конечно. Мы бы посмотрели, когда все наши другие проблемы исчезли.
Компьютеры нашей лаборатории подключены к тысячам других систем через дюжину сетей. Любой из наших ученых может войти в наш компьютер, а затем подключиться к удаленному компьютеру. После подключения они могут войти на удаленный компьютер, введя имя учетной записи и пароль. В принципе, единственное, что защищает подключенный к сети компьютер, - это пароль, так как имена учетных записей легко узнать. (Как найти имена учетных записей? Просто воспользуйтесь телефонной книгой - большинство людей используют свои имена на компьютерах.)
Электронное сообщение начальника дока было любопытным, и Дэйв передал его Уэйну, добавив вопрос: "Кто такой начальник дока?" Уэйн переслал мне его со своим предположением: "Наверное, какой-то банк".
В конце концов, Уэйн передал мне сообщение. Я предположил, что Dockmaster - это какая-то верфь военно-морского флота. Это было неважно, но стоило потратить несколько минут на изучение.
В сообщении была указана дата и время, когда кто-то на нашем Unix-компьютере пытался войти в компьютер Dockmaster. Так что я порылся в бухгалтерских файлах, просматривая отчеты за субботнее утро. Опять же, две системы учета расходились. Стандартный файл учета Unix показал, что пользователь Sventek вошел в систему в 8:25, ничего не делал в течение получаса, а затем отключился. Между действиями нет отметок времени. Наше самодельное программное обеспечение также зафиксировало активность Свентека, но оно показало, что он пользовался сетями с 8:31 до 9:01.
Боже. Еще одна проблема с бухгалтерией. Временные метки не совпали. Один показал активность, когда другой аккаунт сказал, что все бездействует.
Другие вещи казались более неотложными, поэтому я отбросил эту проблему. Потратив полдня на поиски какой-то ошибки оператора, я не собирался снова прикасаться к системе учета.
Во время обеда с Дейвом я упомянул, что Свентек был единственным, кто был на связи, когда Докер сообщил о взломе. Он посмотрел и сказал: "Джо Свентек? Он в Кембридже. Кембридж, Англия. Что он делает?" Выяснилось, что Джо Свентек был гуру Unix в лаборатории, мастером программного обеспечения, который за последнее десятилетие создал дюжину крупных программ. Джо уехал в Англию год назад, оставив после себя блестящую репутацию в калифорнийском компьютерном сообществе.
Дэйв не мог поверить, что Джо вернулся в город, поскольку никто из других друзей Джо ничего о нем не слышал. "Должно быть, он проник в наш компьютер через какую-то сеть", - сказал Дэйв.
- Так ты думаешь, Джо виноват в этой проблеме? - спросил я Дэйва.
- Ни за что, - ответил Дэйв. "Джо - хакер старой закалки. Умный, быстрый, способный программист. Не из тех подонков, которые запятнали слово "хакер". В любой В таком случае Свентек не стал бы пытаться взломать какой-нибудь компьютер в Мэриленде. А если бы он и попытался, то у него бы это получилось, не оставив и следа".
Любопытно: Джо Свентек уже год в Англии, но он появляется рано утром в субботу, пытается взломать компьютер в Мэриленде, отключается и оставляет после себя несбалансированную систему учета. В коридоре я говорю об этом Уэйну, который слышал, что Джо в отпуске в Англии; он прячется в глуши, подальше от любых компьютеров. "Забудьте о сообщении от начальника дока. Свентек должен посетить RSN в Беркли, и он все прояснит".
РСН? Очень скоро сейчас. Способ Уэйна сказать: "Я не уверен, когда".
Меня беспокоил не Свентек. Это были несбалансированные счета. Почему две учетные системы вели разное время? И почему какая-то активность регистрируется в одном файле, но не отображается в другом?
Вернемся к системе бухгалтерского учета на полдня. Я обнаружил, что пятиминутная разница во времени между отметками времени возникла из-за того, что часы наших различных компьютеров дрейфовали в течение нескольких месяцев. Часы одного из наших компьютеров каждый день отставали на несколько секунд.
Но вся деятельность Sventek должна была появиться в обоих списках. Было ли это связано с проблемой бухгалтерского учета на прошлой неделе? Я что-то напортачил, когда ковырялся на прошлой неделе? Или было какое-то другое объяснение?
2
В тот день я прослушал впечатляюще скучную лекцию о структуре галактик . Ученый профессор не только монотонно говорил, но и заполнил доску змеиным гнездом математических уравнений.
Пытаясь не заснуть, я перебрасывал проблемы, с которыми столкнулся. Кто-то накосячил при добавлении новой учетной записи. Через неделю Свентек входит в систему и пытается взломать какой-то компьютер в Мэриленде. Бухгалтерская запись этого события кажется искаженной. Свентек недоступен. Что-то не в порядке Как будто кто-то избегает бухгалтерской программы.
Что нужно, подумал я, чтобы пользоваться нашими компьютерами бесплатно? Мог ли кто-нибудь найти способ обойти нашу систему учета?
Большие компьютеры имеют два типа программного обеспечения: пользовательские программы и системное программное обеспечение. Программы, которые вы пишете или устанавливаете сами, являются пользовательскими программами - например, мои астрономические процедуры, которые анализируют атмосферу планеты.
В одиночку пользовательские программы мало что могут сделать. Они не разговаривают напрямую с компьютером; скорее, они призывают операционную систему манипулировать компьютером. Когда моя астрономическая программа хочет что-то написать, она не просто выводит слово на экран. Вместо этого он передает слово операционной системе, которая, в свою очередь, приказывает оборудованию записать слово.
Операционная система вместе с редакторами, программными библиотеками и языковыми интерпретаторами составляют системное программное обеспечение. Вы не пишете эти программы - они идут вместе с компьютером. После того, как они настроены, никто не должен вмешиваться в них.
Бухгалтерская программа является системным программным обеспечением. Чтобы изменить или обойти его, вы должны либо быть системным администратором, либо каким-то образом занять привилегированное положение в операционной системе.
Хорошо, а как стать привилегированным? Очевидный способ - войти на наш компьютер с паролем системного администратора. Мы не меняли пароль несколько месяцев, но никто бы его не слил. И посторонний никогда не угадает наш секретный пароль, "виверна" - сколько людей подумает о мифологическом крылатом драконе, угадывая наш пароль?
Но даже если бы вы стали системным администратором, вы не стали бы морочиться с бухгалтерской программой. Это слишком неясно, слишком плохо документировано. Во всяком случае, я видел, что это работает.
Подождите, наше самодельное программное обеспечение работало правильно. Кто-то добавил новую учетную запись, не используя ее. Возможно, они не знали об этом. Если бы кто-то пришел с холода, он бы не знал о наших местных морщинах. Наши системные менеджеры и операторы знали об этом. Джо Свентек, даже в Англии, наверняка знал бы. А как насчет кого-то извне - хакера?
Слово "хакер" имеет два очень разных значения. Люди, которых я знал и которые называли себя хакерами, были волшебниками программного обеспечения, которым удавалось творчески программировать выход из трудных ситуаций. Они знали все закоулки операционной системы. Не скучные инженеры-программисты, работающие по сорок часов в неделю, а творческие программисты, которые не могут оторваться от компьютера, пока машина не будет удовлетворена. Хакер идентифицирует себя с компьютером, зная его как друга.
Так меня увидели астрономы. "Клифф, он не очень астроном, но какой компьютерный хакер!" (Компьютерщики, конечно, придерживались другого мнения: "Клифф не очень хороший программист, но какой астроном!" В лучшем случае аспирантура научила меня держать в дураках обе стороны.)
Но в обычном понимании хакер - это тот, кто взламывает компьютеры. [*] В 1982 году, после того как группа студентов воспользовалась терминалами, модемами и междугородними телефонными линиями, чтобы проникнуть в компьютеры в Лос-Аламосе и Колумбийском медицинском центре, компьютерщики внезапно осознали уязвимость наших сетевых систем.
Каждые несколько месяцев до меня доходили слухи о вторжении в чужую систему; обычно это было в университетах, и в этом часто обвиняли студентов или подростков. "Блестящий старшеклассник взломал компьютерный центр с высоким уровнем безопасности". Обычно это было безобидно и списывалось на какую-нибудь хакерскую шалость.
Мог ли фильм " Военные игры " произойти на самом деле - мог ли какой-нибудь хакер-подросток взломать компьютер Пентагона и начать войну?
Я сомневался. Конечно, легко лазить по компьютерам в университетах, где безопасность не нужна. В конце концов, колледжи редко даже запирают двери своих зданий. Я представлял себе, что военные компьютеры - это совсем другая история - они будут так же надежно защищены, как военная база. И даже если вы сделали попасть в военный компьютер, абсурдно думать, что вы можете начать войну. Эти вещи просто не контролируются компьютерами, подумал я.
Наши компьютеры в лаборатории Лоуренса в Беркли не были особенно защищены, но от нас требовалось не допускать к ним посторонних и прилагать усилия для предотвращения их неправомерного использования. Мы не беспокоились о том, что кто-то повредит наши компьютеры, мы просто хотели, чтобы наше финансирующее агентство, Министерство энергетики, не мешало нам. Если бы они хотели, чтобы наши компьютеры были окрашены в зеленый цвет, мы бы заказали кисти.
Но чтобы порадовать приезжих ученых, у нас было несколько компьютерных аккаунтов для гостей. С именем учетной записи "гость" и паролем "гость" любой мог использовать систему для решения своих проблем, если он не использовал больше нескольких долларов вычислительного времени. Хакеру было бы легко взломать эту учетную запись - она была широко открыта. Вряд ли это было бы большим взломом, поскольку время ограничено одной минутой. Но с этой учетной записи вы могли просматривать систему, читать любые общедоступные файлы и видеть, кто вошел в систему. Мы чувствовали, что небольшой риск для безопасности стоил удобства.
Обдумывая ситуацию, я все время сомневался, что в моей системе шалит хакер. Никто не интересуется физикой элементарных частиц. Черт, большинство наших ученых были бы в восторге, если бы кто-нибудь прочитал их статьи. Здесь нет ничего особенного, что могло бы соблазнить хакера - ни шикарного суперкомпьютера, ни сексуальных коммерческих секретов, ни секретных данных. Действительно, лучшей частью работы в Lawrence Berkeley Labs была открытая академическая атмосфера.
В пятидесяти милях отсюда Ливерморские лаборатории Лоуренса занимались секретной работой, разрабатывая ядерные бомбы и проекты по "Звездным войнам". Теперь это может стать целью для проникновения какого-нибудь хакера. Но без связи с внешним миром компьютеры Ливермора не могут быть подключены. Их секретные данные защищены грубой силой: изоляция.
Если бы кто-то взломал нашу систему, что бы он мог сделать? Они могли читать любые публичные файлы. Большинство наших ученых размещают свои данные таким образом, чтобы их коллеги могли их прочитать. Некоторое системное программное обеспечение также было общедоступным.
Хоть мы и называем эти данные общедоступными, посторонний человек не должен бродить по ним. Некоторые из них являются собственностью или защищены авторским правом, например, наши программные библиотеки и программы обработки текстов. Другие базы данных не для всех - списки адресов наших сотрудников и неполные отчеты о незавершенных работах. Тем не менее, их вряд ли можно квалифицировать как секретный материал, и они далеко не засекречены.
Нет, я не беспокоился о том, что кто-то войдет в наш компьютер в качестве гостя и уйдет с чьим-то номером телефона. Мое настоящее беспокойство было сосредоточено на гораздо более серьезной проблеме: может ли незнакомец стать суперпользователем?
Чтобы одновременно удовлетворить сотню пользователей, операционная система компьютера разделяет аппаратные ресурсы так же, как многоквартирный дом делит здание на множество квартир. Каждая квартира работает независимо от других. Пока один житель может смотреть телевизор, другой разговаривает по телефону, а третий моет посуду. Коммунальные услуги - электричество, телефонная связь и вода - предоставляются жилым комплексом. Каждый житель жалуется на медленное обслуживание и непомерную арендную плату.
Внутри компьютера один пользователь может решать математическую задачу, другой отправляет электронную почту в Торонто, а третий пишет письмо. Компьютерные утилиты поставляются системным программным обеспечением и операционной системой; каждый пользователь ворчит о ненадежном программном обеспечении, неясной документации и непомерных расходах.
Конфиденциальность в жилом доме регулируется замками и ключами. Один житель не может войти в чужую квартиру без ключа, и (если стены крепкие) деятельность одного жильца не будет мешать другому. Внутри компьютера именно операционная система обеспечивает конфиденциальность пользователей. Вы не можете попасть в чью-то область без правильного пароля, и (если операционная система честна в раздаче ресурсов), программы одного пользователя не будут мешать программам другого.
Но стены квартир никогда не бывают достаточно прочными, и вечеринки моего соседа гремят в мою спальню. И мой компьютер все еще тормозит, когда им пользуются больше сотни человек одновременно. Таким образом, нашим многоквартирным домам нужны суперинтенданты, а нашим компьютерам нужны системные администраторы или суперпользователи.
С ключом комендант многоквартирного дома может войти в любую комнату. Под привилегированной учетной записью администратор системы может читать или изменять любую программу или данные на компьютер. Привилегированные пользователи обходят защиту операционной системы и получают полный доступ к компьютеру. Им нужна эта сила, чтобы поддерживать системное программное обеспечение ("Исправить редактор!"), настраивать производительность операционной системы ("Сегодня все слишком медленно!") и позволять людям пользоваться компьютером ("Эй, дайте Барбаре учетную запись). ").
Привилегированные пользователи учатся действовать осторожно. Они не могут причинить большого вреда, если им разрешено только чтение файлов. Но лицензия суперпользователя позволяет изменять любую часть системы - от ошибок суперпользователя нет никакой защиты.
Воистину, суперпользователь всемогущ: она управляет горизонталью, она управляет вертикалью. Когда приходит летнее время, она сбрасывает системные часы. Новый дисковод? Она единственная, кто может внедрить в систему необходимое программное обеспечение. Разные операционные системы имеют разные имена для привилегированных учетных записей - суперпользователь, корень, администратор системы, - но эти учетные записи всегда должны быть тщательно защищены от посторонних.
Что, если внешний хакер получит привилегию в нашей системе? Во-первых, он мог добавлять новые учетные записи пользователей.
Хакер с привилегиями суперпользователя будет держать компьютер в заложниках. Имея мастер-ключ от нашей системы, он мог отключить ее, когда пожелает, и сделать систему настолько ненадежной, насколько пожелает. Он мог читать, писать или изменять любую информацию в компьютере. Ни один пользовательский файл не будет защищен от него, когда он будет действовать с этой привилегированной высоты. Системные файлы также будут в его распоряжении - он сможет читать электронную почту до того, как она будет доставлена.
Он мог даже изменить бухгалтерские файлы, чтобы стереть свои следы.
Лектор по строению галактик бубнил о гравитационных волнах. Я внезапно проснулся, осознавая, что происходит в нашем компьютере. Я дождался периода вопросов, задал один символический вопрос, затем схватил свой велосипед и поехал вверх по склону к Лаборатории Лоуренса Беркли.
Хакер-суперпользователь. Кто-то взламывает нашу систему, находит мастер-ключи, дает себе привилегии и становится хакером с правами суперпользователя. Кто? Как? Отсюда? И, главное, почему?
3
всего четверть мили, но Циклотронная дорога достаточно крутая, чтобы по ней можно было проехать на велосипеде пятнадцать минут. Старая десятиступенчатая коробка передач не имела достаточно низкой передачи, так что последние несколько сотен футов мои колени чувствовали себя плохо. Наш компьютерный центр расположен между тремя ускорителями частиц: 184-дюймовым циклотроном, где Эрнест Лоуренс впервые очистил миллиграмм делящегося урана; Беватрон, где был открыт антипротон; и Хилак, родина полудюжины новых элементов.
Сегодня эти ускорители устарели - их мегаэлектронвольтные энергии давно превзошли коллайдеры гигаэлектронвольтных частиц. Они больше не получают Нобелевских премий, но физики и аспиранты все еще ждут шесть месяцев, чтобы попасть на лучи ускорителя. В конце концов, наши ускорители отлично подходят для изучения экзотических ядерных частиц и поиска новых форм материи с эзотерическими названиями вроде кварк-глюонной плазмы или пионного конденсата. А когда физики их не используют, лучи используются для биомедицинских исследований, включая терапию рака.
Еще во времена расцвета Манхэттенского проекта Второй мировой войны циклотрон Лоуренса был единственным способом измерить сечения ядерных реакций и атомов урана. Естественно, лаборатория была окутана тайной; он послужил образцом для строительства заводов по производству атомных бомб.
В 1950-х годах исследования Лаборатории Лоуренса в Беркли оставались засекреченными, пока Эдвард Теллер не основал Ливерморскую лабораторию Лоуренса в часе езды от него. Вся секретная работа отправилась в Ливермор, а несекретная наука осталась в Беркли.
Возможно, чтобы внести путаницу, обе лаборатории названы в честь первого лауреата Нобелевской премии в Калифорнии, обе являются центрами атомной физики, и обе финансируются подразделением Комиссии по атомной энергии, Министерством энергетики. На этом сходство заканчивается.
Для работы в лаборатории Беркли мне не требовался допуск к секретным материалам - там нет ни секретных исследований, ни военного контракта. Ливермор, с другой стороны, является центром разработки ядерных бомб и лазерных лучей для "Звездных войн". Вряд ли это место для длинноволосого бывшего хиппи. В то время как моя лаборатория в Беркли выживала за счет скудных научных грантов и ненадежного университетского финансирования, Ливерморская лаборатория постоянно расширялась. С тех пор, как Теллер разработал водородную бомбу, секретные исследования Ливермора никогда не испытывали недостатка в средствах.
У Беркли больше нет крупных военных контрактов, но открытость приносит свои плоды. Нас, настоящих ученых, поощряют исследовать любые любопытные явления, и мы всегда можем опубликовать наши результаты. Наши ускорители могли бы быть стрелами гороха по сравнению с гигантами в CERN в Швейцарии или Fermilab в Иллинойсе; тем не менее, они генерируют огромные объемы данных, и мы запускаем несколько приличных компьютеров для их анализа. На самом деле, это предмет местной гордости, когда физики записывают свои данные на других ускорителях, а затем посещают LBL, чтобы проанализировать свои результаты на наших компьютерах.
По вычислительной мощности ливерморские компьютеры превосходили наши. Они регулярно покупали самые большие, самые быстрые и самые дорогие Серые. Они нужны им, чтобы выяснить, что происходит в первые несколько наносекунд термоядерного взрыва.
Из-за их секретных исследований большинство компьютеров Ливермора изолированы. Конечно, у них есть и несекретные системы, занимающиеся обычной наукой. Но для их секретной работы - ну, это не для обычных смертных глаз. Эти засекреченные компьютеры никак не связаны с внешним миром.
Так же невозможно импортировать данные в Ливермор извне. Кто-то, разрабатывающий спусковые механизмы ядерной бомбы с помощью засекреченных компьютеров Ливермора, должен лично посетить лабораторию и записать свои данные на магнитную ленту. Он не может использовать десятки сетей по всей стране и не может войти из дома, чтобы посмотреть, как работает его программа. Поскольку их компьютеры часто первыми сходят с конвейера, Ливермору обычно приходится писать свои собственные операционные системы, формируя причудливую программную среду, невидимую за пределами их лаборатории. Такова цена жизни в засекреченном мире.
Хотя у нас не было вычислительной мощности Ливермор, наши компьютеры не были бездельниками. Наши компьютеры Vax были быстрыми, простыми в использовании и популярными среди физиков. Нам не пришлось изобретать собственные операционные системы, поскольку мы купили операционную систему Digital VMS и захватили Unix из кампуса. Как открытая лаборатория, наши компьютеры могли быть объединены в сеть где угодно, и мы поддерживали ученых со всего мира. Когда посреди ночи возникали проблемы, я просто звонил на компьютер LBL из дома - мне не нужно было ехать на велосипеде на работу, когда проблему можно решить телефонным звонком.
Но вот я ехал на велосипеде на работу, задаваясь вопросом, не проник ли в нашу систему какой-нибудь хакер. Это как раз может объяснить некоторые из моих проблем с бухгалтерией. Если бы какой-нибудь посторонний взломал замки в нашей операционной системе Unix и получил привилегии суперпользователя, у него была бы возможность выборочно стереть учетные записи. И, что еще хуже, он мог использовать наши сетевые подключения для атаки на другие компьютеры.
Я загнул велосипед в угол и побежал к лабиринту кабинок. К этому времени было далеко за пять, и простые люди были дома. Как я мог определить, взламывал ли кто-то нашу систему? Что ж, мы могли бы просто отправить электронное сообщение на подозрительную учетную запись, сказав что-то вроде: "Эй, ты настоящий Джо Свентек?" Или мы можем отключить учетную запись Джо и посмотреть, закончатся ли наши проблемы.
Мои мысли о хакере отвлеклись, когда я обнаружил в своем кабинете записку: астрономической группе нужно было знать, как ухудшится качество изображений телескопа, если они ослабят требования к зеркалам. Это означало целый вечер построения модели внутри компьютера. Официально я больше не работал на них, но кровь гуще воды... к полуночи я построил для них графики.
На следующее утро я с энтузиазмом изложил свои подозрения насчет хакера Дэйву Кливленду. "Ставлю печенье на пончик, это хакер".
Дэйв откинулся на спинку кресла, закрыл глаза и прошептал: "Ага, печенье точно".
Его умственная акробатика была почти осязаема. Дэйв управлял своей системой Unix в непринужденном стиле. Поскольку он конкурировал за ученых с системами VMS, он никогда не закручивал болты безопасности в своей системе, полагая, что физики будут возражать и займутся своими делами в другом месте. Доверяя своим пользователям, он запустил открытую систему и посвятил свое время улучшению их программного обеспечения, а не созданию замков.
Кто-то предал его доверие?
Марв Этчли был моим новым боссом. Тихий и чуткий, Марв руководил свободной группой, которой каким-то образом удавалось поддерживать работу компьютеров. Марв противопоставлялся главе нашего отдела Рою Керту. В свои пятьдесят пять Рой выглядел, как Родни Дэнджерфилд, профессор колледжа. Он занимался физикой в величественном стиле Лаборатории Лоуренса, сбрасывая протоны и антипротоны вместе, глядя на выбросы от этих столкновений.
Рой относился к своим ученикам и персоналу почти как к своим субатомным частицам: держал их в узде, заряжал энергией, а затем стрелял ими в неподвижные объекты. Его исследование требовало большого количества вычислений, поскольку его лаборатория генерировала миллионы событий каждый раз, когда включался ускоритель. Годы отсрочек и оправданий отвратили его от компьютерных профессионалов, поэтому, когда я постучал в его дверь, я позаботился о том, чтобы мы говорили о релятивистской физике и игнорировали вычисления.
Теперь мы с Дейвом могли догадаться, как Рой отреагировал на нашу проблему: "Какого черта вы оставили наши двери широко открытыми?"
Реакция нашего босса может быть предсказуема, но как мы должны реагировать? Первой мыслью Дейва было отключить подозрительную учетную запись и забыть о ней. Я чувствовал, что мы должны послать неприятную граммовку тому, кто вломится, сказав ему держаться подальше, иначе мы позвоним его родителям. В конце концов, если кто-то и вламывался, то это обязательно был какой-нибудь студент из кампуса.
Но мы не были уверены, что кто-то взломал нашу систему. Это может объяснить некоторые из наших проблем с бухгалтерией: кто-то узнает пароль системного администратора, подключается к нашей машине, создает новую учетную запись и вмешивается в систему учета. Но зачем кому-то использовать новую учетную запись, если у них уже есть доступ к учетной записи системного администратора?
Наш босс никогда не хотел слышать плохие новости, но мы с трудом сглотнули и созвали обеденное собрание. У нас не было четких доказательств существования хакера, только косвенные указания, экстраполированные из тривиальных бухгалтерских ошибок. Если и был взлом, мы не знали, как далеко он простирается и кто его совершал. Рой Керт взорвал нас. "Зачем ты тратишь мое время? Вы ничего не знаете и ничего не доказали. Вернитесь и узнайте. Покажи мне доказательство".
Итак, как найти хакера? Я решил, что это просто: просто следите за теми, кто использует учетные записи Sventek, и пытайтесь отследить их связь.
Я провел четверг, наблюдая, как люди входят в компьютер. Я написал программу, которая издавала звуковой сигнал на моем терминале всякий раз, когда кто-то подключался к компьютеру Unix. Я не мог видеть, что делает каждый пользователь, но я мог видеть их имена. Каждые пару минут мой терминал издавал звуковой сигнал, и я видел, кто вошел в систему. Некоторые из них были друзьями, астрономами, работающими над исследовательскими работами, или аспирантами, работающими над диссертациями. Большинство учетных записей принадлежало незнакомцам, и мне было интересно, как я могу определить, какая связь может быть хакерской.
В 12:33 в четверг Свентек вошел в систему. Я почувствовал прилив адреналина, а затем полное разочарование, когда он исчез через минуту. Где он был? Единственным указателем, который мне остался, был идентификатор его терминала: он использовал терминальный порт tt23.
Сидя за компьютерным терминалом, положив пальцы на клавиатуру, кто-то подключался к нашей лаборатории. Мой Unix-компьютер дал ему адрес порта tt23.
Что ж, это начало. Моя проблема заключалась в том, чтобы выяснить, какие физические провода соответствуют логическому имени tt23.
Терминалы из нашей лаборатории и модемы телефонов с коммутируемым доступом имеют метки "tt", а сетевые соединения отображаются как "nt". Я подумал, что этот парень должен быть либо из нашей лаборатории, либо звонит по телефонной линии через модем.
На несколько секунд я уловил нерешительный щуп в нашем компьютере. Теоретически должна быть возможность проследить путь от компьютера к человеку. Кто-то должен быть на дальнем конце этой связи.
На то, чтобы отследить этот путь, ушло бы шесть месяцев, но моим первым шагом было проследить связь за пределами здания. Я подозревал модем с коммутируемым доступом, подключенный к какой-то телефонной линии, но вполне возможно, что это кто-то из лаборатории. За прошедшие годы было подключено более пятисот терминалов, и только Пол Мюррей следил за ними. К счастью, наши доморощенные подключения к оборудованию были задокументированы лучше, чем доморощенное бухгалтерское программное обеспечение.
Пол - технический специалист-затворник, который прячется в зарослях телефонных проводов. Я нашел его за панелью электроники, соединяющей какой-то детектор частиц с общелабораторной сетью Ethernet. Ethernet - это электронные конвейеры, соединяющие сотни небольших компьютеров. Через нашу лабораторию протянулось несколько миль оранжевого сетевого кабеля, и Пол знал каждый его дюйм.
Проклиная меня за то, что я застал его врасплох во время пайки провода, он отказался оказать мне какую-либо помощь, пока я не докажу, что у меня есть законная потребность в этом. О, черт. Специалисты по аппаратному обеспечению не разбираются в проблемах программного обеспечения, а программисты ничего не знают об аппаратном обеспечении.
Годы работы на радиолюбителях научили меня паять, так что у нас с Полом был по крайней мере один общий знаменатель. Я взял его запасной паяльник и заслужил его невольное уважение через несколько минут, обжигая пальцы и щурясь. Наконец, он выпутался из кабелей Ethernet и показал мне коммутационную станцию LBL.
В этой комнате, полной проводов, телефоны, переговорные устройства, радиоприемники и компьютеры были связаны между собой сплетением кабелей, проводов, оптических волокон и патч-панелей. Подозрительный порт tt23 вошел в эту комнату, и дополнительный компьютер переключил его на один из тысячи возможных терминалов. Любой, кто звонит в лабораторию, будет случайным образом назначен порту Unix. В следующий раз, когда я увижу подозрительного персонажа, мне придется бежать на распределительную станцию и разматывать соединение, прощупывая переключающий компьютер. Если он исчез до того, как я распутал связь, что ж, жестко. И даже если бы мне это удалось, я бы смог указать только на пару проводов, идущих в лабораторию. Я все еще был бы далек от хакера.
Однако по счастливой случайности полуденная связь оставила некоторые следы. Пол собирал статистику о том, сколько людей пользовались распределительной станцией. Случайно он записал номера портов для каждого соединения за последний месяц. Поскольку я знал время, когда Sventek был активен на порту tt23, мы могли выяснить, откуда он взялся. Распечатка статистики показала, что одноминутное соединение со скоростью 1200 бод имело место в 12:33.
1200 бод, да? Это что-то говорит. Скорость передачи измеряет скорость, с которой данные передаются по линии. А 1200 бод означает 120 символов в секунду - несколько страниц текста каждую минуту. Коммутируемые модемы по телефонным линиям работают со скоростью 1200 бод. Любой сотрудник лаборатории здесь, на холме, будет работать на высокой скорости: 9600 или 19 200 бод. Только тот, кто звонит через модем, позволит своим данным выплеснуться через соломинку со скоростью 1200 бод. И анонимность и удобство этих телефонных линий больше всего привлекают незнакомцев. Итак, части стали складываться воедино. Я не мог доказать, что в нашей системе был хакер, но кто-то позвонил в нашу лабораторию и воспользовался учетной записью Свентека.
Тем не менее, соединение со скоростью 1200 бод вряд ли было доказательством того, что хакер проник в нашу систему. Неполный след, особенно тот, который не шел дальше моего дома, никогда не убедит моего босса в том, что что-то происходит, что-то странное. Мне нужно было найти неопровержимые доказательства существования хакера. Но как?
Рой Кит показал мне детекторы высокоэнергетических частиц, прикрепленные к Беватрону: они обнаруживают миллионы субатомных взаимодействий, и 99,99% из них можно объяснить законами физики. Потратив свое время на изучение следов каждой частицы, вы придете к выводу, что все частицы подчиняются известной физике, и открывать больше нечего. В качестве альтернативы вы можете отбросить все объяснимые взаимодействия и беспокоиться только о тех, которые не совсем удовлетворяют каноническим правилам.
Астрономы, дальние родственники физиков высоких энергий, работают в том же направлении. Большинство звезд скучны. Успехи приходят от изучения странностей - квазаров, пульсаров, гравитационных линз - которые, кажется, не вписываются в модели, на которых вы выросли. Зная статистику образования кратеров на планете Меркурий, вы узнаете, как часто планета подвергалась бомбардировкам в ранней Солнечной системе. Но изучите несколько кратеров, пересеченных уступами и хребтами, и вы узнаете, как уменьшалась планета при охлаждении в течение первого миллиарда лет своего существования. Соберите необработанные данные и выбросьте ожидаемые. То, что осталось, бросает вызов вашим теориям.
Что ж, давайте применим этот способ мышления к наблюдению за тем, как кто-то посещает мой компьютер. У меня есть терминал на моем столе, и я могу одолжить пару других. Предположим, я просто наблюдал за трафиком, поступающим в вычислительный центр. В систему поступает около пятисот строк. Большинство этих линий работает на скорости 9600 бод, или около ста пятидесяти слов в секунду. Если половина строк используется в любое время, мне придется читать более десяти тысяч страниц каждую минуту. Верно. Я никак не мог контролировать такой трафик на своем терминале.
Но высокоскоростные линии созданы людьми из LBL. Мы уже отследили одно подозрительное подключение к линии на 1200 бод. Их меньше (мы не можем позволить себе слишком много входящих телефонных линий), и они медленнее. Пятьдесят строк на скорости 1200 бод могут генерировать сотню страниц в минуту, что все еще слишком быстро, чтобы смотреть на экране моего терминала. Возможно, я не смогу наблюдать за бегом пятидесяти человек одновременно, но, может быть, я смогу распечатать все их интерактивные сеансы и прочитать стопки бумаги на досуге. Бумажная распечатка станет убедительным доказательством того, что кто-то бездельничает; если бы мы не обнаружили ничего подозрительного, мы могли бы закрыть весь проект.
Я записывал все, что происходило во время каждого соединения на скорости 1200 бод. Это было бы технически сложно - поскольку я не знал, по какой линии звонит хакер, мне пришлось бы отслеживать четыре дюжины. Более тревожной была этическая проблема контроля за нашими сообщениями. Имели ли мы право наблюдать за движением транспорта по нашим линиям?
Моя возлюбленная Марта как раз заканчивала юридический факультет. За глубокой пиццей мы говорили о последствиях взлома компьютера. Я задавался вопросом, сколько проблем у меня будет, прослушивая входящий трафик.
- Смотрите, - пробормотала она, обжигая нёбо вулканизированной моцареллой. "Вы не правительство, поэтому вам не нужен ордер на обыск. Самое худшее, что было бы, - это вторжение в частную жизнь. И люди, подключающиеся к компьютеру, вероятно, не имеют права настаивать на том, чтобы владелец системы не оглядывался через их плечо. Поэтому я не понимаю, почему ты не можешь".
Поэтому с чистой совестью я начал строить систему мониторинга. У нас было пятьдесят линий по 1200 бод, и хакер мог использовать любую из них. У меня не было оборудования, предназначенного для записи трафика.
Но есть простой способ зафиксировать действия хакера. Измените операционную систему Unix таким образом, чтобы всякий раз, когда подозрительный человек входит в систему, система записывала все нажатия клавиш. Это было заманчиво, потому что мне нужно было всего лишь добавить несколько строк кода в программное обеспечение демона Unix.
Сами демоны - это просто программы, которые копируют данные из внешнего мира в операционную систему - глаза и уши Unix. (Древнегреческие демоны были низшие божества, занимающие промежуточное положение между богами и людьми. В этом смысле мои демоны находятся на полпути между богоподобной операционной системой и миром терминалов и дисков.)
Я мог бы разделить вывод демона, как тройник в трубе, чтобы нажатия клавиш хакера одновременно поступали и к операционной системе, и к принтеру. Программные решения просты и элегантны.
"Занимайтесь демонами на свой страх и риск", - сказал Дэйв Кливленд. "Просто уважайте их потребности во времени".
Уэйн также предупредил меня: "Послушай, если ты оступишься, ты точно сломаешь систему. Это превратит систему в патоку, и ты не сможешь уследить за всем, что происходит. Просто подожди, пока не увидишь системную консоль". распечатайте "Прерывание режима ядра в панике" - не плачьте у меня на плече!"
Дэйв вмешался: "Эй, если у вашего хакера есть опыт работы с Unix, он обязательно заметит изменения в демонах".
Это убедило меня. Проницательный специалист по системам заметил бы, что мы изменили операционную систему. В тот момент, когда хакер узнает, что кто-то наблюдает за ним, он уничтожит наши базы данных и исчезнет. Наши прослушки должны были быть совершенно незаметны даже для всемогущего суперпользователя. Бесшумные невидимые мониторы для отслеживания активности хакера.
Может быть, простая запись телефонных линий на магнитную ленту сработает, но магнитофоны были неуместны, слишком громоздки. Нам пришлось бы воспроизвести их, и мы не могли бы следить за нажатиями клавиш до тех пор, пока хакер не отключился. Наконец, где мне найти пятьдесят магнитофонов?
Практически единственное место, где можно было наблюдать за нашим трафиком, было между модемами и компьютерами. Модемы преобразовывали телефонные тоны в электронные импульсы, приемлемые для наших компьютеров и демонов в их операционных системах. Эти модемные линии выглядели как плоские провода из двадцати пяти проводов, извивающиеся под фальшполом распределительной станции. К каждой из этих линий можно было подключить принтер или персональный компьютер, записывая каждое нажатие клавиши.
Кладж? Да. Работающий? Может быть.
Все, что нам нужно, это пятьдесят телетайпов, принтеры и портативные компьютеры. Первые несколько было легко достать - просто спросите в отделе снабжения лаборатории. Дэйв, Уэйн и остальные члены системной группы неохотно одолжили свои портативные терминалы. Поздно В пятницу днем мы подключили дюжину мониторов на распределительной станции. Остальные тридцать или сорок мониторов появятся после того, как лаборатория опустеет. Я ходил из кабинета в офис, освобождая персональные компьютеры со столов секретарей. В понедельник было бы адски платить, но проще принести извинения, чем получить разрешение.
Пол, усеянный четырьмя дюжинами устаревших телетайпов и переносных терминалов, выглядел кошмаром компьютерного инженера. Я спал посередине, ухаживая за принтерами и компьютерами. Каждый собирал данные с разных линий, и всякий раз, когда кто-то звонил в нашу систему, я просыпался под стук печатаемого текста. Каждые полчаса на одном из мониторов заканчивалась бумага или место на диске, поэтому мне приходилось переворачиваться и перезагружаться.
Субботним утром меня разбудил Рой Кит. "Ну, а где твой хакер?"
Все еще в моем спальном мешке, я, должно быть, пах козой. Я тупо моргнул и пробормотал что-то о пятидесяти стопках бумаги.
Ты носился здесь, как маньяк, воруя оборудование, которым пользуются люди, выполняющие работу. Ты разозлил дюжину астрономов. делать работу? Нет. Что это за место, твоя личная песочница?"
С затуманенными глазами я оттащил каждый принтер к его законному владельцу. Первые сорок девять не показали ничего интересного. От пятидесятого тянулась восьмидесятифутовая распечатка. Ночью кто-то проник через дыру в операционной системе.
4
В течение трех часов хакер бродил по моей системе, читая все, что хотел. Он не знал, что мой дерайтер со скоростью 1200 бод сохранил его сессию на восьмидесяти футах компьютерной бумаги с одинарным интервалом. Здесь была каждая отданная им команда, каждая опечатка и каждый ответ компьютера. Этот принтер отслеживал линию из Tymnet. Я этого не осознавал, но некоторые из наших 1200-бодовых линий не были модемными. Скорее, они пришли от Tymnet, коммуникационной компании, которая соединяла компьютеры по всему миру.
До продажи компания Bell монополизировала связь. AT&T была единственным способом соединить Нью-Йорк с Чикаго. С помощью модемов телефонная система могла обрабатывать данные, но шум и стоимость услуг междугородной связи делали ее непригодной для компьютеров. К концу 70-х несколько других компаний окунули свои пальцы в воду, предлагая специализированные услуги, такие как телефоны для передачи данных. Tymnet создала сеть для соединения компьютеров в крупных городах.
Идея Tymnet была проста и элегантна: создать магистраль цифровой связи, позволить любому подключиться к магистральной сети, совершив местный телефонный звонок, а затем отправить данные на любой компьютер в сети. Tymnet сжимал данные десятков пользователей в несколько пакетов и экономично рассылал их по стране. Система была невосприимчива к шуму, и каждый пользователь мог работать так быстро, как хотел. Клиенты экономили деньги, потому что они могли получить доступ к удаленному компьютеру, совершив местный звонок.
Чтобы удовлетворить ученых по всей стране, LBL подписалась на Tymnet. Когда исследователь из Стонибрука, штат Нью-Йорк, захотел подключиться к нашему компьютеру, он набрал свой местный номер Tymnet. Как только его модем был подключен к Tymnet, он просто попросил LBL и работал, как будто он был в Беркли. Физикам издалека понравился сервис, и мы были рады узнать, что они тратят свои деньги на исследования на наших компьютерах, а не на своих домашних машинах.
Кто-то врывался, используя линию Tymnet. Поскольку Tymnet объединил всю страну, наш хакер мог быть где угодно.
Однако на данный момент я был очарован не тем, откуда взялся хакер, а тем, что он сделал за три часа. Мое предположение было верным: учетная запись Sventek использовалась для взлома нашего компьютера Unix.
Не просто взломать. Этот хакер был супер-пользователем.
Хакер пробрался через дыру в нашей системе, чтобы стать суперпользователем - он даже никогда не входил в учетную запись системного администратора. Он был похож на кукушку.
Кукушка подкладывает яйца в гнезда других птиц. Она гнездовой паразит: ее кукушонков вырастит какая-нибудь другая птица. Выживание птенцов кукушки зависит от невежества других видов.
Наш таинственный посетитель заложил в наш компьютер программу-яйцо, позволив системе вылупить ее и накормить привилегиями.
Тем утром хакер написал короткую программу для получения привилегий. Обычно Unix не позволяет запускать такую программу, поскольку она никогда не дает привилегий, выходящих за рамки тех, которые назначены пользователю. Но запустите эту программу из-под привилегированного аккаунта, и он станет привилегированным. Его задача заключалась в том, чтобы замаскировать эту особую программу - яйцо кукушки - так, чтобы оно вылупилось системой.
Каждые пять минут система Unix выполняет собственную программу с именем atrun. В свою очередь, atrun планирует другие задания и выполняет рутинные задачи по уборке. Он работает в привилегированном режиме, используя всю мощь и доверие операционной системы. Если бы была заменена поддельная программа atrun, она была бы выполнена в течение пяти минут с полными системными привилегиями. По этой причине atrun находится в защищенной области системы, доступной только системному администратору. Никто, кроме системного администратора, не имеет права вмешиваться в atrun.
Здесь было гнездо кукушки: в течение пяти минут он обменивал свое яйцо на системную программу запуска.
Для этой атаки ему нужно было найти способ переместить свою программу-яйцо в гнездо защищенных систем. Барьеры операционной системы построены специально для предотвращения этого. Обычные программы копирования не могут их обойти; вы не можете дать команду "скопировать мою программу в системное пространство".
Но был подстановочный знак, которого мы никогда не замечали. Ричард Столлман, программист-фрилансер, громко провозгласил, что информация должна быть бесплатной. Его программное обеспечение, которое он раздает бесплатно, блестяще задумано, элегантно написано и вызывает привыкание.
За последнее десятилетие Столлман создал мощную программу редактирования под названием Gnu-Emacs. Но Gnu - это гораздо больше, чем просто текстовый редактор. Его легко настроить в соответствии с вашими личными предпочтениями. Это основа, на которой могут быть построены другие программы. В него даже встроена собственная почта. Естественно, наши физики потребовали Gnu; с прицелом на продажу большего количества вычислительных циклов мы с радостью установили его.
Только одна проблема: в этом программном обеспечении есть ошибка.
Так же, как он был установлен на нашем компьютере Unix, редактор Gnu-Emacs позволяет вам пересылать почтовый файл из вашего собственного каталога кому-либо еще необычным способом. Он не проверяет, кто его получает, и даже не проверяет, нужен ли им файл. Он просто переименовывает файл и меняет его метку владельца. Вы только что передали мне право собственности на файл.
Нет проблем отправить файл из вашего региона в мой. Но лучше не иметь возможности перемещать файл в область защищенных систем: туда разрешен только администратор системы. Программное обеспечение Столлмана должно быть уверено, что этого не произойдет.
Гну не проверял. Это позволяло любому перемещать файл в защищенное системное пространство. Хакер знал это; мы этого не сделали.
Хакер использовал Gnu для замены своего специального файла atrun на легитимную версию системы. Через пять минут система вылупила его яйцо, и он держал ключи от моего компьютера.
Он использовал эту технику, чтобы обмануть компьютер и дать ему энергию. Он внедрил свою фальшивую программу там, где система ожидала найти действующую. В тот момент, когда Unix запустил его поддельную программу atrun , он стал суперпользователем. Вся операция зависела от его способности переместить файл куда угодно.
Gnu был дырой в безопасности нашей системы. Тонкая ошибка в малоизвестном разделе некоторых популярных программ. Установленный вслепую нашими системными программистами, мы никогда не думали, что он может разрушить безопасность всей нашей системы.
Теперь я понял. Наш друг, должно быть, вошел в гостевую учетную запись, использовал свои привилегии, используя дыру Gnu, а затем добавил новую учетную запись в файлы компьютера.
Передо мной первые несколько футов распечатки показывали кукушку, готовящую гнездо, откладывающую яйцо и ожидающую, когда оно вылупится. На следующих семидесяти футах птенец кукушки тестировал свои крылья.
Как суперпользователь, он управлял нашей системой. Первое, что он сделал, это стер свои следы: он вернул хорошую копию atrun на место . Затем он перечислил электронную почту всех наших пользователей, читающих новости, сплетни и любовные письма. Он узнал об изменениях в компьютере за последний месяц, предложениях о грантах и новых сотрудниках. Он искал изменения в файлах системных администраторов и обнаружил, что я только что начал Работа. Он проверил мою зарплату и возобновил Более беспокойный, он понял, что я был системным администратором, и имя моей учетной записи.
Почему я? Что я сделал? Во всяком случае, с этого момента мне лучше использовать другое имя.
Каждые десять минут хакер выдавал команду "кто", чтобы перечислить всех, кто вошёл в компьютер. По-видимому, он беспокоился, что кто-то может увидеть его подключенным или может наблюдать. Позже он искал любые изменения в операционной системе - если бы я модифицировал демонов для записи его сеанса, как я изначально планировал сделать, он бы наверняка это обнаружил. Я чувствовал себя ребенком, играющим в прятки, когда искатель проходит в нескольких дюймах от своего укрытия.
В течение первого часа он написал программу для сканирования всех почтовых сообщений на наличие любых упоминаний о его деятельности. Он искал слова "хакер" и "безопасность".
Один ученый запустил программу, которая собирала данные эксперимента на выходных. Эта программа, работающая под названием "сбор", безобидно собирала информацию каждые несколько минут и записывала ее в файл. Хакер увидел эту программу, десять минут пытался понять, что она делает, и убил ее.
Йоу! Вот кто-то оглядывается через его плечо каждые несколько минут, проверяя, нет ли кого поблизости. Он убивает любую работу, которая, по его мнению, может следить за ним. Он открывает мою почту, проверяя, не писал ли кто-нибудь о хакерах. Уэйн был прав: если вы останетесь на виду, он узнает, что вы наблюдаете. С этого момента мы должны быть тонкими и невидимыми.
Когда он не оглядывался через плечо, хакер читал файлы. Изучив командные файлы и сценарии нескольких ученых, он обнаружил пути к другим лабораторным компьютерам. Каждую ночь наш компьютер автоматически звонит двадцати другим, чтобы обменяться почтой и сетевыми новостями. Когда хакер прочитал эти телефонные номера, он узнал двадцать новых целей.
Из почтового файла инженера:
"Привет, Эд!
Ближайшие пару недель я буду в отпуске.
Если вам нужно получить какие-либо мои данные, просто войдите
в мою учетную запись на компьютере Vax.
Имя учетной записи Уилсон, пароль Мэриэнн
(это имя моей жены). Веселиться!"
Хакеру было весело, даже если Эду и не нравилось. Он подключился через нашу локальную сеть к этому Vax и без проблем зашел в учетную запись Уилсона. Уилсон не заметил бы, как хакер читает его файлы, и, вероятно, ему было бы все равно. Они содержали числовые данные, бессмысленные для кого-либо, кроме другого физика-ядерщика.
Наш посетитель знал о внутренних сетях нашей лаборатории. Дюжина наших больших компьютеров была привязана к сотне лабораторных компьютеров с помощью Ethernet, последовательных линий и жевательной резинки. Когда физики хотели перенести данные с компьютера на циклотроне в наш большой компьютер, элегантность ничего не значила. Они будут использовать любой порт, любую линию, любую сеть. За долгие годы технические специалисты оплели лабораторию паутиной кабелей, соединив большинство компьютеров с тем, что казалось работающим. Эта локальная сеть достигала каждого офиса, соединяя ПК, Макинтоши и терминалы с нашими мейнфреймами.
Часто эти объединенные в сеть компьютеры были настроены так, чтобы доверять друг другу. Если у вас все в порядке на этом компьютере, то все в порядке и на этом. Это сэкономило немного времени: людям не нужно было вводить более одного пароля при использовании нескольких компьютеров.
Хакер воспользовался этим доверием, чтобы проникнуть в полдюжины компьютеров. Будучи суперпользователем на нашем основном Unix-компьютере, он замаскировался под чужим именем. Затем он просто постучал в дверь другой сетевой машины, и его впустили, даже не прошептав пароль. Наш посетитель не мог знать, для чего использовались эти системы; тем не менее, он шарил по сети в поисках соединений с неизведанными компьютерами.
К концу сеанса на ленте принтера закончились чернила. Слегка проведя карандашом по бумаге, я смог различить отпечатки, оставшиеся от печатающей головки: хакер скопировал наш файл паролей, а затем отключился.
Нота бас-гитары отвлекла мое внимание от следов хакера. Grateful Dead выступали на открытом воздухе в Греческом театре Беркли, всего в сотне ярдов вниз по склону от лаборатории. Полиция не могла удержать людей от сидения в поле и наблюдения за концертом, так что я пропустил туда, смешавшись с тысячей других в рубашках с галстуком. Перегоревшие попрошайки, оставшиеся с шестидесятых, работали с толпой, умоляя билеты и продажа плакатов, пуговиц и травы. Барабанное соло во втором сете перекликалось с Strawberry Canyon, добавляя странный бэкбит, который ценят только мы, скряги в полях. Жизнь была полна: ни одному хакеру не стоит пропускать концерт Dead.
5
Утро понедельника ознаменовало вторую неделю моей работы. Я был непростым компьютерным жокеем: окруженный переутомленными экспертами, но не знающий, какие задачи я должен выполнять. Подвернется что-нибудь веселое; а пока я мог бы закончить этот хакерский проект.
Как первокурсник на физическом факультете, я записал в бортовой журнал о своей активности на выходных. Не то чтобы я планировал использовать этот бортовой журнал: это был шанс изучить текстовый процессор на моем Macintosh. Правило астронома: если не записать, значит, этого не было.
Я передал результаты банде, надеясь, что никто не заметит, что я ночевал в машинном зале.
Босс хотел видеть меня, как только он прибыл.
Я подозревал, что он был в бешенстве из-за того, что я схватил все эти терминалы. Менеджмент может быть распущенным, но компьютерные качки по-прежнему не должны одалживать груды лабораторного оборудования, никому не сказав об этом.
Но Рой даже не усмехнулся по поводу терминалов. Он хотел знать о хакере.
- Когда он появился?
"В воскресенье утром в пять на три часа".
"Удалить какие-либо файлы?"
"Убил одну программу, которая, как он думал, следила за ним".
- Мы в опасности?
"Он суперпользователь. Он может стереть все наши файлы".
- Можем ли мы закрыть его?
"Возможно. Мы знаем одну дыру, это быстрое заплата".
- Думаешь, это его остановит?
Я чувствовал, куда ведут его мысли. Рой не боялся хлопнуть дверью. Он знал, что мы можем легко деактивировать украденную учетную запись Sventek. И теперь, когда мы это поняли, исправить дыру в Gnu-Emacs не составило труда: просто добавьте пару строк кода для проверки целевого каталога.
Должны ли мы закрыть наши двери или оставаться открытыми? Закрытие магазина было очевидной реакцией. Мы знали, как этот хакер проник в нашу систему, и знали, как его выгнать.
Но что еще было не так? Какие еще подарки оставил нам наш таинственный гость? Сколько других учетных записей он получил доступ? Какие еще компьютеры он взломал?
Было беспокойство. Распечатка показала, что хакер был компетентным системным программистом, способным использовать малоизвестные ошибки, которых мы никогда раньше не видели. Что еще он сделал?
Когда вы суперпользователь, вы можете изменять любой файл в системе. Хакер модифицировал системную программу, чтобы открыть лазейку? Он пропатчил нашу систему, чтобы она распознавала волшебный пароль?
Он заложил компьютерный вирус? На домашних компьютерах вирусы распространяются, копируя себя в другие части программного обеспечения. Когда вы передаете зараженную часть программного обеспечения кому-то другому, вирус копирует себя в другое программное обеспечение, распространяясь с диска на диск.
Если вирус доброкачественный, его будет трудно обнаружить, и, вероятно, он не причинит большого вреда. Но легко создавать вредоносные вирусы, которые дублируют себя, а затем стирают файлы данных. Так же легко создать вирус, который бездействует месяцами, а затем вспыхивает однажды в будущем.
Вирусы - существа, которые преследуют программистов в кошмарах.
Как суперпользователь, хакер может заразить нашу систему способом, который будет практически невозможно уничтожить. Его вирус мог копировать себя в системное программное обеспечение и прятаться в малоизвестных местах компьютера. Копируя себя из программы в программу, он бросит вызов нашим попыткам стереть его.
В отличие от домашнего компьютера, на котором вы можете восстановить операционную систему с нуля, мы сильно модифицировали нашу операционную систему. Мы не могли пойти к производителю и сказать: "Дайте нам оригинальную копию". После заражения мы могли восстановить нашу систему только с резервных лент. Если бы он подбросил вирус шесть месяцев назад, наши ленты тоже были бы заражены.
Может быть, он заложил логическую бомбу - программу, рассчитанную на то, чтобы взорваться где-то в будущем. Или, может быть, этот злоумышленник только ограбил наши файлы, убил пару рабочих мест и напортачил с нашей бухгалтерией. Но как мы могли сказать, что он не сделал намного хуже? В течение недели наш компьютер был широко открыт для этого хакера. Можем ли мы доказать, что он не вмешивался в наши базы данных?
Как мы можем снова доверять нашим программам и данным?
Мы не могли. Попытка отгородиться от него не сработает, так как он найдет только другой вход. Нам нужно было выяснить, что он сделал и что он делал.
Больше всего нам нужно было знать, кто находится на другом конце линии.
"Должно быть, это какой-то студент из кампуса Беркли", - сказал я Рою. "Они волшебники Unix, и они думают о нас как о придурках".