Вирус Морриса
Название данного вируса связано с тем, что его автором является Роберт Моррис младший (Robert Morris), аспирант факультета информатики Корнеллского Университета (США).
🕛 16.03.2009, 13:26
2 ноября 1988 г. он запустил вирус в американскую национальную сеть Internet, инфицировав большое количество компьютеров, подключенных к сети. Internet объединяет машины университетских центров, частных фирм и правительственных агентств, включая Национальное управление по аэронавтике и исследованию космического пространства, а также некоторые военные НИИ и лаборатории. Поскольку при программировании автор допустил ошибку, вызвавшую превышение скорости размножения и распространения по сравнению с задуманной, вирус был достаточно быстро (в течение нескольких часов) обнаружен. Тем не менее он успел заразить в общей сложности порядка 6000 компьютеров из порядка 60000, подключенных к сети.Вирус Морриса заражал только компьютеры типа Sun 3 и VAX, которые использовали варианты ОС Unix версии 4 BSD. В процессе работы вирус оставлял необычные файлы в каталоге /usr/tmp на некоторых машинах и странные сообщения в log-файлах некоторых утилит, в частности, управляющей почтой утилиты SendMail. Для своего распространения вирус использовал некоторые дефекты стандартного программного обеспечения, установленного на многих системах, эксплуатирующих Unix. Он также использовал механизм, предназначенный для облегчения использования ресурсов удаленным компьютерам для проведения вычислений, позволяющий запускать задачу на удаленной машине. Вирус состоял из двух частей: главной программы и программы, обеспечивающей его распространение. Главная программа после запуска на очередной машине собирала информацию относительно других машин в сети, с которыми данная ЭВМ имеет связь. Она выполняла эту работу с помощью анализа конфигурационных файлов и путем прогона системной утилиты, которая дает информацию о текущем состоянии соединений в сети. Затем она использует определенные недостатки программного обеспечения для пересылки себя на другие машины.
Пересылка выполнялась специальной частью вируса, называемой модулем распространения. Этот модуль представляет собой исходный текст программы, состоящей из 99 строк на языке С, которые должны быть откомпилированы и выполнены на удаленной машине. Для этого исходный текст должен быть сначала передан очередной жертве (используя способ, кратко описываемый ниже), а затем откомпилирован и выполнен с тремя аргументами: сетевой адрес инфицирующей машины (т.е. ЭВМ, с которой происходит заражение), количество сетевых портов, которые нужно соединить с этой машиной для передачи основных файлов вируса, и "магическое число", которое использовалось как однократная проверка паспорта. Если инфицирующая машина не получала в ответ от посланного ею модуля распространения этого "магического числа", она немедленно отсоединялась от этой машины. Это, по-видимому, было сделано в расчете на предотвращение попыток получения файлов вируса путем имитации действий модуля распространения. В самом модуле распространения были предприняты определенные усилия по маскировке. Для этой цели он обнулял свою командную строку и немедленно создавал собственную копию. Если в процессе пересылки файлов с инфицирующей машины происходил сбой, то модуль распространения сначала удалял все пересланные файлы, а лишь затем возвращал управление.
Как уже указывалось, после запуска на очередной жертве модуль распространения обеспечивал пересылку всех файлов вируса для машин этого типа (SUN или VAX). Каждый файл представлял собой версию вируса для определенной архитектуры ЭВМ. Кроме того, модуль распространения обеспечивал получение еще одной своей копии для рассылки по очередным сетевым адресам. Хотя в модуле распространения предусматривалась пересылка до 20 файлов, только три на самом деле пересылались данной версией вируса. Это породило гипотезы о том, что Моррис планировал разработку более совершенной версии и что эта версия могла пересылать другие командные файлы, паспорта пользователей или, возможно, вирусы для конкретного типа ЭВМ. После пересылки загрузочных модулей модуль распространения обеспечивал их сборку с местной версией системной библиотеки. Затем эти программы вызывались одна за другой и их действие заключалось в попытке раскрыть пароли пользователей, работающих на данной машине. Если это удавалось, то вирус рассылал модуль распространения по всем адресам, найденным в списке соответствующего "взломанного" абонента. Если ни один из методов дешифровки паролей не срабатывал, то машина, породившая модуль распространения, обеспечивала удаление с диска всех улик (т.е. файлов, созданных в процессе работы вируса).
Общий объем вируса достигал 68К. На момент написания данного материала это, по-видимому, самый большой из известных компьютерных вирусов.
Исторические замечания. Вирус разработал Роберт Моррис младший, аспирант Корнеллского университета, впоследствии осужденный за это американским судом (некоторые сведения об этом процессе приведены в гл.1). Роберт Моррис является сыном ведущего ученого (chief scientist) американского национального центра безопасности компьютеров (U.S. National Computer Security Center) - отделения Нациoнального управления безопасности (National Security Agency). Последнее специализируется на глобальной телекоммуникационной разведке. Моррис-старший, длительное время проработавший в Bell Laboraries, является одним из разработчиков игры Darvin - одного из первых экспериментов в области саморазмножающихся программ. В дальнейшем он участвовал в разработке UNIX, в частности, системы парольной защиты.
Вирус был запущен в сеть приблизительно между 12 и 13 ч 2.11.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 <spaf@purdue.edu>
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 helper program has an
array of 20 filenames for the "helper" to copy over, so there is room to
spare. There are two versions copied - a version for Vax BSD and a
version for SunOS; the appropriate one is compiled.
6) The new virus is dispatched. This virus opens all the virus source
files, then unlinks the files so they can't be found (since it has them
open, however, it can still access the contents). Next, the virus steps
through the hosts file (on the Sun, it uses YP to step through the
distributed hosts file) trying to connect to other machines' sendmail.
If a connection succeeds, it forks a child process to infect it, while
the parent continues to attempt infection of other machines.
7) The child requests and initializes a new socket, then builds and
invokes a listener with the new socket number and hostid as arguments
(#1, above).
The heavy load we see is the result of multiple viruses coming in
from multiple sites. Since local hosts files tend to have entries for
other local hosts, the virus tends to infect local machines multiple
times - in some senses this is lucky since it helps prevent the spread
of the virus as the local machines slow down.
The virus also "cleans" up after itself. If you reboot an infected
machine (or it crashes), the /tmp directory is normally cleaned up on
reboot. The other incriminating files were already deleted by the virus
itself.
Clever, nasty, and definitely anti-social.
-spaf
- From: bishop@bear.Dartmouth.EDU (Matt Bishop)
Subject: More on the virus
Date: Thu, 3 Nov 88 16:32:25 EST
... This program introduced itself through a bug in sendmail. At
these sites, sendmail was compiled and installed with a debugging option
turned on. As near as I can figure (I don't have access to the sendmail
sources), by giving a specific option to the "debug" command in sendmail
(there are lots of those, controlling what exactly you get information
about) you can cause it to execute a command. As sendmail runs setuid to
root, guess what privileges the command is executed with. Right.
Apparently what the attacker did was this: he or she connected to
sendmail (ie, telnet victim.machine 25), issued the appropriate debug
command, and had a small C program compiled. (We have it. Big deal.)
This program took as an argument a host number, and copied two programs
- one ending in q.vax.o and the other ending in .sun.o - and tried to
load and execute them. In those cases where the load and execution
succeeded, the worm did two things (at least): spawn a lot of shells
that did nothing but clog the process table and burn CPU cycles; look in
two places - the password file and the internet services file - for
other sites it could connect to (this is hearsay, but I don't doubt it
for a minute.) It used both individual .rhost files (which it found
using the password file), and any other remote hosts it could locate
which it had a chance of connecting to. It may have done more; one of
our machines had a changed superuser password, but because of other
factors we're not sure this worm did it.
This last part is still sketchy; I have the relevant sun.o file and
will take it apart to see just what it was supposed to do. As of now, it
appears there was no serious damage (just wasted CPU cycles and system
administrator time).
Two obvious points:
1. Whoever did this picked only on suns and vaxen. One site with a
lot of IRISes and two Crays (ie, NASA Ames) got bit on their Suns and
Vaxen, but the attempt to get the other machines didn't work.
2. This shows the sorry state of software and security in the UNIX
world. People should NEVER put a program with debugging hooks in it,
especially when the hook is (or can be made) to execute an arbitrary
command. But that is how the sendmail which was used was distributed!
One more interesting point: initially, I thought an application of
the "principle of least privilege" would have prevented this
penetration. But the attacker used a world-writeable directory to
squirrel the relevant programs in, so - in effect - everything could
have been done by any user on the system! (Except the superuser password
change, of course - if this worm did in fact do it.)
I think the only way to prevent such an attack would have been to
turn off the debug option on sendmail; then the penetration would fail.
It goes to show that if the computer is not secure (and like you, I
don't believe there ever will be such a beastie), there is simply no way
to prevent a virus (or, in this case, a worm) from getting into that
system.
I know this is somewhat sketchy, flabby, and fuzzy, but it's all I
know so far. I'll keep you posted on developments ...
Matt