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

В. А. Конявский

Феномен компьютерных вирусов[1]

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

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

Да что языки - даже в пределах одного языка строение фраз может носить явно выраженные признаки синкретизма («Несётся»), аналитизма («У меня у подруги у сестры у ребенка собака...») или синтетизма («Собака ребенка сестры моей подруги ...»)!

Рассмотрим типичное для науки выражение: «Из А следует В».  Процесс доказательства этого утверждения будет деятельностью аналитической.

Возьмём теперь два утверждения: «Из А следует В» и «Из В следует С». Как и ранее, доказательство каждого утверждения - деятельность аналитическая, а вот генерация на основе этих утверждений нового: «Из А следует С» - это уже синтез!

Для логики (математической) синтезированный вывод очевиден. Как и то, что если в такой паре утверждений одно неверно, то неверно и итоговое утверждение «Из А следует С».

А так ли это? Значит ли, что при утверждениях: «Из А следует В» и «Из В не следует С» неверно утверждение «Из А следует С»? Ведь при исходных утверждениях вполне могут быть верны: «Из А следует D» и «Из D следует С», при которых «Из А следует С» -  верно!

Так верно или неверно синтезированное нами утверждение? Есть ли парадокс? Простого ответа нет - простых ответов не бывает даже в логике. Парадокса тоже нет - в зависимости от условий (окружающей среды, состава и структуры системы и т.д.) результат синтеза может быть различным.

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

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

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

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

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

Жизненный цикл разрушающих программных воздействий (РПВ)

  1. Заказ на РПВ
  2. Разработка РПВ
  3. Транспортировка РПВ на компьютеры пользователей
  4. Исполнение РПВ
  5. Борьба с РПВ
  6. Восстановление состояния

Первые два этапа - это зоны деятельности преимущественно государства. Заказчик РПВ - это заказчик преступления, разработчик РПВ - исполнитель. Так и надо к этому относиться.

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

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

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

Государство должно из словосочетания «компьютерное преступление» выбросить слово «компьютерное». А преступник должен сидеть в тюрьме.

Поговорим теперь о доставке.

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

Вот в этом месте задержимся ненадолго. Итак:

- выявить таким образом можно не все вирусы, а только известные, и

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

Первый факт позволяет утверждать, что если антивирусные программы и могут предотвратить вирусную эпидемию, то защитить ваш компьютер от нового вируса они не могут. И чем более активны вы в сети, тем больше шансов у вас одним из первых «познакомиться» с новым вирусом и, конечно, пасть его жертвой. Вряд ли при этом вас согреет тот факт, что эпидемии все-таки не будет!

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

Рассмотрим проблемы обновления антивирусных баз (как, впрочем, и ОС) подробнее.

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

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

Но есть и более опасные возможности доставки РПВ от злоумышленника к вам. Эти способы известны специалистам, и связаны с возможностью «навязать» антивирусной компании доставку вам в составе обновлений некоторой последовательности, которая при определенных условиях может быть преобразована в разрушающее программное воздействие. Чтобы блокировать угрозы такого рода, необходимо применение гораздо более сложных контрольных процедур, требующих аппаратной поддержки. Измениться при этом должна и процедура сертификации обновлений антивирусных баз.

На уровне синкретического восприятия нам не удастся сделать больше. Переходим к анализу.

Допустим, вирус все-же доставлен на Ваш компьютер. Страшно ли это? Навредит ли он? Обсудим этот вопрос.

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

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

  • меры по выявлению и устранению уязвимостей, на основе которых реализуются вирусные угрозы. Это позволит исключить причины возможного возникновения вирусных атак;
  • меры, направленные на своевременное обнаружение и блокирование вирусных атак;
  • меры, обеспечивающие выявление и ликвидацию последствий вирусных угроз. Данный класс мер защиты направлен на минимизацию ущерба, нанесённого в результате реализации вирусных угроз».

Здесь все правильно и все нуждаются в уточнении.

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

Почему же никто не предложил средств для того, чтобы вирусы не исполнялись? Да и можно ли вообще это сделать? Как пережить отрезок времени от создания вируса до обновления баз, содержащих его сигнатуру? Есть ли методы управления запуском задач? Есть ли антивирусы, основанные на другой парадигме? Какими вообще могут быть антивирусы?

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

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

Анализ данных - к этому классу антивирусных средств относятся «ревизоры» и «полифаги».

«Ревизоры» анализируют последствия от деятельности компьютерных вирусов и других вредоносных программ. Последствия проявляются в изменении данных, которые изменяться не должны. Именно факт изменения данных является признаком деятельности вредоносных программ с точки зрения «ревизора». Другими словами, «ревизоры» контролируют целостность данных, и по факту нарушения целостности принимают решение о наличии в компьютерной среде вредоносных программ.

«Полифаги» действуют по-другому. Они на основе анализа данных выделяют фрагменты вредоносного кода (например, по его сигнатуре), и на этой основе делают вывод о наличии вредоносных программ. Удаление или «лечение» пораженных вирусом данных позволяет предупредить негативные последствия исполнения вредоносных программ. Таким образом, на основе анализа «в статике» предупреждаются последствия, возникающие «в динамике».

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

Таким образом, для того, чтобы найти вирус в своем компьютере, нужно, чтобы он уже «сработал», чтобы появились последствия его деятельности. Причем даже таким образом можно найти только известные вирусы, для которых заранее описаны фрагменты кода и/или сигнатуры. Вряд ли такую защиту можно назвать надежной.

Несколько по-иному работают антивирусные средства, основанные на анализе процессов.

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

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

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

Подведем итог. Анализу можно подвергать данные и процессы. Данные в нашем случае можно характеризовать с помощью понятия «целостность». Факт нарушения целостности устанавливают «ревизоры». Конкретный внедренный код, содержание модификации, выявляют «полифаги». Других вариантов нет, и, следовательно, развитие данного направления будет идти по пути совершенствования уже используемых механизмов.

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

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

После анализа реальными становятся идеи синтеза. Синтезировать будем «ревизоры», «полифаги», «поведенческие блокираторы» и контроль запуска задач. Другие функции пока не разработаны. На первом этапе синтеза целесообразно интегрировать уже готовые средства, стремясь получить новый, синергетический эффект.

Итак, у нас есть «ревизоры» с функцией контроля целостности. Конечно, лучше всех других «ревизоров» с этой функцией справится СЗИ НСД, которое выполняет контроль целостности не программными, а аппаратными методами, и в связи с этим избавлено от многих недостатков программной реализации. Лучшие образцы отечественных СЗИ НСД блестяще справляются с такой задачей.

В СЗИ НСД должно быть реализовано также разграничение доступа к данным - в том числе реализованы функции контроля запуска программ. Так как для управления доступом в СЗИ НСД и контроля данных в антивирусной программе используются одни и те же механизмы - остается только добавить в СЗИ НСД ядро антивирусных средств. Сделаем это - и СЗИ НСД приобретет интерфейс подключения внешних антивирусных модулей. Лучшие отечественные СЗИ НСД уже имеют такие интерфейсы.

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

Синтез можно продолжить и на более высоком уровне. Вспомним при этом, что вирус не опасен  даже в доставленном виде. Более того - вирус не обнаруживается (в общем случае) в статическом состоянии. Более того - запретив исполнение вируса, мы рискуем никогда не обнаружить его присутствия, так как обнаружить можно только проявления, а их-то как-раз и не будет. Стало быть, для обнаружения вируса его нужно исполнять. А исполнять нельзя - это погубит компьютерную систему. Парадокс! Что-же делать?

Ответ уже дан природой - в медицине давно научились наблюдать за вирусом «в пробирке», готовя для него «противоядие». Мы можем поступить также - попробовать разрешить вирусу исполниться, но в изолированной среде.

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

  • функционально-замкнутая среда в ПЭВМ (ФЗС в ПЭВМ);
  • изолированная программная среда в ОС (ИПС в ОС);
  • доверенная вычислительная среда в отдельном вычислительном блоке (ДВС в ТРМ).

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

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

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

Разработка таких антивирусных средств еще впереди.

 


[1] Статья подготовлена на основе: Конявский В. А., Лопаткин С. В. Компьютерная преступность. Т. II. М., 2007. - 840 с., илл.

[2] Синкретизм - (греч. synkretismos - соединение) - слитность, нерасчлененность, характерная для первоначального состояния в развитии чего-нибудь.

 


Метки статьи:
вирусы и антивирусы
ФорумФорум
Форум ОКБ САПР
Вопросы специалистовВопросы специалистов
Вопросы, которые нам присылают, и наши ответы на них