для передачи основных файлов вируса и "магическое число", которое
использовалось как однократная проверка паспорта. Если
инфицирующая машина не получала в ответ от посланного ею модуля
распространения этого "магического" числа, она немедленно
отсоединялась от этой машины. Это, по-видимому, было сделано в
расчете на предотвращение попыток получения файлов вируса путем
имитации действий модуля распространения. В самом модуле
распространения были предприняты определенные усилия по
маскировке. Для этой цели он обнулял свою командную строку и
немедленно создавал собственную копию. Если в процессе пересылки
файлов с инфицирующей машины происходил сбой, то модуль
распространения сначала удалял все пересланные файлы, а лишь затем
возвращал управление.
Как уже указывалось, после запуска на очередной жертве модуль
распространения обеспечивал пересылку всех файлов вируса для машин
этого типа (SUN или VAX). Каждый файл представлял собой версию
вируса для определенной архитектуры ЭВМ. Кроме того, модуль
распространения обеспечивал получение еще одной своей копии для
рассылки по очередным сетевым адресам. Хотя в модуле
распространения предусматривалась пересылка до 20 файлов, только
три на самом деле пересылались данной версией вируса. Это породило
гипотезы о том, что Моррис планировал разработку более совершенной
версии и что эта версия могла пересылать другие командные файлы,
паспорта пользователей или, возможно, вирусы для конкретного типа
ЭВМ. После пересылки загрузочных модулей модуль распространения
обеспечивал их сборку с местной версией системной библиотеки.
Затем эти программы вызывались одна за другой и их действие
заключалось в попытке раскрыть пароли пользователей, работающих на
данной машине. Если это удавалось, то вирус рассылал модуль
распространения по всем адресам, найденным в списке
соответствующего "взломанного" абонента. Если ни один из методов
дешифровки паролей не срабатывал, то машина, породившая модуль
распространения, обеспечивала удаление с диска всех улик (т.е,
файлов, созданных в процессе работы вируса).
Общий объем вируса достигал 68К. На момент написания данного
материала это, по-видимому, самый большой из известных
компьютерных вирусов.
Исторические замечания. Вирус был разработан Роберт Моррис
младшим, аспирантом Корнельского университета, впоследствии
осужденным за это американским судом (некоторые сведения об этом
процессе приведены в гл.10). Роберт Моррис является сыном
ведущего ученого (chief scientist) американского национального
центра безопасности компьютеров (U.S. National Computer Security
Center) є отделения Нациoнального управления безопасности
(National Security Agency). Последнее специализируется на
глобальной телекоммуникационной разведке. Моррис-старший,
длительное время проработавший в Bell Laboraries, является одним
из разрабочиков игры Darvin є одному из первых экспериментов в
области саморазмножающихся программ. В дальнейшем, он участвовал в
разработке UNIX, в частности, системы парольной защиты.
Вирус был запущен в сеть приблизительно между 12 и 13 часами
2.10.88. Из-за ошибки, вызвавшей превышение скорости размножения и
распространения по сравнению с задуманной, в течение нескольких
часов (к концу дня) вирус заразил порядка 6000 компьютеров (данная
оценка основана на экстраполяции и не претендует на особенную
точность). Всего к сети Internet подключены более 60 000
компьютеров. Пораженные компьютеры были расположены на
значительной территории (Массачусетский технологический институт,
Калифорнийский университет в Беркли, университет в Пэдью,
Стенфордский университет и др.).
Наиболее заметным эффектом при распространении вируса, помимо
некоторых необычных сообщений операционной системы, была все же
непрерывно возраставшая загрузка пораженных вирусом машин. По
истечении некоторого времени отдельные компьютеры оказались
настолько загруженными распространением копий вируса, что не были
способны выполнять никакой полезной работы; некоторые компьютеры
исчерпали память для своппинга или таблицу текущих процессов и их
приходилось перегружать. Это существенно затруднило обмен
сообщениями и координацию работы по уничтожению вируса, поскольку,
судя по репортажам, большинство американских программистов
привыкло пользоваться электронной почтой. Задержки привели к
потере очень ценных сообщений, посланных пользователем, который,
по-видимому, знал детали работы вируса или они были сообщены ему
Моррисом, испугавшимся последствий своего "эксперимента". Тем не
менее, сеть оставалась работоспособной и между программистами шел
интенсивный обмен сообщениями.
Утром 3 ноября персонал Калифорнийского университета в Беркли и
Массачусетского технологического института (МТИ) получили копии
вируса и начали его анализ. Общим опасением было, что к моменту,
когда будет изготовлено противоядие, системные файлы будут
изменены или разрушена некоторая информация. К пяти часам вечера 3
ноября группа исследователей в Университете в Беркли разработала
серию мер для прекращения его дальнейшего распространения.
Соответствующее сообщение было передано по сети, однако его
распространение было задержано нагрузкой, созданной
распространением вируса и отключением некоторых частей сети "на
карантин". К 9 часам вечера другой простой и эффективный метод
борьбы с распространением вируса был найден в Университете Пэдью и
быстро распространен всем заинтересованным пользователям. К концу
суток с вирусом было покончено.
Дизассемблирование и реконструкция текста вируса представляла
собой достаточно сложную задачу, поскольку Моррисом были
предприняты специальные по ее затруднению, в частности, шифровка
текстовых строк. Основная часть работы была выполнена Марком
Эйчиным (Маrk Eichin), специалистом по дизассемблированию ROM,
который одновременно являлся и координатором работы других
программистов. Основная работа по реконструкции вируса была
завершена в субботу. Тогда же исследователями, после жарких
дискуссий, было принято решение не распространять восстановленный
исходный текст вируса и, в то же время, свободно распространять
информацию об алгоритмах, используемых данным вирусом. Это,
конечно, несет опасность, что они могут быть использованы для
написания новых вирусов, однако уровень знаний, требуемых для этой
цели, неизмеримо выше, чем умение перекомпилировать программу с
двумя или тремя измененными строчками.
На следующее утро, в пятницу 4 ноября в МТИ состоялась пресс-
конференция, на которой выступили ведущие участики "охоты на
вирус". Во вторник, 8 ноября, в Балтиморе состоялась конференция
по вирусу Морриса, на которой подробно обсуждалась хронология
событий, предпринятые действия и детальный анализ функционирования
вируса. Кроме того, были обсуждены вопросы, касающиеся уроков
инцидента и подготовки к отражению новых атак.
Ниже приводятся представляющие исторический интерес сообщения,
которыми обменивались исследователи в ходе борьбы с вирусом. Эти
сообщения наглядно демонстрируют огромную ценность национальной
сети как инструмента оперативного обмена информацией между
исследователями.
From: Stoll@DOCKMASTER.ARPA
Subject: Virus on the Arpanet - Milnet
Date: Thu, 3 Nov 88 06:46 EST
Re Arpanet "Sendmail" Virus attack November 3, 1988
Hi Gang!
It's now 3:45 AM on Wednesday 3 November 1988. I'm tired, so
don't believe everything that follows...
Apparently, there is a massive attack on Unix systems going on
right now.
I have spoken to systems managers at several computers, on both
the east & west coast, and I suspect this may be a system wide
problem.
Symptom: hundreds or thousands of jobs start running on a Unix
system bringing response to zero.
Systems attacked: Unix systems, 4.3BSD unix & variants (eg: SUNs)
any sendmail compiled with debug has this problem. See below.
This virus is spreading very quickly over the Milnet. Within the
past 4 hours, I have evidence that it has hit >10 sites across the
country, both Arpanet and Milnet sites. I suspect that well over
50 sites have been hit. Most of these are "major" sites and
gateways.
Method:
Apparently, someone has written a program that uses a hole in SMTP
Sendmail utility. This utility can send a message into another
program.
Step 1: from a distant Milnet host, a message is sent to Sendmail
to fire up SED, (SED is an editor). This is possible in certain
versions of sendmail (see below).
2: A 99 line C program is sent to SED through Sendmail.
3: The distant computer sends a command to compile this C
program.
4: Several object files are copied into the Unix computer. There
are 3 files: one targeted to Sun one targeted to SUN-3 one
targeted to vax (ultrix probably, not vms)
5: The C program accepts as address other Milnet sites
6: Apparently, program scans for other Milnet/arpanet addresses
and repeats this process.
The bug in Sendmail:
When the Unix 4.3 BSD version of Sendmail is compiled with the
Debug option, there's a hole in it.
Most Unix systems (BSD 4.3 and Suns) apparently do not have this
bug. It exists only where the system manager recompiled Sendmail
and enabled debugging.
This is bad news.
Cliff Stoll dockmaster.arpa
------------------------------------------------------------------
-------
From: Gene Spafford
Subject: More on the virus
Date: Thu, 03 Nov 88 09:52:18 EST
All of our Vaxen and some of our Suns here were infected with the
virus. The virus forks repeated copies of itself as it tries to
spread itself, and the load averages on the infected machines
skyrocketed. In fact, it got to the point that some of the
machines ran out of swap space and kernel table entries,
preventing login to even see what was going on!
The virus seems to consist of two parts. I managed to grab the
source code for one part, but not the main component (the virus
cleans up after itself so as not to leave evidence). The way that
it works is as follows:
1) Virus running on an infected machine opens a TCP connection to
a victim machine's sendmail, invokes debug mode, and gets a shell.
2) The shell creates a file in /tmp named $$,l1.c (where the $$
gets replaced by the current process id) and copies code for a
"listener" or "helper" program. This is just a few dozen lines
long and fairly generic code. The shell compiles this helper
using the "cc" command local to the system.
3) The helper is invoked with arguments pointing back at the
infecting virus (giving hostid/socket/passwords as arguments).
4) The helper then connects to the "server" and copies a number of
files (presumably to /tmp). After the files are copied, it exec's
a shell with standard input coming from the infecting virus
program on the other end of the socket.
From here, I speculate on what happens since I can't find the
source to this part lying around on our machines:
5) The newly exec'd shell attempts to compile itself from the
files copied over to the target machine. I'm not sure what else
the virus does, if anything -- it may also be attempting to add a
bogus passwd file entry or do something to the file system. The