Артак Оганесян
Червь Морриса 2.0
Часы на запястье настырно вибрировали, вынудив бросить взгляд на циферблат. С работы. Просто так не позвонили бы, все уже привыкли переписываться в чатах, а звонок, да ещё и в выходной день, стал считаться вторжением в личную жизнь.
– Ми-иша, притормози! – крикнул я сыну. Сам остановился, встал на одну ногу, отпустил руль велосипеда и ответил на звонок.
– Атака уровня 3 или даже 2, – раздался в наушнике голос асссистента.
– Открываю ленту, – я быстренько вытащил из плотно прилегающего кармашка велосипедных шорт смартфон и принялся пролистывать заголовки сообщений. Если верить им, началась большая заваруха. Давно уже не было таких дерзких масштабных нападений на Интернет!
– Собирай всех в офисе! Буду примерно через час… Да, и подключи группу быстрого реагирования на телеконф минут через десять.
Я дал отбой и посмотрел на сына. Ожидал увидеть нетерпение в его глазах, однако он спокойно наблюдал за мной, сложив руки на руле.
– Вызову такси, вернёшься к маме. Извини, дружище, сам слышал – срочное дело.
– Пап, мама не в Москве, так что я у тебя до вечера воскресенья.
– Тогда держи мои ключи, посидишь дома один․ – Я потянулся было к другому кармашку, но сын отмахнулся.
– А может, возьмёшь к себе на работу? Помнишь, ты всё обещал.
Я задумался, а действительно, почему бы и нет. Миша же принял паузу за мой отказ.
–Ты сам рассказывал мне, как играл с перфокартами у своего отца на работе, про машинные залы с магнитными лентами, телетайпами…
– Ну ты вспомнил нафталиновые времена! Сейчас везде обычные компьютеры и принтеры, какие у каждого дома…
– А ещё ты описывал, как играл в пакмена на первых персоналках…
– Миш, там всё горит, – перебил я, – критична каждая минута, все антивирусники уже кинулись в борьбу, мне нужно спешить.
– Пап, могу я посмотреть, как ты работаешь начальником?! – И он сморщил нос. Когда Мишка был маленьким, он не только смешно морщил нос, но и начинал часто моргать, и, глядя на эту мультяшную мордочку, невозможно было ему отказать. А сейчас… уже не Мишка, а Михаил. Вымахал пацан! Столько лет прошло после развода, а меня всё не покидает чувство вины, что уделяю ему мало времени.
– Так и быть, увидишь отца в боевых условиях! Хотя… что там боевого, всё будет тихо-мирно. Это пожарные и скорая спасают планету с мигалками и движухой, а мы – без ажиотажа.
Вдвоём мы легко установили велосипеды в крепления на крыше машины. Только я сел за руль, как на приборной панели отобразился вызов на телеконференцию. Голос дежурного менеджера заполнил салон:
– Ребята, пока вы все мчитесь сюда, введу в курс дела. Атаковано несколько сот тысяч узлов Сети, то есть речь уже идёт о миллионах заражённых компьютеров.
– В чём вредоносность этого вируса? – спросил один из аналитиков.
– Нет инфы. Известно, что это не вирус, а червь. Американцы установили, что он попал в Сеть из Массачусетского университета, но туда его подбросили либо китайцы, либо мы, русские.
– Они подкрепили чем-то свои подозрения? – поинтересовалась ведущая тестировщица.
– Пока нет.
– С какой скоростью распространяется?
– С момента первого сообщения о его появлении прошло три с небольшим часа. И он цепляет не только компьютеры, но и смартфоны с планшетами.
– Отслеживайте выставленные наружу компьютеры, начинаем охоту! – На самом деле всем было понятно, что делать, но такое эмоциональное напутствие от меня было нужно, чтобы показать, как нам важно первыми поймать в ловушку нового нарушителя спокойствия, первыми декодировать его и первыми на рынке выдать антивирус к нему.
В здание фирмы мы с сыном вошли в велосипедных шортах и майках. Охранник посмотрел на постороннего со мной, но не стал даже спрашивать, увидев, что я положил руку на плечо подростка.
В другое время я бы показал сыну размах нашей фирмы, проведя экскурсию по учебному центру, фитнес-зоне, столовой и даже игровой комнате с приставками и шлемами виртуальной реальности. Потом бы повёл на производственные этажи, где в модных открытых пространствах, креативно оформленных лучшими дизайнерами, трудились наши аналитики, эксперты, программисты, тестировщики, инженеры и все, кто обеспечивал исследования, разработку, выпуск, сопровождение и техподдержку нашего продукта: антивирусного программного обеспечения.
Но сегодня в выходной наши шаги гулко отдавались в пустоте общего холла. Мы миновали стойку приёмной, смотревшуюся сиротливо без приветливых улыбок секретарей. Вместо них услужливость проявил лифт, обычно находящийся в постоянном движении: с нажатием кнопки сразу же раздвинул свои двери. Шумопоглащающий ковролин на втором этаже в такой тишине не оправдывал своё название.
Оживлённо было только в большой стеклянной переговорке и у рабочих столов около неё. Вразнобой одетые сотрудники эмоционально обсуждали новости, один из них не без восторга сообщил мне:
– Оба наших терминала, подключённых к нью-йорскому сегменту сети, заразились!
– Отловили, как червь проник?
– Отрабатываем версию, которую обсуждают на форумах, что маскируется под обычный скрипт веб-страницы. Этот гад воспользовался мало кому известной брешью в популярных веб-браузерах. Помнишь, мы ещё обсуждали пару недель тому назад?
– Да, помню, но ведь все производители браузеров сразу выпустили заплатки?
– Ну ты знаешь, – улыбнулся мне один из программистов, – они-то выкатили, но пока сисадмины и безопасники корпоратов одобрят исправления…
– Знаю-знаю. – А ещё я представил армию домашних компьютеров, на которых беспечные пользователи редко обновляют софт, и посетовал в голос: – Кто-то вовремя подсуетился, узнав про уязвимость защиты, воспользовался люком.
– Люк-лазейка, – Миша выдал фразу как скороговорку, – Когда-то ты мне объяснял «на пальцах», что вредоносный код – это груз, который хакеру надо доставить на компьютер, а компьютер – это крепость. Груз можно подкинуть в телегу, которую стражники знают и спокойно пропускают через открытые ворота. Надо только прикрыть какой-нибудь соломой, чтобы не заметили. Или сделать так, чтобы они сами втащили к себе «троянский конь». Или найти подземный лаз, который строители крепости тайно прорыли.
– Надо же! Ты помнишь! – я был доволен тем, что сын не забыл мои рассказы. – Да, червь забрался через люк, который криворукие программисты забыли закрыть после отладки системы.
– Кто этот молодой человек? – кокетливо спросила незнакомая мне девушка, из новеньких, наверное. Она сидела рядом и прислушивалась к нашему диалогу.
– Сын! – не без гордости сообщил я. Несколько коллег, по большей части прекрасной половины, обернулись и обратили изучающие взгляды на Мишу и на меня, наверняка сравнивая и, уверен, отмечая сходство.
Вообще, если бы не срочное дело, мы бы ещё долго глазели друг на друга, потому что большинство коллег было одето не по-будничному, не все дамы были накрашены или, наоборот, были непривычно причёсаны. Несмотря на отсутствие дресскода, в рабочие дни коллектив придерживался негласных правил, а сегодня…
Но тут прозвучало объявление, и все вернулись к проблеме։
– Эвристический сканер обнаружил, что червь смело обращается к веб-сервисам… не поверите – нашим же. К программным интерфейсам, которые органы обязали нас, антивирусные компании, открыть им, органам, для доступа извне.
– То есть авторы червя либо из нашего брата, переметнувшиеся на тёмную сторону, либо имеют отношение к спецслужбам…
– Зачем червяку стучаться в эти АПИ, там же ничего нет, кроме базы сигнатур? – мыслил вслух разработчик нашего такого интерфейса.
– Может, чтобы самомодифицироваться, если вдруг выявит, что сигнатура его кода уже в базе? – предположил другой разработчик.
– Крутая идея! – похвалили его, – Полиморф, который на лету определяет… Ёшкин кот, это как преследуемому прослушивать эфир полицейского канала.
Мозговой штурм продолжался. Я вдруг поймал себя на том, что смотрю на Мишу. Он как в кинотеатре, открыв рот, следил за происходящим. Пусть и не было в нашем офисе пультов управления с многочисленными моргающими разноцветными лампочками, которые завораживали меня, когда школьником пропадал у отца в вычислительном центре, зато я погрузил своего сына в остросюжетный фильм. Вообще, глядя на то, как прозаично действуют наши ребята, я был уверен, что Мише будет скучно с нами.
– Пока непонятно, каким образом червь внедрил свой код в операционку. – Руководитель отдела анализа угроз тотчас же отчитался о превентивных мерах: – Мы подсунули в ту же подсетку виртуальную машину с эмулятором, чтобы в песочнице проследить за работой его кода.
– Ещё удивляет, что он не оставляет следов на диске, пока что замечен только в оперпамяти.
– Не перегружайте машины, чтобы не потерять его, – на всякий предупредил я, хотя был уверен, что ребята сообразят сами.
– Так и делаем, запускаем поведенческий анализ в заражённой среде.
Я решил не мешать команде, взял сына под локоть и повёл из «стекляшки» на кухню.
– Секретарей сегодня нет, надо бы самим позаботиться о кофе с плюшками, – объяснил я Мише, – а позже закажем пиццу на всех. Наш брат, программист, без пиццы и кофе не соображает.
Мы облазили с ним все ящики офисной кухни, набрали коробок с печеньями и батончиками, вернулись в комнату и разложили трофеи на столе.
К тому времени сисадмин принёс запрошенный мной временный ноутбук. Свой-то я забрал на выходные домой. С выданным устройством я занял место за общим столом. Как бы я ни считал, что продолжаю быть экспертом, но годы на руководящих позициях вымывают знания и умения, остаются только опыт и понимание ситуации в целом. На данном этапе я ничем не мог помочь команде, поэтому принялся как рядовой системный аналитик проглядывать декомпиляцию бинарников.
– А что ты сейчас делаешь? – спросил меня Миша. Первым порывом было сказать ему «погоди, потом», но я сдержался.
– Ребята сделали дамп памяти. Это как бы слепок сняли или снимок сделали…
– Я знаю это слово, пап, мы проходим информатику в школе.
– Ещё один экземпляр червя нам передал сингапурский партнёр, поймал в капкан виртуальной машины, так что мы теперь смело можем экспериментировать с заражёнными виртуалками. В этом смысле крупным компаниям легче, у них огромная клиентская и партнёрская сеть… Шут с ними, зато мы проворней и нам не в лом перебрать дамп байт за байтом, чтобы отловить и тело червя – его код, и его отростки – данные.
– Вы глазками будете всё смотреть? – удивился сын.
– Нет, конечно, есть утилиты для сверки памяти с эталонными образцами, чтобы увидеть разницу до вторжения червя и после.
– А ты сам что делаешь?
– Проглядываю декомпилированный, то есть приблизительно восстановленый, код червя, пытаюсь в меру своего разумения понять алгоритм его действий.
Я оглянулся, вдруг наш разговор отвлекал ребят, но в штабе и без нас стоял гомон. То и дело возникали очаги обсуждений у одних или других, постоянно кто-то звонил специалистам, которые не смогли приехать и подключились удалённо.
Разработчик в майке с надписью «In code we trust» («Мы верим в код»), пристроившийся рядом со мной, хрустел вафлями. Доев очередную, он выдал характеристику:
– Прикинь, скромный экземплярчик попался, червь не тронул ни один файл на диске. Да и в памяти не особо шуршит.
– Думаешь, червь безобидный? – спросил я.
– Не берусь утверждать, – сразу же стушевался любитель вафель, – пока что могу предположить, что разработчиком был кто-то из старой гвардии, потому что исходный код написан на чистом ассемблере, а не на каком-нибудь языке типа Джавы или Си++.
– Папа писал на ассембелере, – хвастливо заметил Миша.
– Респект! Сейчас таких профи осталось мало, – отозвался парень, дожевал кусок и, отряхнув руки о штаны, продолжил стучать на клавиатуре.
Миша уткнулся в свой смартфон, а я вернулся за свой ноутбук, проскролил переписку, и снова попытался читать реверсом добытый код. И тут увидел нечто, что походило на внутренний словарик программы.
– Кто-то пытался расшифровать этот кусок? – и я озвучил адреса байтов.
– Да, это подбор паролей, – не отрываясь от своего экрана, ответила ведущая аналитик, – там массив из 432 слов.
– 432?! – удивился я.
– Да, а что?
– Червь Морриса! – воскликнул я. – Он использовал ровно столько наиболее употребительных слов, чтобы вскрывать пароли аккаунтов.
Все взоры обратились ко мне.
– Возвращение великого интернет-червя? – задал кто-то с пафосом вопрос.
– Ха! Вот что имелось в виду под «Моррис 2.0»! – усмехнулся другой. – Я тут в форуме увидел, не понял, к чему они так назвали.
– То есть кто-то из конкурентов уже прошёл этот путь, – констатировал вполголоса я. – Мы отстаём в своём расследовании. Кстати, Моррис, будучи студентом Корнельского университета, для сокрытия следов запустил свою программу с вычислительной машины Массачусетского технологического института. Ещё одно совпадение!
– Юзеры в постах жалуются, что время от времени эта зараза как бы выключает дисплей и пишет зелёными символами на чёрном фоне: «I’M THE CREEPER… THERE IS MY REAPER?» Даже не знаю, как перевести эту ерунду на русский.
– Первым известным вирусом был The Creeper, – поделился я вслух своими знаниями, – в переводе с английского «проныра» или «ползучее растение». Он печатал сообщение: «Я – ПРОНЫРА… ПОЙМАЙ МЕНЯ, ЕСЛИ СМОЖЕШЬ». Его обезвредила другая программа, первый антивирус под названием The Reaper, то есть «Жнец» или «Смерть с косой».
– Этот наглец бросил вызов! – не будь Миши рядом, я бы не стал столь театрально продолжать, но момент оправдывал очевидную патетику: – мы должны первыми выпустить алгоритм обнаружения и обезвреживания!
Миша вполголоса спросил меня:
– А почему бы всем фирмам не объединить усилия? Быстрее же добьётесь результата.
– С одной стороны, так оно и есть, а с другой – это гонка, кто первый – о том все будут говорить, к тому побегут пользователи покупать его антивирусный продукт.
– Меркантильненько, – оскалился Миша.
– И да, и нет. Я бы хотел, чтобы наша команда была первой не только потому, что успех принесёт нам новый бизнес, но и потому что каждый почувствует себя героем дня.
– А ты был героем дня?
– Да, бывало.
– Расскажи.
– Давай потом, сейчас не время…
– Расскажи сейчас, пожалуйста, – Миша заглянул мне в глаза. Что с ним сегодня такое? Ладно, пока команде от меня ничего не требуется, поведаю о былых временах.
Мы покинули переговорку и отошли в пустующую половину зала, присели на столы напротив друг друга, и я начал:
– Тебе было лет пять…
– То есть до вашего с мамой развода.
– Верно.
– И?