
                      9. НЕКОТОРЫЕ СЕТЕВЫЕ ВИРУСЫ

   Сетевые вирусы более точно называть не вирусами, а репликаторами, по-
скольку они не заражают выполняемые программы, а просто распространяются
по сети  от одной  ЭВМ к другой. Буквальный перевод соответствующего ан-
глоязычного термина  Worm --  червяк представляется  менее  удачным,  чем
предлагаемый термин репликатор. В свою очередь, репликатор, подобно кас-
сетной боеголовке,  может переносить  с собой  троянских коней и обычные
вирусы. К  счастью, два наиболее известных случая создания таких вирусов
не связаны с вандализмом.


            9.1. Вирус Christmas Tree (Рождественская елка)

   Рассматриваемый  вирус   написан  студентом  университета  Clausthal-
Zellerfeld (Германия),  который в  конце декабря  1987 г. запустил его в
университетской сети.  Название вируса  связано с тем, что он рисовал на
экране дисплея  новогоднюю елку  и затем  рассылал себя по всем адресам,
найденным  на  зараженном  компьютере,  используя  механизм  электронной
почты. Вирус был написан на языке управления заданиями REXX операционной
системы VM/CMS.  Фактически это  один из немногих вирусов, написанных на
языке управления  заданиями, и это свидетельствует о мощности и гибкости
REXX --  несомненно лучшего  из множества языков управления заданиями для
компьютеров системы 360/370.

   Поскольку программа  распространялась в  виде исходного текста, автор
предпринял определенные  меры по  маскировке, продемонстрировав неплохое
понимание человеческой  психологии. В  начале программы стояли коммента-
рии:

  /**********************/ /*************************/
  /*     LET THIS EXEC  */ /*     ЗАПУСТИТЕ ЭТОТ    */
  /*         RUN        */ /*        EXEC-ФАЙЛ      */
  /*         AND        */ /*           И           */
  /*        ENJOY       */ /*      РАЗВЛЕКИТЕСЬ     */
  /*      YOURSELF      */ /*                       */
  /**********************/ /*************************/

   За ними  следовал фрагмент, состоящий из стилизованного рисунка ново-
годней елки  и поздравления "Счастливого Рождества и наилучшие пожелания
на следующий  год", который,  естественно, также не вызывал особых подо-
зрений:

'VMFCLEAR'
SAY '                *                   '
SAY '                *                   '
SAY '               ***                  '
SAY '              *****                 '
SAY '             *******                '
SAY '            *********               '
SAY '          *************                     A'
SAY '             *******                '
SAY '           ***********                     VERY'
SAY '         ***************            '
SAY '       *******************                HAPPY'
SAY '           ***********              '
SAY '         ***************                CHRISTMAS'
SAY '       *******************          '
SAY '     ***********************               AND'
SAY '         ***************            '
SAY '       *******************             BEST WISHES'
SAY '     ***********************        '
SAY '   ***************************        FOR THE NEXT'
SAY '             ******                 '
SAY '             ******                        YEAR'
SAY '             ******                 '

   Для тех,  кто еще  сомневался, запускать  ли программу или посмотреть
текст до  конца, далее следовал еще один комментарий, содержавший "нена-
вязчивый" совет  о том,  что "просмотр  этого файла совсем не интересен,
просто наберите команду CHRISTMAS и посмотрите, что получится":

/*     browsing this file is no fun at all
       just type CHRISTMAS from cms
*/

   И только после этого шел непосредственно текст репликатора, лишенный,
естественно, каких-то комментариев.

   Из университетской  сети вирус  попал в  западноевропейскую сеть EARN
(European Academic Research Network) и связанную с ней американскую сеть
BitNet. Интересно отметить, что впоследствии автор вируса утверждал, что
просто хотел  поздравить своих  товарищей и не подозревал, что универси-
тетская сеть подсоединена к EARN.

   В свою  очередь, сеть  BitNet имеет связь с внутренней сетью компании
IBM -- Vnet.  В этой  сети репликатор  размножался особенно  успешно, по-
скольку сеть состоит в основном из машин и программного обеспечения фир-
мы IBM. Большие списки рассылки у многих пользователей этой сети привели
к ее  перегрузке, и  она была  выключена. В течение двух дней, пока сеть
была выключена,  вся электронная  почта фирмы "отлеживалась". Фирмой IBM
были выполнены  модификации сети, затрудняющие повторение подобных инци-
дентов.

                           9.2. Вирус Морриса

   Название данного  вируса связано  с тем, что его автором является Ро-
берт Моррис  младший (Robert  Morris), аспирант  факультета  информатики
Корнеллского Университета  (США). 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

------------------------------------------------------------------------


              9.3. Вирусы в локальных сетях; вирус NC-1260

   Проблемы, связанные  с локальными  сетями, во  многом зависят от типа
используемой сети.  Так, например,  в некоторых  дешевых локальных сетях
дисковод сетевого  сервера, доступен как обычный диск. Это означает, что
файловый вирус,  попав на  диск центрального  сервера, будет распростра-
няться по  всей сети  как будто  по обычной  файловой системе отдельного
персонального компьютера.

   Вместе с  тем, само наличие сетевого программного обеспечения ведет к
изменению вычислительной  среды и многие вирусы теряют работоспособность
в этих  условиях. Так,  например,  многие  резидентные  файловые  вирусы
неработоспособны в сети Novell.

   В более  дорогих системах имеется некоторая степень регламентирования
доступа, обычно  аналогичная той,  которая используется  в многозадачных
системах на  больших ЭВМ.  В этих системах особую опасность представляет
так называемый "суперпользователь", т.е. пользователь, имеющий наивысший
уровень доступа  ко всем системным ресурсам. Небрежное отношение к паро-
лям таких пользователей или злоупотребление работой с самым высоким ста-
тусом доступа  существенно облегчают попадание и быстрое распространение
по сети  файловых вирусов,  поскольку фактически отключают имеющиеся за-
щитные механизмы.

   В   качестве    примера   вируса,   специально   приспособленного   к
функционированию в  определенной сети  рассмотрим вирус NС-1260, который
является сильно  модифицированным вариантом вируса С-648 и способен рас-
пространяться по  сети Novell.    Хотя вирус не является резидентным, он
распространяется достаточно быстро. Длины зараженных файлов увеличивают-
ся на 1260 байтов, причем при заражении они шифруются ключом, меняющимся
от файла к файлу. Вирус был обнаружен в Миннесоте (США) в январе 1990 г.
Детектируется полидетектором SCAN.

