Опубликован: 29.10.2019 | Уровень: для всех | Доступ: платный
Лекция 15:

Идентификация выполненной программы по её "следу" в условиях повышенной угрозы целевых кибератак

< Лекция 14 || Лекция 15 || Лекция 16 >
Аннотация: Предлагается использование логической нейронной сети для распознавания выполненной программы, входящей в состав специального программного обеспечения управляющего вычислительного комплекса, по её "следу". В сочетании с другими средствами обеспечения защищённости программного обеспечения, это позволяет, хотя и после возможного свершения кибератаки, выявить внедрение "посторонней", возможно, вредоносной программы.

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

Альфред Брем. Жизнь животных.

...И Чёрт промолвил мне: "Не трогательно ль это?

Поджог, конечно, мой и дом я строил сам.

Но сколько блесков здесь изменчивого цвета,

Как дым молитвенно восходит к небесам!..

Константин Бальмонт. Притча о чёрте

Цель и возможность идентификации программного модуля по его "следу"

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

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

Среди применяемых мер противодействия проникновению вредоносных программ высокую эффективность продемонстрировал типовый контроль на основе теговой архитектуры, применённый в многопроцессорных вычислительных комплексах "Эльбрус-1" и "Эльбрус-2" [23]. Он обеспечивает контекстную защиту данных - массивов и программных сегментов, не позволяющую расширить адресное пространство, используемое управляющими программами. Однако любую защиту в конце концов можно взломать, если злонамеренный хакер добился статуса высокого приоритета с доступом к привилегированным командам. Несмотря на принятие строгих мер по защищённости СПО, на последней стадии выполнения каждого программного модуля возникает вопрос: только что выполненный модуль действительно входит в состав СПО, или является вредоносной программой, прорвавшейся извне?

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

Формирование эталонного "следа" - ловушки для идентификации выполненной программы

Рассмотрим представленный в предыдущей лекции пример программы НЕЙРОКОМПЬЮТЕР, являющейся программой коммутации решающего поля для процессора вычислительной системы архитектуры data flow. Несмотря на указанную специфику, программа имеет вполне традиционные вид и принцип выполнения на процессоре с помощью счётчика команд.

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

На рис. 15.1 слева приведена анализируемая программа (см. рис. 14.4). Справа от неё показан найденный в статическом режиме вид "следа" программы, принимаемого за эталон. "След" формируется в виде множества отрезков, расположенных на семи вертикальных линиях. Рассмотрим принцип формирования "следа".

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

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

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

Изображение "следа" можно значительно упростить, если свести к представлению одним отрезком. Этот отрезок будет прерываться из-за необходимости "перескакивания" с линии на линию в связи с вложенностью циклов и процедур. Изображение утратит те параллельные элементы, что присутствуют на рис. 15.1. Однако подобное упрощение, как и другие возможные, может привести к тому, что логической нейронной сети будет труднее "разглядеть" такой рисунок. Упрощение рисунка в соответствии с принципами когнитивной графики [3], абстрактно, кратко и наглядно отображающей суть изучаемого объекта или процесса, требует экспериментального исследования.

Программный модуль и эталон его "следа"

увеличить изображение
Рис. 15.1. Программный модуль и эталон его "следа"

Экран, образуемый рецепторами логической нейронной сети, и размещение на нём динамического "следа" программного модуля

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

Экран рецепторов для отображения динамического следа программы

Рис. 15.2. Экран рецепторов для отображения динамического следа программы

По примеру, отображённому на рис. 15.1, можно предположить, что п = 21, и масштабировать "длину" программы не следует.

Рецепторы образуют двумерный массив {r00, r01, ..., r06; r10, r11, ..., r16; ...; rn-1,0, rn-1,1, ..., rn-1,6}. Целесообразно использовать два значения возбуждения рецептора: 0 и 1.

Поскольку возбуждение рецепторов производится в динамике выполнения программы, а анализ полученного "следа" проводится после окончания её выполнения, каждый рецептор должен обладать памятью для хранения величины возбуждения. На рис. 15.2 цветом показаны рецепторы, "участвующие" в формировании "следа" программы НЕЙРОКОМПЬЮТЕР, если он (в отражённой части) совпал с эталоном на рис. 15.1. В общем случае считаем, что масштабирование "длины" программы произведено так, что эталон "следа" занял весь экран.

Рецепторный слой, выполняющий функцию экрана, целесообразно реализовать в схеме устройства управления (УУ) головного процессора УВК. Логическая нейронная сеть, обрабатывающая экран, реализуется в составе ОПО УВК. Та же процедура НЕЙРОКОМПЬЮТЕР, при аппаратно поддержанной возможности переключения рецепторного слоя, может участвовать в контроле выполнения управляющих программных модулей. Однако эта стандартная процедура должна быть настроена на соответствующую функцию активации и на выводы, адекватные данному применению.

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

Обращение к нечётким данным в основном связано с необходимостью ввода ряда условностей, снижающих до минимума потери реальной производительности УВК на рассматриваемый контроль. Для минимизации трудоёмкости рассматриваемого контроля приходится использовать такие влияющие на результат распознавания факторы, как:

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

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

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

Логическая нейронная сеть для идентификации динамического и эталонного "следов" выполненной программы

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

Логическая нейронная сеть для идентификации выполненного программного модуля по его "следу"

Рис. 15.3. Логическая нейронная сеть для идентификации выполненного программного модуля по его "следу"

Логическая нейронная сеть отображает базу знаний (БЗ) для логического вывода решения о принадлежности выполненного программного модуля.

Пусть Mi (i = 1, ..., N) - множество номеров j рецепторов (j \in {1, ..., 7n}), "покрываемых" i-й "ловушкой" на экране "след" программного модуля, mi - количество таких рецепторов, vj - величина возбуждения j-го рецептора, имеющая значение 0 или 1 в зависимости от попадания на экране в исследуемый "след". Тогда значение Vi пороговой функции активации i-го нейрона находится:

V_i=\left\{\begin{matrix}
 \frac{1}{m_i}\sum_{j\in M_i} v_j \text{ если это значение }\geq h\\ 
 \text{ в противном случае}
 \end{matrix}\right.

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

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

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

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

Табл. 15.1. Матрица связей логической нейронной сети

увеличить изображение
Табл. 15.1. Матрица связей логической нейронной сети

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

Развитие логической нейронной сети и алгоритм идентификации выполненного программного модуля

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

  1. Составляется эталон "следа", как показано на рис. 15.1;
  2. Полученный эталон масштабируется в соответствии с размером экрана рецепторов и условно налагается на этот экран (рис. 15.2);
  3. Заводится строка в матрице связей, соответствующая этому модулю. Этим условно вводится в рассмотрение новый нейрон, что удобно отображать рисунком, подобным рис. 15.3, в протоколе или в научном отчёте;
  4. В этой строке записываются "единицы" в столбцах рецепторов, покрытых новым эталоном;
  5. С использованием количества рецепторов, покрытых этим эталоном, находится нормирующий коэффициент.

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

Таким образом, идентификация выполненного модуля выполняется в три этапа:

  1. Задание строки возбуждения рецепторов в соответствии со "следом" выполненного программного модуля;
  2. Циклическая обработка всех строк матрицы следования для расчёта значения функции активации всех нейронов (с учётом их возможного неоднократного вхождения в логическую нейронную сеть), с попутной фиксацией максимально возбудившегося нейрона.
  3. Анализ положительного или отрицательного результата идентификации и выход на принятие решения.

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

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

Как показано выше, можно отразить в БЗ и вновь разработанный модуль в составе СПО. Однако проводить такое "доучивание" с помощью вариантов "следов" одного модуля во всех случаях успешного распознавания, нецелесообразно в связи с резким ростом затрат полезной производительности УВС на рассматриваемый контроль.

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

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

Краткие итоги

  1. Использование средств когнитивной ("сходной") графики, моделирующей образное восприятие для распознавания принадлежности выполненной программы специальному программному обеспечению, позволяет достичь того успеха в точности и достоверности, который обусловлен свойствами ассоциативного мышления человека.
  2. Метод идентификации программы по её графическому образу – "следу" эффективен в том случае, когда основными методами контроля своевременное обнаружение вредоносной программы не сработало. В этом случае быстрая реакция на совершённую атаку позволяет принять меры по восстановлению системы управления, например, при переходе на резервный УВК до того, как система начнёт разрушаться.
  3. Выполнение логической нейронной сетью специфической функции запоминания эталонов "следов" в качестве образов, требует специальных аппаратных и программных решений.
  4. Идентификация выполненного программного модуля по его "следу" позволяет широко использовать принципы самообучения и расширения базы знаний.

Вопросы:

  1. В чём заключается принцип распознавания выполненного программного модуля по его "следу"?
  2. Как формируется "ловушка" для динамически формируемого "следа"?
  3. Как скрытый экран рецепторов выполняет функции доступного пользователю рецепторного слоя логической нейронной сети?
  4. Как строится логическая нейронная сеть для идентификации выполненного программного модуля?
  5. На какие аналогии, в связи со строением человеческого мозга, наводит использование некоторого скрытого рецепторного экрана, помогающего решать важные задачи когнитивной графики?
< Лекция 14 || Лекция 15 || Лекция 16 >
Анастасия Карманова
Анастасия Карманова
Россия, Абакан, ХГУ им. Н. Ф. Катанова
Петр Козлов
Петр Козлов
Россия, Екатеринбург, Уральский университет путей сообщения