Современное положение с компьютерными вирусами несколько напоминает гонку вооружений: "хакеры" пишут все новые и новые вирусы, способные обходить существующие средства защиты, а разработчики средств защиты совершенствуют свои программы так, чтобы они могли распознавать и эти новейшие вирусы. Отдельно существуют так называемые программные закладки, или "троянские кони", - фрагменты, неспособные к самокопированию, а просто вставленные в программу, обычно с целью навредить пользователю. Поскольку закладки не имеют многих признаков, характерных для вирусов, антивирусные средства часто не в состоянии их выявлять.
Однако, если последовательность команд, составляющую программу, не хранить на диске, а динамически генерировать непосредственно перед выполнением, проникновение в нее чужеродного кода значительно затрудняется. Если же обеспечить генерирование из одной алгоритмической основы разных (разумеется, эквивалентных с алгоритмической точки зрения) последовательностей команд, становится возможным снизить вероятность искажения программы за счет внешнего воздействия до любой наперед заданной ненулевой величины.
Для осуществления на основе этой идеи комплексной защиты программ была разработана инструментальная информационно-логическая вычислительная система - ИЛВС, которую мы и рассмотрим в настоящей статье (рис.1).
Схема процесса обработки инфориации в ИЛВС
Структура описания программы
Алгоритмическая основа (протокол реализации) программы в ИЛВС записывается в виде системы правил логического вывода (продукций). Такая форма записи широко применяется в системах искусственного интеллекта, поскольку она, во-первых, позволяет представить любые знания, в принципе поддающиеся формализации (в том числе алгоритм любой процедуры, реализуемой в ЭВМ), а во-вторых, отличается высокой модульностью и, как следствие, хорошо адаптируется к изменению алгоритмической основы и системы кодирования правил.
Правило вывода можно упрощенно записать в виде
Рl ==> Ps,
где Pl и Ps - предикаты, называемые соответственно "предикатом условия" и "предикатом заключения". Предикаты могут быть сложными, т. е. представлять собой логическое выражение на основе нескольких простых предикатов (как правило, все они соединяются связкой "и"). Если предикат условия является истинным, а предикат заключения не определен, правило применяется, после чего предикат заключения приобретает значение "истина". Чтобы последний стал истинным, необходимо присвоить заданные значения его аргументам, для чего активизируются соответствующие процедуры. Таким образом, содержательно правило вывода схоже с программой, состоящей из одного оператора - условного. Каждому правилу, каждому предикату и каждому аргументу каждого предиката приписан уникальный (в общем случае многомерный) индекс.
В формальной логике правила вывода никак не упорядочиваются: просто применяются все правила, которые могут быть применены. Однако непосредственная реализация такой схемы требует многократного полного перебора всех правил, а это крайне неэффективно. Поэтому в ИЛВС на множество правил накладывается управляющая сетевая структура, связывающая между собой правила с тождественными предикатами в заключении и в условии: очевидно, что после того, как в результате применения некоторого правила его предикат заключения приобрел значение "истина", осмысленно проверять на применимость те правила, в которых этот предикат встречается в условии.
При синтезе выполняемой программы, которая должна представлять собой некоторую последовательность команд, из управляющей структуры выделяются всевозможные линейные цепочки правил (см. рис. 2).
Сетевая структура и линейные цепочки правил
В синтезированной программе правила, предикаты и аргументы предикатов представлены индексами; обращение к ним при выполнении программы осуществляется по этим индексам.
Стохастическое изменение программы и контроль корректности
Ни один из индексов, упомянутых в предыдущем разделе, не является постоянным: все они выбираются случайным образом при синтезе программы. Кроме того, к множеству правил вывода случайным образом добавляются избыточные правила, не противоречащие остальным. Состав избыточных правил влияет на управляющую структуру и, тем самым, на последовательность команд в синтезированной программе.
Чтобы вирус не мог поразить программу в процессе выполнения, после заданного числа циклов ее работы значения индексов стохастически изменяются. Одновременно проверяется корректность программы. Для этого в каждой цепочке значения индексов правил, полученные в результате изменения, сравниваются со значениями, вычисленными для этой же цепочки на основе управляющей структуры. Если все значения совпадут, программа считается корректной, в противном случае ИЛВС регистрирует искажение программы и корректирует ее путем повторного синтеза измененной цепочки.
Отметим, что подобная техника обеспечивает защиту не только от воздействия внешней программы, но и от непосредственного вторжения "хакера".
Система проектирования программ САПР Ф
Преобразование уже готовых программ для среды ИЛВС, вообще говоря, возможно, но программы, разработанные "сверху вниз" специально для нее, будут и более эффективными, и более надежно защищенными. В действительности только в этом случае программа будет гарантированно свободна от закладок. Для разработки программ в расчете на ИЛВС и адаптации их к операционной среде ЭВМ создана система под названием САПР ФС (система автоматизированного проектирования функциональной среды).
САПР ФС содержит встроенные функции контроля корректности и верификации разрабатываемых алгоритмов, основанные на так называемых метазнаниях о прикладных процессах. Метазнания определяют необходимые и допустимые связи между предикатами, используемыми в программе. Связи, включенные в разрабатываемый алгоритм, сверяются с зафиксированными в метазнаниях путем синтеза всевозможных цепочек правил и сравнения их с аналогичными цепочками для метазнаний. В случае несовпадения можно произвести полный поиск и выявить некорректные предикаты. Это существенно снижает вероятность как вставки в алгоритм программных закладок, так и просто ошибок при его разработке.
Более подробно об ИЛВС и САПР ФС можно прочесть в монографии автора "Развитие теории построения открытых систем на основе информационной технологии искусственного интеллекта" (М: "Воениздат", 1994).
Программно-аппаратный макет ИЛВС
Итак, ИЛВС способна существенно повысить защищенность и общую надежность программных комплексов, но не слишком ли дорого придется за это заплатить? Преобразование программы, замена индексов и периодические проверки требуют времени, которое в системах реального времени является критически важным ресурсом. Действительно, при чисто программной реализации описанной системы накладные расходы могут оказаться слишком высокими, но многие операции вполне реализуемы аппаратно.
Программно-аппаратный макет ИЛВС уже существует. Он представляет собой устройство, подключаемое к стандартному ПК с Windows 3.11 и 95. Устройство принимает на входе описание программы в форме системы правил вывода, строит цепочки правил, стохастически преобразует индексы и передает на выполнение защищенную выполняемую программу. Все процедуры происходят параллельно с работой центрального процессора ЭВМ и не отнимают процессорное время.
Владимир Владимирович Насыпный - д-p техн. наук, член-корр. Академии военных наук. С ним можно связаться через редакцию "Мира ПК" (mirpk@osp.ru).