в виде так называемых "мягких разделителей" между "текс-
- 20 -
том" и "системой". Эти управляющие символы в тексте нужны и
важны для удобной обработки текста, однако могут очень ме-
шать при другом использовании текста.
Тот, кто не очень хорошо разбирается в проблеме обра-
ботки текстов, вероятнее всего, удивится: текст может быть
считан исходным редактором текста, но совершенно непригоден
для передачи данных (в коде ASCII ), так как содержит слиш-
ком много управляющих символов.
Компилятор также ничего не сможет сделать с текстом,
который редактировался в этом режиме. Такие изменения в
текстовых файлах, которые возникают в некоторых программах
уже тогда, когда существующий текст читается текстовым ре-
дактором, а затем опять записывается в память, являются ти-
пичными процедурами обработки в вычислительных системах.
Основываясь на таком способе ввода определенных редак-
торов текста, можно разработать редактор, который читает
текстовые файлы и в качестве полезной работы заменяет все
последовательности символов "ue" символами "u". Вероятно,
очень полезно было бы автоматически преобразовывать тексты
от устройств, в которых отсутствует умлаут. В этом случае
из Haueser получится Hauser, из Muel - Mul, а из Quellcode
получится Qullcode ?!?. Этот пример показывает, сколько
опасностей таится в обработке, которую ЭВМ выполняет самос-
тоятельно. Так, вполне разумно, если ЭВМ самостоятельно из
fuent делает funt, но совершенно бессмысленно, если она из
Quelle делает Qulle. Однако возможности программно управля-
емой обработки не ограничиваются массивами данных. Точно
также может обрабатываться объектный код программ. ЭВМ мо-
жет также не хватить времени для надежного решения, идет ли
речь о произвольном массиве данных, о программе или о дате.
С тех пор,как стали применяться ЭВМ "фон-Неймановской
структуры" внутри системы, стали принципиально неразличимы
программы и данные. В системах, работающих под управлением
MS-DOS, отличительный признак имеется лишь в имени файла.
Если Вы переименуете файл KUNDEN.DTA в WS.COM, Вы получите
вызываемую программу. (Обратите внимание: вызываемая, а не
исполняемая; если попробовать ее исполнить, наверняка прои-
зойдет сбой системы).
В программах настройки осознанно используется возмож-
- 21 -
ность обрабатывать и изменять программы как данные. Эти
программы настройки могут согласовывать настраиваемую прог-
рамму с системным окружением. Для этого пользователь должен
ответить на целенаправленные вопросы программы. Принцип де-
йствия программы настройки заключается в целенаправленном
изменении определенных параметров настраиваемой программы;
адреса этих параметров известны программе настройки. Конеч-
но, программа настройки для "Турбо Паскаля" не может заново
настроить редактор "WordStar". Однако можно написать прог-
рамму, которая будет искать в массовой памяти программу
"WordStar" и, при благоприятном исходе поиска, изменит эту
программу таким образом, что функция "сохранение текста"
будет заменена функцией "стирание текста", что является
классическим примером обработки с неприятными последствиями.
1.4 Свойства программ-вирусов
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
От уже имеющихся сведений об обработке и обработанных
программах остался лишь небольшой шаг до так называемых
компьютерных вирусов. Программы-вирусы сочетают в себе мно-
гие обсуждавшиеся выше свойства. Программа-вирус всегда яв-
ляется обрабатывающей программой, так как изменяется чужая
программа, а сама программа-вирус при этом размножается.
Как это происходит, поясняется небольшой графической схемой.
К Байт идентификации вируса. Этот байт идентификации
должен говорить о наличии инфекции, чтобы предотвра-
тить повторное инфицирование программы.
VIR Ядро вируса. Ядро вируса содержит подпрограммы и
функции, необходимые для обеспечения размножаемости.
ЪДДДДДДДДДДДД¬
¦ЪДДДВДДДДД¬ ¦
¦¦ К ¦ VIR ¦ ¦ Программа-вирус
¦АДДДБДДДДДЩ ¦
АДДДДДДДДДДДДЩ
Если эта программа запускается,то немедленно в доступ-
- 22 -
ной массовой памяти осуществляется поиск прикладных прог-
рамм. (Под прикладными программами здесь понимаются те
программы, коды которых программа-вирус должна изменить).
Если такая программа обнаруживается, осуществляется ее про-
верка на наличие инфекции. Для этого читается первая часть
найденной программы и проверяется на наличие байта иденти-
фикации "К".Наличие байта идентификации подтверждает нали-
чие инфекции.Так как уже инфицированная программа не должна
инфицироваться повторно, осуществляется дальнейший поиск
программы без острой инфекции, т.е. без байта идентификации
"К". Эта защита от многократного инфицирования необходима
для того, чтобы вирус не тратил свою "жизненную силу" на
инфицирование уже зараженных программ.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ ¦
¦ ¦ Вторая прикладная программа ¦ ¦
¦ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
В этом случае речь идет о "второй прикладной програм-
ме". Теперь вирус передается в эту программу; при этом в
начало программы в массовой памяти помещается копия вируса.
Теперь размножение вируса завершено. До сих пор поль-
зователь мог в лучшем случае обнаружить лишь обращение для
записи к массовой памяти.
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ЪДДДДВДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ ¦
¦ ¦ К ¦ VIR ¦ Вторая прикладная программа ¦ ¦
¦ АДДДДБДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Если теперь будет запущена инфицированная вторая прик-
ладная программа, сначала будет обработана программа вирус,
так как первая команда второй прикладной программы переза-
писана. Теперь вирус размножится описанным выше образом и
внедрится в третью прикладную программу.
После завершения процесса копирования могут возникнуть
серьезные программные ошибки, так как на месте части второй
прикладной программы записаны коды вируса.
Перед запуском инфицированной второй прикладной прог-
раммы:
- 23 -
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ ¦
¦ ¦ Третья прикладная программа ¦ ¦
¦ АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
После запуска инфицированной второй прикладной прог-
раммы:
ЪДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬
¦ ЪДДДДВДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД¬ ¦
¦ ¦ К ¦ VIR ¦ Третья прикладная программа ¦ ¦
¦ АДДДДБДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ ¦
АДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЩ
Теперь, после того как описан принцип действия виру-
сов, следует еще сказать о программах, которые часто путают
с вирусами.
В первую очередь следовало бы назвать программу-чер-
вяк.Речь идет о программе,которая также размножается, соз-
давая свои копии.Важнейшее ее отличие от вирусов заключает-
ся в том, что для размножения червяка не требуется
программы-носителя.Червяки "проползают" через все уровни
вычислительной системы без использования программы-носителя.
Второй тип программ, относительно которых можно спо-
рить, являются они вирусами или нет, это так называемые ло-
гические вирусы. Эти программы не только не изменяют прог-
рамму-хозяина, но и полностью уничтожают ее и занимают ее
место. Этого можно достичь, например, простым переименова-
нием: если А - вирус, а В -прикладная программа, то при пе-
реименовании А в В под именем В будет находиться вирус.
Примером третьего типа программ являются так называе-
мые "троянские кони". Основная идея этого типа программ не
менее стара, чем сам троянский конь. Принцип действия таких
программ так же прост, как и опасен. В то время как пользо-
ватель восхищается фантастической графикой, а может быть и
наслаждается музыкой из системного громкоговорителя, прог-
рамма незаметно занимается тем, что например, заново форма-
тирует жесткий диск.
1.5 Попытка определения
ДДДДДДДДДДДДДДДДДДДДДДДДД
- 24 -
Прежде чем давать строгое научное определение, следует
дать описание поведения программ-вирусов, понятное читате-
лю, мало интересующемуся техникой:
Компьютерный вирус - это программа, способная помещать
свою работоспособную копию в чужие программы. Каждая инфи-
цированная чужая программа также может помещать копии ядра
вируса в другие чужие программы.
Такое определение, конечно, не удовлетворит ученого.
Однако, так как общепризнанных научных работ на тему виру-
сов нет - сама работа Коэна "Компьютерные вирусы - теория и
эксперименты" в некоторых кругах оспаривается,-здесь также
следует оставить попытки дать строгое определение. Все же
здесь нельзя не упомянуть публикацию Дортмундского универ-
ситета (Дж. Краус/1981 ). В ней очень строго определено са-
мовоспроизводство программного обеспечения, т.е. принципи-
альной основы вирусов:
"Пусть П действительная программа на языке макро
ассемблера. Если П не требует ввода и выводит или размещает
в рабочей памяти свои машинные коды (точно), то П называет-
ся (строго) самовоспроизводящейся."
Это строгое определение не может быть применено к
программам-вирусам, так как вирус не обязательно должен
(точно) воспризводиться. Достаточно, если воспроизводится
определенная часть свойств программы. Кроме того, здесь оп-
ределяется только воспроизведение собственных программных
кодов, и ничего не сказано о связи этих кодов с чужими
программами. Поэтому определение должно звучать следующим
образом:
Программу следует называть программой-вирусом, если ей
присущи следующие свойства:
1. Модификация не относящегося к программе программ-
ного обеспечения путем внедрения в него собственных прог-
раммных структур.
2. Возможность выполнения модификации не только в од-
ной программе, но, по меньшей мере, в группе программ.
3. Возможность распознавания выполненной модификации в
- 25 -
программе.
4. Предотвращение многократной модификации одной и той
же программы за счет распознавания выполненной модификации.
5. Модифицированное программное обеспечение приобрета-
ет свойства, указанные в пп.1-4.
Если программа не обладает одним иди несколькими из
этих свойств, эту программу нельзя в строгом смысле назы-
вать программой-вирусом.
2. Исторический обзор
ДДДДДДДДДДДДДДДДДДДДДДД
Сейчас очень трудно установить, когда в первый раз за-
говорили о программах-вирусах. Еще труднее установить, ког-
да и где родилась идея создания такого типа программ -
программ, осуществляющих автоматическую модификацию и восп-
роизведение.
Математическая модель распространения инфекций извест-
на уже давно (Н.Т.Дж. Бейли; Математическая теория эпиде-
мий; Хафнер 1957 ). Хотя в США уже в семидесятых и в начале
восьмидесятых годов появлялись публикации о так называемых
"программах-червяках" и о "вирусах" (Ассоциация по вычисли-
тельной технике. Использование вирусных функций для обеспе-
чения работы виртуального АПЛ интерпретатора под управлени-
ем пользователя; 1974 и "программы-червяки" - ранние опыты
с распределенными вычислениями; 1982), в ФРГ обсуждение са-
мовоспроизводящегося программного обеспечения началось
только после появления статьи в Шпигеле в 1984 году.
С появлением публикации в таком влиятельном журнале,
как Шпигель, влиятельные круги уже не могли больше сдержи-