ваемые несколькими программистами одновременно, вряд ли подд-
пются проверке даже со стороны сотрудников, не говоря уже о
внешних, независимых экспертах. Итак, пользователь оказывается
перед изготовителем системы довольно беспомощным.
Остается полагаться на лиц, разрабатывающих операционные
системы для ЭВМ, пригодных для использования в стратегических
целях. Может ли государство идти на рынок, используя для стра-
тегических целей ЭВМ, операционная система которой разработана
в другом, пока еще дружески настроенном государстве? Даже если
в качестве исключения поставляется полная документация на опе-
рационную систему, включая исходные тексты. Какие проблемы
возникают, когда требуется проверить на наличие вирусов или
циклов выполнения каких-либо манипуляций большую программу (а
ведь речь идет об операционной системе), может увидеть чита-
тель, подробно ознакомившись с разделом 15.3. Но то, что сде-
лать это чрезывчайно трудно, понятно уже сейчас. О возможных
последствиях выполнения "злонамеренных" манипуляций на вычис-
лительных системах стратегического назначения любой читатель
может составить собственное мнение...
- 258 -
_13.3 Случайно возникающие вирусы
Фред Кохэн уже высказывался в своей публикации опасения
по поводу вероятности случайного возникновения вирусов. Такую
вероятность при благоприятных условиях, т.е. при длине вируса
в 1000 бит, когда 50 % всех битов уже установлены правильно,
он оценил следующим образом:
_ 500!
1000 х 500
К сожалению, Фрэд Кохен не дал обоснования этой оценки.
Тогда было бы легче выполнить такой расчет. Вероятно, он исхо-
дил из последовательных мутаций отдельного потока битов, че-
го, однако, на практике никогда не происходит, поскольку как
правило, программа не может функционировать в полной мере уже
после изменения одного единственного бита. Исходить же из 500
следующих друг за другом мутаций совершенно нереально. Важнее
ответить, какова вероятность того, что любой поток битов, с
которым манипулирует "амок" запущенной программы, случайно
совпадает с содержимым вируса.
Такая вероятность должна сильно отличаться от рассчитан-
ной Кохэном. Поскольку очень трудно представить, как прибли-
женным методом получить значение 500!, продолжим наши рассуж-
дения.
Если, как и Кохэну, исходить из длины вируса в 1000 бит,
то такому вирусу ("поток битов вируса") можно поставить в со-
ответствие некоторое рациональное числовое значение. Такое
числовое значение никак не может превысить значение 2^1000. с
этим выводом согласится всякий, кто хотя бы однажды попытался
записать в байтной переменной значение, большее 255. Значит,
вероятность того, что в области в 1000 бит точно получим коды
вируса, близка к значению, обратному 2~1000. Итак, вероятность
случайного возникновения вируса составит:
- 259 -
_1
2^1000
Это значение одназначно определено путем логических рас-
суждений. Собственно при других условиях и при той же длине
битового набора вероятность может оказаться ниже, но никак не
выше. Правда, приведенное выше значение достаточно сложно
сравнить с приведенным Кохэном значением, поскольку величину
500! очень трудно представить. Ниже будет проверяться следую-
щее утверждение:
1) _ 500! . < _ 1
1000^500 2^1000
Отдельные этапы проверки поясняются. По формуле Стирлинга
можно оценить значение n!:
n
2) InI ______
n! I I * V(2*П*n)
IcI
C учетом этого приближенного значения результат Кохена
можно представить в таком виде:
500
3) I500I
I---I
_I c I . * V(2*П*500)
1000^500
500
4) I500I
- 260 -
I---I * V(2*П*500) * _ 1
I e I 1000^500
5) _ 500^500 .* V(2*П*500)
e^500 * 1000^500
6) _ 500^500 . * V(2*П*500)
e^500 * 2^500 * 500^500
7) _ .1 _ . * V(2*П*500)
e^500 * 2^500
8) _ 1 . * V(2*П*500)
(2^e)^500
9) _ 1 . * V(П*1000)
(2*e)^500
Теперь нужно взять логарифм, чтобы получить нужный ре-
зультат.
10) _ 1 . * e^4,0262
e*846,5735
11) _ e .^ _4,0262
e^846,57
Теперь окончательно установим результат Кохэне:
- 261 -
12) _ 500 ! . ~ e^842,54
1000^500
В противоположность этому значению обратная величина наиболь
шего из представимых 1000 битами числа такова:
13) e^ -693,14
Итак, значение Кохэна отличается от обратной величины
2^1000 примерно в e^149,4 раза. Это соответствует различию
примерно в 764 х 10(64). Насколько велика эта разница, можно
увидеть, сравнив результат Кохэна со значением 1/2^1000 по ос-
нованию 10:
n1/100000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
00000000000000000000
Обратная величина 2^1000:
n1/100000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000
0000000000000
Несмотря на явлную колоссальную разницу в значениях, ве-
- 262 -
роятность случайного возникновения вируса все же пренебрежимо
мала. Если сопоставить эту вероятность со всеми находящимися в
данный момент в эксплуатации вычислительными системами, учтя
при этом скорость передачи данных, составляющую в среднем 5
Мбит/с соответствуют 4,32*10^11 переданных битов в день и ЭВМ,
работающей при совершенно нереальных предположениях о том, что
эта ЭВМ считывает и записывает данные непрерывно.
Если взять теперь среднюю вероятность возникновения ошиб-
ки на 1/10^10 бит, то получим 43,2 n двоичных ошибок в день на
компьютер. Путем умножения этого результата на число ЭВМ, от-
вечающих указанным выше спецификациям (оцененное в 10 миллио-
нов ЭВМ), получим максимум 43,2 миллиона (число с восьмью раз-
рядами) двоичных ошибок в день. Естественно, этот результат
все еще очень далек от 2^1000 число с 300 знаками).
Итак, утверждение Кохэна, что вирусы не могут образовать-
ся случайным образом, должно быть этим подтверждено. Но ре-
зультат будет выглядеть несколько иначе, если производитель-
ность средней ЭВМ считать равной 1 миллиону операций в секун-
ду. Это соответствует 8,64*10^10 операций за день на одну ЭВМ.
Если такую производительность использовать для случайной гене-
рации битового набора длиной 1000 бит, то за день могут быть
сгенерированы 8,64*10^10 случайных чисел. Тогда правильный би-
товый набор был бы найден спустя 10^290 дней. Если для такой
цели использовалось бы 10 миллионов ЭВМ, этот результат был бы
получен через 10^283 дня или спустя
100000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000
лет.
Итак, вероятность генерации вируса путем последовательной
мутации представляется практически невозможной. Правда, на
практике исходят из несколько других предпосылок. Прежде всего
возникает вопрос, чколько битовых наборов длиной в 1000 бит
- 263 -
помещается в оперативной памяти (причем должны учитываться и
перекрывающиеся области); во-вторых, нужно было уяснить, ин-
терпретируется ли и при каких условиях определенная область
оперативной памяти как область выполнимой программы. Ответ на
эти вопросы выходит за рамки настоящей книги.
Но добавляются и другие факторы: как гласит определение
вируса, вирус должен быть программой, которая копирует сама
себя в другие программы; следовательно, вирус должен иметь
возможность воздавать
файлы.Теперь читателю было бы полезно еще раз задуматься над тем, как
много его программ имеют возможность воздействовать на файлы и считы-
вать каталоги и данные.
Способность изменять данные присуща практически всем программам.
Многие программы могут к тому же считывать каталоги и файлы. значит, в
таких программах уже заложены основные функции вирусов. Для того чтобы
превратить эти программы в вирусы, нужно лишь заново организовать об-
работку таких программ. Нечто подобное делает описанный в разделе 10.4
вирус, вызывающий debug, edlin и сору. Тогда коды программы-вируса
(если отказаться от списка команд) могут занимать менее 50 байтов, а
потому программа будет иметь менее 1000 битов. По сути дела вирус мог
бы выглядеть так:
dir *. сом х 13 Вytes 104 Bits
еdlin х 1 11 Вуtes 88 Вits
debug х 2 11 Вуtes 88 Вits
tdlin n.ВАT 3 15 Bytts 120 Bits
N 3 Bytes 24 Bits
--------------------------
Gesamt: 53 Bytes 424 Bits
СR und LF werden mitgereсhnеt
Если эту игрушку еще немного модифицировать и присвоить программам
edlin и deburg новые имена, программу можно еще сократить.
dir *. com x 13 Bytes 104 Bits
- 264 -
ex 1 7 Bytes 56 Bits
dx 2 7 Bytes 56 Bits
tn.bаt 3 11 Вytes 88 Bits
n 3 Bytеs 24 Bits
----------------------------
Gesamt: 41 Bytes 328 Bits
СR und LF werden мitgtrtсhnet
Итак, установленную Кохен минимальную длину вируса можно было бы сок-
ратить более чем на 60 процентов. Естественно, это лишь пример, но
разве кто может утверждать, что изменения одного единственного бита
недостаточно, чтобы превратить его программу в вирус. Основные функ-
ции, присущие вирусу, имеются практически во всех программах. следова-
тельно, даже минимальные изменения могкт привести к фатальным последс-
твиям.
Итак: хотя расчеты Кохена, как оказалось,во много десятков раз
расходятся с нашими, это не слишком сказывается на утверждении о том,
что случайное возникновение вирусов практически невозможно. Правда,
это справедливо лишь тогда, когда начинают с нуля. Если исходить из
имеющегося программного обеспечения, в котором, как правило, уже име-
ются программы для чтения и записи файлов и пр., то нужно признать
снижение степени вероятности. Насколько в действительности велик шанс