Научная статья на тему 'Алгоритмы анализа безопасности состояний компьютерной системы для модели Take-Grant'

Алгоритмы анализа безопасности состояний компьютерной системы для модели Take-Grant Текст научной статьи по специальности «Математика»

CC BY
923
80
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
АНАЛИЗ БЕЗОПАСНОСТИ / КОМПЬЮТЕРНЫЕ СИСТЕМЫ / МОДЕЛЬ TAKE-GRANT / АЛГОРИТМ

Аннотация научной статьи по математике, автор научной работы — Бречка Д. М.

В статье рассматриваются алгоритмы поиска tg-путей, островов и мостов в графах доступов для дискреционной модели Take-Grant.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Алгоритмы анализа безопасности состояний компьютерной системы для модели Take-Grant»

Математические структуры и моделирование 2009, вып. 20, с. 160-172

УДК 65.012.810(075.8)

АЛГОРИТМЫ АНАЛИЗА БЕЗОПАСНОСТИ СОСТОЯНИЙ КОМПЬЮТЕРНОЙ СИСТЕМЫ ДЛЯ МОДЕЛИ TAKE-GRANT

Д.М. Бречка

В статье рассматриваются алгоритмы поиска tg-путей, островов и мостов в графах доступов для дискреционной модели Take-Grant.

Введение

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

При моделировании систем е дискреционным разграничением доступа строится система, отслеживающая вес возможные доступы субъектов компьютерной системы к объектам компьютерной системы. Одним из представлений множества возможных доступов является граф доступов. Наиболее развитой моделью распространения прав доступа по графу доступов является Take-Grant [1]. Центральным понятием этой модели служит «безопасное состояние». В рамках модели Take-Grant выделены критерии безопасности состояния компьютерной системы. Однако остается открытым вопрос об алгоритмах проверки безопасности конкретного состояния. В данной статье предложены некоторые алгоритмы, позволяющие однозначно ответить, является ли заданное состояние компьютерной системы безопасным.

1. Описание модели Take-Grant

Модель Take-Grant — это модель дискреционного разграничения доступа в информационной системе. Данная модель является расширением классической модели ИНГ. ориентированной на анализ распространения прав в системе [1,2].

Copyright © 2009 Д.М. Бречка.

Омский государственный университет имени Ф.М. Достоевского. E-mail: [email protected]

Математические структуры и моделирование. 2009. Вып. 20.

161

1.1. Основные положения

Согласно модели Take-Grant, информационная система представляется в виде ориентированного графа, в котором вершинами являются субъекты и объекты (активные и пассивные сущности системы соответственно), а дуги представляют собой установленные права субъектов на объекты. При этом субъекты рассматриваются как активизированные объекты, то есть могут существовать дуги между субъектами. Помимо прав, присутствующих в модели ИНГ. в Take-Grant добавляются два дополнительных права: Take (t) — право брать права доступа у какого-либо субъекта и Grant (g) — право предоставлять права доступа на какой-либо объект.

Состояния системы изменяются под воздействием четырех видов команд:

1. Take(a, x, у, z) — субъект x берет права а у объекта у на объект z,

2. Grant(a, x, у, z) — субъект x дает права а объекту у на объект z,

3. Create(a, x, у) — субъект x создает объект у с правами а на него.

4. Remove (а, x, у) — еубъе кт x удаляет права а на объект у.

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

1.2. Получение прав доступа

Определение 1. Предикат «возможен достут^щ^^о) истинен тогда и только тогда, когда существуют графы доступов Gi, G2, ...Gn такие, что Gi hc1 G2 ГС2 ... hCn Gn, где G0 — исходный граф сиетемы, G1; G2, ,,,Gn — последовательные преобразования исходного графа под воздействием команд

С1; С2; ■ ”СП*

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

Для графа доступов, вершинами которого являются только субъекты, справедлива следующая теорема:

Теорема 1. В графе доступов G0, содержащим только вершины-субъекты, предикат «возможен доступ» (а, x, у, G0) истинен тогда, и только тогда, когда, выполнены следующие условия:

162

Д.М. Бречка. Алгоритмы анализа безопасности состояний...

1. В графе Go существуют субъекты s1, s2,..., sm, связанные дугами с вершиной у.

2. Субъект х в графе Go соединен tg-путем с каждым субъектом, Sj для, i = 1,2,... m.

Доказательство приводится в [1].

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

Определение 3. Островом в произвольном графе доступов называется его максимальный tg-евязный подграф, состоящий только из вершин субъектов.

Определение 4. Мостом в произвольном графе доступов называется tg-путь, проходящий через вершины-объекты, концами которого ЯВЛЯЮТСЯ вершины-

субъекты;

—— g

повторение.

—— t

<— t

і, при этом словарная запись tg-пути должна иметь вид t *— t *, t *V t *, где символ * означает многократное (в том числе нулевое)

Определение 5. Начальным пролетом моста в произвольном графе доступов называется tg-путь, проходящий через вершины-объекты, началом которого является вершина-субъект, а концом — вершина-объект; при этом словарная за— * ——

пись ПуТИ имеет ВИд t * g .

Определение 6. Конечным пролетом моста в произвольном графе доступов называется tg-путь, проходящий через вершины-объекты, началом которого является вершина-субъект, а концом — вершина-объект; при этом словарная запись пути имеет вид t *,

Теорема 2. В произвольном, графе доступов для объектов х и у предикат «возможен доступ» (а, х, у, Go) истинен тогда, и только тогда, когда, выполнены, следующие условия:

1. В исходном графе Go существуют объекты si, s2,..., sm, соединенные дугам,и с объектом, у.

2. В исходном графе Go существуют субъ екты х'1,х'2, ...,х'т и s'1,s'2,...,s'm такие, что:

• х' = х или х' соединен с х начальным пролетом м,оста, в графе Go для, i = 1,2,..., m;

• sj = s или, sj соединен c s конечным пролетом м,оста, в графе Go для, i = 1,2,..., m.

3. В исходном графе Go для, каждой пары (х',ф), где i = 1, 2,...,m, существуют острова, I'i, ...,IjUi при щ > 1 такие, что х' Є Д1; sj Є Ij,Ui, и существуют мосты между островами Ij и Ij+1 при j = 1, 2, ...,uj-1.

Доказательство приводится в [1],

Математические структуры и моделирование. 2009. Вып. 20.

163

2. Граф доступов из вершин-субъектов

Согласно Теореме 1 для того, чтобы выяснить возможность доступа одного субъекта к другому в графе, который содержит только вершины-субъекты, необходимо выяснить, существует ли в графе между этими субъектами tg-путь. При этом направление дуг не учитывается. Для поиска tg-пути можно использовать алгоритм Дейкетры [3] при некоторой модификации графа доступов,

3. Поиск tg-путей

Для начала приведем описание самого алгоритма Дейкетры, Алгоритм позволяет найти кратчайший путь в графе между двумя выделенными вершинами s и t, Перед началом работы алгоритма все вершины и дуги не помечены, В ходе выполнения каждой вершине x присваивается число d(x), равное длине кратчайшего пути между s и x, включающего только помеченные вершины и дуги. Шаги алгоритма:

1, Присвоить d(s) = 0 и d(x) = то для всех х, отличных от s, Пометить вершину s и присвоить у = s. Где у - последняя помеченная вершина,

2, Для каждой непомеченной вершины х пересчитать величину d(x):

d(x) = min{d(x), d(y) + a(y,x)}, где a(y,x) — длина дуги от у к x.

Если d(x) = то для всех непомечеиных x, то закончить процедуру: в графе пет пути из s в непомеченные вершины. Иначе — пометить ту из вершин x, для которой d(x) минимальна. Вместе с вершиной x окрашивается дуга, ведущая в данную вершину. Присвоить у = x,

3, Если у == t, то закончить процедуру: путь из s в t найден — состоит из помеченных дуг и вершин. Иначе — перейти на шаг 2,

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

Во-первых, будем считать, что направления дуг не имеют значения (согласно определению 2 направления дуг в tg-пути не учитываются).

Во-вторых, присвоим всем дугам, не содержащим прав Таке или Grant, вес, равный бесконечности (d(e) = то).

В-третьих, для всех ребер, содержащих права Таке или Grant, присвоим вес, равный единице (d(e) = 1), так как не существует принципиальной разницы, используется право Таке или Grant, При этом если между двумя вершинами существует больше одного такого ребра, то необходимо оставить лишь одно из них.

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

164

Д.М. Бречка. Алгоритмы анализа безопасности состояний...

4. Произвольный граф доступов

Согласно Теореме 2 для того, чтобы выяснить возможность доступа одного субъекта к другому в произвольном графе доступов, необходимо, чтобы:

1) в графе существовали мосты;

2) исследуемые субъекты были соединены в графе доступов начальным и конечным пролетом моста с островами;

3) сами острова в графе были соединены мостами,

4.1. Поиск островов

Для поиска островов в графе можно воспользоваться алгоритмом Флойда [3], при этом граф доступов необходимо определенным образом модифицировать.

Приведем описание алгоритма Флойда, Алгоритм предполагает, что перед началом его работы все вершины графа должны быть пронумерованы. Длина кратчайшего пути из вершины г в вершину j обозначается через dj где m — число промежуточных вершин пути. Если между вершинами г и j не существует ни одного пути, то = то, Величи на d0i = 0,

Формально алгоритм Флойда имеет следующие шаги:

1, Пронумеровать все вершины исходного графа целыми числами от 1 до N. Определить матрицу D0 такую, что каждый ее элемент (г, j) соответствует величине dj, то есть, каждый элемент матрицы D0 выражает длину дуги между вершинами г и j в исходном графе. Если в исходном графе вершины не соединены дугами, то d0j = то. Для каждого і d(0i = 0,

2, Для m, последовательно принимающего значения 1,2,..., N, определить по величинам элементов матрицы Dm-1 величины матрицы Dm, используя отношение dm = min{drm-1 + d^-1, dm-1}.

По окончании данной процедуры величина элемента (і, j) матрицы DN будет определять длину кратчайшего пути из вершины і в вершину j.

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

1, Удалим направления дуг,

2, Присвоим всем ребрам, не содержащим права Таке и Grant, бесконечный вес. Заметим, что по условию алгоритма вес ребра между двумя вершинами равен бесконечности, если ребра между вершинами не существует. Фактически это означает, что мы удаляем из графа все ребра, не содержащие прав Таке или Grant,

3, Всем ребрам, содержащим права Таке и Grant, присвоим вес, равный единице.

Математические структуры и моделирование. 2009. Вып. 20.

165

Для модифицированного графа будем применять алгоритм Флойда следующим образом:

1, Выберем вершину из множества всех вершин графа (E), применим для нее алгоритм Флойда, Алгоритм обнаружит все вершины в графе, связанные с выбранной tg-путем, Множество вершин, выбранное алгоритмом, будет являться островом. Обозначим его через 11.

2, Множество вершин графа без 11 обозначим чсрез E/I1. Выберем вершину из множества E/Д и применим для нее алгоритм Флойда, Алгоритм обнаружит все вершины, принадлежащие множеству E/Д, связанные с выбранной tg-путем, Множество вершин, выбранное алгоритмом, обозначим через Д. Это множество будет являться вторым мостом в графе.

Будем применять данную процедуру до тех пор, пока все вершины графа не будут распределены по своим островам. На некотором шаге N множество E/In-1 станет пустым — это значит, что обнаружены все мосты в графе доступов.

4.2. Поиск мостов

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

л% ~н*нН я *, н*бЯл*■

Задачу отыскания моста в графе можно сформулировать следующим образом: необходимо построить алгоритм, который, анализируя вершины графа доступов и установленные права между ними, мог определить tg-путь заданного вида. Похожая задача решается для построения алгоритмов-распознавателей грамматик. Построение распознавателей грамматик подробно описывается в [4].

Построим распознаватель мостов в графе доступов. При этом моет t * будем рассматривать как частный случай моста t *Нн t *, то сеть для поиска этих двух типов мостов будем использовать один алгоритм.

Введем ряд обозначений. Начальную и конечную вершину моста будем обозначать S(в) и F(e) соответственно. Вершину, в которой мы находимся в данный момент, будем обозначать C (в), а рассматриваемую вер шину — W (в). Дугу между вершинами ві и в2, содержащее право Н", обозначим НН (в1,в2). Для дуг с правами t и t также введем соответствующие обозначения t (e1,e2) и t (ві,в2).

Для начала рассмотрим мосты t * и t *Н" t *.

Будем искать моет между островами графа 11 и 12. Пусть наш распознаватель находится в начальном состоянии, для которого определены вершины S(в) и F(в) (S(в) Є Е, F(в) Є /2). В самом начале работы C(в) = S(в). Рас-

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

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

166

Д.М. Бречка. Алгоритмы анализа безопасности состояний...

что прямой дуги между C(е) и F(в), содержащей право t или g, быть не может, так как в этом случае обе вершины принадлежали бы одному острову. Для поиска моста между данными вершинами нам необходимо рассмотреть вершины-объекты графа доступов. Обозначим множество всех объектов через О. Выберем из этого множества вершину W(е) и рассмотрим, каким образом эта вершина может быть связана с C(е). Так как мы ищем моет t *ДД t *, то нас интересует, существует ли дуга t ил и — между C (е) и W (е). Если такой дуги нет, то нам необходимо выбрать для рассмотрения следующую вершину W(е) из О. Возможна ситуация, когда мы рассмотрели все вершины из О, но подходящей так и не нашли, в этом случае нам следует выбрать другую вершину S(е) Є 1\. Если же мы рассмотрели все вершины из Д и О, но так и не нашли ни одной подходящей нам пары, то, очевидно, моста не существует и распознаватель переходит в конечное состояние е отрицательным результатом. Назовем это состояние E-, Допустим, что, перебирая пары C(е) - W(е), мы обнаружили дугу содержащую право t ( t (C(c),W(е)), это значит, что мы нашли дугу, которая может являться частью моста. Нам необходимо запомнить эту дугу, для этого пометим ее и вершину W(е) положительно, сделаем рассматриваемую вершину текущей (W(е) = C(е)) и переведем распознаватель в новое состояние, которое будем называть T + . Нами осталась не рассмотрена ситуация, когда, перебирая пары C(е) - W(е), мы обнаружили дугу содержащую право — — (C^),W(е)), В этом случае пометим дугу и вершину W(е) положительно, выполним присвоение W(е) = C(е) и переведем распознаватель в новое состояние, которое будем называть G+.

Допустим, что в ходе своего функционирования распознаватель перешел в состояние T + . В первую очередь нам необходимо проверить, существуют ли Д-дуги между текущей и конечной вершиной моста. Пусть существует дуга t (C^),F(е)), это означает, что распознаватель обнаружил моет типа t *; необходимо пометить эту дугу и перевести распознаватель в новое состояние, которое назовем E+. Другой вариант предполагает, что существует дуга д (C ^),F (е)), это означает, что распознаватель обнаруж ил моет типа t *~g. Пометим данную дугу и вершину положительно и переведем распознаватель в состояние E+, Рассмотрим варианты, когда tg-дуги между текущей и конечной вершиной моста не существует, В этом случае распознаватель выбирает вершину W(е) Є О из тех, что еще не помечены. Пусть существует дуга t (C(е), W(е))

— пометим дугу и вершину W(е) положительно, сделаем рассматриваемую вершину текущей (C(е) = W(е)); распознаватель остается в соетоянии T + и выбирает следующую вершину W(е) Є О. Если существует дуга Дд(C^),W(е))

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

—Д

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

—— —д.

Рассмотрим состояние T -, Распознаватель попадает в него из состояния T +

Математические структуры и моделирование. 2009. Вып. 20.

167

в том случае, если, рассмотрев все непомеченные вершины множества O, он не нашел дуг t ил и — между вершиной C (е) и W (e). Попробуем выбрать вершину, отличную от текущей. Для этого пометим C(е) отрицательно, сделаем текущей предыдущую помеченную положительно вершину (C(е) = C(е — 1)) и вернем распознаватель в состояние T + , Текущую вершину необходимо пометить отрицательно для того, чтобы распознаватель вновь не выбрал ее в состоянии T + . Возможна ситуация, когда, выбирая предыдущую вершину, мы попадем в вершину S(е). Это, очевидно, означает, что между вершинами S(е) и F(е) не существует моста и необходимо вернуть распознаватель в начальное состояние для выбора других S(е) и F(е).

Пусть в ходе своей работы распознаватель перешел в состояние G+, Проверим, существует ли дуга t между вершинами C(е) и F(е). Если да, то это означает, что обнаружен мост t * д t *. Пометим данную дугу положительно и переведем распознаватель в состояние E+. Если нужной нам дуги между C(е) и F(е) не существует, то необходимо выбрать непомеченную вершину W(е) из множества O. Если существует дуга t (C(е), W(е)), то пометим эту дугу и вершину W(e) положительно, присвоим C(е) = W(е), и переведем распознаватель в новое состояние, которое будем называть T + . Все прочие варианты нас не интересуют, однако возможна такая ситуация, когда мы перебрали все непомеченные вершины из множества O, но так и не нашли дуги, содержащей право t , В этом случае нам придется пометить текущую вершину отрицательно, выбрать в качестве текущей предыдущую помеченную положительно (C(е) = C(е — 1)) и вернуться в состояние T +.

Если распознаватель попал в состояние T + , то нам следует проверить, существует ли дуга t (C(е), F(е)). Если это так, то это значит, что обнаружен мост t *—_ t *; пометим данное ребро положительно и перейдем в состояние E+. В противном случае выберем непомеченную вершину W(е) Є O и проверим, существует ли дуга t (C(е), W(е)). Если такая дуга существует, то пометим вершину W(е) и дугу положительно, приевоим C(е) = W(е) и вновь перейдем в состояние T +. В случае, когда, перебрав все непомеченные вершины из O, мы не нашли нужной дуги (попали в тупик), необходимо попробовать вернуться к предыдущей помеченной положительно вершине. Для этого переведем распознаватель

4-

в новое состояние, которое назовем T -,

Опишем состояние T — Распознаватель переходит сюда из состояния T +, если, перебрав все непомеченные вершины из O, он не смог обнаружить дуги t между C(е) и W(е). Пометим текущую вершину отрицательно, вернемся к предыдущей помеченной положительно вершине (C(е) = C(е — 1)) и вновь перейдем в состояние T +. Если при выборе предыдущей вершины мы попадем

и ---

в вершину, которой закончилась дуга д , то нам придется пометить ее отрицательно и вернуться в состояние T +,

Графическая схема работы распознавателя представлена на рисунке 1,

Для поиска моста t * д t можно воспользоваться описанным распознавателем, если заменить состояние G + на состоявие G+.

168

Д.М. Бречка. Алгоритмы анализа безопасности состояний...

Построим распознаватель моста t *. Будем искать мост между оетровами I1 и /2. В начальном состоянии выберем S(e) Є I1; F(e) Є I2, приевоим C(e) = S(e). Очевидно, что в данном случае не существует дуги t (C(e),F(e)), иначе вершины S(e) и F(e) принадлежали бы одному острову, Выберем вершину W(e) из множества О и проверим, существует ли дуга t (C(e), W(e)). Если дуга существует, то пометим данную дугу и вершину W(e) положительно, присвоим C(e) = W(e) и переведем распознаватель в состояние T +; иначе выберем следующую вершину W(e). Если мы рассмотрели все вершины из О, но при этом так и не нашли ни одной дуги t (C(e),W(e)), то попробуем выбрать другую вершину S(e) Є Д. Наконец, когда мы перебрали все вершины из /1 и не нашли ни одной дуги t (C(e), W(e)) — это значит, что моста не существует; переведем распознаватель в состояние E-.

Пусть распознаватель попал в состояние Т+. Проверим, существует ли дуга t (C(e),F(e)), Если да, то это значит, что обнаружен мост t *, пометим дугу положительно и переведем распознаватель в состояние E +, Если такой дуги нет, то выберем вершину W(e) Є О и проверим, существует ли дуга t (C(e), W(e)). Если такая дуга есть, то пометим ее и вершину W(e) положительно, присвоим C(e) = W(e) и вновь переведем распознаватель в состояние T + ; иначе выберем следующую вершину W(e). Когда мы рассмотрим все вершины из О, но при этом не обнаружим ни одной дуги t (C(e),W(e)), то попробуем вернуться к предыдущей помеченной положительно вершине, для этого переведем распо-

Т-

знаватель в состояние T -,

Т-

В состоянии T- необходимо пометить текущую вершину отрицательно и вернуться к предыдущей положительной вершине (C(e) = C(e — 1)), после чего

Математические структуры и моделирование. 2009. Вып. 20.

169

нужно перевести распознаватель обратно в T + , Если при переходе к предыдущей вершине мы оказались в вершине S(e), то необходимо вернуться в начальное состояние для выбора другой S(e) Є І\.

Графическая схема работы распознавателя для поиска моста t * представлена на рисунке 2,

Рис. 2. Распознаватель моста t

4.3. Поиск начального и конечного пролета моста

Нами остались не рассмотрены алгоритмы поиска начального и конечного пролета моста.

Рассмотрим поиск начального пролета. По определению 5 начальный пролет моста — это tg-путь, проходящий через вершины-объекты, началом которого является вершина-субъект, а концом — вершина-объект; при этом словарная запись пути имеет вид t *~g . Построим распознаватель начального пролета моста.

В первую очередь нам необходимо определить вершину-объект, которая будет являться концом пролета. Обозначим эту вершину F(e). Будем искать начальный пролет моста от острова I до вершины F(e), В начальном состоянии нам необходимо выбрать вершину S(e) Є I, Также нужно выбрать рассматриваемую вершину, в начальном состоянии это будет вершина S(e) (C(e) = S(e)). После этого проверим, существует ли дуга ~g (C(e),F(e)). Если такая дуга существует — это значит, что начальный пролет моста обнаружен, пометим дугу положительно и переведем распознаватель в состояние E+. Если такой дуги нет, то выберем вершину W(e) Є O и проверим, существует ли дуга t (C(e), W(e)).

170

Д.М. Бречка. Алгоритмы анализа безопасности состояний...

Если дуга есть, то пометим ее и вершину W(e) положительно, выполним присвоение C(e) = W(e) и перейдем в состояние T +. Если дуги нет, то выберем следующую вершину W(e). Если при переборе всех вершин из О дуги t (C(e), W(e)) не обнаружится, то выберем другую вершину S(e). Когда будут рассмотрены все вершины из I, но при этом распознаватель будет находиться в начальном состоянии — мы выясним, что начального пролета между островом I и вершиной F(e) не существует; переведем распознаватель в состояние E-.

Если распознаватель находится в состоянии T + , то в первую очередь нужно

проверить, существует ли дуга — (C(e),F(e)). Если существует, то, очевидно,

мы нашли начальный пролет моста; пометим дугу положительно и перейдем

в состояние E+. Если такой дуги нет, то выберем следующую непомеченную

вершину W(e) из O, проверим, существует ли дуга t (C(e), W(e)). Так же, как

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

рассматриваемую вершину положительно, выполняем присвоение C(e) = W(e)

и вновь переходим в состояние T +. Если же дуги нет, то переходим в состояние ——

T -

-—

Состояние T - также аналогично ранее рассмотренным. Здесь мы помечаем текущую вершину отрицательно, переходим к предыдущей положительной вершине (C(e) = C(e — 1)) и возвращаемся в состояние T +. Еели C(e — 1) == S(e), то переходим в начальное состояние.

Граф работы распознавателя представлен на рисунке 3,

Рис. 3. Распознаватель начального пролета моста

Наконец, рассмотрим алгоритм для поиска конечного пролета моста. По определению 6, конечный пролет моста — это tg-путь, проходящий через вершины-объекты, началом которого является вершина-субъект, а концом — вершина-объект; при этом словарная запись пути имеет вид t *,

Как и в предыдущих случаях, построим распознаватель для данного типа tg-пути. Для начала выберем конечную вершину моста из F(e) Є Ои началь-

Математические структуры и моделирование. 2009. Вып. 20.

171

ную вершину S(e) Є I, В начальном состоянии присвоим C(e) = S(e) проверим наличие дуги t (C(e), F(e)). Если дуга есть, то пометим ее положительно и перейдем в состояние E + (конечный пролет найден), если нет — выберем вершину W(e) Є О. Проверим наличие дуги t (C(e),W(e)), если такая дуга сеть — перейдем в состояние T +, в противном случае выберем следующую W(e). Вновь стоит учесть ситуацию, когда при переборе всех вершин из О мы не нашли нужной дуги, в этом случае нужно выбрать следующую вершину S(e) Є I, Не забудем также, что в случае перебора всех субъектов из I и всех объектов из О мы можем не найти ни одной дуги t (C(e), W(e)) и тогда, следует перевести распознаватель в состояние E-,

Состояние T + аналогично ранее рассмотренным. Здесь проверяется наличие дуги t (C(e),F(e)), и в положительном случае распознаватель переводится в состояние E+. В отрицательном случае проверяется наличие дуги t (C(e),W(e)), и если дуга сеть, то она и W(e) помечаются положительно, рассматриваемая вершина делается текущей (C(e) = W(e)), и распознаватель

возвращается в T + . Если перебрали все вершины из О, а дуги t (C(e), W(e))

——

не нашли, то переходим в состояние T -,

——

В состоянии T- переходим к предыдущей помеченной положительно вершине и возвращаемся в T+. Также не следует забывать про возможность перехода в начальное состояние в случае, когда C(e — 1) == S(e).

Граф работы распознавателя представлен на рисунке 4,

Рис. 4. Распознаватель конечного пролета моста

Мы рассмотрели алгоритмы для поиска tg-путей, островов и мостов в графе доступов. Теперь мы можем построить формальный автомат, который смог бы выяснить, является ли предикат «возможен доступ»(a, x, y, Go) истинным для данного состояния системы. То есть этот автомат может показать, является ли данное состояние компьютерной системы безопасным.

172

Литература

1. Девянин, П.Н. Модели безопасности компьютерных систем: Учебное пособие для студентов высших учебных заведений / П.Н. Девянин. - М.: Издательский центр «Академия», 2005.

2. Гайдамакин, Н.А. Разграничение доступа к информации в компьютерных системах / Н.А. Гайдамакин. - Е.: Издательство Уральского университета, 2003.

3. Майника, Э. Алгоритмы оптимизации на сетях и графах / Э. Майника - М.: Издательство «Мир», 1981.

4. Гордеев, А.В. Системное программное обеспечение. Учебник / А.В. Гордеев, А.Ю. Молчанов - СПб.: «Питер», 2001.

i Надоели баннеры? Вы всегда можете отключить рекламу.