ZF

                           КАК СЧИТАТЬ ZВИРЕЙ
                                by DrMAD

                                     - Раз крокодил... два крокодила...
                                       пять крокодилов...

                                       (С) Матрос Фукс

    Введение
    1. Натурные методы
    2. Аналитические методы
    2.1. Решетка Бете - экспоненциальное размножение    
    2.2. Логистическая модель с замедлением роста
    2.3. Николас Уивер и "червь Уорхола"    
    2.4. Модель с участием антивируса    
    2.5. Как решать дифуры
    3. Имитационные методы     
    3.1. Общее описание моделирующего комплекса    
    3.2. Некоторые результаты    
    3.3. Концепция контрчервя: страшилка и патчер
    Литература
        
                             Введение 

    Если вы  не  считаете,  что  современные  сетевые  эпидемии,  когда
Интернет жутко тормозит, а в почтовый ящик непрерывно валятся десятки и
сотни Клезов и Майдумов,  - это "гы-ы-ы прикольно, давай ишшо", то Вам,
видимо, понятно, что надо иметь представление о том, какова же динамика
распространения вирусов и червяков по сетям.  Это нужно для того, чтобы
правильно организовать антивирусную защиту на всемирном  уровне;  чтобы
составить свое мнение - правильно ли она организована;  ну и,  наконец,
чтобы сто раз подумать, стоит ли запускать своего червяка в плаванье In
The Wild.
    Традиционно, для исследования  любых  сложных  объектов  и  явлений
используются три группы методов:
    - натурные;
    - аналитические;
    - имитационные.

                          1. Натурные методы

    Фактически, это измерение  интересующих  характеристик  на  реально
существующем и  функционируещем объекте.  Поскольку "объектом" в данном
случае является весь Интернет,  то сделать это крайне сложно  даже  для
тех, кто имеет необходимые технические и организационные возможности.
    Но такие  измерения  все-таки  ведутся.  На  серверах  университета
Беркли  во  время  глобальных вирусных эпидемий мониторится порожденный
вирусами трафик.  Эти данные иногда публикуются  и  служат  в  качестве
отправной точки для самых разных умозаключений.
    Следует иметь в виду,  что отличить  вирусный  трафик  от  обычного
можно  только  в  том случае,  если в TCP-пакетах присутствует какая-то
метка,  позволяющая отличить вирус от не-вируса.  Червяки, использующие
каки-либо  дыры  _сетевого_  софта,  такую метку имеют.  Это shell-код,
которым они пытаются  продолбить  дырку  в  защите.  Почтовые  червяки,
использующие  методы социальной инженерии или дырки в _почтовом_ софте,
такой метки (по крайней мере, легко обнаруживаемой) не имеют, и поэтому
изучать  их  распространение натурными методами крайне трудно,  а может
быть и вообще невозможно.
    Забегая вперед,  практически все рассмотренные далее математические
модели проверены на  адекватность  путем  сравнения  их  результатов  с
результатами натурных   исследований.   Совпадение   оказалось   вполне
удовлетворительным.

                        2. Аналитические методы

    Это методы,   основанные   на   какой-либо   теоретической  модели,
представленной  в  виде  уравнения,  которое  связывает   между   собой
известные  и неизвестные характеристики объекта или процесса.  Неплохой
обзор некоторых аналитических  моделей  распространения  вирусов  можно
найти  в  /2/,  но  в этой статье приводятся только готовые результаты.
Гораздо полезней самостоятельно составить уравнения и решить их.
    Итак, введем следующие обозначения.
    Пусть N - общее количество машин,  V - количество инфицированных, W
- количество пока еще здоровых. Естественно, N = V+W. Чтобы не зависеть
от N,  вместо V и  W  иногда  лучше  рассматривать  доли  зараженных  и
здоровых машин от общего количества:  v=V/N и w=W/N,  разумеется v+w=1.
Кроме того,  надо иметь в  виду,  что  это  не  константы,  а  функции,
зависящие от времени: v= v(t) и w=w(t).

               2.1. Решетка Бете - экспоненциальное размножение

    Предположим, что вирус ищет своих жертв не случайно, а сразу со 100
%-ной эффективностью обнаруживает пока еще здоровую машину  и  заражает
ее.  Пусть  в  момент t=0 заражена всего одна машина:  V(0)=1.  И пусть
средняя скорость размножения = B.
    Количество зараженных   машин   постоянно   возрастает   вместе   с
количеством ранее зараженых собратьев и прямо пропорционально  B. Имеем
простейшее дифференциальное уравнение:

                           dV(t)/dt = B*V(t)

    Его решение при V(0)=1 :

                            V(t)=exp(B*t).

    Этот же  результат  можно  получить  другим способом.  Пусть каждый
зараженный компьютер в единицу  времени  заражает  A  своих  собратьев.
Тогда V(1)=A+1;  V(2)=A+1+(A+1)*A=(A+1)^2;  и так далее:  V(t)=(A+1)^t.
Проведя тривиальные преобразования, получим:

    (A+1)^t = exp(ln(A+1)*t) =  exp(B*t),

    где B=ln(A+1)   -   таков   физический   смысл   средней   скорости
размножения.
    Это модель (в физике она называется "решеткой Бете"  /1/) описывает
чисто экспоненциальное размножение вируса.

                              v ^     Ш
                                |     Ш
                                |    ШШ
                                |    ШШ
                                |   ШШШ
                                | ШШШШШ
                                +---------------->  t

    Единственное достоинство этой модели - ее простота.  Но  реальность
она  описывает...  не  то,  чтобы  совсем  неправильно...  но далеко не
всегда.

            2.2. "Логистическая" модель с замедлением роста

    В реальной жизни жертва  выбирается  случайно,  поэтому  зараженные
машины "чихают" не только на здоровых, но и на друг друга. И чем больше
будет зараженных машин,  тем  менее  эффективным  становится  случайное
"чихание".
    Прирост новых зараженных машин - это скорость изменения  v(t), т.е.
первая  производная  по времени.  Несложно сообразить,   что она в этом
случае  не  только  прямо  пропорциональна  все  увеличивающейся   доле
зараженных,  но  и уменьшается по мере приближения к своему предельному
значению.
    Итак, имеем дифференциальное уравнение 1-го порядка:

      dv(t)/dt = B*v(t)*(1-v(t)) = B*v(t)-B*v(t)^2.

    Этот дифур    (уравнение    Фергюльста)    описывает   классическую
эпидемическую модель, известную уже лет 150 (в те времена при ее помощи
моделировали размножение людей на Земле и вируса гриппа в носу).
    Его решение - "логистическая" кривая вида:

                        v(t) = 1/(1+exp(-Bt)).

                              v ^      ШШШ
                                |     ШШШШ
                                |    ШШШШШ
                                |    ШШШШШ
                                |   ШШШШШШ
                                | ШШШШШШШШ
                                +---------------->  t

    Рассмотрим предельные случаи:
    1) v(t)  близко  к  0,  w(t)  близко к 1,  тогда почти каждый новый
вирусный  "чих"  заражает  новую  машину,  и  модель   ведет   себя   в
соответствии с "решеткой Бете";
    2) v(t) близко к 1,  w(t) близко к  0,  почти  каждый  новый  "чих"
тратится  на  ранее  уже  зараженную машину,  и прирост новых заражений
крайне мал;
    3) v(t)  и  w(t)  близки  к  0.5,  прирост  новых  зараженных машин
максимален, поскольку и источников заразы много,  и потенциальных жертв
еще достаточно.
    Главный вывод:  стратегия  случайного  выбора  цели  для  поражения
(IP-адреса)   -   далеко   не  самая  оптимальная.  Тем  не  менее,  ее
использовали  практически  все  сетевые  вирусы,  вызвавшие  глобальные
эпидемии за  последние  5  лет,  и  при  этом  вполне  успешно заражали
огромные фрагменты адресного пространства Интернета (например, Code Red
- до 350000 серверов).

                 2.3. Николас Уивер и "червь Уорхола"

    Энди Уорхол - знаменитый американский рекламщик и  фотохудожник, он
умер от старости лет 15 назад и ни о каких вирусах понятия не имел. Ему
всего лишь принадлежит изречение:  "в будущем каждый  желающий  получит
шанс на 15 минут славы",  которую аспирант университета Беркли Н. Уивер
вынес в эпиграф своей скандально знаменитой статьи. Перевод этой статьи
можно  найти в материалах 5-го выпуска журнала "Земский Фершал".  Кроме
того,  у нее есть продолжение,  посвященное изучению размножения  червя
Slammer.
    В статье   рассматривались   оптимальные   стратегии    размножения
несуществующего   червя,   получившего   условное  наименование  "червь
Уорхола".  Было отмечено,  что различные копии  червя  должны  каким-то
образом   разделять  между  собой  пространство  IP-адресов,  чтобы  не
"чихать" по многу раз в одно и то же место.  Уивер упомянул по  крайней
мере два "хороших" подхода:
    - копии  червя  обмениваются  друг  с  другом  списками  зараженных
хостов;
    - копии  червя  передают  по  наследству своим потомкам пол-царства
(половину планируемого для заражения пространства IP-адресов).
    Такие подходы  (в  основном  второй,  т.к.  первый  нереализуем  на
практике)  позволяли   бы   червю   размножаться   в   соответствии   с
экспоненциальной моделью.
    Но Н.  Уивер не рассматривал порядок обхода IP-адресов копией червя
внутри своего фрагмента адресного пространства.  Если он случайный,  то
весь   выигрыш   "дихотомической"  стратегии  пропадает.  Это  что  же,
предполагается тупой последовательный перебор IP-адресов?
    Между тем,  можно  совместить "дихотомическое" разделение адресного
пространства и случайный порядок перебора адресов.
    Итак, мой  очередной  вклад  в  науку.  J  Для  выбора  случайного
IP-адреса нужно использовать линейный конгруэнтный ДПСЧ:

                      X(i) = (X(i-1)*A + B) mod M.

    При правильно подобранных A  и  B  цикл  датчика  близок  к  своему
предельному  значению,  к  M = 2^32.  То-есть,  при работе единственной
копии червя адреса не будут повторяться. Но ведь червь размножается...
    Ничего страшного.  Он  просто  должен  передать в качестве затравки
своему первому потомку случайное число,  которое  возникнет  через  M/2
шагов;   второму   потомку - которое возникнет через M/4 шагов,  и т.д.
Первый потомок,  размножившись, подарит своему ребенку затравку, равную
значению   датчика   через M/2+M/4 шагов,  _начиная_от_своего_текущего_
_значения_ и т.д.
    Прошу не называть это "червем DrMAD-а". J

                   2.4. Модель c участием антивируса

    На практике  против  червя  рано  или поздно начинают вести борьбу,
поэтому  необходимо  кроме  V(t)  и  W(t)  ввести  U(t)  -   количество
исцеленных и/или пропатченных систем.  Разумеется, теперь N = V+W+U или
1 = v+w+u.
    Будем считать,  что  исцеленный/пропатченный  компьютер  больше  не
может быть заражен.  Пусть средняя скорость распространения исцеления =
C.  Не будем забывать,  что  исцеление  не  зависит  от  того,  сколько
компьютеров уже исцелено до этого, и происходит не случайным образом, а
целенаправленно, причем  пропорционально  распространению  информации о
черве,  которая,   как   многократно  проверено,  растет  по экспоненте.  
Соответственно,   прирост   исцеленных/пропатченных  машин  описывается 
моделью "решетки Бете".  А вот вирус пытается вести  себя  по прежнему - 
выбирая цели  случайным  образом.  Разумеется,  это  уже   не отдельное 
дифференциальное уравнение, а их система:

    du(t)/dt = C*u(t) - рост числа излеченных/пропатченных
    dv(t)/dt = B*V(t)*(1-B*V(t))-C*u(t) - изменение числа зараженных

    Формула решения  на  одной  строчке умещается с трудом J,  поэтому
сразу график:

                        v ^
                          |       ШШ
                          |     ШШШШШ
                          |   ШШШШШШШ
                          |  ШШШШШШШШШШ
                          | ШШШШШШШШШШШШШШ
                          +----------------------------->  t

    Т.е. победа над вирусом все-таки достигается,  весь вопрос - когда,
и ответ на него зависит от отношения C/B. На практике C/B >> 1, и вирус
успевает заразить все,  до чего может дотянуться,  прежде чем  начинают
сказываться результаты лечения.
    Собственно говоря, возможности аналитических методов приближаются к
своему пределу.  Ведь в реальной жизни на распространение вируса влияют
и другие важные, противодействующие друг другу факторы:
    - вирус стартует не обязательно с единственной копии;
    - антивирус стартует много позже вируса;
    - имеется   прирост  общего  числа  машин  в  сети  за  счет  вновь
подключаемых, но изначально непропатченных машин;
    - встречается  "неэффективность"  вакцины - определеная часть машин
по разными причинам просто никогда не вакцинируется вообще;
    - наблюдается   уменьшение   числа   зараженных   машин   за   счет
отключенения перегруженных серверов;
    - имеет   место   неоднородность  пространства  IP-адресов,  адреса
разбросаны не равномерно, а "кучками";
    - и т.п.

                        2.5. Как решать дифуры

    Прежде всего  надо  иметь  в  виду,  что  в  общем  случае  решение
дифференциального  уравнения - это семейство кривых.  Накладывая на это
уравнение дополнительные ограничения (краевые,  граничные  и  начальные
условия),  мы  можем  сузить  это  семейство  до  пучка и даже до одной
единственной функции.
    Операторным методом   можно    решить    уравнение    для    случая
"беспрепятственного размножения".  Уравнение dV(t)/dt=B*V(t) приводится
(с учетом того,  что dv(0)/dt=B) к операторному уравнению (p-B)*Y(p)=1,
откуда    неизвестная    функция    Y(p)=1/(p-B).   Выполняя   обратное
преобразование Лапласа, получаем решение V(t)=1*exp(B*t).
    Уравнение Фергюльста  можно  решить  методом  разделения переменных
/4/.
    Ну а если  совсем  лениво  царапать  карандашиком  по  бумажке,  то
уравнения можно   решать   численно,   например,   методом  Эйлера  для
dv/dt=f(v,t) /3/:

               t(i+1)=t(i)+h
               v(i+1)=v(i)+h*f(v,t)
               i = 0..N
               h = маленький шаг (например, 0.1 или 0.01).

                        3. Имитационные методы

    Имитационные методы воспроизводят (обычно,  на компьютере)  "жизнь"
объекта,   системы   или   процесса  на  основе  имитации  составляющих
элементов, их отношений,  их развития во времени и т.п. На имитационных
моделях можно проводить:
    1) детерминированные эксперименты (например, так можно моделировать
столкновение шариков на бильядном столе);
    2) стохастические  (вероятностные)  эксперименты  (их  еще   иногда
называют "Монте-Карло").
    Главное достоинство имитационных методов - то,  что при  их  помощи
можно моделировать очень сложные системы и явления.  Главный недостаток
- сложность обеспечения достоверности результата.  Вообще  говоря,  при
имитационном моделировании  нужно выполнять большое число экспериментов
("прогонов"), причем  это  число  зависит  от   желаемой   точности   и
достоверности результата, и подчас оно очень велико /5/.
    Мы не будем гнаться ни за точностью, ни за достоверностью числового
результата.  Нас  будут интересовать качественые характеристики - форма
кривой размножения вируса.

              3.1. Общее описание моделирующего комплекса

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

const
    MAXNOD = 1000;  (* Количество узлов в сети *)
var
    NODES : array [0..MAXNOD-1] of byte; (* Адресное пространство *)

    Каждый узел может находиться в одном из состояний:

const
    VUL    = 0; (* Здоров и уязвим *)
    IMM    = 1; (* Здоров и неуязвим (т.е. вакцинирован) *)
    EFF    = 2; (* Заражен контрчервем *)
    INF    = 3; (* Заражен червем *)
    OFV    = 4; (* Отключен, оставшись уязвимым *)
    OFI    = 5; (* Вакцинирован, а после отключен *)
    OFE    = 6; (* Заражен контрчервем и отключен *)
    OFD    = 7; (* Заражен червем и отключен *)
    и т.д.

    Можно было,  конечно,  реализовать каждый узел в  виде  объекта  со
своим набором атрибутов и методов, но когда массивчик будет состоять не
из 100 узлов, а из 1000000, возникнут проблемы эффективности.

    Потом сделал  библиотечку  крохотных  процедурок,  манипулирующих с
этим массивом:

    InitNodes( nvul,  nimm, neff, ninf : integer) - инициализирует узлы
значениями одного из состояний;
    CheckNodes( var  nvul,  nimm,  neff,  ninf  :  integer)  - собирает
информацию о состояниях узлов;
    SearchFor(k1, k2:integer):integer - ищет индекс первого попавшегося
узла одного из указанных типов;
    Infect(n:integer) - инфицирует указанный узел;
    Fight(n, me, foe:integer) - замещает на узле вражеский вирус собой;
    UnlockAndInfect(n:integer) - снимает вакцинацию и заражает узел;
    Cure(n:integer) - лечит узел;
    CureAndImmune(n:integer) - лечит зараженный узел и вакцинирует его;
    Immune(n:integer) - вакцинирует уязвимый узел;
    и т.п.

    Ну вот, для примера, как может выглядеть одна такая процедурка:

    procedure CureAndImmune(n:integer); (*Лечить/вакцинировать*)
    begin
     if ((n>=0) and (n<MAXNOD)) then
        if ((NODES[n]=INF) or (NODES[n]=EFF)) then NODES[n]:=IMM
    end;

    А вот   пример   моделирующей   программы,  использующей  все  это.
Программа реализует сильно упрощенную модель  c  равными  и  единичными
скоростями   развития   конкурирующих  процессов.  Предполагается,  что
конкурирующие процессы стартиуют одновременно (чего на практике никогда
не  бывает).  Кроме  того,  в  модели  есть  несколько  других натяжек.
Например,  процесс лечения/вакцинирования на самом деле никак не связан
с   числом   ранее   вылеченных/вакцинированных   узлов   (а  связан  с
распространением информации  о  вирусе),  но  он  развивается  тоже  по
экспоненте, поэтому я приписал ему ту же самую "вирусную" модель. Итак:
вирус размножается, сканируя адресное пространство случаныйм образом, а
процесс лечения/вакцинирования противодействует ему целенаправленно, со
100%-ной эффективностью.

 (* (с) Constantin E. Climentieff aka DrMAD, Samara 2004-05 *)
 ...
 randomize;
 InitNodes(MAXNOD-2, 1, 0, 1);  (* Начальные состояния узлов *)
 SPEED1:=1; SPEED2:=1;          (* Скорости размножения *)
 t:=0;                          (* Модельное время *)
 repeat
  CheckNodes(n0,n1,n2,n3);
  for i:=0 to maximum(n1-1,n3-1) do begin
   if i<=n3 then for i1:=1 to SPEED1 do Infect(random(MAXNOD));
   if i<=n1 then for i2:=1 to SPEED2 do CureAndImmune(SearchFor(INF, VUL));
  end;
  t:=t+1;
 until not Finish;
 ...

                       3.2. Некоторые результаты

    Здесь приводятся некоторые  результаты  моделирования.  В  реальных
экспериментах  учитывается гораздо большее количество факторов (см.  п.
2.4),  части этих факторов присваиваются реально измеренные в  натурных
экспериментах  значения,  а  потом  варьируя другими факторами пытаются
привести имитационные результаты к натурным. Это позволяет (практически
методом  подбора)  оценить значения неизвестных факторов:  откуда вирус
стартовал,  каково первоначальное количество  зараженных  машин,  какие
узлы   надо  отключить/пропатчить  в  первую  очередь,  чтобы  погасить
эпидемию малой кровью и пр.
    Приведенные здесь результаты  практического  смысла       не  имеют
никакого,  а  служат только для иллюстрации.  Смотреть,  свернув голову
направо под углом 90 градусов. J

    Модель 1: решетка Бете, экспоненциальное размножение червя.

      1.0% Ш
      3.0% Ш
      7.0% ШШ
     15.0% ШШШШ
     31.0% ШШШШШШШШ
     63.0% ШШШШШШШШШШШШШШШШ
    100.0% ШШШШШШШШШШШШШШШШШШШШШШШШШШ

    Модель 2: червь размножается по "логистической" модели

      1.0% Ш
      3.0% Ш
      7.0% ШШ
     14.0% ШШШШ
     27.0% ШШШШШШШ
     49.0% ШШШШШШШШШШШШШ
     69.0% ШШШШШШШШШШШШШШШШШШ
     85.0% ШШШШШШШШШШШШШШШШШШШШШШ
     95.0% ШШШШШШШШШШШШШШШШШШШШШШШШ
     99.0% ШШШШШШШШШШШШШШШШШШШШШШШШШ
    100.0% ШШШШШШШШШШШШШШШШШШШШШШШШШШ

    Модель 3: антивирус эффективно лечит/вакцинирует машины, зараженные
"логистическим" червем.

     1.0% Ш
     1.0% Ш
     1.0% Ш
     2.0% Ш
     4.0% ШШ
     7.0% ШШ
    13.0% ШШШШ
    23.0% ШШШШШШ
    37.0% ШШШШШШШШШШ
    58.0% ШШШШШШШШШШШШШШШ
    72.0% ШШШШШШШШШШШШШШШШШШШ
    80.0% ШШШШШШШШШШШШШШШШШШШШШ
    76.0% ШШШШШШШШШШШШШШШШШШШШ
    56.0% ШШШШШШШШШШШШШШШ
    13.0% ШШШШ
     0.0% Ш

    Модель 4: война вирусов. Вирусы размножаются с одинаковой скоростью
и  по  одному  и тому же алгоритму и убивая врага,  замещают его собой.
Такая модель соответствует,  например,  борьбе  вирусов  Yaha  и  Sahay
(автор   -   вирмерша  Gigabyte).  Аналитическое  решение  дает  модель
логистического роста обоих вирусов до отметки 50%,  но  это  решение  -
неустойчиво.  На  практике  максимально  вероятны  либо  безоговорочная
победа одного из вирусов, либо колебательность вокруг уровня 50%. Что и
подтвержает имитационное моделирование:

 Победил первый                 Ничья             Победил второй

 1.0% Ш                         1.0% Ш              1.0% Ш
 2.0% Ш                         2.0% Ш              2.0% Ш
 4.0% ШШ                        4.0% ШШ             4.0% ШШ
 7.0% ШШ                        8.0% ШШШ            8.0% ШШШ
12.0% ШШШШ                     14.0% ШШШШ          15.0% ШШШШ
18.0% ШШШШШ                    21.0% ШШШШШШ        24.0% ШШШШШШШ
27.0% ШШШШШШШ                  33.0% ШШШШШШШШШ     35.0% ШШШШШШШШШ
42.0% ШШШШШШШШШШШ              38.0% ШШШШШШШШШШ    47.0% ШШШШШШШШШШШШ
52.0% ШШШШШШШШШШШШШШ           48.0% ШШШШШШШШШШШШШ 48.0% ШШШШШШШШШШШШШ
60.0% ШШШШШШШШШШШШШШШШ         45.0% ШШШШШШШШШШШШ  43.0% ШШШШШШШШШШШ
67.0% ШШШШШШШШШШШШШШШШШ        43.0% ШШШШШШШШШШШ   47.0% ШШШШШШШШШШШШ
71.0% ШШШШШШШШШШШШШШШШШШ       46.0% ШШШШШШШШШШШШ  45.0% ШШШШШШШШШШШШ
76.0% ШШШШШШШШШШШШШШШШШШШШ     48.0% ШШШШШШШШШШШШШ 44.0% ШШШШШШШШШШШ
79.0% ШШШШШШШШШШШШШШШШШШШШ     50.0% ШШШШШШШШШШШШШ 40.0% ШШШШШШШШШ
81.0% ШШШШШШШШШШШШШШШШШШШШШ    47.0% ШШШШШШШШШШШШ  34.0% ШШШШШШШ
85.0% ШШШШШШШШШШШШШШШШШШШШШШ   47.0% ШШШШШШШШШШШШ  22.0% ШШШШШ
89.0% ШШШШШШШШШШШШШШШШШШШШШШШ  49.0% ШШШШШШШШШШШШШ 25.0% ШШШШШШ
92.0% ШШШШШШШШШШШШШШШШШШШШШШШШ 50.0% ШШШШШШШШШШШШШ 16.0% ШШШШ
95.0% ШШШШШШШШШШШШШШШШШШШШШШШШ 47.0% ШШШШШШШШШШШШ  12.0% ШШ
93.0% ШШШШШШШШШШШШШШШШШШШШШШШШ 45.0% ШШШШШШШШШШШШ   7.0% ШШ
94.0% ШШШШШШШШШШШШШШШШШШШШШШШШ 43.0% ШШШШШШШШШШШ    4.0% Ш
93.0% ШШШШШШШШШШШШШШШШШШШШШШШШ 41.0% ШШШШШШШШШШШ    3.0% Ш
94.0% ШШШШШШШШШШШШШШШШШШШШШШШШ 49.0% ШШШШШШШШШШШШШ  3.0% Ш

    Модель 5:   червь   и   контрчервь  размножаются  логистически,  но
контрчервь не только лечит, но и вакцинирует машины.

     1.0% Ш
     2.0% Ш
     4.0% ШШ
     8.0% ШШШ
    15.0% ШШШШ
    26.0% ШШШШШШШ
    42.0% ШШШШШШШШШШШ
    59.0% ШШШШШШШШШШШШШШШ
    67.0% ШШШШШШШШШШШШШШШШШ
    75.0% ШШШШШШШШШШШШШШШШШШШ
    70.0% ШШШШШШШШШШШШШШШШШШ
    55.0% ШШШШШШШШШШШШШШ
    36.0% ШШШШШШШШШШ
    26.0% ШШШШШШШ
    18.0% ШШШШШ
    17.0% ШШШШШ
    15.0% ШШШШ
    12.0% ШШШШ
    10.0% ШШШ
    10.0% ШШШ
    10.0% ШШШ
    10.0% ШШШ
     9.0% ШШШ
     8.0% ШШШ
     5.0% ШШ
     5.0% ШШ

             3.3. Концепция контрчервя: страшилка и патчер

    Приведенные результаты  обосновывают следующий тезис:  контрчервь -
не такая уж и плохая альтернатива традиционным  методам противодействия
заразе. По  крайней  мере,  он может помочь затормозить и заблокировать
развитие заразы, пока она не будет изучена и не побеждена традиционными
средствами.
    С понятием "контрчервь" связаны некоторые обстоятельства.
    Во-первых, контрчервь   должен   быть    максимально    безвредным,
легкообнаружимым и   должен   уметь   "самоподрываться"   по  истечении
какого-нибудь определенного  срока   или   по   приходу   какого-нибудь
широковещательного сигнала.
    Во-вторых, червь  должен  быть максимально заразным и вариабельным,
лучше,  чтобы  это  был  многоплатформенный  вирус,  использующий   все
известные  на  текущий момент дырки в софте,  в том числе и уникальные,
известные  только  разработчику.  Это  связано  с  тем,   что   заранее
неизвестно,  против  кого  и  на  какой программно-аппаратной платформе
придется  воевать.  Кроме  того,  его    боевые  средства  должны  быть
максимально  примитивны,  неконкретны  и  универсальны:  принудительное
закрытие портов, убийство вражеских процессов в памяти, вычищение их из
реестра и т.п.  Патчить дырки он вряд ли сможет,  ибо на анализ дырки и
разработку патча разработчику  требуется  время,  а  контрчервь  должен
выпускаться на  свободу  немедленно  при  первых же признаках эпидемии.
    Наконец, разработкой контрчервей  должны  заниматься  исключительно
высокоморальные  и  высококвалифицированные  люди,  и  делаться все это
должно в условиях строжайшей  конспирации.  Разумеется,  правительства,
спецслужбы,  антивирусные  компании,  средства  массовой  информации  и
простые юзеры будут под разными предлогами ненавидеть  и  травить  этих
разработчиков всеми возможными способами. К этому надо быть готовым.
    Вообще, в  реальных  условиях  мне  представляются  приемлимыми  не
"вирусные войны", а совсем другие две модели использования контрчервей.
    Червь-страшилка: выпускается на волю вскоре (например,  через  пару
недель)  после опубликования какой-нибудь новой дырки в софте. Большого
ущерба  не  причиняет,  больше  пугает,  и  вынуждает  софтовые   фирмы
побыстрей разработать патч, а юзеров - побыстрей его использовать.
    Червь-патчер: выпускается  на  волю  через   достаточный   интервал
времени (например, через 2-3 месяца) после опубликования патча к дырке.
Пропатченные машины будут иммунны  к  этому  вирусу,  а  непропатченные
будут вакцинироваться вирусом принудительно.
    Лучше уж заранее почихать немножко от безвредного и контролируемого
червяка, чем потом потерять данные или даже железо в результате вспышки
"дикого" вируса,  написанного несовершеннолетним придурком или арабским
террористом.

                              Литература

    1. Эфрос А.Д.  Физика и геометрия беспорядка.  - М.: Наука, 1982. -
176 с.
    2. Захарченко    А.    Черводинамика:    причины    и    следствия.
http://az13.mail333.com/4/vh6.htm
    3. Дьяконов В.П.  Система MATHCAD.  - М.: Радио и Связь, 1993 - 128
с.
    4. Бройнштейн  И.Н.,  Семендяев  К.А.  Справочник по математике для
инженеров и учащихся ВТУЗов. - М.: Наука, 1986. - 544 с.
    5. Советов Б.Я.,  Яковлев С.А.  Моделирование систем.  - М.:  Высш.
шк., 1998. - 319 с.


(C) NF, 1998-2004