Maximize
Bookmark

VX Heaven

Library Collection Sources Engines Constructors Simulators Utilities Links Forum

Математические аспекты компьютерных вирусов

Игорь Карасик
Компьютер Пресс N 10/1992 (стр. 51-56), N 11/1992 (стр. 59-64)
ISSN 0868-6157
Октябрь 1992

1
[Вернуться к списку] [Комментарии]

Компьютерные вирусы

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

Причина скрыта, но результат хорошо известен.
Овидий
Невежество - не блаженство.
Это - самоубийство.
Ф. Коуэн

Обращаясь к феномену компьютерных вирусов, давайте зададимся несколькими естественными вопросами:

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

Что происходит?

Если попробовать в двух словах описать нынешнюю ситуацию, придется констатировать следующее: списки известных вирусов только для популяции IBM-совместимых компьютеров превышают 600, списки троянских программ, временных бомб и другого "грязного" обеспечения - в несколько раз больше; для других популяций персональных компьютеров известны десятки вирусов и соответственно сотни "грязных" программ.

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

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

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

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

Человеческие стороны вирусного феномена

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

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

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

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

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

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

Математические аспекты вирусного феномена

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

Мы решились высказать столь рискованную точку зрения, опираясь на математические факты.

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

К сожалению, имеется дефицит теоретических моделей и исследований феномена компьютерных вирусов. Из современных работ, посвященных теоретическим аспектам вирусной проблемы, наибольшей известностью пользуются прежде всего пионерские работы Ф.Коуэна. Менее известны очень математичные работы Л. Адлемана и статьи Вильяма Доулинга (William F. Dowling).

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

Более полная и адекватная абстрактная модель компьютерного вируса была предложена Леонардом Адлеманом (Leonard M. Adleman). Работа посвящена исследованию фундаментальных свойств компьютерных вирусов. Проведена теоретическая классификация в рамках абстрактной модели вирусов (непохожая на классификации вирусов программистами-практиками, но объединяющая троянские программы и вирусы). Теоретически рассматриваются вопросы возможности детектирования вирусов, и, результаты этого рассмотрения оказываются малоутешительными: ответ на вопрос о возможности опознания произвольного вируса - отрицательный. В теории Адлемана эта задача неразрешима. Модель, положенная Адлеманом в основу своего исследования, не охватывает всех свойств, которые уже наблюдаются у реально существующих вирусов. Это отмечает и сам Адлеман, намечая пути дальнейшего развития исследований. С момента появления работы Адлемана реальная ситуация еще больше осложнилась.

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

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

Практические выводы из теоретических результатов

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

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

Результаты Адлемана говорят с том, что вирусы могут быть устроены очень сложно и задача детектирования и выделения вирусов в общем неразрешима - это творческое занятие в каждом отдельном случае.

Статьи Доулинга наводят, однако, на размышления о невозможности универсальных программ, как вирусных, так и антивирусных (вспомним, что в начальном курсе математической логики для программистов так или иначе упоминается невозможносп написания программы, которая создавала бы все другие программы). Точно так же возникают мысли об универсальности операционной системы по отношению к исполняемым в ее среде программам. Нетрудно привести примеры тривиальных программ, которые не работают ни в одной из "разумных" операционных систем (UNIX, DOS, OS/2): например, программа, которая только и делает, что запускает еще одну свок копию на исполнение. Эта тривиальная программа, конечно, не вирусная, но что-то бессмысленное в примере содержится.

Таким образом, трудность состоит не в написании вируса, а как раз в обратном: в том, чтобы вирус не написать. Поскольку для достаточно сложных автоматов способность к самодеструкции проявляется в первую очередь в способности к неконтролируемой саморепликации (одно из самых главных свойств вируса!). Более того, "вирусные" по существу своему идеи используются при создании многочисленных защитных оболочек (некоторые защищают от вирусов, другие - от несанкционированного копирования, - статья Доулинга обратила внимание на идентичность подхода в создании вирусов-антивирусов). Различные программы сжатия исполняемых файлов (lzexe, pklite lzcom) так или иначе используют идеологию, которая сходна с вирусной.

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

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

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

Вирусы вездесущи?!

Находит ли столь пессимистическая точка зрения подтверждение в реальном мире или это лишь теоретические рассуждения?

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

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

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

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

В одной из "вирусных" книг приведен пример вируса, написанного на языке командных файлов DOS с привлечением минимальных дополнительных средств: редактора EDLIN и отладчика DEBUG. В журнале Computеrs & Security обсуждалась возможность существования особого вида вирусов - макровирусов, которые, по словам редактора журнала д-ра Гарольда Хайленда, могут быть написаны в среде самых разных прикладных пакетов, позволяющих пользователям писать свои собственные макрокоманды: электронные таблицы, интегрированные пакеты, СУБД, развитые текстовые редакторы. В среде Lotus 1-2-3 такая вирусная макрокоманда, по словам Хайленда, была "успешно" написана. Эта информация - важное дополнение к уже продемонстрированной близости нормального программного обеспечения (защита от копирования, сжатие программ) и вирусов, показывающая, что теоретические результаты фактически уже реальность.

Вирусы в популяции Macintosh не столь многочисленны, как в среде IВМ-совместимых машин, но все-таки и в этой популяции число известных вирусов (nVIR, Scores, Modm) измеряется десятками; случаются эпидемии. И, конечно же, в популяции Macintosh существуют макровирусы хотя бы потому, что часть прикладных пакетов разработана параллельно и для популяции Macintosh, и для популяции IBM-совместимых компьютеров.

В популяциях персональных компьютеров AMIGA, ATARI процветают свои инфекции. Естественно, что разнообразие вирусов пропорционально популярности популяции компьютеров (эффект массовости).

К сожалению, компьютерные вирусы и вирусные эпидемии не являются привилегией мира персональных компьютеров. Всем, наверное, памятны сообщения о параличе американской компьютерной сети. Виновником оказался вирус (профессионалы, правда, называют такие вирусы в силу особенностей их работы червяками). Так вот, червяк поражал самые что ни на есть настоящие компьютеры: SUN-2, VAX, MicroVAX, работавшие под управлением очень популярной (фактически являющейся промышленным стандартом) операционной системы UNIX, при разработке которой было уделено достаточно внимания вопросам разграничения доступа и безопасности. Правда, червяк избирательно поражал уже упомянутые компьютеры, хотя в сети было и множество других. Неверно считать, что собственно компьютеры SUN или VAX подвержены вирусным инфекциям, поскольку в той же сети находились такие же компьютеры VAX, MicroVAX, работавшие под управлением системы VMS, которые не пострадали. Чуть позже (в 1989 году) появились публикации об исследованиях возможности распространения и маскировки вирусов в среде операционной системы UNIX. Вообще, исследователи вирусов в операционной системе UNIX наиболее продвинуты в смысле понимания феномена компьютерных вирусов, и мысли, высказанные ими, наиболее близки к нашей "патологической" точке зрения, но подробности об этом чуть позже, а пока продолжим перечисление "вирусных" проблем в других операционных системах и компьютерах.

Описан вирус "рождественская елка" ("Christmas tree" или "IBM Christmas Gremlin"), распространявшийся в системе VM на больших компьютерах фирмы IBM, кстати (или не кстати), написанный на языке управления виртуальной машиной REXX и, естественно, столь же универсальный в среде VM, как и его DOS'овский собрат, написанный на языке BAT.

Проблемы защиты от вирусов, распространяющихся по сети, заботят разработчиков больших компьютеров. Для ОС VMS известен ряд разработок и готовых продуктов, защищающих компьютеры от вирусов или, по крайней мере, спроектированных для этого (virus control option - VSO, ACF2, RACF, Тор Secret).

Пожалуй, нет сообщений о вирусах в системе OS/2, но принципиальная возможность вирусов в среде OS/2 уже неоднократно обсуждалась и специалисты не видят в этом ничего невозможного, хотя и предупреждают, что обнаружить их в среде OS/2 и, тем более, бороться с ними будет очень сложно. Добавим, что вирус, написанный на языке ВАТ-файлов, упомянутый ранее, скорее всего будет "нормально функционировать" и в OS/2, хотя и не будет специфическим вирусом OS/2.

Нам неизвестны достоверные сведения о вирусах в локальных сетях фирм Novell, 3Com, Banyan, но многочисленные слухи о таких вирусах периодически возникают. Вероятно, не все они абсолютно беспочвенны, а изготовители систем компьютерной безопасности все чаще предлагают свои изделия для усовершенствования сетей с очевидной антивирусной направленностью.

В случае использования программного обеспечения фирмы Novell (поскольку мы достаточно хорошо знакомы именно с этой системой, а для обеспечения других фирм механизм, видимо, похож) можно описать механизм распространения DOS'овских вирусов по сети. Допустим, зараженная каким-нибудь файловым вирусом с резидентной частью программа размещена на сервере (о том, что такое случается, так или иначе можно судить по тому, что фирма McAfee Assosiates выпускает серверный вариант своего сканера вирусов NETSCAN, пакет Dr.Solomon's Anti-Virus Toolkit выпускается для работы в сети). При запуске этой программы с локальной рабочей станции, программа скопируется в память локальной станции и будет исполнена, то есть локальная станция будет заражена вирусом, переданным по сети. Это - тривиальное расширение области действия обычных вирусов популяции IВМ-совместимых компьютеров на сетевой случай.

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

Что говорят опытные люди?

Эмпирический опыт исследователей, наиболее продвинутых в практическом изучении компьютерных вирусов в системе UNIX, заставляет говорить вещи очень близкие к тем крамольным высказываниям, которые мы уже себе позволили. Т. Дафф, Ф. Коуэн, Мак Иллрой ближе всего подошли к нашей точке зрения.

В этих работах приводятся примеры настоящих вирусов, написанных на языке Shell. Поразительно, что эти вирусы оказываются совсем простыми и могут быть случайно написаны пользователем. Здесь играют роль особенности UNIX, позволяющие избежать технических осложнений, возникающих в DOS при попытке сконструировать ВАТ-вирус. Зато идейная сторона вирусного феномена проступает очень ярко и отчетливо. Невозможно удержаться от соблазна привести эти поучительные примеры.

Пусть мы создали командные файлы virusl и virus2 следующего содержания:

	virus1: ср $0 .
	virus2: ср $0 $1

При попытке исполнить командный файл virus1 в текущей директории будет создан файл virus1, а при попытке исполнить командный файл virus2 ttt в текущей директории будет создан файл ttt, содержимое которого будет дублировать содержимое файла virus2! Более того, вас будут провоцировать запустить файл virus2 с параметром, поскольку при попытке исполнить virus2 без параметров на дисплее появится подсказка программы ср:

	Usage: cp f1 f2; cp f1 ... fn d2

Язык, на котором написаны эти вирусы, является самой интересной их особенностью: Shell - стандарт для UNIX самых разных реализаций. Поэтому эти вирусы оказываются универсальными, работая с одинаковым успехом в любой системе UNIX, исполняющейся на произвольном компьютере от IВМ РС до Cray, и прекрасно распространяются по сети, используя возможности NFS (Network File System).

Эти примеры ясно демонстрируют "вездесущесть" вирусов, о чем Т. Дафф говорит: Любая программируемая система, позволяющая осуществлять распределенный доступ к информации, уязвима для вирусной атаки. Это включает не только двоичные образы программ и скрипты (командные файлы) UNIX'ного командного интерпретатора, но и скрипты awk, make-файлы, макросы форматтеров текстов, таких как troff; макросы макропроцессора М4; макросы программируемых текстовых редакторов, таких как emacs; макросы электронных таблиц; макросы СУБД и любых программ, допускающих использование командных файлов.

Он, видимо, интуитивно осознает результаты Л.Адлемана и Доулинга: Как мы увидели, написать вирусы чрезвычайно просто. Значительно сложнее их искоренить и почти невозможно препятствовать появлению новых....

Очень похожие мысли высказывала группа исследователей из Калифорнийского университета Дэвис на симпозиуме в 1988 году. В их сообщении имеется раздел о вирусах в исходном коде, в котором признается, что защита от таких вирусов в среде UNIX отсутствует. Конечно, вирусные фрагменты в исходном коде как будто нетрудно заметить. Но если количество файлов равняется сотням и тысячам, а общий объем исходного кода составляет миллионы строк?..

Посмотрите как "дружно" высказываются Хайленд, Дафф, Кинг и команда специалистов из Калифорнии. Если бы не было полной уверенности, что вирус в среде Lotus 1-2-3 не был разработан независимо от вирусов Shell, кого-то из авторов можно было бы обвинить в плагиате, настолько совпадают их суждения. (Сравните с замечаниями относительно того, что просто, а что сложно в области компьютерных вирусов.)

Здесь бы и сделать вывод о естественности вирусов, об их "вездесущести" в развитых системах, но почему-то этого не происходит. Вопрос опять сводится к конкретным особенностям системы разграничения доступа в UNIX, к изменению смысла бита разрешения исполнения...

Однако командные файлы Shell, макросы awk, М4, make, emacs и еще десятков или сотен столь же совершенных программных продуктов для UNIX, VM, MVS или MS-DOS - для операционной системы просто данные и только данные. Часто бывает невозможно запретить модифицировать эти данные на системном уровне, так как при этом нельзя будет работать в среде соответствующего продукта! Как же на системном уровне можно помешать "жить" вирусам в среде некоторого продукта? Именно в этом и кроется основная сложность, и решить проблемы макровирусов только на системном уровне едва ли возможно.

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

Соотношение сложности защиты и вируса

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

Можно построить очень хитрую систему защиты, но если злоумышленник доберется до той команды, которая передает управление этой системе или проверяет условия вызова этой системы в оперативной ли памяти или в загрузочном модуле на носителе и изменит ее так, чтобы защита всегда обходилась, с чем мы останемся? Сошлемся еще раз на работу Ф. Коуэна, в которой, после обсуждения самых разных алгоритмов блокирования pacnpocтpaнения вирусов и защиты программ, Коуэн в разделе "Практические ограничения указанной техники" грустно замечает: ...Другой важной проблемой в ... системах является то, что атакующий может симулировать всю систему, возвращая те результаты, которые и должны быть получены, на самом деле запоминая другую информацию.... И далее: Другой вариант атаки, который можно предположить, - использование программ, которые симулируют защиту, работая правильно во всех ситуациях, кроме обнаружения распространения инфекции.

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

Большие надежды пользователи UNIX возлагают на парольную защиту. Но оказалось, что самым слабым элементом в системах парольной защиты является человек. При использовании самых изощренных алгоритмов кодирования паролей защита вскрывалась относительно просто и эффективно с учетом особенностей человеческой психики, что и, продемонстрировал Моррис и чего не учитывали разработчики систем парольной защиты. Способы совершенствования защиты с учетом человеческих качеств очень активно обсуждаются пользователями UNIX, и некоторые предложения уже реализованы в более современных версиях системы. Сложности, связанные с человеком, понятны: легко запоминаются общеупотребительные, банальные слова, таких слов немного и их легко отгадать; а трудно угадываемые случайные (бредовые) комбинации цифр и литер придумываются человеком с большими сложностями и еще хуже запоминаются. Опять-таки человеческое свойство использовать уже использованные пароли (легче запомнить) сильно снижает надежность парольной защиты. Для проникновения в систему червяк использовал словарь всего лишь из 160 английских слов и некоторые простейшие алгоритмы изменения этих слов (типа изменения порядка букв на обратный, изменения больших букв на малые и наоборот). Для того чтобы избавиться от дефектов парольной защиты, свойственных человеку, предлагались и предлагаются различные усовершенствования способа раздачи паролей. Один из наиболее продвинутых в этом смысле проектов осуществлен в MIT (проект CERBERUS, включающий специальный сервер паролей, позволяющий, по замыслу создателей, ликвидировать недостатки схем парольной защиты, связанные с наличием такого "неприятного" компонента, как человек).

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

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

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

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

Еще червяк Морриса намекнул на возможности в этой области. Насколько можно судить по разбору "дела Морриса" в июньском номере Comrnunications of the ACM за 1989 год, существовали различные пути распространения инфекции по сети и сам червяк был отчасти распределен в сети (не все заражаемые компьютеры получали полный набор компонентов червяка). Наверное, при должном усовершенствовании можно построить по-настоящему распределенный червяк так, чтобы ни в одном из узлов сети не существовало полного набора компонентов. Понятно, что это чрезвычайно осложнит работу исследователей по выделению и нейтрализации червяка.

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

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

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

Увы, это не только наш прогноз. Многие активные борцы с вирусами, выступавшие на Киевской конференции по защите от вирусов, буквально стонали, что их захлестывает поток очень простых студенческих вирусов.

Почему вирусы появились именно сейчас?

Нам придется представить хоть какие-то объяснения по поводу того, почему именно сейчас разразились пандемии компьютерных вирусов. Ведь какая-нибудь система MVT на больших компьютерах IBM была нисколько не проще DOS! А оборудование, функционировавшее на больших машинах IВМ 60 - 70-х годов, едва ли уступало по сложности современным персональным компьютерам.

Почему же в те, теперь уже давние, безвирусные времена, не было компьютерных эпидемий?

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

Действительно, лет 20-25 и даже 10-15 назад межкомпьютерная связь была еще чем-то экзотическим, необыкновенным отсутствовали стандарты и компоненты операционных систем, оборудование для обмена не было столь совершенным, умным, интеллектуальным. Поэтому речь об инфекциях в компьютерных сетях и не заходила.

Но, может быть, происходили неприятности на отдельных компьютерах? Несомненно, происходили! Почти в каждом крупном вычислительном центре есть свой апокриф, свои легенды и мифы, свои боги, герои и титаны (как "вскрытия" компьютеров, так и защиты их). Правда, все неприятности были локализованы и не принимали угрожающих размеров, не носили характера эпидемий из-за указанных выше причин. Ну а выносить сор из дома далеко не все любят. Более того, некоторые хорошо известные разработки начинались, как попытки пользователей что-то доработать в ОС, то есть как пиратские проникновения в систему. Например, система HASP начиналась как полулегальное вторжение в OS/360 с целью усовершенствования подсистемы ввода/вывода. Причины, по которым достаточная уже тогда сложность оборудования и программного обеспечения не вызвали к жизни компьютерные инфекции, следует искать в особенностях носителей и ОС.

  1. Вспомним, что самым популярным носителем еще 7-10 лет назад в нашей стране (15-20 - во всем мире) были перфокарты, чуть позже - магнитные ленты. Вы можете себе представить компьютерный вирус, распространяющийся на перфокартах? В конце концов нетрудно обнаружить странные перфокарты и изъять их из колоды - и у вируса (точнее у его авторов) нет никакой гарантии его распространения.

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

  2. ОС недавнего прошлого были ориентированы на пакетную обработку и средства общения процессов, командные интерпретаторы (да и сами программы) писались в расчете на эту идеологию. Такое устройство операционной среды как бы делило жизненное пространство программ на клеточки, практически не позволяя им общаться; ОС не передавала процедурам никакой дополнительной информации (вроде имени вызываемой процедуры, что было связано и с устройством файловой системы). Язык управления был тривиальным, такой важный языковой аспект, как рекурсия, был сознательно подавлен. Стоило только пойти навстречу пожеланиям пользователей (а не пойти было нельзя, поскольку такая простота языков управления заданиями мало кого из пользователей устраивала и они делали многочисленные попытки их развития), которые на больших машинах IBM привели к созданию подсистем JES2, JES3, NJE, устроить совместную работу компьютеров, чуть-чуть усовершенствовать язык управления - и критический барьер был преодолен. И появились вирусы.

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

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

Особенности IBM-совместимых компьютеров и вирусный феномен

Хотелось бы особенно отметить роль фирмы IBM и ее персонального компьютера PC, который ярко и выпукло (из-за особенностей конструкции), но необыкновенно дешево демонстрирует опасности вирусного феномена.

Заметим, что все многочисленные вирусные истории, скандалы и происшествия в популяции IBM-совместимых компьютеров не вызвали такого резонанса в среде программистов, правительственных чиновников и просто обывателей, как один-единственный паралич сети, случившийся из-за сравнительно безобидного "червяка Морриса". Если вирусы в популяции IBM-совместимых компьютеров могут стирать файлы, портить файловую систему, уничтожать информацию, то "червяк Морриса" ничего такого не делал, а только размножался, отбирая ресурсы сети, пока они еще оставались. Финансовый ущерб, вероятно, прямо пропорционален поднятому шуму.

Упомянутое отличие популяции IBM-совместимых компьютеров состоит в широком, продуманном, хорошо спланированном использовании базовой системы ввода/вывода (BIOS), которая находится в ПЗУ. Причем программы BIOS'а постоянно совершенствуются, возможности их все время расширяются. Такие программы размещают в самых разных местах: кроме "главного" BIOS'а, используют BIOS'ы различного стандартного (графических адаптеров, контроллеров дисков) и нестандартного оборудования.

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

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

В определенных условиях верны следующие факты:

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

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

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

Маскировка вирусов

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

В самом деле, пусть вирус работает на уровне системных запросов - то есть ему необходимо выдать несколько вполне определенных последовательностей машинных команд. Но между любой парой действительно нужных машинных команд всегда можно вставить произвольное количество пустых команд (NOP - нет операции) или ничего не меняющих пересылок из регистра в регистр, или еще какие-то произвольные фрагменты кода, ничего не меняющие в состоянии процессора. Очевидно, что даже в такой сравнительно несложной ситуации для корректного обнаружения вирусного кода детектор должен обладать возможностями дизассемблирования с элементами семантического разбора или псевдоисполнения. Только на таком уровне можно корректно идентифицировать программы, выдающие потенциально опасные (вирусные) запросы системе. Эти трудности понимают конструкторы детекторов, во всяком случае в уже многократно цитированном здесь журнале Computers & Security мелькнуло сообщение о программе VIRSCAN, которая выдает предупреждение о вирусной инфекции, если 75% кода (?) совпало с маской, по которой происходит поиск. Несколько исследователей в СНГ пытаются как-то реализовать "универсальный" детектор вирусов, который содержит встроенный дизассемблер и пытается идентифицировать потенциально опасные программы не по каким-то кодам, а по состоянию псевдорегистров во время псевдоисполнения программы (понятно, о каких накладных расходах и о каком качестве детектирования идет речь).

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

Вообще возможности маскировки вирусного кода даже в локальной системе - очень интересный и мало исследованный вопрос. Можно сослаться на результаты, полученные В. Голодным на примере популяции IBM-совместимых компьютеров под управлением DOS. Он оонаружил несколько красивых нетривиальных механизмов маскировки, распространения и хранения вирусного кода. Часть механизмов маскировки использует знание особенностей конкретных поражаемых программ - это не укладывается в рамки абстрактных моделей компьютерных вирусов, рассмотренных Ф. Коуэном и Л. Адлеманом.

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

В сообщении Бончева, на Киевской конференции по защите от вирусов в MS-DOS прозвучала информация о болгарском вирусе PHENIX, который использует столь изощренный алгоритм заражения и своего шифрования, что практически не имеет инвариантных байтов в своем теле.

И наконец, последнее замечание по поводу маскировки. Летом 1991 года практически одновременно в нескольких городах появился вирус, получивший название dir. Этот вирус реализует необычный способ заражения файлов (подробности об этом вирусе см. КомпьютерПресс # 9'91). В каком-то смысле он является гибридом файловых вирусов, поражающих исполняемые файлы, и бутовых, поражающих файловую систему в целом. Вирус заражает исполняемые файлы, не меняя в заражаемом файле ни байта, и в то же время на всю файловую систему имеется только один экземпляр вируса. Вирус не "работает" с исполняемыми файлами, а модифицирует файловую систему, и, наверное, поэтому даже универсальные антивирусные программы не считали его вирусом (опасных кодов модификации исполняемых файлов вирус не содержал!). Схема заражения, используемая в этом вирусе, хотя и красива, но не совсем корректна с точки зрения маскировки в том смысле, что при просмотре на незараженной машине пораженная файловая система оказывается дефектной; заражение же новой сраиловои системы при малейшей неаккуратности происходит так быстро, что недостаточно опытный пользователь не успевает осознать произошедшее. А на зараженной машине файловая система выглядит нормально, и создается иллюзия случайного сбоя компьютера. Попытки разобраться в ситуации с привлечением новых компьютеров только способствуют распространению инфекции. Насколько мы можем судить, универсальные обнаружители новых вирусных инфекций в этой ситуации проявили себя плохо, а люди справились с этой творческой задачей отлично.

Некоторые итоги

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

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

  2. Наращивание сервиса, совершенствование языков, встроенных систем BIOS, чем озабочены буквально все разработчики, в первую очередь и автоматически приводят к росту вирусной опасности.

    Вирусные и троянские программы становятся все более и более компактными и универсальными, все более и более изощренными, причем не столько из-за происков хакеров, сколько по "вине" разработчиков более совершенного сервиса, которые создают для хакеров все более совершенный, богатый и универсальный инструментарий для распространения вирусов и деструкции систем; особенно это относится к распределенным системам с развитым распределенным сервисом (X-Windows), позволяющим создавать распределенные вирусы.

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

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

  4. Конечно, компьютерные вирусы создаются людьми, и в этом смысле человеческий фактор имеет абсолютный приоритет. Но есть принципиальная разница между двумя ситуациями:
    1. когда написать вирус - трудно, для этого нужны обширные специальные знания и высочайшая квалификация и
    2. когда любой пользователь, знающий язык Shell (Troff, Lotus, dBase, awk и т.д.), может быстро сознательно соорудить вирус или написать вирусную программу по ошибке (см. пример командных файлов в статье).
  5. Еще одна важная особенность феномена компьютерных вирусов состоит в том, что деятельность создателей вирусов и анти-вирусных средств совершенно не продуктивна (не приводит к созданию чего-то нового или к более глубокому пониманию природы). Эта деятельность - всего лишь рекурсивные игры с самим собой, и более всего она напоминает игру в шахматы или в карты без партнера. В то же время это смертельно опасное занятие (как мы видели, природа покровительствует разработчикам вирусов), могущее завести развитие вычислительной техники в тупик.

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

Поистине эти идеи носятся в воздухе.

[Вернуться к списку] [Комментарии]
By accessing, viewing, downloading or otherwise using this content you agree to be bound by the Terms of Use! vxheaven.org aka vx.netlux.org
deenesitfrplruua