Клиффорд Столл
Яйцо кукушки. Преследуя шпиона в компьютерном лабиринте
Clifford Stoll
The Cuckoo’s Egg: Tracking a Spy Through the Maze of Computer Espionage — New York: Doubleday. 1989
Глава 1
Волшебник, я? Еще неделю назад я был астрономом и в свое удовольствие орудовал телескопами. Сейчас, оглядываясь на это времечко, я вижу, что подремывал годами, пока не уплыли последние денежки по моему гранту.
К счастью, в обсерватории Кек при Лаборатории Лоуренса в Беркли астрономов принимали на вторичную переработку — и вместо биржи труда я оказался в компьютерном центре, в подвале Лаборатории. Могу показать парочку компьютерных фокусов, чтобы потрясти астрономов. Гораздо быстрее коллег разбираюсь во всяких головоломных ситуациях. Выходит, я — компьютерный волшебник? Не знаю, все-таки главное для меня — астрономия…
А что теперь-то? Уныло глядя на терминал, я продолжал думать об орбитах планет и астрофизических явлениях. Как новичку, мне довелось выбирать между застекленным отсеком с единственным окном, выходящим на мост Золотые Ворота, и душным кабинетом, заставленным книжными полками. Наплевав на свою клаустрофобию, я остановился на последнем в надежде незаметно дремать за письменным столом. Рядом располагались кабинеты Вэйна Грэйвса и Дэйва Клэвленда — «зубров»-системщиков. Они громко и постоянно цапались между собой, поэтому я разузнал много любопытного. Вэйн находился в натянутых отношениях с остальными работниками — по его мнению, некомпетентными лентяями. Сам-то он систему знал назубок, начиная с программ-драйверов и кончая СВЧ-антеннами. Единственной приличной вычислительной машиной он считал ВАКС, выпускаемый фирмой ДЭК. Других компьютеров для него просто не существовало — он не признавал ни ИБМ, ни ЮНИКС, ни Макинтош.
Дэйв Клэвленд — безмятежный Будда ЮНИКСа — терпеливо выслушивал бурные речи Вэйна, который безуспешно пытался его подначить: «Ученые всего мира выбирают ВАКСы. Эти машины позволяют создавать надежные программы дюжиной способов!» Дэйв парировал: «Вы осчастливьте „фанатов“ ВАКСа, а я позабочусь об остальных». Увы, Клэвленд не раздражался, поэтому неудовлетворенный Вэйн угасал и погружался в ворчанье.
Прекрасно. В первый же рабочий день я оказался маслом на бутерброде, который регулярно падал мною вниз и тем самым прерывал мой дневной сон. Зато мой внешний вид вполне соответствовал стандартному облику сотрудника лаборатории Беркли: поношенная рубашка, потертые джинсы, длинные волосы и дешевые кроссовки. На управленце можно было иногда увидеть и галстук, но при этом заметно снижалась производительность труда.
В обязанности нашей тройки (Вэйна, Дэйва и мои) входило обслуживание компьютеров лаборатории. Мы ведали дюжиной больших машин — громадных «тяжеловозов», решающих физические задачи. Стоили эти «рабочие лошадки» примерно шесть миллионов долларов. Надо полагать, что ученые, использующие эти компьютеры, рассматривали их как простых производителей, надежных не меньше, чем взаправдашние кони: работать они должны круглые сутки, а мы — старшие конюхи — несли ответственность за каждый цикл вычислений. Из четырех тысяч сотрудников лаборатории услугами главных компьютеров пользовалась примерно четверть. Для каждого из этой тысячи ежедневно велся учет машинного времени, при этом «гроссбухи» хранились в компьютере. Час вычислений стоит триста долларов, поэтому учет надо было вести страшно скрупулезно, и нам приходилось гоняться за каждой выводимой на печать страницей, за каждым блоком дискового пространства и за каждой минутой процессорного времени. Для сбора такой информации имелся отдельный компьютер. Раз в месяц на нем распечатывались отчеты и рассылались по отделам.
Однажды ко мне ввалился Дэйв и невнятно забормотал о неприличном поведении системы учета ЮНИКСа. Кто-то использовал несколько секунд машинного времени, не заплатив за них. Баланс не сходился; по счетам за прошлый месяц на сумму 2387 долларов была обнаружена недостача в 75 центов. Докопаться до источника ошибки в несколько тысяч долларов — пара пустяков. Но причины недостач в несколько центов обычно зарыты глубоко, и такие раскопки — стоящая проверочка для начинающего компьютерного волшебника.
— Чисто сработано, а? — наивно сказал я.
— Разберись с этим — и ты удивишь мир, — ответил Дэйв.
Детская забава! Я погрузился в программу учета. Она была похожа на кастрюлю со смесью всего на свете, куда начинающий кулинар закладывал любимые продукты, мешал, пробовал, а в результате дал дуба. Однако это рагу все же насыщало нашу лабораторию и просто вылить его было нельзя. В нем я нашел куски, написанные на Ассемблере, Фортране и Коболе — древнейших языках программирования. Я бы не удивился, встретив процедуры на древнегреческом, латыни или санскрите. Конечно же, никакой документации в помине не существовало. Только самый наивный поваренок мог отважиться сунуться со своей ложкой, не зная броду.
Худо-бедно, но все же было чем заняться после обеда. Кроме того, оставался шанс выловить из этого компота ягодку покрупней. Дэйв показал мне системную процедуру учета подключений к компьютеру, занесения в журнал имен пользователя и терминала. Система фиксирует каждое подключение, регистрирует идентификатор задачи пользователя, расходуемое пользователем процессорное время и время отключения. Дэйв объяснил, что есть две системы учета. Обычная программа учета ЮНИКСа просто заносит в отдельный файл записи событий. Но Дэйв создал вторую программу, которая обеспечивает хранение более подробных сведений о том, кто пользовался компьютером.
Сменявшие друг друга группы скучающих студентов годами писали, писали и, наконец, написали программы анализа всей учетной информации. Одна программа производит сбор данных и «засовывает» их в файл. Вторая — считывает этот файл и вычисляет стоимость сеанса работы с компьютером. Помимо всего прочего существует третья программа, которая обеспечивает подведение итогов и распечатку счетов, рассылаемых по отделам. Итоговая сумма из этой третьей программы сравнивается с результатом, получаемым от внутренней программы учета. Два учетных файла, созданных одновременно различными программами, должны давать один и тот же ответ. В течение года все работало как часы, но на этой неделе что-то сломалось. Первое подозрение — ошибка округления. Похоже, что каждый элемент файла учета сам по себе правилен, но при суммировании разности в десятые доли цента накапливаются, что в конечном итоге и приводит к ошибке в 75 центов. Доказать это можно либо углубившись в анализ процесса работы программ, либо путем тестирования, подавая на вход различные наборы данных. Чтобы зазря не размахивать мачете в зарослях тростника, я написал свою коротенькую программу проверки файлов и убедился, что с первой программой проблем нет. Со сбором информации все в порядке.
Вторая программа отняла у меня больше времени. За час я слепил «заплату» и понял: все работает. Программа суммирует длительности промежутков времени и затем умножает их на стоимость. Потеря 75