Компьютерные науки - Учебники на русском языке - Скачать бесплатно
Ральф Бургер
Большой справочник по компьютерным вирусам
Издание второе, переработанное
1988 и дополненное
Внимание!
Воспроизведенные в этой книге схемы, методы и программы
приводятся без учета патентной ситуации. Они предназначены
исключительно для любительских целей и для целей обучения и
не могут использоваться в профессиональной деятельности.
Все схемы, технические данные и программы, прмведенные
в книге, разработаны и составлены авторами очень тщательно,
процесс воспоизведения контролировался. Несмотря на это,
полностью гарантировать отсутствие ошибок нельзя. Поэтому
фирма DATA BECKER вынуждена заявить о том, что не дает ника-
ких гарантий и не несет юридической или материальной ответс-
твенности за последствия, которые могут повлеч за собой оши-
бочные данные. Авторы в любое время готовы принять замечания
по книге и будут благодарны за них.
- 2 -
Предисловие
-----------
С момента выхода первого издания пршло уже полгода. Все
это время ситуация продолжала развиваться, и теперь, перейдя
в область политики, проблема программ-вирусов перешла в но-
вое качество.
Так как эта книга носит характер спавочника, во втором
издании - насколько это возможно - сделана попытка показать
новые разработки и учесть замечания читателей.
Как и прежде, результат моей работы по этой тематике в
течение двух с половиной лет содержит также выдержки из наи-
более известных работ других авторов и их критику.
Мне хотелось бы поблагодарить тех, без чьей поддержки
эта книга не получилась бы такой, какова она есть. Особенно
достойны уоминания ССС, С.Вернери, баварские хакеры, Др.Вен-
цель, Х.Егер, Г.Майеринг, С.Каипинг, С.Акерман, Б.Фикс,
М.Валлен, Др.Шпербер, Г.Суельман, О.Джастер и, конечно,
Хельга.
При сборе сведений об ущербе, нанесенном вирусами, чаще
всего используется информация третьих лиц. Всем - професио-
налам и непрофесионалам -, располагающим такой мнформацией и
желающим оказать влияние на содержание этой книги, следует
иметь это в виду.
Харен, март 1988 Ральф Бургер
Содержание
----------
Часть I Основные сведения о компьютерных вирусах.......
1. Что такое компьютерные вирусы? ...................
1.1 Программы в устройсвах обработки данных...........
1.2 Обработанные программы............................
1.3 Обрабатывающие программы..........................
1.4 Свойства программ-вирусов.........................
1.5 Попытка определения...............................
- 3 -
2. Исторический обзор................................
2.1 Гластность? Исследования Фреда Коэна..............
2.2 Другие исследования...............................
2.3 Отклики печати....................................
3. Чем опасны компьютерные вирусы?...................
3.1 Предание о положительных вирусах..................
3.2 Установление виновника врядли возможно............
3.3 От программного обеспечения к программной войне...
3.4 Неосведомленность готовит почву...................
4. Современное состояние исследований в области
программ-вирусов..................................
4.1 Chaos Communication Congress, декабрь 1986 .......
4.2 Хакеры в 1987 году................................
4.3 Попытки установления контактов: официальный
собеседник........................................
4.4 Секретные исследования?...........................
5. Смириться с опасностью?...........................
5.1 Высказывания на тему вирусов......................
5.2 Большая степная птица.............................
5.3 Поучительный совет................................
5.4 Наш клиент принадлежит нам........................
6. Правовой статус...................................
6.1 Общий обзор.......................................
6.2 Уголовно-правовые последствия.....................
6.3 Гражданско-правовые последствия...................
6.4 Отдельные случаи..................................
6.5 Вирусы в комерческих программах...................
6.6 Манипулирующие вирусы.............................
6.7 Вирусы "протеста".................................
6.8 Разработка, публикация и распространение..........
- 4 -
7. Примеры манипуляций..............................
7.1 Диагноз: поражение вирусом?......................
7.2 Вирусы, приводящие к фатальным ошибкам...........
7.3 Вирусы, повреждающие аппаратуру..................
7.4 Вирусы, имитирующие ошибки.......................
7.5 Цель - архивы данных.............................
7.6 Кража машинного времени..........................
7.7 Получение выгоды.................................
7.8 Шантаж...........................................
7.9 Промышленный и прочий шпионаж....................
7.10 Преймущества и недостатки паролей................
7.11 Вирусы для защиты от копирования.................
8. Возможности защиты пользователя..................
8.1 Программное обеспечение..........................
8.2 Массивы данных...................................
8.3 Операционная система.............................
8.4 Оператор.........................................
8.5 Страхование на случай неправомероного
использования ЭВМ................................
Часть II. Компьютерные вирусы в прикладных программах...
9. Формы проявления компьютерных вирусов............
9.1 Перезаписывающие вирусы..........................
9.2 Вирусы, не выполняющие функций перезаписи........
9.3 ОЗУ - резидентные вирусы.........................
9.4 Вызов программы-вируса...........................
9.5 Прочие вирусы....................................
9.6 Демонстрационные программы.......................
9.7 VIRDEM.COM.......................................
10. Различные языки программирования, применяемые
- 5 -
при составлении программ-вирусов.................
10.1 Вирусы на Ассемблере.............................
10.2 Вирусы на Паскале................................
10.3 Вирусы на Бейсике................................
10.4 Вирусы в виде командного файла...................
10.5 Вирусы в исходных кодах..........................
11. Различные операционные системы...................
11.1 MS-DOS...........................................
11.2 Вирусы в среде СР/М .............................
11.3 Сети.............................................
12. Пути паспространения вирусов.....................
12.1 Вирусы в пограмме-носителе.......................
12.2 Вирусы в системах передачи данных................
12.3 Средства изоляции................................
12.4 Программисты.....................................
13. Степень обеспечения безопастности................
13.1 Защита данных и обслуживание.....................
13.2 VIR-DOS?.........................................
13.3 Случайно-возникающие вирусы......................
14. Задания на выполнение манипуляций................
14.1 Сломать проще всего..............................
14.2 Программное обеспечение против аппаратного.......
14.3 Имитация ошибки..................................
14.4 Манипуляция данными..............................
14.5 До сих пор и не далее............................
15. Стратегия защиты.................................
15.1 Операционные системы, защищенные от вирусов......
15.2 Защита путем "Самоотсечения".....................
- 6 -
15.3 Программы поиска вирусов.........................
15.4 Защитные вирусы..................................
15.5 Аппаратная защита................................
15.6 Программа обнаружения изменений..................
15.7 Что делать, если ЭТО все же произошло?...........
15.8 Что делать со стандартами?.......................
16. Перспективы развития.............................
16.1 Каким видится программное обеспечение будущего?..
16.2 Надежно защищенный путь доступа к ЭВМ............
16.3 Контролируемы ли вирусы?.........................
16.4 Путь к искуственному интелекту?..................
Часть I ОСНОВНЫЕ СВЕДЕНИЯ О КОМПЬЮТЕРНЫХ ВИРУСАХ
В то время как в 1987 году появлялись лишь отдельные
сообщения о поражениях вирусами,в последнее время эта проб-
лема привлекает все более пристальное внимание обществен-
ности. Особое внимание привлек так называемый рождественс-
кий вирус - будто бы из Клаушталя -, за несколько дней
обошедший весь мир, и еще в феврале обнаруженный на нес-
кольких системах, а также некоторые программы-вирусы, кото-
рые были обнаружены в Израиле в конце 1987 года. Эта на-
пасть не миновала, конечно, и немецкие фирмы, производящие
программное обеспечение. Прежде, чем попытаться в последую-
щих главах прояснить этот случай, рассмотрим кратко 1987
год.
В сентябре 1987 года Хаос Компьютер Клаб (ССС) - из-
вестный вскрытием систем защиты в устройствах обработки
- 7 -
данных - опять обратил на себя внимание: телевизионный жур-
нал Панорама сообщил, что клубу якобы представлены резуль-
таты проникновения в исследовательскую ЭВМ, которые говорят
о том, что немецким хакерам удалось проникнуть во всемирную
вычислительную сеть. Наиболее известными жертвами сбоев
операционной системы, на которые способны хакеры, являются
институты, такие как Немецкий исследовательский и экспери-
ментальный институт авиации и космонавтики, Европейский
космический центр ЕСА и даже НАСА. По данным хакеров это не
распространяется пока на перехват данных. В ЭВМ "Всемирной
физической аналитической сети" введен, так называемый,
"троянский конь", задача которого заключается в том, чтобы
сохранить на будущее полученный однажды доступ к ЭВМ. Эти
институты могут считать, что они легко отделались, так как
речь идет "лишь" о хакерах,которые не заинтересованы в про-
тивозаконном корыстном использовании полученной информации.
В то время как описанная деятельность хакеров подт-
верждена многими институтами, "Франкфуртер Рундшау" от 16
сентября 1987 года сообщила, что федеральное министерство
внутренних дел и федеральная уголовная полиция ничего не
знают об этих происшествиях...
Актуальное примечание: очевидно, что в высказываниях
Федеральной уголовной полиции, опубликованных "Франкфуртер
Рундшау", речь идет о преднамеренной дезинформации. Неза-
долго перед изданием этой книги в Гамбурге конфисковали
имущество ССС.Обыск был произведен как в помещениях клуба,
так и в квартирах его членов. При этом конфисковывалось
"все, что похоже на ЭВМ".Среди прочего конфисковано также
программное обеспечение автора, которое было передано члену
ССС Штефану Вернери для проверки.
Действия против Ш.Вернери были прекращены без какой-
либо реакции прокуратуры на запрос автора и его адвоката.
Отчет Панорамы вызвал появление многочисленных откликов
в печати и возобновление ожесточенных дискуссий по поводу
защиты данных.Ежедневная левая газета TAZ в статье под заго-
ловком "Троянский конь и дремлющие вирусы" связала проблему
с компьютерными вирусами.Именно эти компьютерные вирусы на-
несли вред прессе, о чем впервые сообщил Шпигель в 1984 го-
ду.
- 8 -
Ясность все эти публикации не внесли. Среди пользова-
телей распространяются странные слухи о таинственных виру-
сах в ЭВМ. Часто полагают,что речь идет об органических ви-
русах, и уже боятся трогать чужие дискеты без перчаток и
предпочитают пользоваться почтовыми ящиками из боязни зара-
жения.По-видимому, среди пользователей ЭВМ распространилась
истерия, аналогичная страху перед эпидемией СПИДа.
Эта книга должна помочь как читателям, которые хотят
ознакомиться с этой темой, так и читателям, которые интере-
суются прежде всего программированием вирусов, предоставив
им исчерпывающую информацию по всем разделам проблемы виру-
сов.
Эта книга все же не очень удобна. Она ставит вопрос о
поиске новых путей в программировании.Компьютерные вирусы
поставили проблему, которая ждет решения силами молодых за-
интересованных программистов. Эта книга предоставляет таким
программистам всю необходимую информацию. Почти во всех об-
щеупотребительных языках программирования имеются программы
-вирусы, разработку которых следует продолжить.
Однако работа с компьютерными вирусами требует осозна-
ния высокой ответственности за возможный ущерб.Как и все
технические новшества, компьютерные вирусы имеют две сторо-
ны. Неверное использование вирусов может нанести невообра-
зимый ущерб; правильное их использование может породить но-
вое поколение ЭВМ.Эта книга позволит любому читателю
принять участие в этих разработках и внести свой вклад в
развитие систем обработки данных.
Тот, кто хочет практически и экспериментально разоб-
раться с компьютерными вирусами, очень быстро обнаружит, ка-
кие фантастически привлекательные возможности открывают
программы-вирусы.
При этом возникает вопрос:
Как, собственно говоря, оценить тот факт, что хороший
программист отправляет в путешествие свой закодированный в
двоичном коде интеллект с заданием размножаться и меряться
силой с "внешним миром"?
На этот вопрос каждый должен ответить сам. Книга отве-
та на этот вопрос не дает.
- 9 -
1. Что такое компьютерные вирусы?
Еще пять лет назад заявление программиста о том, что
ЭВМ может быть поражена "вирусами", вероятно, вызвало бы
лишь сострадательную улыбку коллег. Между тем, отношение к
этой проблеме постепенно изменяется, и не в последнюю оче-
редь,из-за большого числа не всегда квалифицированных пуб-
ликаций в различных специальных журналах. Однако и сейчас
еще многие пользователи считают, что, когда речь идет о
компьютерных вирусах, имеются в виду вирусы в биологическом
смысле этого слова.
Конечно это не так.Компьютерные вирусы - это такие же
программы, как FIBU или программа обработки текста. Однако,
такое искаженное представление о компьютерных вирусах обус-
ловило широкий спектр мнений по этому поводу - от уже упо-
минавшейся сострадательной улыбки и понимающей ухмылки до
панического страха поражения вирусами. Профессиональное об-
суждение этой темы до сих пор не проводилось. Речь шла о
"чужих дискетах", о червяках, проедающих ЭВМ, и об "аппа-
ратных вирусах, повреждающих ПЗУ".
Эта книга должна внести некоторую ясность в проблему и
послужить проводником в мир компьютерных вирусов.Книга со-
держит практические указания и много фактических материа-
лов, связанных с этими программами. Прежде всего, поясняет-
ся возникновение самого термина "компьютерные вирусы",
основанного на аналогии между биологическими и компьютерны-
ми вирусами.
-----------------------------T-----------------------------
Биологические вирусы ¦ Компьютерные вирусы
-----------------------------+-----------------------------
Нападают на специальные ¦ Вмешиваются в определенные
соматические клетки ¦ программы (все *.COM, все
¦ *.ЕХЕ...)
-----------------------------+-----------------------------
Изменяется наследственная ¦ Программа обрабатывается:
информация клетки ¦ Выполняются не те задания,
¦ которые были предусмотрены
-----------------------------+-----------------------------
В пораженной клетке ¦ В пораженной программе
- 10 -
созревают новые ¦ самовоспроизводится
вирусы ¦ программа-вирус
-----------------------------+-----------------------------
Инфицированная клетка не ¦ Одна и та же программа поража-
поражается одним и тем же ¦ ется большинством вирусов
вирусом многократно ¦ лишь однажды
-----------------------------+-----------------------------
Пораженный организм обычно в¦ Пораженная программа может в
течение длительного времени ¦ течение длительного времени
не проявляет признаков ¦ работать без ошибок
заболевания ¦
-----------------------------+-----------------------------
Не все клетки, контактиру- ¦ Программу можно сделать не-
ющие с вирусом,инфициру- ¦ восприимчивой к определенным
ются ¦ вирусам
-----------------------------+-----------------------------
Вирусы могут мутировать, ¦ Программы-вирусы могут изме-
благодаря чему они не всегда¦ няться, отчего процедуры по-
однозначно распознаются ¦ иска могут их не замечать
-----------------------------+-----------------------------
Этот перечень можно было бы еще продолжить.
Теперь читатель спросит: "Как это возможно, что прог-
рамма в ЭВМ ведет себя так же, как вирус в организме?".
Чтобы ответить на этот вопрос, необходимо ознакомиться со
структурой вычислительной системы. Так как целью этой книги
является также ознакомление любителей с вирусными програм-
мами, на последующих страницах кратко поясняется структура
вычислительной системы. Это пояснение сильно ориентировано
на операционную систему MS-DOS,однако все сказанное можно
отнести также к большей части других операционных систем.
(Читателям, знакомым с ЭВМ, следует запастись терпением на
несколько следующих страниц. Более подробные пояснения не-
обходимы также,чтобы сделать понятными специальные термины,
неизвестные широкому кругу пользователей ).
1.1 Программы в устройствах обработки данных
-----------------------------------------------------
Аппаратное обеспечение Проще говоря,речь идет обо всех
- 11 -
----------------------- частях ЭВМ, до которых можно до-
тронуться.
Программное обеспечение В отличие от аппаратного обеспечения,
----------------------- до программного обеспечения никому
не удавалось дотронуться, так как
здесь речь идет только о последо-
вательности программных инструк-
ций.
Аппаратное обеспечение ЭВМ включает в себя следующие
компоненты:
Процессор (микропроцессор/центральный процессор)
---------
Это "мозг" ЭВМ.Он обрабатывает команды программы и мо-
жет выполнять логические операции.
Оперативная память (память прямого доступа)
------------------
"Кратковременная память" ЭВМ. В рабочей памяти распо-
лагается информация, к которой процессор должен иметь быст-
рый доступ. При выключении напряжения питания информация в
ОЗУ теряется.
Постоянная память (постоянное запоминающее устройство/
----------------- ПЗУ/ЭППЗУ )
"Инстинктивные" функции ЭВМ записаны в постоянной па-
мяти.Пользователь обычно не может изменить содержимое пос-
тоянной памяти. Здесь обычно записаны важные стандартные
программы, такие как вывод на экран дисплея, управление
принтером и т.д.
Массовая память (гибкий диск/жесткий диск/стриммер)
---------------
"Долговременная память" ЭВМ. Информация, записанная в
массовой памяти, не теряется и при выключении напряжения
питания.
Внешние устройства (принтер/плоттер/монитор)
- 12 -
------------------
Все устройства, подключенные к ЭВМ.
Эти аппаратные средства можно эксплуатировать при по-
мощи программного обеспечения:
Операционная система
--------------------
Уровень пользователя. операционная система создает
программное окружение. Благодаря этому на ЭВМ с одинаковыми
операционными системами можно использовать одни и те же
программы, даже если эти ЭВМ изготовлены разными произво-
дителями. Эта переносимость программ обозначается как "сов-
местимость". Операционная система использует множество
функций или программ, хранящихся в постоянной памяти, и
предоставляет в распоряжение стандартные операции:
ввод,вывод и дисковые операции (ДОС = дисковая опера-
ционная система).
Прикладное программное обеспечение
----------------------------------
Программы, превращающие ЭВМ в средство труда. В ка-
честве примеров могут быть названы редактирование текс-
та, ведение финансового учета и сбор измеренных данных.
Программа состоит из последовательности команд процессора.
Во время работы процессор постоянно обращается к памяти,так
как оттуда он получает свои инструкции.
Исходный код или исходный текст
-------------------------------
Программа,написанная на языке программирования, опера-
торы которого могут быть напечатаны, например, на Паска-
ле, Фортране, Бейсике. Этот исходный код должен быть либо
приведен к виду, понятному для процессора, при помощи ком-
пилятора (см. ниже), либо обработан при помощи интерпрета-
тора (см. ниже).
Объектный код
-------------
- 13 -
Исходный текст, странслированный компилятором (см. ни-
же). Объектный код может обрабатываться процессором.
Компилятор
----------
Компилятор транслирует непонятный процессору исходный
текст в исполняемую программу (объектный код).
Интерпретатор
-------------
Во время обработки программы интерпретатор для каждого
оператора программы, представленной в исходном тексте, об-
ращается к таблице трансляции, а затем выполняет найденные
команды процессора.
Управление рабочей памятью осуществляет операционная
система или прикладное программное обеспечение. Распределе-
ние рабочей памяти в общем случае выглядит следующим обра-
зом:
--------------------------------¬
¦ Занято системой ¦ Старшие адреса системы
+-------------------------------+
¦ Третья прикладная программа ¦
+-------------------------------+
¦ Вторая прикладная программа ¦
¦ ¦
¦ Первая прикладная программа ¦
¦ ¦
¦ Операционная система, включая ¦
¦ функции, содержащиеся в ПЗУ. ¦ Младшие адреса системы
L--------------------------------
Как видно из таблицы, в рабочей памяти одновременно с
операционной системой могут находиться несколько прикладных
программ.
Процессор, разумеется, не может обрабатывать одновре-
менно несколько программ.
Хотя иногда кажется, что в ЭВМ одновременно выполняет-
- 14 -
ся несколько процессов (читателю наверняка знакомы часы,
которые всегда показывают время в углу экрана дисплея), на
самом деле эти процессы сдвинуты во времени, причем сдвиг
настолько мал, что незаметен пользователю. Программы, кото-
рые постоянно находятся в рабочей памяти, не будучи посто-
янно активными, называются программами, резидентными в па-
мяти.
Богатые возможности, которые предоставляют резидентные
в памяти программы,так как они являются основой для специ-
альной формы компьютерных вирусов. Очень полезным свойством
резидентных программ является отсутствие затрат времени на
их загрузку при повторном запуске. Обычная программа перед
каждым повторным запуском должна быть передана (загружена)
из массовой памяти в рабочую, на что каждый раз требуется
определенное время - время загрузки,- программа же, рези-
дентная в памяти,после однократной загрузки всегда доступна
и может быть активизирована в кратчайшее время. Активизация
таких программ осуществляется чаще всего при помощи так на-
зываемого прерывания. Одно такое прерывание (Interrupt) бу-
дет описано в следующем примере.
Вы пишете письмо. В середине предложения звонят в
дверь. Вы откладываете ручку в сторону, идете к двери и
приглашаете пришедшего войти. Неожиданно звонит телефон. Вы
просите посетителя немного подождать, идете к телефону, от-
вечаете и беседуете с абонентом. Затем Вы завершаете теле-
фонный разговор и можете посвятить себя посетителю. После
того, как посетитель уйдет, Вы вернетесь к письму и закон-
чите его. Это пример двойного вложенного прерывания поясня-
ет проблемы, возникающие при обработке прерываний, в част-
ности, задание различных приоритетов (если одновременно
звонят дверной звонок и телефон, на что реагировать в пер-
вую очередь?) и сохранение определенного состояния прерыва-
ния (что Вы делали в то время, когда зазвонил дверной зво-
нок - писали или говорили по телефону?). С этими основными
проблемами сталкивается процессор при обработке прерывания.
При возникновении прерывания обычная обработка прог-
раммы прерывается, и управление передается другой програм-
ме. Затем программа обработки прерывания определяет, вер-
нуться ли в вызывающую программу или продолжить выполнение
- 15 -
задачи.
1.2 Обработанные программы
------------------------------
Обычно каждый программист старается обеспечить рабо-
тоспособность программного обеспечения. Например он стре-
мится избежать пресловутого "зависания" ЭВМ (постоянного
повторения программного цикла без возможности из него вый-
ти). Он старается также сделать так, чтобы неверный ввод
пользователя не мог повредить массивы данных и программ.
Программирование такой защиты осуществляется особенно тща-
тельно и является одной из важнейших проблем, возникающих
при создании программного обеспечения.
Если необходимо внести изменения в программу,представ-
ленную в виде объектного кода, следует учитывать серьезные
трудности, сопровождающие этот процесс, хотя бы уже потому,
что фирмы-создатели программного обеспечения обычно не пос-
тавляют вместе с программой ее исходного текста. Эта мера
предусмотрена для защиты от несанкционированного копирова-
ния и является несостоятельной. Еще ни одна программа, ни
одна защита от копирования не устояла от "разрушения".
Несмотря на серьезные трудности, связанные с этим заня-
тием, одним из наиболее распространенных увлечений компь-
ютерных чудаков является изменение записей о защите авторс-
ких прав в нелегально скопированных или официально купленных
программах. Так как смотреть на это не очень приятно, прог-
раммисты жертвуют (или фирмы-изготовители программного обес-
печения заставляют жертвовать) свое рабочее время на то,
чтобы сделать запись об авторских правах неизменяемой. Это
осуществляется либо путем последующего опроса во время вы-
полнения программы, либо путем декодирования закодированной
цепочки символов. И все же это не отбивает охоту у любителей
вносить изменения в имеющиеся, представленные только объект-
ным кодом программы.
Инструменты, предлагаемые для этой цели, многочисленны
и очень просты. Одним из таких инструментов является так
называемый дизассемблер. Это такая программа,с помощью ко-
торой можно при на личии некоторых специальных знаний полу-
чить из объектного кода исходный текст, который позволяет,
- 16 -
во-первых, понять и выполнить программу, во-вторых, приспо-
собить ее к своим потребностям.
Используя этот инструмент, можно, например, ввести оп-
ределенные изменения в программу расчета зарплаты для обес-
печения собственной выгоды. Если такую обработку проделать
умело, пользователь программы долго не заметит никаких из-
менений.
У читателя, однако, не должно создаваться впечатления,
что такую обработку программы может выполнить любой люби-
тель. Для работы с существующими объектными кодами необхо-
димы достаточно глубокие профессиональные знания.
1.3 Обрабатывающие программы
-----------------------------------
Конечно, выполнение соответствующей обработки можно
возложить на программу. Каждая программа предназначена
обычно для изменения данных. Это относится и к редактору
текста, и к программе для подготовки счетов-фактур. Следую-
щий пример показывает, что эти изменения в массивах данных
могут выходить за пределы, представляемые и желаемые поль-
зователем:
Следующий текст сначала был записан при помощи функции
COPY операционной системы MS-DOS в файл test.txt, а затем
выведен на экран при помощи TYPE :
C:>TYPE TEST.TXT
Это тест, который показывает, сколько посторонних сим-
волов вставляет некоторый текстовый редактор в чистый ASCII
-текст.
(Dies ist ein Test, der belegt, wie viele Fremdzeichen
manche Textsysteme in einen reinen ASCII-Text einstreuen.)
Такой же текст (на немецком языке) был затем введен при
помощи текстового редактора (WordStar 2000) в документальном
формате и также при помощи TYPE выведен на экран монитора.
C:>TYPE TEST1.TXT
- WS2000 1.00 1IBMGRAPHIC 5 -
- 0 0 - -i
0 0i--^ 13^- -_ 4_- - [ A A
- 17 -
Наглядно видно, что теперь этот текст не может быть
обработан функцией TYPE. Этот эффект можно более подробно
исследовать при помощи отладчика.
Сначала текст, введенный при помощи COPY :
0100 44 69 65 73 20 69 73 74-20 65 69 6E 20 54 65 73
D i e s i s t e i n t e s
0100 74 2C 20 64 65 72 20 62-65 6C 65 67 74 2C 20 77
t , d e r b l e g t , w
0120 69 65 76 69 65 6C 65 20-46 72 65 6D 64 7A 65 69
i e v i e l e F r e m d z e i
0130 63 68 65 6E 20 6D 61 6E-63 68 65 20 54 65 78 74
c h e n m a n c h e T e x t
0140 73 79 73 74 65 6D 65 20-69 6E 20 65 69 6E 65 6E
s y s t e m e i n e i n e n
0150 72 65 69 6E 65 6E 20 41-53 43 49 49 2D 54 65 78
r e i n e n A S C I I - T e x
0160 74 20 65 69 6E 73 74 72-65 75 65 6E 2E 0D 0A 00
t e i n s t r e u e n . . . .
Ясно видно, что текст состоит из ASCII-символов, коды
которых лежат в диапазоне от шестнадцатиричных 20 до шест-
надцатиричных 80. Единственные управляющие символы, которые
были использованы,- это 0Dh и 0Ah (возврат каретки и пере-
вод строки).
Теперь посмотрим текст, введенный при помощи WordStar
2000:
0100 7F 20 57 53 32 30 30 30-FF 31 2E 30 30 FF FF FF
. W S 2 0 0 0 . 1 . 0 0 . . .
0110 FF 20 31 49 42 4D 47 52-41 50 48 49 43 FF FF FF
. 1 I B M G R A P H I C . . .
0120 FF 20 20 20 20 20 20 35-20 7F 0A 7F 1C 20 30 20
. 5 . . . . 0
0130 20 30 1C 7F 0A 7F 69 20-30 20 20 30 69 7F 7F 5E
0 . . . . i 0 0 i . . ^
0140 20 31 33 5E 7F 7F 5F 20-20 34 5F 7F 7F 5B 01 41
1 3 ^ . . _ 4 _ . . [ . A
0150 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
- 18 -
. . . . . . . . . . . . . . . .
0160 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0170 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0180 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 01 41
. . . . . . . . . . . . . . . A
0190 01 06 01 0B 01 10 01 15-01 1A 01 1F 01 24 01 29
. . . . . . . . . . . . . $ . )
01A0 01 2E 01 33 01 38 01 3D-FF FF FF FF FF FF FF FF
. . . 3 . 8 . = . . . . . . . .
01B0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
01C0 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 5B 7F
. . . . . . . . . . . . . . [ .
01D0 7F 61 37 31 61 7F 7F 5C-31 30 5C 7F 7F 5D 31 30
. a 7 1 a . . \ 1 0 \ . . ] 1 0
01E0 5D 7F 7F 62 31 31 62 7F-7F 65 31 65 7F 7F 66 31
] . . b 1 1 b . . e 1 e . . f 1
01F0 66 7F 7F 67 31 37 7F 7F-76 7F 7F 5B 01 41 01 06
f . . g 1 g . . v . . [ . A . .
0200 01 0B 01 10 01 15 01 1A-01 1F 01 24 01 29 01 2E
. . . . . . . . . . . $ . ) . .
0210 01 33 01 38 01 3D FF FF-FF FF FF FF FF FF FF FF
. 3 . 8 . = . . . . . . . . . .
0220 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0230 FF FF FF FF FF FF FF FF-FF FF FF FF FF 4B 01 06
. . . . . . . . . . . . . K . .
0240 01 0B 01 10 01 29 FF FF-FF FF FF FF FF FF FF FF
. . . . . ) . . . . . . . . . .
0250 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0260 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0270 FF FF FF FF FF FF FF FF-FF FF FF FF 5B 7F 7F 5B
. . . . . . . . . . . . [ . . [
0280 01 4B 01 06 01 0B 01 10-01 29 FF FF FF FF FF FF
. K . . . . . . . ) . . . . . .
- 19 -
0290 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02A0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02B0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02C0 01 41 01 06 01 0B 01 10-01 29 FF FF FF FF FF FF
. A . . . . . . . ) . . . . . .
02D0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02E0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
02F0 FF FF FF FF FF FF FF FF-FF FF FF FF FF FF FF FF
. . . . . . . . . . . . . . . .
0300 5B 7F 44 69 65 73 20 69-73 74 20 65 69 6E 20 54
[ . D i e s i s t e i n T
0310 65 73 74 2C 20 64 65 72-20 62 65 6C 65 67 74 2C
e s t , d e r b e l e g t ,
0320 20 77 69 65 76 69 65 6C-65 20 46 72 65 6D 64 7A
w i e v i e l e F r e m d z
0330 65 69 63 68 65 6E 20 6D-61 6E 63 68 65 20 54 65
e i c h e n m a n c h e T e
0340 78 74 7F 1F 7F 7F 03 7F-73 79 73 74 65 6D 65 20
x t . . . . . . s y s t e m e
0350 69 6E 20 65 69 6E 65 6E-20 72 65 69 6E 65 6E 20
i n e i n e n r e i n e n
0360 41 53 43 49 49 2D 54 65-78 74 20 65 69 6E 73 74
A S C I I - T e x t e i n s t
0370 72 65 75 65 6E 2E 0A 00-00 00 00 00 00 00 00 00
r e u e n . . . . . . . . . . .
приведенный текст во много раз больше введенного. Не-
которые управляющие символы, стоящие в заголовке, препятс-
твуют чтению текста при помощи TIPY, такой текст не может
быть использован какой-либо другой системой для обработки
текстов.
Однако управляющие символы стоят не только в заголов-
ке, но и в середине текста, а именно на месте верстки строк
в виде так называемых "мягких разделителей" между "текс-
- 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 Ядро вируса. Ядро вируса содержит подпрограммы и
функции, необходимые для обеспечения размножаемости.
-------------¬
¦----T-----¬ ¦
¦¦ К ¦ VIR ¦ ¦ Программа-вирус
¦L---+------ ¦
L-------------
Если эта программа запускается,то немедленно в доступ-
- 22 -
ной массовой памяти осуществляется поиск прикладных прог-
рамм. (Под прикладными программами здесь понимаются те
программы, коды которых программа-вирус должна изменить).
Если такая программа обнаруживается, осуществляется ее про-
верка на наличие инфекции. Для этого читается первая часть
найденной программы и проверяется на наличие байта иденти-
фикации "К".Наличие байта идентификации подтверждает нали-
чие инфекции.Так как уже инфицированная программа не должна
инфицироваться повторно, осуществляется дальнейший поиск
программы без острой инфекции, т.е. без байта идентификации
"К". Эта защита от многократного инфицирования необходима
для того, чтобы вирус не тратил свою "жизненную силу" на
инфицирование уже зараженных программ.
----------------------------------¬
¦ ------------------------------¬ ¦
¦ ¦ Вторая прикладная программа ¦ ¦
¦ L------------------------------ ¦
L----------------------------------
В этом случае речь идет о "второй прикладной програм-
ме". Теперь вирус передается в эту программу; при этом в
начало программы в массовой памяти помещается копия вируса.
Теперь размножение вируса завершено. До сих пор поль-
зователь мог в лучшем случае обнаружить лишь обращение для
записи к массовой памяти.
----------------------------------------------¬
¦ -----T-----T-----------------------------¬ ¦
¦ ¦ К ¦ VIR ¦ Вторая прикладная программа ¦ ¦
¦ L----+-----+------------------------------ ¦
L----------------------------------------------
Если теперь будет запущена инфицированная вторая прик-
ладная программа, сначала будет обработана программа вирус,
так как первая команда второй прикладной программы переза-
писана. Теперь вирус размножится описанным выше образом и
внедрится в третью прикладную программу.
После завершения процесса копирования могут возникнуть
серьезные программные ошибки, так как на месте части второй
прикладной программы записаны коды вируса.
Перед запуском инфицированной второй прикладной прог-
раммы:
- 23 -
--------------------------------------¬
¦ --------------------------------¬ ¦
¦ ¦ Третья прикладная программа ¦ ¦
¦ L-------------------------------- ¦
L--------------------------------------
После запуска инфицированной второй прикладной прог-
раммы:
------------------------------------------------¬
¦ -----T-----T------------------------------¬ ¦
¦ ¦ К ¦ VIR ¦ Третья прикладная программа ¦ ¦
¦ L----+-----+------------------------------- ¦
L------------------------------------------------
Теперь, после того как описан принцип действия виру-
сов, следует еще сказать о программах, которые часто путают
с вирусами.
В первую очередь следовало бы назвать программу-чер-
вяк.Речь идет о программе,которая также размножается, соз-
давая свои копии.Важнейшее ее отличие от вирусов заключает-
ся в том, что для размножения червяка не требуется
программы-носителя.Червяки "проползают" через все уровни
вычислительной системы без использования программы-носителя.
Второй тип программ, относительно которых можно спо-
рить, являются они вирусами или нет, это так называемые ло-
гические вирусы. Эти программы не только не изменяют прог-
рамму-хозяина, но и полностью уничтожают ее и занимают ее
место. Этого можно достичь, например, простым переименова-
нием: если А - вирус, а В -прикладная программа, то при пе-
реименовании А в В под именем В будет находиться вирус.
Примером третьего типа программ являются так называе-
мые "троянские кони". Основная идея этого типа программ не
менее стара, чем сам троянский конь. Принцип действия таких
программ так же прост, как и опасен. В то время как пользо-
ватель восхищается фантастической графикой, а может быть и
наслаждается музыкой из системного громкоговорителя, прог-
рамма незаметно занимается тем, что например, заново форма-
тирует жесткий диск.
1.5 Попытка определения
-------------------------
- 24 -
Прежде чем давать строгое научное определение, следует
дать описание поведения программ-вирусов, понятное читате-
лю, мало интересующемуся техникой:
Компьютерный вирус - это программа, способная помещать
свою работоспособную копию в чужие программы. Каждая инфи-
цированная чужая программа также может помещать копии ядра
вируса в другие чужие программы.
Такое определение, конечно, не удовлетворит ученого.
Однако, так как общепризнанных научных работ на тему виру-
сов нет - сама работа Коэна "Компьютерные вирусы - теория и
эксперименты" в некоторых кругах оспаривается,-здесь также
следует оставить попытки дать строгое определение. Все же
здесь нельзя не упомянуть публикацию Дортмундского универ-
ситета (Дж. Краус/1981 ). В ней очень строго определено са-
мовоспроизводство программного обеспечения, т.е. принципи-
альной основы вирусов:
"Пусть П действительная программа на языке макро
ассемблера. Если П не требует ввода и выводит или размещает
в рабочей памяти свои машинные коды (точно), то П называет-
ся (строго) самовоспроизводящейся."
Это строгое определение не может быть применено к
программам-вирусам, так как вирус не обязательно должен
(точно) воспризводиться. Достаточно, если воспроизводится
определенная часть свойств программы. Кроме того, здесь оп-
ределяется только воспроизведение собственных программных
кодов, и ничего не сказано о связи этих кодов с чужими
программами. Поэтому определение должно звучать следующим
образом:
Программу следует называть программой-вирусом, если ей
присущи следующие свойства:
1. Модификация не относящегося к программе программ-
ного обеспечения путем внедрения в него собственных прог-
раммных структур.
2. Возможность выполнения модификации не только в од-
ной программе, но, по меньшей мере, в группе программ.
3. Возможность распознавания выполненной модификации в
- 25 -
программе.
4. Предотвращение многократной модификации одной и той
же программы за счет распознавания выполненной модификации.
5. Модифицированное программное обеспечение приобрета-
ет свойства, указанные в пп.1-4.
Если программа не обладает одним иди несколькими из
этих свойств, эту программу нельзя в строгом смысле назы-
вать программой-вирусом.
2. Исторический обзор
-----------------------
Сейчас очень трудно установить, когда в первый раз за-
говорили о программах-вирусах. Еще труднее установить, ког-
да и где родилась идея создания такого типа программ -
программ, осуществляющих автоматическую модификацию и восп-
роизведение.
Математическая модель распространения инфекций извест-
на уже давно (Н.Т.Дж. Бейли; Математическая теория эпиде-
мий; Хафнер 1957 ). Хотя в США уже в семидесятых и в начале
восьмидесятых годов появлялись публикации о так называемых
"программах-червяках" и о "вирусах" (Ассоциация по вычисли-
тельной технике. Использование вирусных функций для обеспе-
чения работы виртуального АПЛ интерпретатора под управлени-
|