zhChinese    enEnglish
  ПМ-ПУ  » Разное  » Научно-популярные статьи  » Долгое детство компьютерной вирусологии

Долгое детство компьютерной вирусологии

В. Веселов
КомпьютерПресс № 11/1992 (стр. 53-58), № 12/1992 (стр. 67-70)
ISSN 0868-6157

Разговоры

Художник М. Н. Сафронов

Ну когда же оно кончится...
ViL (virusology)
- компьютерная вирусология.
Vi (virus)
- компьютерный вирус.
iVi (ideal virus)
- идеальный вирус.
aVi (auto virus)
- самомодифицирующийся вирус.

Уважаемая редакция, не совсем обычная история этого материала требует нескольких предварительных слов.

Знакомый системный программист попросил меня написать задиристое, открытое письмо для компьютерной сети, как ответ на непарламентские фигуры речи у законодателей отечественной вирусологии. Предполагалось также, что письмо оживит дискуссии по компьютерным вирусам.

С удовольствием взялся за дело. Однако вначале необходимо было разобраться: что такое паразиты вообще, и компьютерные в частности. Результат перед вами. Выводы оказались совершенно неожиданными и противоречащими, на первый взгляд, здравому смыслу.

Заказчик письма остался недоволен: выводы показались ему слишком сумасшедшими, размер будущего послания слишком большим.

Содержание статьи можно выразить в двух словах: у паразитов всех мастей в природе 'и обществе появился интеллектуальный собрат - И, причем с мощным мат. аппаратом для описания. Возможно, это послужит сигналом для объединения всех аналогичных явлений из разных дисциплин в единую науку, контуры которой я попытался представить здесь.

С другой стороны, именно междисциплинарные усилия позволяют объяснить природу и роль Vi, что невозможно сделать, исходя только из компьютерной вирусологии.

Выводы работы предполагают смену парадигмы - отход от образа вируса-врага. Реакция моего знакомого характерна для всех программистов-профессионалов, с которыми я обсуждал этот материал: от полного неприятия вначале, до дружеского сочувствия после долгих объяснений.

Умеренная темнота отдельных наукообразных мест не должна испугать возможного читателя, а задорный, ироничный тон, как мне кажется, соответствует стилю вашего журнала.

И хотя некоторые технические детали несколько устарели - работа над материалом началась год назад - он еще достаточно актуален, иначе я не стал бы его вам предлагать.

С уважением, В. Веселов.

Вместо предисловия

Перелистываю приложение к очередному AIDSTEST'у - все как и раньше, только реклама стала более навязчивой. Ловлю себя на мысли о том, что вирусология засиделась в пеленках. Если человек может позволить себе топтаться на месте, то для науки это не естественно.

О принципиально новом подходе к компьютерным вирусам - эта статья.

Современная вирусология

Прежде чем рассматривать новую модель вирусологии, кратко остановимся на том, что имеем на сегодня.

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

Тем не менее Vi не потеряли своей привлекательности, о чем говорит неиссякающий поток литературы. Несмотря на огромный практический интерес и многочисленные публикации, наука ViL никак не может окончательно родиться.

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

Большинство авторов вообще не поднимаются выше классификации, принципы которой еще не выработаны. В зависимости от пристрастий автора за основу классификации принимается длина Vi, способ атаки, эффект проявления и т.д.

Со средствами защиты дело обстоит не намного лучше. Хотя основные виды защиты определились (Детектор, Страж, Ревизор), в литературе нет объективного сравнительного анализа их эффективности. Да и какая может быть объективность, если большинство авторов рекламируют свои собственные защиты. И как следствие, популярны статьи типа: вы все неправы - покупайте мою защиту (например; Ф.Н. Шерстюк [БИТ N 2'91] ).

О перспективах развития различных типов защит, даже на ближайшее будущее, и говорить не приходится.

Сейчас стало модным начинать статьи о Vi, как партийную анкету, словами я вирусы не писал и с их авторами не знаком (например, Е. Касперский [КомпьютерПресс N 5'91]), а далее следуют подробные рассуждения о Vi и их авторах.

Клятвы на верность и самореклама - признаки незрелости вирусологии, от которой она должна со временем избавиться.

Два пути вирусологии

Современное состояние ViL не случайно, на это есть уважительная причина. Вирусы - крайние в цепочке "аппаратура - ОС - ПО". Даже самые незначительные модификации в этой последовательности могут радикально изменить классификацию Vi.

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

Дело здесь не в молодости ViL как науки. Если строго придерживаться стандартного пути развития - от анализа накопленного материала, то ViL ожидает участь науки третьего разбора. Что-то вроде вечной темы о семье и сексе: судить о ней могут даже политэкономы, а содержание зависит от прихотей монархов и развития орудий труда.

Есть другой путь, который может превратить ViL из набора прикладных знаний, плетущихся в хвосте компьютерных наук, в самостоятельную дисциплину с мощным теоретическим аппаратом.

Все данные, необходимые для этого, уже есть, только они разбросаны по разным наукам. Необходимо проделать определенную работу по их объединению.

Vi как паразит - явление не новое. Как говорится, были герои и до Агамемнона. С паразитами и в природе, и в обществе люди знакомы давно. Но алгоритмический паразит - как раз то звено, которого не хватало. Выявить закономерности для всех видов паразитизма (биологического, социального, компьютерного) и спроецировать их на ViL - дело техники.

Основы паразитизма

Что же может быть общего у бактерии, мафиози и отрывка кода для ЭВМ?

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

Действительно, в государстве преступность существует благодаря незамысловатой схеме: до бога высоко, до царя далеко. Многочисленные промежуточные эшелоны власти управляют обществом в целом, но контролировать действия каждого члена очень сложно. Недаром говорят о правосудии Pede Poena claudo - хромоногая, то есть медлительная, кара.

Распространение паразитов через руки (например, при рукопожатии) обусловлено тем, что рука управляется через несколько уровней посредников (нервный, мышечный, кожный, клеточный и т.д.). Каждый следующий уровень управления, выполняя приказы предыдущего, имеет некоторую свободу действий, которая и дает паразитам шанс на существование.

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

Обычный пользователь управляет ЭВМ тоже, через уровни-посредники. Цепочка "код (ассемблер) - ОС - программы - оболочки" облегчает работу пользователя. Однако за удобства приходится расплачиваться: любой из перечисленных уровней может стать нишей для соответствующих типов Vi.

Воистину, сам себе лучший слуга: вместе с исполнителями рискуешь получить и паразита.

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

Неполнота уровня управления - это что-то вроде развилки дорог. Исполнитель может выбрать любую из них. Если возможностей слишком много, на исполнительном уровне начинаются процессы самоорганизации, то есть появляются паразиты.

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

Не следует понимать это так, будто самоорганизация обязательно начинается с молекулярного уровня. Если появляется возможность существовать за чужой счет, желающие всегда найдутся, и не обязательно это будут молекулы.

Если попытаться ответить на вопрос: паразиты - это добро или зло, то получится удивительная картина. Оценка роли паразитов будет зависеть от того, какая система-хозяин рассматривается.

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

Это позволяет объяснить отсутствие эффективных механизмов защиты от паразитов у большинства видов (а у некоторых видов млекопитающих даже приспособленияя, облегчающие паразитизм).

В обществе картина повторяется. На уровне отдельно взятого нашего Отечества в период застоя предприниматели (с официальной точки зрения) - паразиты, мешающие идти к светлому будущему. На уровне же мирового сообщества к бизнесу отношение противоположное. В государстве бывшие разбойники иногда становятся опорой престола, как казаки или корсары. Большинство политических и религиозных движений начинались как незаконные, то есть с точки зрения государства как паразитические.

Понятно, что с точки зрения системы-хозяина, паразит он и есть паразит: отбирает с трудом добытые ресурсы, мешает развитию и т.д. Однако на уровне сообщества систем роль паразитов, как мы знаем, иная.

Если члены сообщества прошли "проверку паразитами" (то есть не имеют значительных дефектов в структуре управления), вся совокупность будет более устойчивой.

Это все равно, что собирать дом из крепких проверенных кирпичей: хотя и дольше, чем из первых попавшихся, зато надежнее. В противном случае быстро возведенное здание может рухнуть при нетривиальном стечении обстоятельств, например, при одновременном закрывании нескольких дверей и одной форточки.

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

Таким образом, паразитизм является стабилизирующим фактором для систем-сообществ, состоящих из равноправных членов.

С точки зрения стороннего наблюдателя, наличие паразитов в системе показывает ее недостатки и возможные направления развития.

Например, СПИД вскрыл недостатки иммунной системы: несовершенство структуры управления делает ее беззащитной перед собственными паразитами. А характер экономической преступности в годы застоя позволял судить о нашем будущем еще тогда.

Что же приобрела ViL в результате общесистемных рассуждений? Чтобы ответить на этот вопрос, необходимо сначала определить сам предмет разговора - Vi.

Определение Vi

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

Иногда за основу определения просто берется одно из свойств Vi, которое представляется автору наиболее значимым: скрытность (И. Моисеенков), вандализм (Н. Безруков), возможность внедряться в программы (Ф. Коуэн) и т.д.

Некоторая преемственность все же наблюдается. Большинство определений в отечественных публикациях являются просто перепевами определения Коуэна. Из публикации в публикацию в различных модификациях кочует маленький филологический шедевр западного исследователя: ...копии, не обязательно совпадающие с оригиналом... (Е. Касперский). Доверчивость наших авторов могла бы внушать уважение, если бы не внушала тревогу.

В современной литературе определение Vi пока выполняет функции декоративного украшения статей, а не инструмента исследований, что отражает общее состояние ViL.

Формулировка определения потребует некоторых усилий, которые, впрочем, быстро окупятся.

Рассмотрим систему, состоящую из компьютеров и пользователей, а также множество алгоритмов (A) для данной системы, обладающих следующим свойством: возможным результатом работы любого алгоритма из A является создание алгоритма, принадлежащего A. Элемент из A будем называть идеальным Vi (iVi - ideal Vi).

Может показаться, что такое определение - тавтология (Vi есть Vi), но это не так. Математики называют подобные конструкции рекуррентными определениями. Достаточно только указать, что данное множество алгоритмов не пусто. Но об этом, наверное, знает каждый читатель. (Например, Vi, которые не модифицируют своею кода при работе, то есть порождают самих себя.)

Кроме iVi, которые могут порождать себе подобных до бесконечности, существуют Vi, размножающиеся до выполнения определенного условия (число делений, дата и т.д.), при котором возможно самоуничтожение, (вместе с содержимым диска), и следовательно, формально не удовлетворяющие определению iVi.

Такие Vi получаются, как правило, путем добавления к iVi условия и алгоритма проявления. Определение, обобщающее свойство iVi и Vi с размножением по условию, включает в себя понятие совокупного числа потомков, а также разумного критерия для оценки опасности такого числа в конкретных условиях. Так как это определение слишком громоздко и не добавляет ничего интересного по сравнению с определением iVi, оно здесь не приводится. К тому же именно алгоритм проявления Vi (в отличие от алгоритма размножения) сильно зависит от психологии его создателя (чувства юмора, степени извращенности, глубины обиды...), и поэтому интереса не представляет.

Таким образом, говоря по-простому, Vi - это алгоритм для системы ЧЕЛОВЕК + ЭВМ, способный порождать себе подобных достаточное число раз.

Любопытно, что понятию Vi в приведенном выше смысле соответствует сумасшедший оператор, который тайком распространяет (копирует) какую-либо программу, при этом основная часть алгоритма такого Vi находится в голове оператора. Как ни парадоксален этот пример, известный Vi "Новогодняя елка" работает очень похожим образом: оператор САМ, по вежливой просьбе Vi, запускает его на исполнение.

Здесь уместно сделать несколько замечаний.

Нельзя ставить знак равенства между компьютерным паразитом вообще и Vi в смысле данного определения. Возможность размножаться не главное для паразита, так как есть и другие пути самоорганизации, например, программа, которая в результате ошибки постоянно увеличивает свою длину, то есть строит свои собственные независимые структуры. Аналог - раковая опухоль, которая другим организмам не передается, но для организма-хозяина является паразитом.

С другой стороны, возможно применение вирусных программ для оптимизации работы сетей, защиты от Vi и других полезных целей, что не совместимо с понятием паразитизма.

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

Главная особенность данного определения, в отличие от остальных, переход к системе ЧЕЛОВЕК + ЭВМ. Это не догматическое исправление, навеянное присутствием человека возле машины. Как будет показано далее, противоречие между двумя компонентами этой системы и породило Vi. Противоречие между декларативным языком человека и процедурным языком машины.

Причины возникновения и перспективы развития Vi

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

Вся прелесть морализации в ее доступности. Типичная поучительная сентенция делать Vi - все равно, что мочиться в лифте - то ли о воспитании молодежи, то ли о неустроенности быта. Кажется, если покрепче обозвать - и объяснять нечего. Недостаток подхода - полное непонимание того, что происходит, и ограниченный диапазон действий (можно лишь ругаться и писать защиты от все новых и новых Vi).

Как это часто бывает, если отделить науку от эмоций, открываются механизмы явлений, мало связанные с культурой и воспитанием.

Язык ЭВМ (машинный код или ассемблер) оказался настолько неудобен для человека, что для нормального управления ЭВМ пришлось создать несколько промежуточных уровней: ОС, языки высокого уровня, оболочки.

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

В современных персоналках воображаемая лента (машины Тьюринга) достигает длины сотен километров (с отверстиями через 1 см) и движется со скоростью многих километров в секунду. Понятно, что человек не может без посредников управлять такими процессами. А раз появляются посредники, то необходимое условие для существования паразитов соблюдено.

Как показывает опыт, минимальная длина самораспространяющегося алгоритма составляет 100-1000 байт в зависимости от типа ЭВМ (не для сетей). Этого достаточно для существования Vi, так как длина большинства прикладных программ на 2-3 порядка больше, и затеряться в таком объеме не сложно. (Полная формулировка достаточного условия выходит далеко за рамки статьи. Здесь придется ограничиться небольшим замечанием о соотношении длин.)

В системе ЧЕЛОВЕК + ЭВМ изначально существовал огромный разрыв между языком человеческого общения и языком ЭВМ, порожденный архитектурой Неймана-Тьюринга. В процессе развития разрыв постепенно заполнялся промежуточными уровнями, которые образовали многоярусную экологическую нишу; при этом каждый уровень образует нишу для соответствующего типа Vi.

Очевидно, что максимальные возможности для Vi предоставляет самый нижний уровень управления ЭВМ (машинный код). Вирусы, написанные на ассемблере, составляют подавляющее большинство известных Vi. При этом для системы, состоящей из нескольких подсистем ЧЕЛОВЕК + ЭВМ (например, компьютерная сеть), язык самого низкого уровня, на котором еще может быть написан Vi, должен удовлетворять добавочному условию - быть одинаковым для всех машин сети.

Таким образом, авторы Vi выполняют лишь повивальные (как сказал бы классик) функции, то есть только помогают Vi появиться на свет, окрашивая в меру своих способностей этот процесс в субъективные тона. Основная же причина появления Vi - принципиальные отличия языков человека и ЭВМ.

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

Разработка новых технологий общения человека и ЭВМ (экспертные системы, искусственный интеллект) направлена на создание языка высокого уровня, близкого к языку человеческого общения, и вытеснение языков более низкого уровня, а значит на подрыв самих основ существования Vi. Из сказанного следует, что через несколько десятилетий ViL как дисциплина о Vi низкого уровня (а возможно, и об алгоритмических Vi вообще) перестанет быть актуальной.

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

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

Vi - это хорошо или плохо?

Как указывалось ранее, оценка роли паразита зависит от выбора системы координат. С точки зрения отдельной ЭВМ, вывод о вредоносности Vi напрашивается сам собой. Не нужно много усилий, чтобы превратить его в абсолютную истину.

Стараниями лихих вирусологов идея о злом Vi, который портит полезные файлы, легко проникла в сердца и кошельки большинства пользователей.

Однако существуют и стратегические проблемы, связанные с развитием информационной индустрии как единого организма.

Vi имеют непосредственное отношение к глобальной устойчивости сложных систем, состоящих из людей и машин. Без решения вопросов, которые вскрыли Vi, невозможны устойчивая работа и нормальное развитие таких систем. Если бы эти вопросы не были поставлены авторами Vi сейчас, они бы возникли без помощи человека позже, например на этапе автоматической разработки программ.

При объединении отдельных машин в большие сообщества роль Vi не так очевидна и требует дальнейших исследований. Но вместо того, чтобы лишний раз проверить: а так ли страшен Vi, как его рисуют западные коллеги, мы занялись любимым российским делом - воспитанием.

За рубежом рано или поздно будут по достоинству оценены созидательные возможности Vi. Со временем к этому мнению присоединятся и наши исследователи. Но будет неплохо, если в нашей полудикой компьютерной стране мы сможем проявить самостоятельную мудрость и терпимость, а не действовать по принципу: все, что Запад не любит, - мы ненавидим.

Защита: ближайшая перспектива

Создание новых технологий общения - дело будущего, а эффективные методы защиты от Vi нужны уже сейчас.

Рассмотрим более подробно развитие средств защиты при условии неизменности системы ЧЕЛОВЕК + ЭВМ, то есть при условии существования языков различного уровня. Такое приближение хорошо описывает современный этап и ближайшее будущее ViL.

Сценарий развития при таких условиях хорошо известен для биологических и социальных систем: какие бы громкие победы ни одерживали карательно-исправительные органы, паразиты возрождались еще более совершенными, раскручивая новый виток борьбы "ПАРАЗИТ-ЗАЩИТА". При этом защитные механизмы постепенно выделялись в отдельную систему.

Современные средства защиты развиваются по трем основным направлениям: Детектор, Страж, Ревизор.

Обнаружение вируса по его отрывку (Детектор) - наиболее простой и эффективный на сегодня метод. Однако для этого метода существует разумный предел числа распознаваемых вирусов, после которого он начнет кидаться на прикладные программы с подозрительными кусками (аналог аллергии после большого числа прививок) или просто станет неудобен из соображений времени работы или занимаемой памяти. Развитие самомодифицирующихся Vi быстро исчерпает возможности детекторов.

Обнаружение Vi по принципу функционирования (Страж). Данный метод является обобщением предыдущего и преемником его недостатков. Именно этот путь богат всяческими "панацеями" и "абсолютными защитами", и именно на него многие возлагают надежды успешной борьбы с Vi. Метод более перспективен (не имеет предела в числе распознаваемых Vi), но он не искореняет зла, а лишь стимулирует создание Vi, использующих новые принципы. С другой стороны, не существует принципов функционирования Vi которые не могла бы использовать обычная программа, что делает недостоверным идентификацию Vi этим методом.

Данный метод напоминает попытки на заре криминалистики выявлять потенциальных преступников по анатомическим особенностям (теория Ломброзо). Однако очень скоро выяснилось, что низкий лоб и большая челюсть есть далеко не у всех преступников. И наоборот, такие криминальные (по теории) приметы может иметь милейший человек, который и мухи не обидит.

Обнаружение Vi по изменению содержимого зараженного файла или сектора на диске (Ревизор). Данный метод - крайний случай предыдущего. Из всех принципов функционирования Vi выбирается самый общий - изменение содержимого файлов при их заражении. Это самый радикальный метод, однако и он не является ни панацеей, ни самым эффективным на сегодня. Общая проверка всех файлов на диске занимает очень много времени. Иногда время проверки можно сократить, используя внутрипрограммную самопроверку или резидентного ревизора. Но в первом случае увеличивается длина каждой программы, а во втором снижается надежность контроля, а значит, теряется основное преимущество этого метода. Главный недостаток - отсутствие гарантии обнаружения Vi даже при загрузке с системной дискеты - при любом разумном алгоритме контроля можно подобрать способ заражения, не изменяющий контрольные параметры файла. Тем не менее у Ревизора есть важное преимущество: если Детектор и Страж работают по принципу исключения "подозрительных" программ (ориентация на приметы "чужих"), то Ревизор основывается на распознавании "лояльных" программ (проверяет приметы "своих").

Несложно оценить основные виды защит в терминах неполноты уровней управления.

Из астрономического количества возможных Vi Детектор налагает запрет всего на несколько сотен отрывков кода. Ширина вирусной ниши остается практически неизменной, так как она пропорциональна общему количеству вариантов, следовательно, не уменьшается и частота появления новых Vi. Детектор не затрагивает уровни управления, что сильно упрощает его создание. Этим можно объяснить и его популярность, и бесперспективность.

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

Ревизор в идеале отсекает все посторонние варианты записей, минимизируя таким образом ширину ниши для Vi. Если обеспечить ревизию не только содержимого диска, но и действий загружаемых программ, то неполнота уровней управления станет еще меньше, так как отпадут варианты сбоев и ошибок в программах.

Рассмотрим все сказанное более подробно.

Самым принципиальным средством в борьбе с Vi является ликвидация языков нижнего уровня. При этом речь идет не о естественном отмирании таковых вследствие развития системы ЧЕЛОВЕК + ЭВМ, что не входит в наше приближение, а об искусственном создании языка более высокого уровня даже в ущерб, работе ОС.

Современные средства защиты сформировались в условиях относительно небольшого числа Vi. При увеличении числа Vi и скорости их возникновения гоняться за каждым "чужим" в отдельности будет очень накладно. Гораздо проще создать эффективные процедуры распознавания "своих". Такие процедуры и составят псевдоязык более высокого уровня. То есть программы при получении управления будут в определенной форме передавать свои нестандартные контрольные параметры, а возможно, и процедуры их проверки, или сама ОС будет иметь свою.

Это напоминает диалог ОС с драйвером устройства, но не по содержанию, а по тому вниманию, которое оказывает ОС драйверу по сравнению с программой. При этом создание уровня как такового обеспечивается, в отличие от современных ревизоров, нестандартностью проверки для каждой программы (или для любой ОС). Действительно, если ревизор подсчитывает, например, побайтную контрольную сумму, то легко представить многоступенчатый Vi, который не изменяет ни контрольную сумму файла (благодаря подбору байтов в своем буфере), ни длину файла. Подделка станет затруднительной, если каждая программа (или каждая ОС) будет иметь свою процедуру счета контрольной суммы, которая может меняться со временем.

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

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

Это соответствует, например, введению паспортной системы, которая не ликвидирует преступность, но уменьшает ее экологическую нишу. При этом возникают новые типы преступлений, связанные с верификацией личности (подделка, кража документов и др.).

Естественно, что следующий виток борьбы Vi-ЗАЩИТА будет раскручиваться вокруг контрольных параметров, удостоверяющих "личность" программы.

Кризиса средств защиты, о котором так много говорили, не видно. Защита (пока) намного сильнее Vi. Трудности появятся при переходе от детекторов к другим, не отработанным еще методам. Готовиться к этому нужно уже сегодня.

Vi: ближайшая перспектива

Спустимся еще на одну ступеньку временного масштаба и рассмотрим более подробно тенденции развития Vi на ближайшее будущее. То есть будем считать, что методы защиты от Vi не будут принципиально меняться еще долго. И рассмотрим, к каким Vi это может привести.

На начальном этапе, при отсутствии надежной защиты, возможности распространения Vi определялись их универсальностью (способностью поражать различные виды файлов) и маскировкой своего присутствия от оператора, что стимулировало развитие Vi в основном по этим двум направлениям.

Однако набирающая обороты индустрия защиты изменила приоритеты в развитии Vi. Действительно, для разработки Vi с тотальной маскировкой (Стелс) или Vi, поражающих наряду с традиционными, например, еще и OBJ-файлы, требуется гораздо больше времени, чем для создания соответствующего детектора. С другой стороны, универсальность и маскировка создают лишь хорошие начальные условия для Vi. Дальнейшее развитие эпидемии определяется временем создания эффективной защиты. Поэтому получат преимущество Vi, максимально затрудняющие разработку защиты.

Противодействие защите может осуществляться путем применения новых принципов атаки, самошифровки, антиотладочных средств и т.д. Серия 'Yankee Doodle' - характерный пример такой тактики. На коротком отрезке кода автор сумел разместить, кроме всего прочего, защиту от трассировки, самовосстановление кода, подчинение ранних версий Vi более поздним. Оригинальный (для своего времени) метод нахождения адреса 21 прерывания, размещение в старших адресах оперативной памяти позволило ему обойти большинство резидентных защит. Тем не менее, создание детектора для 'Yankee Doodle' не представляет собой более сложную задачу, чем для других Vi. Что показывает блеск и нищету Vi с подобной тактикой противодействия защите.

Принципиальные трудности создания защиты, ориентированной на приметы "чужих", вызовут самомодификацию кода и алгоритма Vi, следовательно, именно таких Vi и следует ожидать в перспективе.

Под самомодификацией кода подразумевается возможность при получении управления Vi изменения кода своего тела с целью уменьшения вероятности обнаружения себя по отрывку кода. Например, случайные вставки кода, не меняющие алгоритма Vi (прибавить ноль, отнять ноль, вставить инструкцию Nop - нет операции и др.), сделают невозможным надежное детектирование.

Простейшие самомодифицирующиеся Vi (aVi - auto Vi) уже появились (КомпьютерПресс N 6'91). Пока они не вызывают особых трудностей при детектировании, но лиха беда начало. При этом длина aVi невелика: 1-2 Кбайта - в несколько раз меньше, чем у Стелс Vi, что говорит о потенциальных возможностях aVi.

Простейшая самомодификация кода, описанная выше, является скорее одним из способов самошифровки, неудобным для детектирования, чем механизмом приспособления. Однако реальна и самомодификация алгоритма, то есть создание различных вариантов Vi в зависимости от условий, в которые он попал (возможности машин, особенности пользователя, виды защит). Пользователь, вооруженный защитой, как бы сам выберет наиболее приспособленный вариант Vi. Не исключена "борьба" между модификациями Vi c аналогичной целью.

Интересно, что механизм создания модификаций (даже вопреки желанию авторов Vi) уже существует: как правило, новый Vi стараниями "соавторов" обогащается изменениями и дополнениями и появляется в нескольких вариантах. Эффективность такого механизма ничтожно мала, но он является моделью самомодифицирующихся Vi.

При увеличении числа различных модификаций до 100 000 эффективное детектирование будет невозможно, не помогут также сети быстрого оповещения о вирусной опасности, если новые Vi появляются 1 раз в минуту.

Таким образом, наряду с тенденциями универсальности и маскировки, основным направлением развития Vi нового поколения будет противодействие созданию средств защиты. Логическим завершением такого процесса станут aVi.

Необходимость появления и расцвета aVi следует из анализа взаимодействия Vi-3AЩИТА. Любопытно, что в биологии есть полный аналог этого процесса. Нишу, в которой не смог удержаться один вид, занимает другой, менее развитый, но мутирующий с большей скоростью (правило экологического дублирования). Примером может служить СПИД, который сменил вирус гриппа, потесненный человеком. Частота мутаций вируса СПИДа на 1-2 порядка больше, чем у гриппа.

В нашем случае сложные, с развитой системой маскировки Vi, сменит маленький, но более мутабельный aVi. Если считать, что новая модификация обычного Vi появляется 1 раз в месяц, а aVi - 1 раз в час (например, при каждом запуске зараженной программы), то частота мутаций возрастет на 2-3 порядка.

Заключение

Эволюция отношения к Vi и их авторам аккуратно повторяет предрассудки из истории науки и общества. Однако многие явления в обществе, изначально считавшиеся вредными, впоследствии оказывались прогрессивными. И дело не в том, что шайка разбойников может в будущем оказаться политической партией и наоборот, а в том огромном вреде, который может принести поверхностная и варварская оценка явления. Грустная история нашей Родины - хорошее тому подтверждение. В этом смысле уже не так забавно выглядят наши вирусологи, ведущие яростную борьбу за чистоту компьютерных рядов.

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

Изменение отношения к Vi может радикально повысить качество защиты.

Легализация авторов Vi, открытое обсуждение темы, организация конкурсов вирусных программ позволят привлечь авторов Vi к созданию защиты.

Часто пугают тем, что публикации вирусного кода стимулируют повсеместное создание новых Vi путем незначительных переделок. Это отчасти справедливо при зачаточном состоянии средств защиты и примате Детектора (изменения в сигнатуре Vi делают его невидимым для Детектора). С появлением Vi следующего поколения проблема отпадет сама собой. Лучше полагаться не на цензуру, а на надежную защиту.

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

Попытки написания Vi "дилетантом-варваром" будут просто бессмысленны, так как этим будут заниматься профессионалы.

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

Цель всего предыдущего изложения - показать, что старинную романтическую схему "обнаружение паразита - вечный бой" можно заменить на более современную: "планирование - использование". Хотя бы в ViL.

Автор будет рад, если ему это удалось.