Страница:
– Ox, – ответил Роберт и спустился на пол.
Сперва Пол не мог понять в чем дело. Еще один способ взломать UNIX?
– Ну, славная дырочка, но из-за чего столько шума? – спросил он.
– Я смогу ее использовать и написать вирус, – и Роберт рассказал, что почти все каникулы только и думал о создании вируса, который мог бы медленно распространяться по Internet. Вирус, как его описал Роберт, должен был не принести никакого вреда и, конечно же, не уничтожать информацию. Собственно говоря, он вообще ничего не должен был делать, только попасть на как можно большее количество машин.
Пол моментально загорелся. Весь семестр он шпынял Роберта, чтобы тот обзавелся друзьями в Корнелле и побольше вращался в обществе, но услышав, что подобные начинания были отложены ради чего-то настолько интригующего, как этот компьютерный вирус, пришел в восторг.
– Это действительно великолепно! – Пол загорелся так же быстро, как и Роберт. – Ты сможешь это использовать в своей диссертации!
Пол был, на свой манер, идеальным другом. Если чья-то идея его захватывала, он своим энтузиазмом не давал автору идеи никаких шансов забросить ее. Тем более если этим человеком был его друг и образец для подражания Роберт Моррис. Пол один стоил целой группы поддержки.
Когда Роберт начал рассказывать о вирусе, который он задумал, энтузиазм Пола заработал на третьей скорости, что не могло не повлиять даже на такого обычно спокойного и тихого человека, как Роберт. Расскажи он об этом кому-нибудь еще, например Нику, Энди или Дэвиду, реакция могла бы оказаться менее восторженной. Они наверняка убедили бы его сначала протестировать вирус, возможно, запустив его в локальной сети, отключенной от Internet. Если вирус содержит ошибку, подобные меры предосторожности воспрепятствуют его воздействию на всю сеть. Но «эксперимент в пробирке» был бы неинтересным и менее продуктивным в научном смысле. Роберт хотел большего доказательного пространства.
Пол и Роберт отправились на встречу с Энди, чтобы вместе поужинать в ресторане напротив MIT. Поджидая Энди на улице, они опять вернулись к теме вируса. Ни тот, ни другой до сих пор не слышали о чем-либо подобном, так что подойти к этому делу следовало творчески. Обоим казалось, что это тот самый «великий хак», о котором часто мечтали в компьютерном мире. Роберт начал размышлять вслух, описывая кое-какие наиболее существенные качества, что потребуются такой программе. Конечно, во-первых, она должна распространиться по сети, тайно заселив множество машин, и тут главное– сделать вирус как можно неприметнее, чтобы он не вызывал подозрения у системных администраторов. Как только вирус заселится, ему потребуются средства для определения наличия другой копии в машине. И он должен быть саморегулирующимся, чтобы ограничить число копий в каждом компьютере. Но все еще оставался неразрешенным трудный вопрос: как ограничить рост, не остановив его при этом полностью?
Роберт вкратце набросал свой план. Этот вирус проникает в компьютер через обнаруженные в UNIX дыры и просматривает систему на предмет других своих копий. Если таковая отыщется, то они «беседуют» друг с другом и решают, что делать. В идеале одна должна автоматически уничтожиться, чтобы ограничить рост вируса. Но что, если кто-то обнаружит вирус и постарается обмануть его, заставив поверить, что копия уже имеется? Программист может создать имитатор, который одурачит пришельца. Такая программа, очень легкая в написании, может воспрепятствовать распространению вируса, сыграв роль биологической вакцины. Продумывая ходы как шахматисты, Роберт и Пол решили, что необходимы контрмеры против потенциальных защитных программ. Как им провести системщиков? Рандомизацией, конечно! Оба прослушали курс лекций по эффективным алгоритмам, который читал Майкл Рабин, блестящий математик и криптолог. Теория случайных чисел была коньком Рабина, и он не уставал повторять студентам, что если задача кажется неразрешимой, надо свести ее к более простой и применить рандомизацию (эта идеология лежала в основе вероятностной программы поиска опечаток, придуманной Бобом Моррисом). Рабин говорил о рандомизации в применении к абстрактным задачам, таким, как поиск простых чисел, но Роберт и Под решили, что смогут использовать этот принцип в программе-вирусе. Когда вирус встретится со своей копией, они бросят электронную монетку, чтобы решить, кому из них прекратить прогон. Еще один способ гарантировать выживание вируса пришел в голову Роберту. В одном случае из N вирус, проникнув в компьютер, должен забыть про электронный жребий и просто скомандовать себе никогда не останавливаться. Но тут возникал новый вопрос: чему должно равняться N – 5? 1000? 10000? Только они начали это обдумывать, как появился Энди. Энди был близким другом, но то, что он работал системным администратором, поставило бы его в неловкое, если не сказать больше, положение, окажись он внезапно участником обсуждения громадных дыр в защите UNIX. Энди решил, что с его появлением беседа оборвалась, потому что друзья говорили о женщине, интересовавшей и Энди, и Роберта.
Обнаруженный в ftp изъян не давал Роберту покоя. На следующий день он зашел к Энди в офис и нечаянно проболтался. Не тратя времени даром, Энди попытался проверить ftp. Когда он не обнаружил там дыры, Роберту пришлось дать более подробное объяснение.
Роберт вернулся в Корнелл. В среду Пол послал ему сообщение по e-mail: «Что слышно о блестящем проекте?» Роберт ответил спустя два дня: «Ничего нового. Я весь в законнорожденной работе» (речь шла о занятиях). Но проект жил. За те четыре дня, что Роберт провел в Гарварде, он декодировал коллекцию шифрованных паролей, собранных с разных машин по всей стране.
Поскольку не всегда возможна непосредственная расшифровка, часто срабатывает догадка. Невозможно декодировать пароль, запустив процесс, обратный кодировке. Однако ничто не мешает дешифровщику проверить предположения, закодировав, скажем, словарь и сравнив результаты с имеющимся паролем. Поскольку многие пароли – это обычные английские слова, словарный метод бывает поразительно результативным. Чем быстрее компьютер, чем больше компьютеров используется, тем меньше времени займет такая операция.
В пятницу вечером Даусон Дин зашел в комнату, где стояли терминалы Апсон-Холла. За рабочей станций Sun сидел Роберт. Даусон поинтересовался, что это Роберт затеял. Когда Роберт показал, что у него на экране, у Даусона глаза на лоб полезли: это был длинный список паролей открытым текстом. Роберт пролистал список, чтобы показать пароли корнеллских студентов и профессоров. Был в списке и Декстер Козен, курировавший аспирантов. Его пароль? Пожалуйста: tomato. Кешав Пенгали, читавший архитектуру микропроцессоров, выбрал пароль snoopy («шпик»).
– Блеск! – воскликнул Даусон. – А мой есть?
Пароля Даусона не оказалось, ибо такого слова в словаре не нашлось.
– А как насчет Айткина? Бил Айгкин был аспирантом, которого Даусон считал «ужасным вонючкой». Роберт пробежал по списку и нашел пароль Айткина: subway.
– А… гм… не опасно ли держать список расшифрованных паролей в своем каталоге? – спросил Даусон. Сам тон разговора – возбужденные вопросы Даусона, которого, казалось, самого лихорадило от незаконности того, чем занимался Роберт, и осторожные ответы Роберта, – подразумевал, что нарушены какие-то табу.
– Ну, – Ответил Роберт, – ты зашифровываешь, как сможешь, а что до остального – почему бы мне не попытать счастья?
Даусона обуревало любопытство.
– А можешь ты сделать базу данных паролей всей страны?
– А зачем, – сказал Роберт, – если есть способы добираться до машин, не прибегая к словарному методу.
Даусон насел на Роберта с расспросами об этих других способах. Роберт колебался, но Даусон не отставал. Наконец Роберт сказал, что, читая исходный код UNIX, обнаружил несколько дырок. Одна – «черный ход» в программе sendmail, другая – ошибка в finger, которая позволяет запускать программу на другой машине не регистрируясь. Он знает о них уже год, и похоже, что знает только он один.
Даусон Дин хотел побольше услышать о конкретных компьютерах, в которые Роберт мог бы забраться. Он спросил об одной частной фирме. Роберт покачал головой: «Ну, можно и туда, но на самом деле проще навестить машины, принадлежащие университетам. В университетах, как правило, меньше заботятся о защите. Кроме того, нехорошо вылазить за границы государства». Тогда Даусон спросил об одной машине в Media Lab, исследовательском центре МГГ, где изучали технологию коммуникаций. Через несколько минут Роберт подключился к этому компьютеру. Даусон был поражен: «Чей пароль ты использовал?» «Сейчас узнаем», – Роберт набрал запрос. Машина ответила: «nobody» (пользователь не зарегистрирован). Это впечатлило Даусона. Роберт явно перехитрил машину и подсоединился незаконно.
Роберт ничего не рассказал Даусону Дину о своих планах использования дыр в защите. И Даусон о них не спрашивал. Кроме Пола, Роберт никому не рассказывал о программе, которую он обдумывал весь семестр, и над которой начал упорно работать незадолго до поездки в Кембридж. К этому моменту Роберт работал над вирусом в общей сложности чуть больше двух недель.
Неделю спустя, 2 ноября, Роберт пришел в смятение, увидев объявление в сети: Кейт Бостик, разработчик берклийской версии UNIX, отладил дефект в ftp. Поскольку только неделю назад Роберт рассказал Энди об этом дефекте, совпадение исключалось. Роберт немедленно заподозрил, что Энди предупредил кого-то из Беркли. Он тут же по e-mail запрашивает Энди, не он ли разболтал секрет. Нет ответа. Значит, Роберт не сможет использовать дырку в ftp для своего вируса. Но еще остаются дырки в sendmail и finger.
Весь день Роберт провел, доводя вирус до ума. Он закончил работу в 18.30 по восточному поясному времени. Спустя час он подсоединился к компьютеру Лаборатории искусственного интеллекта в MIT, набрал несколько команд и запустил программу. Он решил пойти перекусить. За время, которое у Роберта ушло на то, чтобы нажать на клавишу return и одеть куртку, программа начала распространяться. Через несколько минут она уже веером расходилась по всей сети. Компьютеры заражали друг друга словно малыши в детском саду. Каждый VAX или Sun, соединенный с другим VAX или Sun, оказывался беззащитным. Пока Роберт обедал, десятки вирусов уже кишели в компьютерах и пожирали машинное время. Машины начали зависать и отказывать. После обеда Роберт собирался идти домой, но не смог удержаться и вернулся в Апсон-Холл посмотреть, как движутся дела. Когда он попытался зарегистрироваться, компьютер не ответил. Что-то пошло не так. Вирус размножался неограниченно.
Поздно вечером, в 23 00, Пол и Энди вернулись в Эйкен после ужина. Когда Пол вынимал ключи из двери, зазвонил телефон. К телефону подошел Энди. Звонил Роберт. Он попросил позвать Пола. Энди передал трубку и пошел в свой офис. Роберт казался совершенно убитым: «По-моему, я по уши в дерьме». Пол впервые слышал, чтобы rtm использовал сильные выражения. По тому, как Роберт еле ворочал языком, Пол понял, что его друг в полном отчаянии. Первая мысль была, что это как-то связано с женщиной.
– Что такое? Что ты натворил? – спросил Пол
– Я запустил вирус, и он работает совсем не так, как должен. Я ввел не то N
– Какое число ты использовал? – Подразумевалось, как часто будет вирус заражать машину, даже если там имеется его копия.
– Семь – Семь?! rtm, ты кретин! Почему семь?! – Пол мгновенно понял, что это число должно было быть больше как минимум в 1000 раз.
Но Роберт не собирался тратить время на разбор полетов. Он сообщил Полу, что все компьютеры VAX и Sun в Корнелле полетели, зависая каждые несколько минут. Соответственно, то же самое происходит по всей Америке. Роберт рассказал, что вечером запустил вирус с компьютера Массачусетской лаборатории искусственного интеллекта, пошел пообедать, а когда вернулся, обнаружил, что вирус заселяет машины везде, где Роберт мог проверить. Они начали обсуждать способы остановки вируса. Пол предложил запустить по следам вируса программу, которая бы уничтожила его – программу типа Рас-Мап, что догонит вирус и сожрет его. Чем больше Пол радовался своей «пакмэновской» идее, тем больше мрачнел Роберт. Он уже запорол одну программу, и где гарантия, что не изгадит вторую?
Следующее, что пришло в голову, – подключить Энди. Пол пошел в кабинет Энди. Энди припозднился, устанавливая на лабораторных компьютерах новое оборудование.
– По-моему, тебе стоит связаться с rtm. Происходит что-то действительно серьезное, но я не могу сказать тебе. что именно. – Пол нервно расхаживал перед Энди.
Энди всегда скептически относился к любым вещам, которые Пол называл «действительно серьезными».
– Что происходит-то? – спросил он.
– Поговори лучше с ним сам, он просил не рассказывать тебе.
– Почему ты мне просто не объяснишь, в чем дело? – Энди начал терять терпение. Полу только это и надо было
– Ну, только пусть он не знает, что я тебе рассказал, но он написал эту программу, и она разошлась по всей стране. Она вышла из-под контроля! Это невероятно!
Энди по– прежнему был настроен скептически, но тут он припомнил, что днем получил непривычно таинственный e-mail от Роберта, в котором тот спрашивал, не рассказал ли Энди кому-нибудь о дыре в ftp. Энди действительно говорил о ней нескольким людям и даже продемонстрировал ее. И он воспользовался этой дырой, чтобы получить полные привилегии на машине Ника Хортона в Портленде, о чем позднее сообщил Нику. Можно было предположить, что информация дошла до людей из Беркли. Пока Роберт не заволновался, Энди и не вспоминал, что тот просил его не болтать. На запрос Роберта Энди не ответил, но сейчас отправил ему e-mail «Сожалею, что не оправдал доверия. Сообщи мне, что происходит». Энди прежде всего беспокоила судьба гарвардских машин. Через час или около того позвонил Роберт и рассказал, что в сети ходит вирус и, похоже, валит машины штабелями. Он не сказал, что сам написал этот вирус, но это и так было понятно. Энди хотел знать, пострадают ли компьютеры в Гарварде. Нет, ответил Роберт, потому что в Гарварде уже залатали дыры, через которые проникает вирус. Час спустя Роберт позвонил снова и попросил Энди отправить по сети анонимное письмо с указаниями, как остановить вирус. Под диктовку Роберта Энди составил следующее сообщение:
"Информация о возможности действия вируса в сети.
В Internet, может быть, попал вирус. Главные пункты сообщения, которые я только что получил:
"Извините. Вот некоторые шаги для предотвращения дальнейшего распространения.
1 Не запускайте finger, либо исправьте ее так, чтобы она не переполняла стек при чтении аргументов.
2 Перекомпилируйте sendmail, не включая отладочную информацию.
3 Не запускайте rexecd.
Надеюсь, что это поможет, но еще больше надеюсь, что тревога ложная".
После того как Роберт продиктовал свое лаконичное покаяние и меры предосторожности, Энди сказал, что отправит сообщение с удаленной машины, чтобы следы не вывели на Роберта или Энди. Про себя Энди решил, что будет молчать о роли Роберта в этой истории. Он полагал, что только сам Роберт должен решать, признаться ли, и когда именно. Энди велел Роберту быть готовым к тому, что придется врать. Если кто-нибудь спросит его о вирусе, сказал он, пусть Роберт постарается обойтись без этих своих ухмылочек.
Повесив трубку, Энди стал думать, как лучше отправить сообщение. Он знал, что существует возможность отправить анонимное сообщение по e-mail или, по крайней мере, сделать так, чтобы создать видимость, что оно пришло с другого компьютера. Сообщение должно выглядеть так, будто оно отправлено из Гарварда и, конечно же, не из Корнелла. Он решил отправить его на электронную доску объявлений в телеконференции SRI. Энди понимал, что если пошлет сообщение непосредственно на сервер, то следы приведут прямо в Гарвард. Поэтому он создал вымышленный адрес foo@bar.darpa и определил маршрут сообщения через компьютер Брауновского университета, рассчитывая, что через пару часов оно попадет в SRI.
Как оказалось, сообщение Энди застряло на первом же этапе своего путешествия. В Брауне хозяйничал вирус. Хуже того, Энди не заполнил subject в заголовке сообщения, из-за чего письмо, попав наконец в SM, получило низкий приоритет. Энди попытался сделать несколько звонков в Беркли, чтобы сообщить о вирусе людям, имевшим отношение к UNIX, но не знал, кому именно звонить и где найти их номера телефонов. Справочная в Беркли не отвечала, и Энди решил, что вся история, вероятно, не стоит того, чтобы вытаскивать из постели людей в Калифорнии, где была уже полночь. Энди знал, что любой программист, даже такой одаренный, как Роберт, может ошибиться. Однажды Энди сам нечаянно вывел из строя 200 гарвардских компьютеров из-за маленькой ошибки в команде адресации в компьютерной сети. Несмотря на то что были нарушены университетские правила пользования компьютерами, администрация признала действия Энди «добросовестным заблуждением» и не наказала его. Вирус казался не таким грозным, как твердили Роберт и Пол. Если из-за Роберта на самом деле накрылись корнеллские компьютеры, то, пожалуй, некоторым будет не до смеха. Однако не такой уж это ужас. И наконец, удовлетворенный тем, что сделал для друга все, что мог, Энди в 4.00 отправился домой.
То что Роберт совершил серьезное правонарушение, не пришло в голову ни Роберту, ни Энди, ни Полу. Роберт больше всего боялся. что компьютерщики будут вне себя от гнева. Он надеялся, что у него не будет неприятностей в Корнелле. Очень угнетало то, что он уже натворил в Internet, а его маленькая программа все еще рикошетила. Оставалось только надеяться, что сообщение Энди поможет справиться с проблемой.
Однако к тому моменту, когда в четверг утром Энди пришел на работу, вирус, слопавший Internet, стал главной темой для разговоров во всем Эйкене, и похоже, имя Роберта Морриса у многих вертелось на кончике языка. Ведь Роберт в Гарварде пользовался репутацией специалиста по защите, завсегдатая Internet и любителя время от времени отколоть номер. Единственное, что не вязалось с Робертом – несомненный злой умысел. Энди не мог понять, дошло ли его сообщение. Из Беркли и MIT просачивались бюллетени с информацией о том, как избавиться от вируса. Никто не упоминал анонимное сообщение, но инструкции были в точности те, что Роберт диктовал Энди. Энди не без внутреннего затруднения отвечал эйкеновским профессорам, что ничего не знает о случившемся. Полу покривить душой особого труда не составляло. Когда один аспирант спросил его, не имеет ли Роберт какое-нибудь отношение к вирусу, о котором только и слышно вокруг, Пол честно посмотрел тому в глаза и ответил «нет». Днем деморализованный Роберт позвонил Энди узнать, послал ли тот сообщение. Энди заверил его, что послал.
В 6 часов утра, когда Кейт Бостик, поспав 3 часа, пришел на работу, телефон уже разрывался. Звонили разгневанные администраторы сети со всей страны, спрашивая, что делать с программой, которая заразила их системы. Бостик уже ожидал чего-то в этом духе. Знал ли он об этих дырах в берклийской версии UNIX? Нет, отвечал Бостик, не знал. Особо злобствовал Пентагон, один из крупнейших пользователей этой версии UNIX. Знает ли Бостик, кто учинил эту мерзость? Было ли ему известно о дефектах UNIX? Может ли он гарантировать, что в этой программе нет «троянских коней»? Собираются ли в Беркли дизассемблировать код вируса?
Первым делом Бостик разослал «Vims Posting #2», поправку к его первой заплате на дырку в sendmail, обеспечивающую более совершенную защиту от вируса. Это сообщение было отправлено в 8:00. Вопрос дизассемблирования вируса уже обсуждался. Предстояла долгая и тяжелая работа, но это был единственный способ окончательно определить, не скрывается ли где-нибудь в программе разрушительный код. Работу Беркли дублировала в Кембридже группа программистов из МГГ, которые также всю ночь не смыкали глаз. В середине дня в Беркли поступило сообщение из МГГ, что у вируса есть еще один способ атаки. Используя дыру в маленькой программе finger, входившей в пакет UNIX, вирус получил возможность выводить finger из строя, посылая больше символов, чем она могла обработать. Как только происходило переполнение буфера ввода, захватчик получал возможность стартовать небольшую программу, переносившую все тело вируса целиком на атакуемый компьютер.
Бостик скептически отнесся к информации из МГГ, ведь finger была такой мелкой, банальней утилитой. Он представить не мог, что в программе всего в 15 строк длиной могут содержаться серьезные дыры. Чтобы доказать свою правоту, команда из МГГ прислала ему образец программы, демонстрировавший дефект в finger. В тот же день Бостик разослал «Virus Posting #3» – заплату на finger. Это стало последней каплей, убедившей Бостика, что единственный способ узнать, остается ли еще опасность, это разобрать вирус строка за строкой. Программу нужно декомпилировать.
Декомпиляция программы чем-то сродни искусству алхимика. Это преобразование программы, состоящей из единиц и нулей, которые компьютер читает как команды «да» – «нет» в нечто, что человек-программист мог бы прочесть и понять. Декомпилировать программу – все равно, что взять книгу, уже переведенную с английского на, скажем, французский, и перевести снова на английский, не заглядывая при этом в оригинал. В новой английской версии слова могут оказаться другими, но хорошие переводчики умеют сохранить суть книги. Когда программа декомпилирована, сам язык может слегка отличаться, но программа действует аналогично оргиналу. Обычно программу компилируют, а не наоборот, ибо после того как программу из исходного текста переводят в выполняемый код, редко возникает необходимость обратного перевода. Собственно, многие лицензии на коммерческое ПО именно потому запрещают дизассемблирование программ, что те, кто это может сделать, могут также захотеть сломать защиту копии или модифицировать ПО. Но иметь оригинальный исходный текст программы – бесценное преимущество, поскольку оно позволяет узнать намерения ее автора. И хотя создатель вируса явно из кожи вон лез, чтобы спрятать свою программу, не оставалось ничего другого, как декомпилировать ее – трудная задача, которая под силу очень немногим программистам.
Как оказалось, Беркли идеально подходил для этой работы, и не только потому, что берклийскую версию UNIX создали и по-прежнему сопровождали здесь – на этой неделе в университетском городке Беркли проходила ежегодная встреча экспертов UNIX со всего мира. Во время прошлогодней конференции по UNIX рухнула фондовая биржа. В этом году – Internet Крис Торек, один из ведущих экспертов по UNIX, остановился как раз в доме у Бостика. Приехал на конференцию и специалист по компиляции из университета штата Юта Дон Сили. Хватило бы одного его, чтобы справиться с программой, но Фил Лэпслй и Питер Йе знали еще одного аса.
Дейв Паре стал экспертом по декомпиляции программ еще когда был аспирантом Калифорнийского университета в Сан-Диего. В 1985 году его вывел из себя автор компьютерной игры Empire, который отказался распространять исходный текст. 22-летний Паре поставил себе целью декомпилировать Empire полностью На это ушло без малого два года. Теперь он жил в Кремниевой долине, в 50 милях к югу от Беркли. Паре не только был специалистом по декомпиляции, но и написал собственный дизассемблер – программу, которая существенно облегчала этот процесс, автоматизировав часть самых рутинных этапов. Поэтому в четверг утром Питер Йе позвонил ему и сказал, что требуется помощь. Паре в первый раз услышал о вирусе.
– А где Фил? Сам он не справится?
– Фил спит. Он работал всю ночь.
Этого хватило, чтобы убедить Паре, что дело действительно серьезное. Он не мог представить, чтобы Фил работал по ночам. Паре сел в машину и через час был в Беркли. В Эванс-Холле он сел за одну рабочую станцию с Крисом Тереком. Напротив Бостик и Сили сидели за другой. Комната превратилась в конвейерную линию. Работа бригады Паре-Торека заключалась в переводе необработанных нулей и единиц каждой команды в код ассемблера, а затем в ''сырой" код на языке Си. Разобравшись с командой, они тут же передавали ее бригаде Бостика-Сили, которые пытались понять конкретный смысл кода.
На конференции только и говорили, что о вирусе, который накануне придушил сеть. Те из участников, кто собирался приехать в Беркли в четверг утром, были вынуждены остаться дома и воевать с агрессором. Для присутствовавших обсуждение вируса затмило семинары типа «UNIX с NPROC = 3000» и «Кернелизация МАСН». Двоих из участников уже вытащили с конференции для помощи в декомпиляции, а остальные во время перерывов заглядывали в Эванс-Холл узнать, как идут дела. Проголодавшись, программисты заказывали что-нибудь в ближайшей пиццерии и обедали не отходя от компьютеров.
И на западном, и на восточном побережьях продолжали разбирать код. Вслед за духом сотрудничества в оба коллектива просочился элемент соперничества. Каждая группа в глубине души надеялась первой прийти к финишу. Кроме того, поскольку обе команды предпочитали работать в собственном ритме, намного легче было идти собственным путем, чем приспосабливаться к чужим методам.
Кейт Бостик помогал в работе, когда не был занят, отвечая на панические телефонные звонки или получая электронную почту. Минимум раз в час звонили люди из разных отделов Министерства обороны и спрашивали, кончили ли уже в Беркли дизассемблировать код. Бродячая программа могла содержать любые команды, и это порождало тревогу и напряжение. В какой-то момент Паре занервничал: он увидел, что код содержит таймер.
Сперва Пол не мог понять в чем дело. Еще один способ взломать UNIX?
– Ну, славная дырочка, но из-за чего столько шума? – спросил он.
– Я смогу ее использовать и написать вирус, – и Роберт рассказал, что почти все каникулы только и думал о создании вируса, который мог бы медленно распространяться по Internet. Вирус, как его описал Роберт, должен был не принести никакого вреда и, конечно же, не уничтожать информацию. Собственно говоря, он вообще ничего не должен был делать, только попасть на как можно большее количество машин.
Пол моментально загорелся. Весь семестр он шпынял Роберта, чтобы тот обзавелся друзьями в Корнелле и побольше вращался в обществе, но услышав, что подобные начинания были отложены ради чего-то настолько интригующего, как этот компьютерный вирус, пришел в восторг.
– Это действительно великолепно! – Пол загорелся так же быстро, как и Роберт. – Ты сможешь это использовать в своей диссертации!
Пол был, на свой манер, идеальным другом. Если чья-то идея его захватывала, он своим энтузиазмом не давал автору идеи никаких шансов забросить ее. Тем более если этим человеком был его друг и образец для подражания Роберт Моррис. Пол один стоил целой группы поддержки.
Когда Роберт начал рассказывать о вирусе, который он задумал, энтузиазм Пола заработал на третьей скорости, что не могло не повлиять даже на такого обычно спокойного и тихого человека, как Роберт. Расскажи он об этом кому-нибудь еще, например Нику, Энди или Дэвиду, реакция могла бы оказаться менее восторженной. Они наверняка убедили бы его сначала протестировать вирус, возможно, запустив его в локальной сети, отключенной от Internet. Если вирус содержит ошибку, подобные меры предосторожности воспрепятствуют его воздействию на всю сеть. Но «эксперимент в пробирке» был бы неинтересным и менее продуктивным в научном смысле. Роберт хотел большего доказательного пространства.
Пол и Роберт отправились на встречу с Энди, чтобы вместе поужинать в ресторане напротив MIT. Поджидая Энди на улице, они опять вернулись к теме вируса. Ни тот, ни другой до сих пор не слышали о чем-либо подобном, так что подойти к этому делу следовало творчески. Обоим казалось, что это тот самый «великий хак», о котором часто мечтали в компьютерном мире. Роберт начал размышлять вслух, описывая кое-какие наиболее существенные качества, что потребуются такой программе. Конечно, во-первых, она должна распространиться по сети, тайно заселив множество машин, и тут главное– сделать вирус как можно неприметнее, чтобы он не вызывал подозрения у системных администраторов. Как только вирус заселится, ему потребуются средства для определения наличия другой копии в машине. И он должен быть саморегулирующимся, чтобы ограничить число копий в каждом компьютере. Но все еще оставался неразрешенным трудный вопрос: как ограничить рост, не остановив его при этом полностью?
Роберт вкратце набросал свой план. Этот вирус проникает в компьютер через обнаруженные в UNIX дыры и просматривает систему на предмет других своих копий. Если таковая отыщется, то они «беседуют» друг с другом и решают, что делать. В идеале одна должна автоматически уничтожиться, чтобы ограничить рост вируса. Но что, если кто-то обнаружит вирус и постарается обмануть его, заставив поверить, что копия уже имеется? Программист может создать имитатор, который одурачит пришельца. Такая программа, очень легкая в написании, может воспрепятствовать распространению вируса, сыграв роль биологической вакцины. Продумывая ходы как шахматисты, Роберт и Пол решили, что необходимы контрмеры против потенциальных защитных программ. Как им провести системщиков? Рандомизацией, конечно! Оба прослушали курс лекций по эффективным алгоритмам, который читал Майкл Рабин, блестящий математик и криптолог. Теория случайных чисел была коньком Рабина, и он не уставал повторять студентам, что если задача кажется неразрешимой, надо свести ее к более простой и применить рандомизацию (эта идеология лежала в основе вероятностной программы поиска опечаток, придуманной Бобом Моррисом). Рабин говорил о рандомизации в применении к абстрактным задачам, таким, как поиск простых чисел, но Роберт и Под решили, что смогут использовать этот принцип в программе-вирусе. Когда вирус встретится со своей копией, они бросят электронную монетку, чтобы решить, кому из них прекратить прогон. Еще один способ гарантировать выживание вируса пришел в голову Роберту. В одном случае из N вирус, проникнув в компьютер, должен забыть про электронный жребий и просто скомандовать себе никогда не останавливаться. Но тут возникал новый вопрос: чему должно равняться N – 5? 1000? 10000? Только они начали это обдумывать, как появился Энди. Энди был близким другом, но то, что он работал системным администратором, поставило бы его в неловкое, если не сказать больше, положение, окажись он внезапно участником обсуждения громадных дыр в защите UNIX. Энди решил, что с его появлением беседа оборвалась, потому что друзья говорили о женщине, интересовавшей и Энди, и Роберта.
Обнаруженный в ftp изъян не давал Роберту покоя. На следующий день он зашел к Энди в офис и нечаянно проболтался. Не тратя времени даром, Энди попытался проверить ftp. Когда он не обнаружил там дыры, Роберту пришлось дать более подробное объяснение.
Роберт вернулся в Корнелл. В среду Пол послал ему сообщение по e-mail: «Что слышно о блестящем проекте?» Роберт ответил спустя два дня: «Ничего нового. Я весь в законнорожденной работе» (речь шла о занятиях). Но проект жил. За те четыре дня, что Роберт провел в Гарварде, он декодировал коллекцию шифрованных паролей, собранных с разных машин по всей стране.
Поскольку не всегда возможна непосредственная расшифровка, часто срабатывает догадка. Невозможно декодировать пароль, запустив процесс, обратный кодировке. Однако ничто не мешает дешифровщику проверить предположения, закодировав, скажем, словарь и сравнив результаты с имеющимся паролем. Поскольку многие пароли – это обычные английские слова, словарный метод бывает поразительно результативным. Чем быстрее компьютер, чем больше компьютеров используется, тем меньше времени займет такая операция.
В пятницу вечером Даусон Дин зашел в комнату, где стояли терминалы Апсон-Холла. За рабочей станций Sun сидел Роберт. Даусон поинтересовался, что это Роберт затеял. Когда Роберт показал, что у него на экране, у Даусона глаза на лоб полезли: это был длинный список паролей открытым текстом. Роберт пролистал список, чтобы показать пароли корнеллских студентов и профессоров. Был в списке и Декстер Козен, курировавший аспирантов. Его пароль? Пожалуйста: tomato. Кешав Пенгали, читавший архитектуру микропроцессоров, выбрал пароль snoopy («шпик»).
– Блеск! – воскликнул Даусон. – А мой есть?
Пароля Даусона не оказалось, ибо такого слова в словаре не нашлось.
– А как насчет Айткина? Бил Айгкин был аспирантом, которого Даусон считал «ужасным вонючкой». Роберт пробежал по списку и нашел пароль Айткина: subway.
– А… гм… не опасно ли держать список расшифрованных паролей в своем каталоге? – спросил Даусон. Сам тон разговора – возбужденные вопросы Даусона, которого, казалось, самого лихорадило от незаконности того, чем занимался Роберт, и осторожные ответы Роберта, – подразумевал, что нарушены какие-то табу.
– Ну, – Ответил Роберт, – ты зашифровываешь, как сможешь, а что до остального – почему бы мне не попытать счастья?
Даусона обуревало любопытство.
– А можешь ты сделать базу данных паролей всей страны?
– А зачем, – сказал Роберт, – если есть способы добираться до машин, не прибегая к словарному методу.
Даусон насел на Роберта с расспросами об этих других способах. Роберт колебался, но Даусон не отставал. Наконец Роберт сказал, что, читая исходный код UNIX, обнаружил несколько дырок. Одна – «черный ход» в программе sendmail, другая – ошибка в finger, которая позволяет запускать программу на другой машине не регистрируясь. Он знает о них уже год, и похоже, что знает только он один.
Даусон Дин хотел побольше услышать о конкретных компьютерах, в которые Роберт мог бы забраться. Он спросил об одной частной фирме. Роберт покачал головой: «Ну, можно и туда, но на самом деле проще навестить машины, принадлежащие университетам. В университетах, как правило, меньше заботятся о защите. Кроме того, нехорошо вылазить за границы государства». Тогда Даусон спросил об одной машине в Media Lab, исследовательском центре МГГ, где изучали технологию коммуникаций. Через несколько минут Роберт подключился к этому компьютеру. Даусон был поражен: «Чей пароль ты использовал?» «Сейчас узнаем», – Роберт набрал запрос. Машина ответила: «nobody» (пользователь не зарегистрирован). Это впечатлило Даусона. Роберт явно перехитрил машину и подсоединился незаконно.
Роберт ничего не рассказал Даусону Дину о своих планах использования дыр в защите. И Даусон о них не спрашивал. Кроме Пола, Роберт никому не рассказывал о программе, которую он обдумывал весь семестр, и над которой начал упорно работать незадолго до поездки в Кембридж. К этому моменту Роберт работал над вирусом в общей сложности чуть больше двух недель.
Неделю спустя, 2 ноября, Роберт пришел в смятение, увидев объявление в сети: Кейт Бостик, разработчик берклийской версии UNIX, отладил дефект в ftp. Поскольку только неделю назад Роберт рассказал Энди об этом дефекте, совпадение исключалось. Роберт немедленно заподозрил, что Энди предупредил кого-то из Беркли. Он тут же по e-mail запрашивает Энди, не он ли разболтал секрет. Нет ответа. Значит, Роберт не сможет использовать дырку в ftp для своего вируса. Но еще остаются дырки в sendmail и finger.
Весь день Роберт провел, доводя вирус до ума. Он закончил работу в 18.30 по восточному поясному времени. Спустя час он подсоединился к компьютеру Лаборатории искусственного интеллекта в MIT, набрал несколько команд и запустил программу. Он решил пойти перекусить. За время, которое у Роберта ушло на то, чтобы нажать на клавишу return и одеть куртку, программа начала распространяться. Через несколько минут она уже веером расходилась по всей сети. Компьютеры заражали друг друга словно малыши в детском саду. Каждый VAX или Sun, соединенный с другим VAX или Sun, оказывался беззащитным. Пока Роберт обедал, десятки вирусов уже кишели в компьютерах и пожирали машинное время. Машины начали зависать и отказывать. После обеда Роберт собирался идти домой, но не смог удержаться и вернулся в Апсон-Холл посмотреть, как движутся дела. Когда он попытался зарегистрироваться, компьютер не ответил. Что-то пошло не так. Вирус размножался неограниченно.
Поздно вечером, в 23 00, Пол и Энди вернулись в Эйкен после ужина. Когда Пол вынимал ключи из двери, зазвонил телефон. К телефону подошел Энди. Звонил Роберт. Он попросил позвать Пола. Энди передал трубку и пошел в свой офис. Роберт казался совершенно убитым: «По-моему, я по уши в дерьме». Пол впервые слышал, чтобы rtm использовал сильные выражения. По тому, как Роберт еле ворочал языком, Пол понял, что его друг в полном отчаянии. Первая мысль была, что это как-то связано с женщиной.
– Что такое? Что ты натворил? – спросил Пол
– Я запустил вирус, и он работает совсем не так, как должен. Я ввел не то N
– Какое число ты использовал? – Подразумевалось, как часто будет вирус заражать машину, даже если там имеется его копия.
– Семь – Семь?! rtm, ты кретин! Почему семь?! – Пол мгновенно понял, что это число должно было быть больше как минимум в 1000 раз.
Но Роберт не собирался тратить время на разбор полетов. Он сообщил Полу, что все компьютеры VAX и Sun в Корнелле полетели, зависая каждые несколько минут. Соответственно, то же самое происходит по всей Америке. Роберт рассказал, что вечером запустил вирус с компьютера Массачусетской лаборатории искусственного интеллекта, пошел пообедать, а когда вернулся, обнаружил, что вирус заселяет машины везде, где Роберт мог проверить. Они начали обсуждать способы остановки вируса. Пол предложил запустить по следам вируса программу, которая бы уничтожила его – программу типа Рас-Мап, что догонит вирус и сожрет его. Чем больше Пол радовался своей «пакмэновской» идее, тем больше мрачнел Роберт. Он уже запорол одну программу, и где гарантия, что не изгадит вторую?
Следующее, что пришло в голову, – подключить Энди. Пол пошел в кабинет Энди. Энди припозднился, устанавливая на лабораторных компьютерах новое оборудование.
– По-моему, тебе стоит связаться с rtm. Происходит что-то действительно серьезное, но я не могу сказать тебе. что именно. – Пол нервно расхаживал перед Энди.
Энди всегда скептически относился к любым вещам, которые Пол называл «действительно серьезными».
– Что происходит-то? – спросил он.
– Поговори лучше с ним сам, он просил не рассказывать тебе.
– Почему ты мне просто не объяснишь, в чем дело? – Энди начал терять терпение. Полу только это и надо было
– Ну, только пусть он не знает, что я тебе рассказал, но он написал эту программу, и она разошлась по всей стране. Она вышла из-под контроля! Это невероятно!
Энди по– прежнему был настроен скептически, но тут он припомнил, что днем получил непривычно таинственный e-mail от Роберта, в котором тот спрашивал, не рассказал ли Энди кому-нибудь о дыре в ftp. Энди действительно говорил о ней нескольким людям и даже продемонстрировал ее. И он воспользовался этой дырой, чтобы получить полные привилегии на машине Ника Хортона в Портленде, о чем позднее сообщил Нику. Можно было предположить, что информация дошла до людей из Беркли. Пока Роберт не заволновался, Энди и не вспоминал, что тот просил его не болтать. На запрос Роберта Энди не ответил, но сейчас отправил ему e-mail «Сожалею, что не оправдал доверия. Сообщи мне, что происходит». Энди прежде всего беспокоила судьба гарвардских машин. Через час или около того позвонил Роберт и рассказал, что в сети ходит вирус и, похоже, валит машины штабелями. Он не сказал, что сам написал этот вирус, но это и так было понятно. Энди хотел знать, пострадают ли компьютеры в Гарварде. Нет, ответил Роберт, потому что в Гарварде уже залатали дыры, через которые проникает вирус. Час спустя Роберт позвонил снова и попросил Энди отправить по сети анонимное письмо с указаниями, как остановить вирус. Под диктовку Роберта Энди составил следующее сообщение:
"Информация о возможности действия вируса в сети.
В Internet, может быть, попал вирус. Главные пункты сообщения, которые я только что получил:
"Извините. Вот некоторые шаги для предотвращения дальнейшего распространения.
1 Не запускайте finger, либо исправьте ее так, чтобы она не переполняла стек при чтении аргументов.
2 Перекомпилируйте sendmail, не включая отладочную информацию.
3 Не запускайте rexecd.
Надеюсь, что это поможет, но еще больше надеюсь, что тревога ложная".
После того как Роберт продиктовал свое лаконичное покаяние и меры предосторожности, Энди сказал, что отправит сообщение с удаленной машины, чтобы следы не вывели на Роберта или Энди. Про себя Энди решил, что будет молчать о роли Роберта в этой истории. Он полагал, что только сам Роберт должен решать, признаться ли, и когда именно. Энди велел Роберту быть готовым к тому, что придется врать. Если кто-нибудь спросит его о вирусе, сказал он, пусть Роберт постарается обойтись без этих своих ухмылочек.
Повесив трубку, Энди стал думать, как лучше отправить сообщение. Он знал, что существует возможность отправить анонимное сообщение по e-mail или, по крайней мере, сделать так, чтобы создать видимость, что оно пришло с другого компьютера. Сообщение должно выглядеть так, будто оно отправлено из Гарварда и, конечно же, не из Корнелла. Он решил отправить его на электронную доску объявлений в телеконференции SRI. Энди понимал, что если пошлет сообщение непосредственно на сервер, то следы приведут прямо в Гарвард. Поэтому он создал вымышленный адрес foo@bar.darpa и определил маршрут сообщения через компьютер Брауновского университета, рассчитывая, что через пару часов оно попадет в SRI.
Как оказалось, сообщение Энди застряло на первом же этапе своего путешествия. В Брауне хозяйничал вирус. Хуже того, Энди не заполнил subject в заголовке сообщения, из-за чего письмо, попав наконец в SM, получило низкий приоритет. Энди попытался сделать несколько звонков в Беркли, чтобы сообщить о вирусе людям, имевшим отношение к UNIX, но не знал, кому именно звонить и где найти их номера телефонов. Справочная в Беркли не отвечала, и Энди решил, что вся история, вероятно, не стоит того, чтобы вытаскивать из постели людей в Калифорнии, где была уже полночь. Энди знал, что любой программист, даже такой одаренный, как Роберт, может ошибиться. Однажды Энди сам нечаянно вывел из строя 200 гарвардских компьютеров из-за маленькой ошибки в команде адресации в компьютерной сети. Несмотря на то что были нарушены университетские правила пользования компьютерами, администрация признала действия Энди «добросовестным заблуждением» и не наказала его. Вирус казался не таким грозным, как твердили Роберт и Пол. Если из-за Роберта на самом деле накрылись корнеллские компьютеры, то, пожалуй, некоторым будет не до смеха. Однако не такой уж это ужас. И наконец, удовлетворенный тем, что сделал для друга все, что мог, Энди в 4.00 отправился домой.
То что Роберт совершил серьезное правонарушение, не пришло в голову ни Роберту, ни Энди, ни Полу. Роберт больше всего боялся. что компьютерщики будут вне себя от гнева. Он надеялся, что у него не будет неприятностей в Корнелле. Очень угнетало то, что он уже натворил в Internet, а его маленькая программа все еще рикошетила. Оставалось только надеяться, что сообщение Энди поможет справиться с проблемой.
Однако к тому моменту, когда в четверг утром Энди пришел на работу, вирус, слопавший Internet, стал главной темой для разговоров во всем Эйкене, и похоже, имя Роберта Морриса у многих вертелось на кончике языка. Ведь Роберт в Гарварде пользовался репутацией специалиста по защите, завсегдатая Internet и любителя время от времени отколоть номер. Единственное, что не вязалось с Робертом – несомненный злой умысел. Энди не мог понять, дошло ли его сообщение. Из Беркли и MIT просачивались бюллетени с информацией о том, как избавиться от вируса. Никто не упоминал анонимное сообщение, но инструкции были в точности те, что Роберт диктовал Энди. Энди не без внутреннего затруднения отвечал эйкеновским профессорам, что ничего не знает о случившемся. Полу покривить душой особого труда не составляло. Когда один аспирант спросил его, не имеет ли Роберт какое-нибудь отношение к вирусу, о котором только и слышно вокруг, Пол честно посмотрел тому в глаза и ответил «нет». Днем деморализованный Роберт позвонил Энди узнать, послал ли тот сообщение. Энди заверил его, что послал.
В 6 часов утра, когда Кейт Бостик, поспав 3 часа, пришел на работу, телефон уже разрывался. Звонили разгневанные администраторы сети со всей страны, спрашивая, что делать с программой, которая заразила их системы. Бостик уже ожидал чего-то в этом духе. Знал ли он об этих дырах в берклийской версии UNIX? Нет, отвечал Бостик, не знал. Особо злобствовал Пентагон, один из крупнейших пользователей этой версии UNIX. Знает ли Бостик, кто учинил эту мерзость? Было ли ему известно о дефектах UNIX? Может ли он гарантировать, что в этой программе нет «троянских коней»? Собираются ли в Беркли дизассемблировать код вируса?
Первым делом Бостик разослал «Vims Posting #2», поправку к его первой заплате на дырку в sendmail, обеспечивающую более совершенную защиту от вируса. Это сообщение было отправлено в 8:00. Вопрос дизассемблирования вируса уже обсуждался. Предстояла долгая и тяжелая работа, но это был единственный способ окончательно определить, не скрывается ли где-нибудь в программе разрушительный код. Работу Беркли дублировала в Кембридже группа программистов из МГГ, которые также всю ночь не смыкали глаз. В середине дня в Беркли поступило сообщение из МГГ, что у вируса есть еще один способ атаки. Используя дыру в маленькой программе finger, входившей в пакет UNIX, вирус получил возможность выводить finger из строя, посылая больше символов, чем она могла обработать. Как только происходило переполнение буфера ввода, захватчик получал возможность стартовать небольшую программу, переносившую все тело вируса целиком на атакуемый компьютер.
Бостик скептически отнесся к информации из МГГ, ведь finger была такой мелкой, банальней утилитой. Он представить не мог, что в программе всего в 15 строк длиной могут содержаться серьезные дыры. Чтобы доказать свою правоту, команда из МГГ прислала ему образец программы, демонстрировавший дефект в finger. В тот же день Бостик разослал «Virus Posting #3» – заплату на finger. Это стало последней каплей, убедившей Бостика, что единственный способ узнать, остается ли еще опасность, это разобрать вирус строка за строкой. Программу нужно декомпилировать.
Декомпиляция программы чем-то сродни искусству алхимика. Это преобразование программы, состоящей из единиц и нулей, которые компьютер читает как команды «да» – «нет» в нечто, что человек-программист мог бы прочесть и понять. Декомпилировать программу – все равно, что взять книгу, уже переведенную с английского на, скажем, французский, и перевести снова на английский, не заглядывая при этом в оригинал. В новой английской версии слова могут оказаться другими, но хорошие переводчики умеют сохранить суть книги. Когда программа декомпилирована, сам язык может слегка отличаться, но программа действует аналогично оргиналу. Обычно программу компилируют, а не наоборот, ибо после того как программу из исходного текста переводят в выполняемый код, редко возникает необходимость обратного перевода. Собственно, многие лицензии на коммерческое ПО именно потому запрещают дизассемблирование программ, что те, кто это может сделать, могут также захотеть сломать защиту копии или модифицировать ПО. Но иметь оригинальный исходный текст программы – бесценное преимущество, поскольку оно позволяет узнать намерения ее автора. И хотя создатель вируса явно из кожи вон лез, чтобы спрятать свою программу, не оставалось ничего другого, как декомпилировать ее – трудная задача, которая под силу очень немногим программистам.
Как оказалось, Беркли идеально подходил для этой работы, и не только потому, что берклийскую версию UNIX создали и по-прежнему сопровождали здесь – на этой неделе в университетском городке Беркли проходила ежегодная встреча экспертов UNIX со всего мира. Во время прошлогодней конференции по UNIX рухнула фондовая биржа. В этом году – Internet Крис Торек, один из ведущих экспертов по UNIX, остановился как раз в доме у Бостика. Приехал на конференцию и специалист по компиляции из университета штата Юта Дон Сили. Хватило бы одного его, чтобы справиться с программой, но Фил Лэпслй и Питер Йе знали еще одного аса.
Дейв Паре стал экспертом по декомпиляции программ еще когда был аспирантом Калифорнийского университета в Сан-Диего. В 1985 году его вывел из себя автор компьютерной игры Empire, который отказался распространять исходный текст. 22-летний Паре поставил себе целью декомпилировать Empire полностью На это ушло без малого два года. Теперь он жил в Кремниевой долине, в 50 милях к югу от Беркли. Паре не только был специалистом по декомпиляции, но и написал собственный дизассемблер – программу, которая существенно облегчала этот процесс, автоматизировав часть самых рутинных этапов. Поэтому в четверг утром Питер Йе позвонил ему и сказал, что требуется помощь. Паре в первый раз услышал о вирусе.
– А где Фил? Сам он не справится?
– Фил спит. Он работал всю ночь.
Этого хватило, чтобы убедить Паре, что дело действительно серьезное. Он не мог представить, чтобы Фил работал по ночам. Паре сел в машину и через час был в Беркли. В Эванс-Холле он сел за одну рабочую станцию с Крисом Тереком. Напротив Бостик и Сили сидели за другой. Комната превратилась в конвейерную линию. Работа бригады Паре-Торека заключалась в переводе необработанных нулей и единиц каждой команды в код ассемблера, а затем в ''сырой" код на языке Си. Разобравшись с командой, они тут же передавали ее бригаде Бостика-Сили, которые пытались понять конкретный смысл кода.
На конференции только и говорили, что о вирусе, который накануне придушил сеть. Те из участников, кто собирался приехать в Беркли в четверг утром, были вынуждены остаться дома и воевать с агрессором. Для присутствовавших обсуждение вируса затмило семинары типа «UNIX с NPROC = 3000» и «Кернелизация МАСН». Двоих из участников уже вытащили с конференции для помощи в декомпиляции, а остальные во время перерывов заглядывали в Эванс-Холл узнать, как идут дела. Проголодавшись, программисты заказывали что-нибудь в ближайшей пиццерии и обедали не отходя от компьютеров.
И на западном, и на восточном побережьях продолжали разбирать код. Вслед за духом сотрудничества в оба коллектива просочился элемент соперничества. Каждая группа в глубине души надеялась первой прийти к финишу. Кроме того, поскольку обе команды предпочитали работать в собственном ритме, намного легче было идти собственным путем, чем приспосабливаться к чужим методам.
Кейт Бостик помогал в работе, когда не был занят, отвечая на панические телефонные звонки или получая электронную почту. Минимум раз в час звонили люди из разных отделов Министерства обороны и спрашивали, кончили ли уже в Беркли дизассемблировать код. Бродячая программа могла содержать любые команды, и это порождало тревогу и напряжение. В какой-то момент Паре занервничал: он увидел, что код содержит таймер.