ПРИКЛАДНАЯ ДИСКРЕТНАЯ МАТЕМАТИКА
2008 Математические основы компьютерной безопасности № 1(1)
УДК 004.94
ПРИМЕНЕНИЕ ДП-МОДЕЛЕЙ ДЛЯ АНАЛИЗА ЗАЩИЩЕННОСТИ СЕТЕЙ
Д.Н. Колегов
Томский государственный университет E-mail: [email protected]
В статье вводится понятие замыкания ДП-моделей. Описываются и обосновываются алгоритмы их построения. Рассматривается применение таких моделей для анализа защищенности компьютерных сетей. Предлагаются методы анализа путей распространения прав доступа и информационных потоков. В рамках теории ДП-моделей формализуются модели топологического анализа защищенности REM и VTG.
Ключевые слова: ДП-модель, ФАС ДП-модель, модель Take-Grant, замыкание, топологический анализ защищенности, графы атак, моделирование атак.
В современных методологиях анализа защищенности компьютерных систем (КС) учитывается «топология» КС - взаимосвязь объектов и субъектов КС, их свойств и характеристик. Такой анализ защищенности называется топологическим, а автоматизированные средства, его выполняющие, топологическими сканерами безопасности.
Основной математической моделью топологического анализа защищенности является граф атак, который строится на основе модели нарушителя, конфигурации сети (правил фильтрации межсетевого экрана (МЭ), маршрутизации, обнаружения и предотвращения атак, достижимости хостов и т.д.), результатов сканирования сети, анализа уязвимостей или теста на вторжение. Центральными задачами являются синтез графа атак и его анализ (вероятностный, минимизационный и т.д.).
Граф атак содержит все известные траектории (сценарии, пути) атак реализации нарушителем угроз. Результатом его анализа может являться:
- перечень успешных атак, не обнаруживаемых IDS;
- соотношение реализуемых мер безопасности и уровня защищенности сети;
- перечень наиболее критичных уязвимостей;
- перечень мер, позволяющих предотвратить использование уязвимостей в ПО, для которого отсутствуют обновления;
- наименьшее множество мер, реализация которых сделает сеть защищенной.
Графы атак также используются при расследовании компьютерных инцидентов, для анализа рисков и корреляций предупреждений систем обнаружения атак. Ключевой проблемой построения графа атак является масштабируемость - возможность построения графа атак для сети с большим числом хостов и уязвимостей.
В настоящее время представлено значительное многообразие подходов к синтезу и анализу графов атак [1]. Большинство работ посвящено синтезу эффективных методов построения графов атак и лишь единицы -формальным моделям анализа современных КС, исследованию и математическому обоснованию их свойств. Так, Shahriary, Sadoddin, Jalili и Zakeri [2] использовали положения классической модели Take-Grant для синтеза полиномиального алгоритма построения графа атак путем построения замыкания графа доступов модели Take-Grant. В то же время известно [3], что модель Take-Grant является неадекватной для анализа безопасности современных КС. Одной из современных моделей анализа безопасности КС с дискреционным управлением доступа является развитие модели Take-Grant - ДП-модель и ее расширения.
Основой всех ДП-моделей является базовая ДП-модель. В ней моделируемая КС представляется абстрактной иерархической системой, состоящей из сущностей, каждое состояние которой представляется графом доступов. Переход из состояния в состояние осуществляется в результате применения одного из правил преобразования графа доступа: take_right(), grant_right(), remove_right(), own_take(), own_remove(), create_subject(), delete_entity(), rename_entity(), access_read(), access_write(), access_append(), fow(), fnd(), post(), pass() и control(). Для описания условий возникновения информационных потоков writem, writet между сущностями используются права доступа readr, write,, appendГ, executer, ownr и виды доступа reada, writea, appenda. Для описания условий передачи между сущностями КС прав доступа используется право доступа own,. Субъекты могут создавать новые сущности и получать к ним любые права доступа.
С помощью ДП-модели анализируются условия передачи прав доступа и реализации информационных потоков по памяти и по времени при кооперации субъектов и без кооперации доверенных и недоверенных субъектов, а также предлагаются методы их предотвращения. На основе базовой ДП-модели путем изменения правил преобразования состояний строятся: ДП-модель без кооперации субъектов (БК ДП-модель), ДП-
модель с блокирующими доступами доверенных субъектов (БД ДП-модель) и ДП-модель с функциональноассоциированными сущностями (ФАС ДП-модель). Последняя позволяет анализировать условия получения прав доступа к объекту при реализации информационных потоков по памяти, что и позволяет успешно использовать ее при анализе защищенности современных КС.
1. Обозначения и определения
В соответствии с [3] будем использовать следующие обозначения и определения: E = O u C - множество сущностей, где O - множество объектов, C - множество контейнеров и O n C = 0; S с E - множество субъектов; Rr = {readr, write,, appendr, executer, own,} - множество видов прав доступа, где readr - право доступа на чтение из сущности, writer - право доступа на запись в сущность, appendr - право доступа на запись в конец сущности, execute,. - право доступа на выполнение (активизацию) сущности, ownr - право доступа на владение сущностью, позволяющее субъекту-владельцу передавать права доступа к сущности другим субъектам или удалить сущность; Ra = {reada, writea, appenda} - множество видов доступа, где reada - доступ на чтение из сущности, writea - доступ на запись в сущность, appenda - доступ на запись в конец слова, содержащегося в сущности; Rf = {writem, write} - множество видов информационных потоков, где writem - информационный поток по памяти на запись в сущность, writet - информационный поток по времени на запись в сущность; Rraf = Rr u Ra u Rf - множество видов прав доступа, видов доступа и видов информационных потоков, при этом множества Rr, Ra, Rf попарно не пересекаются.
Для заданного на E отношения частичного порядка < функция H: E ^ 2е называется функцией иерархии сущностей, если она удовлетворяет условиям:
1) для любой сущности e е H(c) имеет место e < с и не существует сущности-контейнера d е C, такой, что e < d и d < c;
2) для любых сущностей e1, e2 е E если ei Ф e2, то H(ei) n H(e2) = 0, и если ei < e2, то или ei, e2 е E \ S, или e1, e2 е S;
3) H(o) = 0 для любого o е O; H(e) с E \ S для любого e е E \ S; H(s) с S для всех s е S.
Пусть определены множества S, E, R с S x E x Rr, A с S x E x Ra, F с E x E x Rf и функция иерархии сущностей H. Конечный помеченный ориентированный граф без петель G = (S, E, R u A u F, H), где элементы множеств S, E являются вершинами графа, а элементы множества R u A u F ребрами, называют графом доступов.
Пусть также Z(G*, OP) есть система, каждое состояние которой представляется графом доступов и где G* - множество всех возможных состояний, OP - множество правил преобразования состояний [3]. Обозначим G - op G' - переход системы Z(G*, OP) из состояния G в состояние G' с использованием правила преобразования состояний op е OP и Z(G*, OP, G0) - систему Z(G*, OP) с начальным состоянием G0.
Пусть, наконец, подмножества La с S x O x Ra, Lr с S x O x Rr, Lf с O x O x Rf являются множествами соответственно разрешенных доступов субъектов к объектам, разрешенных прав доступа субъектов к объектам, разрешенных информационных потоков между объектами и подмножества Na с S x O x Ra, Nr с S x O x Rr и Nf с O x O x Rf суть множества соответственно запрещенных доступов субъектов к объектам, запрещенных прав доступа субъектов к объектам и запрещенных информационных потоков между объектами КС. При этом выполняются условия: La n Na = 0, La u Na = S x O x Ra, Lr n Nr = 0, Lr u Nr = S x O x Rr, Lf n Nf = 0 и Lf u Nf = O x O x Rf.
Сущность называется функционально-ассоциированной с субъектом, если от нее зависит вид преобразования данных, реализуемого субъектом в данном или некотором последующем состоянии системы Z(G*, OP).
Элементы множеств Na, Nr, Nf будем называть угрозами нарушений безопасности в КС. Нарушением безопасности в КС называют ее переход в состояние, в котором либо получен запрещенный доступ из Na, либо произошла утечка запрещенного права доступа из Nr, либо реализован запрещенный информационный поток из Nf.
2. Построение замыкания ДП-моделей
Для проверки истинности предикатов can_share(), can_write_memory(), can_steal() и др. предикатов в ДП-моделях [3] наиболее эффективно использовать алгоритмы, позволяющие осуществлять проверку истинности указанных предикатов для всех пар вершин одновременно и проводить анализ путей распространения прав доступа и информационных потоков. Такие алгоритмы реализуют преобразование графа доступов в его замыкание.
При построении замыкания графа доступов необходимо выполнить два стандартных для данной задачи шага [4]. Первый шаг направлен на устранение возможности применения немонотонных правил преобразования состояний и обосновывается тем, что при анализе условий передачи прав доступа, реализации информационных потоков по памяти и по времени возможно использование только монотонных правил преобразования состояний [3]. Поэтому при построении замыкания графа доступов немонотонные правила можно
исключить из рассмотрения. После этого граф доступов может только расти. Для того чтобы число вершин в графе не увеличивалось до бесконечности, каждый субъект должен иметь объект с правом владения на него. Этого будет достаточно для передачи субъектом прав доступа, создания субъектов или реализации информационных потоков, после чего в графе число вершин увеличиваться не будет, а число ребер между парой вершин будет ограничено числом прав доступа, видов доступа и информационных потоков.
На основе схемы построения замыкания графа доступов модели Take-Grant [5] дадим определения, построим и обоснуем алгоритмы замыкания графа доступов ДП-моделей.
Пусть G = (S, E, R u A u F, H) - граф доступов, где для всех sєS, zєE\ S, таких, что (s, z, writer)єR или (s, z, append,)єR, существуетyєE, что y < z и (s, y, own,)єR. Тогда own-замыканием графа G будем называть граф Gown = (S , E, Rown u A u Fown, H), полученный из G применением последовательности правил take_right() и grant_right(), если при этом выполнены следующие условия:
- для всех ребер (a, Ъ, a)єR0wn \ R: a=own,;
- для всех ребер (c, d, в)єРкп \ F: p=writet;
- все ребра (c, d, P^Fwn\ F получены в результате применения правил take_right() и grant_right();
- применение последовательности правил take_right() и grant_right() не приводит к появлению новых ребер указанных видов.
Пусть G = (S, E, R u A u F, H) - граф доступов, где для всех sєS, zєE \ S, таких, что (s, z, writer)єR или (s, z, append,)єR, существует yєE, что y < z и (s, y, own,)єR. Тогда tgo-замыканием графа G будем называть граф GIg0 = (S, E, R‘g0 u A u F‘g0, H), полученный из G применением последовательности правил take_right(), grant_right() и own_take(), если при этом выполнены условия:
- для всех ребер (a, Ъ, a) єR‘S0 \ R: aєR,;
- для всех ребер (c, d, Р)є^0\ F: p=writet;
- все ребра (c, d, Р)є^°\ F получены в результате применения правил take_right(), grant_right() и own_take();
- применение последовательности правил take_right(), grant_right() и own_take() не приводит к появлению новых ребер указанных видов.
Пусть G = (S, E, R u A u F, H) - граф доступов, где для всех sєS, zєE \ S, таких, что (s, z, writer)єR или (s, z, append,)єR, существуетyєE, что y < z и (s, y, ow«,)eR. Тогда замыканием (access-замыканием) графа G
access access access access
будем называть граф G = (S, E, R u A u F , H), полученный из G применением последова-
тельности правил take_right(), grant_right(), own_take(), access_read(), access_write(), access_append(), flow(), find(), post() и pass(), если при этом применение к графу Gaccess указанных правил не приводит к появлению в нем новых ребер.
Пусть G = (S, E, R u A u F, H) - граф доступов, где для всех sєS, zє E \ S, таких, что (s, z, write,)єR или s, z, append,)єR, существуетyєE, что y < z и (s, y, own,)єR. Тогда control-замыканием графа G будем называть граф GC0ntr01 = (S, E, Rc0ntr0 u AC0ntr01 u p00*0, H), полученный из G применением последовательности правил take_right(), grant_right(), own_take(), access_read(), access_write(), access_append(), flow(), find(), post(), pass() и control(), если при этом применение к графу Gc0ntr01 указанных правил не приводит к появлению в нем новых ребер.
Опишем и обоснуем алгоритмы построения замыкания графов доступов ДП-моделей.
2.1. Построение замыкания графа доступов базовой ДП-модели
Алгоритм 1 построения own-замыкания графа доступов.
1. Для всех sєS, zє E \ S, таких, что (s, z, write,)єR или (s, z, append,)єR, последовательно применить
правила create_entity(x, y, z), own_take(execute,, x, y), create_su^ect(x, v, y). Новые сущности и ребра занести в S, E, R и F, определить H с учетом изменения иерархии сущностей.
2. L = {(x, y, own,)єR}, N = 0.
3. Выбрать из списка L первое ребро (x, y, own,), занести x иy в N, удалить ребро (x, y, own,) из L.
4. Для всех вершин zєN проверить возможность применения правил take_right() и grant_right() на вершинах x, y, z с использованием ребра (x, y, own ). Если в результате применения правил получаются новые ребра вида (a, Ъ, own,), где {a, Ъ} с {x, y, z}, то занести их в конец L и R0wn, а ребра вида (a, Ъ, writet) в Fvwn.
5. Если L не пусто, перейти на шаг 2.
Замечание. При построении замыкания графа доступов в модели Take-Grant первый шаг алгоритма построения tg-замыкания заключается в применении правила create(s, o, {t, g, r, w}) для каждого sєS, что достаточно для анализа передачи прав доступа и информационных потоков. Так как ДП-модель является иерархической, то для создания сущности z в сущности-контейнере e субъектом x необходимо, чтобы (x, e, write,)єR или (x, e, appendr)єR. При этом будут реализованы соответствующие информационные потоки по времени. В состоянии, изображенном на рис.1, субъект y может сначала получить права доступа к сущно-
сти-контейнеру е, а затем с помощью них создать сущность. Однако можно видеть, что субъект у может получить все права доступа к сущности г и реализовать все возможные информационные потоки по времени, поэтому для субъекта у нет необходимости осуществлять правило преобразования стеаїеепШуО). Точно так же в случае с созданием субъектов на шаге 1 сгеаіе_яиЬ]есі(х, V, у) можно реализовать информационные потоки по времени от V к у с помощью правила роБііу, х, V). Таким образом, шаг 1 в алгоритме является достаточным.
+ own_take {read,, x, z), take_right {read,, y, x, z), access_read{y, z)
+ post {y, x, v)
writet
Рис. 1
Теорема 1. Алгоритм 1 корректно строит own-замыкание графа доступов.
Доказательство. Пусть G' = (S, E, R' u A u F, H) - граф доступов, полученный из G = (S, E, R u A u F, H) в результате применения алгоритма 1. Пусть G0wn = (S, E, R0wn u A u Fwn, H) есть own-замыкание графа G. Необходимо доказать, что G' = G0wn. Покажем, что R0wn = R'. Доказательство проведем методом от противного. Пусть существует ребро (x, y, own,) є R0wn \ R'. Тогда существуют ребра (a, b, own,), (c, d, own,) из R0wn, применение к которым правила take right или grant right привело к появлению ребра (x, y, own,). Если (a, b, own,), (c, d, own,)єR', то, согласно описанию алгоритма 1, (x, y, own,)єR' и получаем противоречие. Значит, или (a, b, own,)єR0wn\ R', или (c, d, own,) є R0wn\ R'. Вместе с этим граф G0wn получен из G в результате применения конечной последовательности правил take_right() и grant_right(), и ребра (a, b, own,), (c, d, own,) должны быть получены раньше, чем ребро (x, y, own,). Проводя рассуждения подобным образом для
e
z
e
z
e
z
ребер, с использованием которых получены ребра (a, b, own,), (c, d, own,), придем к противоречию в связи с тем, что все ребра графа G изначально содержатся в графе G'. Таким образом, R0wn = R'. А так как ребро (x, y, write,) получается в результате применений правил take_right() или grant_right(), то и Fwn = F . ■
Алгоритм 2 построения tgo-замыкания графа доступов.
1. Выполнить алгоритм 1.
2. Для всех ребер вида (x, y, ownr)єR применить правило own_take(a,, x, y), a^R, \{own,}, и если полученное ребро (x, y, a,) g R, занести его в R‘g0.
3. Для каждой пары ребер вида (x, y, own,), (y, z, a,^R применить правило take_right(a,, x, y, z), и если полученное ребро (x, z, a,) g R, то занести его в Rtg0, а ребро (y, x, write,) - в FIg0.
4. Для каждой пары ребер вида (x, y, own,), (x, z, a,^R применить правило grant_right(a,, x, y, z), и если полученное ребро (y, z, a,) g R, то занести его в Rtg0, а ребро (x, y, write,) - в Ftg0.
5. Для каждой пары ребер вида (x, y, own,), (y, z, a,^R применить правило take_right(a,, x, y, z), и если полученное ребро (x, z, a,) g R, то занести его в Rtg0, а ребро (y, x, write,) - в FIg0.
Теорема 2. Алгоритм 2 корректно строит tgo-замыкание графа доступов.
Доказательство. Для построения tgo-замыкания графа доступов всем субъектам графа доступов после выполнения алгоритма 1 необходимо выполнить следующие шаги:
1) используя правило own_take(), забрать права доступа;
2) используя правило grant_right(), раздать права доступа и, используя правило take_right(), забрать права доступа;
3) используя правило take_righ()t, раздать права доступа и, используя правило grant_right(), забрать права доступа;
Объединяя шаги 2 - З, получаем алгоритм 2. ■
Алгоритм 3 построения access-замыкания графа доступов.
1. Выполнить алгоритм 2.
2. Для всех ребер вида (x, z, write,')єR, где xєS, а y, zєE и yєH(z), применить правило rename_entity(x, y, z), все полученные новые ребра занести в F.
3. Для всех ребер вида (x, y, read,)єR, (x, y, read,) g A применить правило access_read(x, y), полученные новые ребра (x, y, read,) и (y, x, writem), {(x, e, write): e є E, x Ф e и y < e} занести в A“ и F соответственно.
4. Для всех ребер вида (x, y, write,) єR, (x, y, write,) g A применить правило access_write(x, y), полученные ребра (x, y, write,) и (x, y, writem), {(x, e, write,): e є E, x Ф e иy < e} занести в Aa и F соответственно.
5. Для всех ребер вида (x, y, append,)єR, (x, y, append,) g A применить правило access_append(x, y), полученные ребра (x, y, append,) и (x, y, writem), {(x, e, write): e є E, x Ф e иy < e} занести в A“ и F соответственно.
6. L = {(x,y, a)eRu F}, N = 0.
7. Выбрать из списка L первое ребро (x, y, a), занести x иy в N, удалить ребро (x, y, a) из L.
8. Для всех вершин z, y^N проверить возможность применения правилаfow() на четверке вершин x, y, y', z с использованием ребер (x, y, a) и (z, y', в) и правил post(), pass(), find() на тройке вершин x, y, z с использованием ребра (x, y, a). Если в результате применения правил получаются новые ребра вида (a, b, у), где {a, b} с {x, y, y', z}, у є {writem, write,}, то занести их в конец L и F.
9. Если L не пусто, перейти на шаг 6.
Теорема 3. Алгоритм З корректно строит access-замыкание графа доступов.
Доказательство. После выполнения шагов 1 - S алгоритма З в графе доступов будут все ребра вида (x, y, a^A, где aє {read,, write,, append,}. Шаги S - 8 алгоритма З аналогичны шагам алгоритма 1, в силу корректности которого по теореме 1 приходим к истинности теоремы З. ■
2.2. Построение замыкания графа доступов БК ДП-модели
Перечислим основные положения БК ДП-модели:
- субъект uєLS называют доверенным, если он обладает правом доступа владения к каждой сущности системы;
- каждый субъект системы Z(G*, OP) является либо доверенным, либо недоверенным;
- доверенные субъекты системы Z(G*, OP) не участвуют в реализации информационных потоков по времени, т.е. во всех состояниях отсутствуют информационные потоки по времени, исходящие из доверенных субъектов;
- правила преобразования состояний take_right(a,, x, y, z), grant_right(a,, x, y, z) могут быть использованы только недоверенными субъектами.
В соответствии с данными положениями модифицируются условия и результаты применения правил преобразования состояний базовой ДП-модели [З, табл. 2.1]. Опишем и обоснуем алгоритмы построения замыкания графа доступов БК ДП-модели.
Алгоритм 4 построения own-замыкания графа доступов.
1. Для всех sєS, zєE\ S, таких, что (s, z, writer)єR или (s, z, appendr)єR, последовательно применить правила create_entity(x, y, z), own_take(execute,, x, y), create_subject(x, v, y). Новые сущности и ребра занести в S, E, R и F, определить H с учетом изменения иерархии сущностей.
2. L = {(x, y, own,)єR}, где xєNS, N = 0.
3. Выбрать из списка L первое ребро (x, y, own,), занести x иy в N, удалить ребро (x, y, own,) из L.
4. Для всех вершин zєNnNs проверить возможность применения правил takeright и grantright на вершинах x, y, z с использованием ребра (x, y, own,). Если в результате применения правил получаются новые ребра вида (a, b, own,), где {a, b} с {x, y, z}, то занести их в конец L и Rown, а ребра вида (a, b, write,) для aєNS - в Fwn.
5. Если L не пусто, перейти на шаг 2.
Теорема 4. Алгоритм 1 корректно строит own-замыкание графа доступов.
Доказательство теоремы выполняется аналогично доказательству теоремы 1 с учетом того, что только недоверенные субъекты могут инициировать выполнение правил преобразования состояний take_right()и grant_right(). ■
Алгоритм S построения tgo-замыкания графа доступов.
1. Выполнить алгоритм 4.
2. Для всех ребер вида (x,y, own,)єR применить правило owntake (a,, x,y), a,єR,\{own,}; если полученное ребро (x, y, a,) g R, занести его в Rtg0.
3. Для каждой пары ребер вида (x,y, own,), (y, z, a,)єR, где xєNS, применить правило take right (a,,x,y,z), и если полученное ребро (x, z, a,) g R, то занести его в Rtg0, а ребро (y, x, write,), где у єNS, - в FIg0.
4. Для каждой пары ребер вида (x,y, own,), (x, z, a,)єR, где xєNS, применить правило grant right (a,, x,y, z), и если полученное ребро (y, z, a,) g R, то занести его в Rtg0, а ребро (x, y, write,) , где xєNS, - в Ftg0.
5. Для каждой пары ребер вида (x, y, own,), (y, z, a,)єR, где xєNS, применить правило take right (a,, x, y, z), и если полученное ребро (x, z, a,) g R, то занести его в Rtg0, а ребро (y, x, write,) , где уєNS, - в FIg0.
Теорема S. Алгоритм S корректно строит tgo-замыкание графа доступов.
Доказательство теоремы выполняется аналогично доказательству теоремы 2 с учетом того, что инициировать выполнение правила own take могут все субъекты, а правил take_right() и grant_right() - только недоверенные субъекты. ■
Алгоритм б построения access-замыкания графа доступов.
1. Выполнить алгоритм S.
2. Для всех ребер вида (x, z, write,)єR, где xєNS, аy, zєE иyєH(z), применить правило rename_entity(x, y, z), при получении новых ребер занести их в F.
3. Для всех ребер вида (x, y, read,)єR, (x, y, read,) g A применить правило access_read(x, y), полученные ребра (x, y, read,) и (y, x, writem) занести в A, и F соответственно. Если xєNS , то F = F u{(x, e, write,): e є E, x Ф e иy < e}.
4. Для всех ребер вида (x, y, write,)єR, (x, y, write,) g A применить правило access_write(x, y), полученные ребра (x, y, write,) и (x, y, writem) занести в A, и F соответственно. Если xєNS , то F = F u{(x, e, write,): e є E, x Ф e иy < e}.
5. Для всех ребер вида (x, y, append,)єR, (x, y, append,) g A применить правило access_append(x, y), полученные ребра (x, y, append,) и (x, y, writem) занести в A“ и F соответственно. Если xєNs , то F = F u{(x, e, write,): e є E, x Ф e иy < e}.
6. L = {(x, y, a^Ru F}, N = 0.
7. Выбрать из списка L первое ребро (x, y, a), занести x иy в N, удалить ребро (x, y, a) из L.
8. Для всех вершин z, y^N проверить возможность применения правила flow на четверке вершин x, y, y', z
с использованием ребер (x, y, a) и (z, у', в) и правил post, pass, find на тройке вершин x, y, z с использованием ребра (x, y, a). Новые ребра вида (a, b, у), где {a, b} с {x, y, y', z}, ує {writem, write,}, получаю-
щиеся в зависимости от правила преобразования состояния БК ДП-модели и принадлежности субъектов к множествам LS и NS, занести в конец L и F.
9. Если L не пусто, перейти на шаг 6.
Теорема б. Алгоритм 6 корректно строит access-замыкание графа доступов.
Доказательство теоремы выполняется аналогично доказательству теоремы З с учетом правил преобразования БК ДП-модели. ■
2.З. Построение замыкания графа доступов БД ДП-модели
Перечислим основные положения и некоторые обозначения БД ДП-модели:
- любой доступ любого доверенного субъекта к сущности называется блокирующим;
- Eв с E - множество сущностей, к которым имеют доступ доверенные субъекты системы Z(G*, OP);
- H^ E ^ 2e - функция иерархии сущностей с учетом блокирующих доступов доверенных субъектов, сопоставляющая каждой сущности c є E множество сущностей H^c) с H(c), удовлетворяющее условию H^c) = {e є H(c): e <в c}, где <в есть заданное на множестве сущностей E отношение частичного порядка;
- блокирующие доступы доверенных субъектов к сущностям системы Z(G*, OP) препятствуют реализации информационных потоков по времени с использованием данных сущностей и иерархии сущностей, в которую входит данная сущность, за исключением случая, когда сущность является субъектом и участвует в реализации данного информационного потока по времени.
В соответствии с данными положениями модифицируются условия и результаты применения правил преобразования состояний базовой ДП-модели и БК ДП-модели [З, табл. З.2].
Опишем и обоснуем алгоритмы построения замыкания графа доступов БД ДП-модели. Для построения own-замыкания и tgo-замыкания графа доступов БД ДП-модели применяются алгоритмы 4 и S, так как в соответствии с положениями БД ДП-модели правила take_right(), grant_right(), own_take() применяются с условиями и результатами табл. 2.1 БК ДП-модели из [З].
Алгоритм 7 построения access-замыкания графа доступов.
1. Выполнить алгоритм S.
2. Для всех ребер вида (x, z, write,)єR, где xєNS, аy, zєE и yєH(z), применить правило rename_entity(x, y, z), при получении новых ребер с учетом блокирующих доступов занести их в F: F = F u {(x, z, write,), если z є E \ Eg} u {(x, e, write,): e є E \ E^ x ^ e и e <в y} u {(x, s, write,): s є S, x Ф s и (s, e, a,) є R, где e є E \ E& e <в y и a, є R,}.
3. Для всех ребер вида (x, y, read,)єR, (x, y, read,) g A применить правило access_read(x, y), полученные ребра (x, y, read,) и (y, x, writem) занести в A“ и F соответственно. Если xєNs , то F = F u{(x, e, write,): e є E \ EB, x Ф e иy <в e }. Если x є LS, то E'в = Eв u {y} и для всех e є E, таких, чтоy <в e, положить H#(e) = 0.
4. Для всех ребер вида (x, y, write,) єR, (x, y, write,) g A применить правило access_write(x, y), полученные ребра (x, y, write,) и (x, y, writem) занести в A“ и F соответственно. Если xєNS , то F = F u{(x, e, write,): e є E \ Eft x Ф e иy <в e }. Если x є LS n S, то E# = Eв u {y} и для всех e є E, таких, чтоy <в e: H^(e) = 0.
5. Для всех ребер вида (x, y, append,)єR, (x, y, append,) g A применить правило access_append(x, y), полученные ребра (x, y, append,) и (x, y, writem) занести в A“ и F соответственно. Если xєNS , то F = F u{(x, e, write,): e є E \ EB, x Ф e иy <в e}. Если x є LS, то Ев = Eв u {y} и для всех e є E, таких, что y <в e, положить H#(e) = 0.
6. L = {(x,y, a^RuF}, N = 0.
7. Выбрать из списка L первое ребро (x, y, a), занести x иy в N, удалить ребро (x, y, a) из L.
8. Для всех вершин z, у єN проверить возможность применения правила flow на четверке вершин x, y, y', z с использованием ребер (x, y, a) и (z, y', в) и правил post, pass, find на тройке вершин x, y, z с использованием ребра (x, y, a). Новые ребра вида (a, b, у), где {a, b} с {x, y, y', z}, ує {writem, write,}, получающиеся в зависимости от правила преобразования состояния БД ДП-модели и принадлежности субъектов к множествам LS и NS, занести в конец L и F.
9. Если L не пусто, перейти на шаг 6.
Теорема 7. Алгоритм 6 корректно строит access-замыкание графа доступов.
Доказательство теоремы выполняется аналогично доказательству теоремы З с учетом правил преобразования БД ДП-модели. ■
2.4. Построение замыканий графа доступов ФАС ДП-модели
Перечислим основные положения ФАС ДП-модели:
- сущность e є E называется функционально-ассоциированной с субъектом s є S в состоянии G, если данные в сущности e влияют на вид преобразования данных, реализуемого субъектом s в состоянии G;
- [s] с E - множество всех сущностей, функционально-ассоциированных с субъектом s, при этом выполняется условие s є [s];
- только информационный поток по памяти к сущности, функционально-ассоциированной с субъектом, приводит к изменению вида преобразования данных, реализуемого этим субъектом;
- функционально-ассоциированными с субъектом являются сущности, от которых зависит вид преобразования данных, реализуемого субъектом в данном или некотором последующем состоянии системы Z(G*,
OP), множество сущностей, функционально-ассоциированных с субъектом, не изменяется в процессе функционирования системы;
- если субъект реализовал информационный поток по памяти от себя к сущности, функциональноассоциированной с другим субъектом, то первый субъект получает право доступа владения ко второму субъекту (правило control(), табл. 4.1).
В соответствии с данными положениями модифицируются условия и результаты применения правил преобразования состояний БК ДП-модели [З, табл. 2.1].
Алгоритм S построения control-замыкания графа доступов.
1. L = {(y, z): z є[у],yєS, zєE}.
2. Выбрать из списка L первую пару (y, z) . Удалить пару (y, z) из L.
3. Для всех вершин xєS применить правило control(x, y, z). Если в результате этого появятся новые ребра
C0n,,0l
вида (x, y, own,), то занести их в RC0n,,0l.
4. Применить алгоритм 6 к графу GContro1 = (S, E, RContro‘ u AC0ntr°l u FC0ntr°l, H).
5. Если L не пусто, перейти на шаг 2.
Теорема S. Алгоритм 8 корректно строит control-замыкание графа доступов.
Доказательство теоремы выполняется аналогично доказательству теоремы З с учетом правил преобразования ФАС ДП-модели. ■
З. Анализ путей распространения прав доступа и информационных потоков
Пусть Go = (So, Eo, Ro u Ao u Fo, Ho) - начальное состояние системы Z(G*, OP) и a є Rr,f, x, y є Eo, где
x Ф y. Пусть существуют состояния G1, ... , Gn = (SN, En, Rn u AN u FN, HN) и правила преобразования со-
стояний op 1, ... , opN из OP такие, что Go \op1 G1 \op2 ■ ■ .^°pv GN и (x, y, a) є RN u AN u FN, где N > 0. Обозначим множество ребер, к которым применялись правила преобразования состояний BcRN u AN u FN, а множество применяемых правил - OPB. Пусть Pprс BxOPB и PpscOPBxB. Графом анализа системы Z(G*, OP) в состоянии Gn будем называть ориентированный граф GA(x, y, a) = (B u OPB, Pp, u Pps). Условия применения правил, соответствующие условиям отношения иерархии сущностей системы, в граф анализа включать не будем.
Алгоритм 9 построения графа GA при известной последовательности правил преобразования состояний op1, . , opN.
1. L = {op>1, ... , opn}, OPb = L, Pp,uPps = 0, B=0,j = 0,j =j +1.
2. Выбрать из списка L первое правило op. Удалить правило op из L.
3. Если ребра r1, ..., rm графов Gi для i = 0, ..., j-1 необходимы для применения правила op, а ребра p1, ..., pl появляются после его применения, то B = B u {r1, ..., rm} u {p1, ..., pl}, Ppr = Ppru {(r1, op), ..., (r m, op)}, Pps = Pps u {(op, px), ..., (op, Pl)}.
4. Если L не пусто, перейти на шаг 1.
Рассмотрим следующую задачу. Пусть Go = (So, Eo, Ro u Ao u Fo, Ho) - начальное состояние системы Z(G*, OP) и a є Rrf, x, у є Eo, где x ^ y, и пусть в некотором состоянии системы Z(G*, OP) выполнено условие: (x, y, a) є R u A u F. Требуется найти все такие правила преобразования состояний op1, ... , opN, что
Go \op1G1 |“op2 . |-°pN Gn и (x, y, a) є RN u AN u FN для некоторого N > 0. Для нахождения всех таких правил преобразования состояний ДП-моделей необходимо сначала преобразовать граф доступов в его замыкание, а затем с помощью следующих алгоритмов построить граф анализа GA(x, y, a). Для краткости не будем писать элементы, добавляемые в множество B, так как их легко определить по ребрам в Pp,. Алгоритмы 10 - 1З строят граф GA(x, y, a), который содержит всевозможные траектории получения прав доступа, доступов и реализации информационных потоков соответственно для базовой, БК, БД и ФАС ДП-моделей.
Алгоритм 10.
1. OPB = 0, Ppr u Pps = 0, B = (x, y, a).
2. Если (x, y, a^R0 u Ao u Fo, то выход.
3. Если aєRr:
3.1. Если a = own,, существует zєE\S, что yєH(z), (x, z, в)єR, в є {write,, append,}, и для всех e є E, что y < e, выполнено (x, e, write,) єF, то OPB = OPB u create_entity(x, y, z), Ppr= Ppr u ((x, z, в), create_entity(x, y, z)), Pps= Pps u (create_entity(x, y, z), (x, y, a)).
3.2. Если a = own,, yєS, уєЩл), (y, x, write,)єF, то для всех zєE, что (x, z, executer)єR, и для всех e є E, что z < e, выполнено (x, e, write^F, положить OPB = OPB u create_subject(x, z, y), Ppr= Ppr u ((x, z, execute,), create_entity(x, z, y)), Pps = Pps u (create_entity(x, z, y), (x, y, a)).
3.3. Если a Ф own, и (x, y, own,)єR, то OPB = OPB u own_take(a, x, y), Ppr = Ppr u ((x, y, own,), own_take(a, x, y)), Pps = Pps u (own_take(a, x, y), (x, y, a)).
3.4. Для всех zєS, таких, что (x, z, own,), (z, y, a^R, положить OPB = OPB u take_right(a, x, z, y), Ppr = Ppr u ((x,z,ownr), take_right(a,x,z,y)) u ((z,y, a), take_right(a, x, z,y)), Pps = Ppsu (take_right(a, x, z,y), (x,y, a)).
3.5. Для всех zeS, таких, что (z, x, own), (z, y a)eR, положить OPB = OPBu grant_right(a, z, x, y), Pp , = Ppr u ((z, y, ownr), grant_right(a, z, x, y)) u ((z, y, a), grant_right(a, z, x, y)), Pps = Pp s u (grant_right(a, z, x, y), (x, y, a)).
4. Если aeRa:
4.1. Если a = reada и (x, y, readr)eR, то OPB = OPB u access_read(x, y), Ppr = Ppr u ((x, y, read,), access_read(x, y)), Pps= Pps u (access_read(x, y), (x, y, a)).
4.2. Если a = writea и (x, y, writer)eR, то OPB = OPBu access_write(x, y), Ppr = Ppru ((x, y, write,), access_write(x, y)), Pp s= Pps u (access_write(x, y), (x, y, a)).
4.3. Если a = appenda и (x, y, appendr)eR, то OPB = OPB u access_append(x, y), Ppr= Ppr u ((x, y, append,),
access_append(x, y)), Pps= Pps u (access_append(x, y), (x, y, a)).
5. Если a = writem:
5.1. Если (x, y, reada)eA, то OPB = OPBu access_read(x, y), Ppr = Ppru ((x, y, read,), access_read(x, y)),
Pps = Pps u (access_read(x, y), (x, y, a)).
5.2. Если (x, y, writea)eA, то OPB = OPB u access_write(x, y), Ppr = Ppr u ((x, y, write,), access_write(x, y)),
Pps = Ppsu (access_write(x,y), (x,y, a)).
5.3. Если (x, y, appenda)eA, то OPB = OPB u access_append(x, y), Ppr = Ppr u ((x, y, append,), access_append(x, y)), Pps = Pps u (access_append(x, y), (x, y, a)).
5.4. Для всех zeS, таких, что (x, z, P), (z, y, y)eR uF и P, ye {write,, append,, writem}, положить OPB = OPB u find(x, z, y), Ppr = Ppr u ((x, z, P), find(x, z, y)) u ((z, y, y), find(x, z, y)), Pps = Pps u (find(x, z, У), (x, У, a)).
5.5. Для всех zeE, таких, что (x, z, P), (y, z, readr)eR uF и Pe{write,, append,, writem}, положить OPB = OPB u post(x, z, y), Pp, = Pp, u ((x, z, P), post(x, z, y)) u ((y, z, read,), post(x, z, y)), Pps = Pps u (post(x, z, y), (x, y a)).
5.6. Для всех zeS, таких, что (z, x, read,)eR u F, (z, y, P)eR u F и Pe {write,, append,, writem}, положить OPB = OPB u pass(x, z, y), Pp, = Pp, u ((z, x, read,), pass(x, z, y)) u ((z, y P), pass(x, z, y)), Pps = Pps u (pass(x, z, y), (x, y a)).
6. Если a = write,:
6.1. Для всех zeE, таких, что (x, z, reada)eA и z <y, положить OPB = OPBu access_read(x, z), Pp, = Ppr u ((x, z, read,), access_read(x, z)), Pps = Pps u (access_read(x, z), (x, y, a)).
6.2. Для всех zeE, таких, что (x, z, writea)eA и z <y, положить OPB = OPB u access_write(x, z), Pp, = Pp, u ((x, z, write,), access_write(x, z)), Pps = Pps u (access_write(x, z), (x, y, a)).
6.3. Для всех zeE, таких, что (x, z, appenda)eA и z <y, положить OPB = OPBu access_append(x, z), Pp, = Pp, u ((x, z, append,), access_append(x, z)), Pps = Pps u (access_append(x, z), (x, y, a)).
6.4. Если (y, x, own,) e R, то для всех zeE, таких, что Rx П Ry ф 0, где Ry = {Р: (y, z, Р) e R}, Rx = {P: (x, z, P) eR}, положить OPB = OPB u take_right(y, x, z), Pp, = Pp, u ((y, x, own,), take_right(y, x, z)), Pps = Pps u (take_right(y, x, z), (x, y, a)).
6.5. Если (x, y, own,)eR, то для всех zeE, таких, что Rx П Ry ф 0, где Ry = {Р: (y, z, Р) e R}, Rx = {P: (x, z, P) eR}, положить OPB = OPBu grant_right(x, y, z), Pp, = Pp, u ((x, y, own,), grant_right(x, y, z)), Pps = Pps u (grant_right(x, y, z), (x, y a)).
6.6. Если (x, y write,)eR , то для всех zeH(y), таких, что {(x, e, write,): e e E, x Ф e и e < z} u {(x, s, write,): s e S, x Ф s и (s, e, a,) e R, где e e E, e < z и a, e R,}cF, положить OPB = OPB u rename_entity(x, z, y), Pp, = Pp, u ((x, _y, write,), rename_entity(x, z, y)), Pps = Pps u (rename_entity(x, z, y), (x, y a)).
6.7. Для всех eeE, таких, что y < e, eeH(z), (x, z, write,) u (x, z, write,) u {(x, s, write,): seS, x Ф s и (s, e', a,) e R, где e' e E, e' < e и a, e R, } с R u F, положить OPB = OPB u rename_entity(x, e, z), Pp, = Pp, u ((x, z, write,), rename_entity(x, e, z)), Pps = Pps u (rename_entity(x, e, z), (x, y a)).
6.8. Если yeS, то для всех z, z'eE, таких, что zeH(z'), (x, z', write,), (x, z', write,)eR u F, если e < z и (y, e, a,)eR, где ee E, a, e R,, то положить OPB = OPBu rename_entity(x, z, z), Pp, = Pp,u ((x, z', write,), rename_entity(x, z, z')) u ((y, e, a,), rename_entity(x, z, z')), Pps = Pps u (rename_entity(x, z, z), (x, y a)).
6.9. Для всех z, z'eE, что zeH(z'), (x, z, own,)eR, (x, z', P)eR, Pe {write,, append,} и z <_y, положить OPB = OPB u create_entity(x, z', z), Pp, = Pp, u ((x, y P), create_entity(x, z', z)), Pps = Pps u (create_entity(x, z', z), (x,y, a)).
6.10. Для всех z, z'eE, что (x, z, execute,)eR, z'eH(x), (x, z', own,)eR и z < _y, положить
OPB = OPB u create_subjecty(x, z, z), Pp, = Pp, u ((x, z, execute,), create_subject(x, z, z')), Pps = Pps u (create_subject(x, z, z'), (x, _y, a)).
6.11. Если yeH(x), (x, y own,)eR, то для всех zeE, что (x, z, execute,)eR, положить OPB = OPBu create_ subjecty(x, z, y), Pp, = Pp, u ((x, z, execute,), create_subject(x, z, y)), Pps = Pps u (create_subject(x, z, y),
(x, y, a)).
6.12. ЕслиyeS, (y, x, write,)eF, то для всех z, z'eE, что z < z' (x, z, a,), (y, z', P,)eR, где a,, P,eR,, положить OPB = OPBu flow(x, z, z', y), Pp, = Pp,u ((x, z, a,), flow(x, z, z', y)) u ((y, z', P,), flow(x, z, z', y)), Pps = Pps u (flow(x, z, z', y), (x, y a)).
6.13. Если yeS, (y, x, write,)eF, то для всех z, z'eE, что z< z' (y, z, a,), (x, z', P,)eR, где a,, P,eR,, положить OPB = OPBu flow(x, z, z', y), Pp, = Pp, u ((x, z', a,), flow(x, z, z', y)) u ((y, z, P,), flow(x, z, z', y)), Pps = Pps u flow(x, z, z', y), (x, y a)).
6.14. Для всех zeS, если (x, z, y), (z, y P)eF, write,e{y, P}, то OPB = OPB u find(x, z, y), Pp, = Pp, u ((x, z, y), find(x, z, y)) u ((z, y, P), find(x, z, y)), Pps = Pps u (find(x, z, y), (x, y, a)).
6.15. Для всех zeE, если (x, z, write,), (y, z, read,)eR u F, то OPB = OPB upost(x, z, y), Pp, = Pp, u ((x, z, write,), post(x, z, y)) u ((y, z, read,), post(x, z, y)), Pps = Pps u (post(x, z, y), (x, y, a)).
6.16. Для всех zeS, если (z, x, read,), (z, y, P)eR u F, где Pe{write,, append,, writem, write,}, то OPB = OPB u pass(x, z, y), Pp, = Pp, u ((z, x, read,), pass(x, z, y)) u ((z, y, P), pass(x, z, y)), Pps = Pps u (pass(x, z, y), (x, y, a)).
7. Для всех элементов вида ((a, b, P), op), добавленных на шагах 3 - 6 алгоритма в множество Pp, выполнить
шаги 2-7 алгоритма 10 для (x, y, a), где x = a, y = b, a = p.
Алгоритм 11 построения графа анализа GA(x, y, a) для БК ДП-модели.
1. OPb = 0, Pp, u Pps = 0, B = (x, y a).
2. Если (x,y a)eR0 u A0 u F0, то выход.
3. Если xeNS, выполнить шаги 2 - 6 алгоритма 10.
4. Если xeLS, aeR,:
4.1. Если a = own, и существует zeE\S, что yeH(z), (x, z, P)eR, Pe {write,, append,}, то OPB = OPB u create_entity(x, y, z), Pp, = Pp, u ((x, z, P), create_entity(x, y, z)), Pps = Pps u (create_entity(x, у zX (x у a)).
4.2. Если a = own,, yeS, yeH(x), (y, x, write,)eF, то для всех zeE, что (x, z, execute,)eR, положить OPB = OPB u create_subject(x, z, y), Pp, = Pp, u ((x, z, execute,), create_entity(x, z, y)), Pps = Pps u (create_entity(x, z, y), (x, y, a)).
4.3. Если a Ф own,, то OPB = OPB u own_take(a, x, y), Pp, = Pp, u ((x, y, own,), own_take(a, x, y)),
Pps = Pps u (own_take(a, x, y), (x, y, a)).
5. Если xeLS, aeRa:
5.1. Если a = reada и (x, y, read,)eR, то OPB = OPBu access_read(x, y), Pp, = Pp, u ((x, y, read,),
access_read(x, y)), Pps = Pps u (access_read(x, y), (x, y a)).
5.2. Если a = writea и (x, y write,)eR, то OPB = OPBu access_write(x, y), Pp, = Pp,u ((x, y write,),
access_write(x,y)), Pps = Ppsu (access_write(x,y), (x,y a)).
5.3. Если a = appenda и (x, y append,)eR, то OPB = OPBu access_append(x, y), Pp, = Pp,u ((x, y append,), access_append(x, y)), Pps = Pps u (access_append(x, y), (x, y a)).
6. Если xeLS, если a = writem:
6.1. Если (x, y reada)eA, то OPB = OPB u access_read(x, y), Pp, = Pp, u ((x, y read,), access_read(x, y)), Pps = Pps u (access_read(x, y), (x, y a)).
6.2. Если (x, y writea)eA, то OPB = OPBu access_write(x, y), Pp, = Pp,u ((x, y write,), access_write(x, y)), Pps = Ppsu (access_write(x,y), (x,y a)).
6.3. Если (x, y appenda)eA, то OPB = OPB u access_append(x, y), Pp, = Pp, u ((x, y append,), access_
append(x, y)), Pps = Pps u (access_append(x, y), (x, y a)).
6.4. Для всех zeS, таких, что (x, z, P), (z, y y)eR u F и P, ye {write,, append,, writem}, положить OPB = OPB u find(x, z, y), Pp, = Pp, u ((x, z, P), find(x, z, _y)) u ((z, _y, y), find(x, z, y)), Pps = Pps u (find(x, z, yl (x, у a)).
6.5. Для всех zeE, таких, что (x, z, P), (y, z, read,)eR u F и Pe {write,, append,, writem}, положить OPB = OPB u post(x, z, y), Pp, = Pp, u ((x, z, P), post(x, z, y)) u ((y, z, read,), post(x, z, y)), Pps = Pps u (post(x, z, y), (x, y a)).
6.6. Для всех zeS, таких, что (z, x, read,)eR u F, (z, y P)eR u F и Pe {write,, append,, writem}, положить OPB = OPB u pass(x, z, y), Pp, = Pp, u ((z, x, read,), pass(x, z, y)) u ((z, _y, P), pass(x, z, y)), Pps = Pps u (pass(x, z, y), (x, y, a)).
7. Для всех элементов вида ((a, b, P), op), добавленных на шагах 3 - 6 алгоритма 11 в множество Pp,, выполнить шаги 2-7 алгоритма 11 для (x, y, a), где x = a, y = b, a = p.
Алгоритм 12 построения графа анализа GA(x, y, a) для БК ДП-модели.
1. OPb = 0, Pp, u Pps = 0, B = (x, y a).
2. Если (x, y, a)eR0 u A0 u F0, то выход.
3. Если xeLS, aeR,:
3.1. Если a = own, и существует zeE\S, что yeHB(z), (x, z, P)eR, Pe {write,, append,}, то OPB = OPB u create_entity(x, y, z), Pp, = Pp, u ((x, z, P), create_entity(x, y, z)), Pps = Pps u (create_entity(x, у z), (x, y, a)).
3.2. Если a = own,, yeS, yeHB(x), то для всех zeE, что (x, z, execute,)eR, положить OPB = OPB u create_subject(x, z, y), Pp, = Pp, u ((x, z, execute,), create_entity(x, z, y)), Pps = Pps u (create_entity(x, z, y), (x, y, a)).
3.3. Если a Ф own,, то OPB = OPBu own_take(a, x, y), Pp, = Pp,u ((x, y, own,), own_take(a, x, y)),
Pps = Pps u (own_take(a, x, y), (x, y, a)).
4. Если xeLS, aeRa, выполнить шаг 5 алгоритма 11.
5. Если xeLS, если a = writem:
5.1. Выполнить шаги 6.1 - 6.3 алгоритма 11.
5.2. Для всех zeS, таких, что (x, z, writem), (z, y, writem)eF , положить OPB = OPBufind(x, z, y), Pp, = Pp, u ((x, z, writem), find(x, z, y)) u ((z, y, writem), find(x, z, y)), Pps = Pps u (find(x, z, y), (x, y, a)).
5.3. Для всех zeE, таких, что (x, z, writem), (y, z, reada)eA, положить OPB = OPBupost(x, z, y), Pp, = Pp, u ((x, z, P), post(x, z, y)) u ((y, z, reada), post(x, z, y)), Pps = Pps u (post(x, z, y), (x, y, a)).
5.4. Для всех zeS, таких, что (z, x, reada)eA, (z, y, writem)e F, положить OPB = OPBupass(x, z, y), Pp, = Pp, u ((z, x, reada), pass(x, z, y)) u ((z, y, writem), pass(x, z, y)), Pps = Pps u (pass(x, z, y), (x, y, a)).
6. Если xeNS, aeR,:
6.1. Если a = own,, существует zeE\S, что yeHB(z), (x, z, P)eR, Pe {write,, append,}, и для всех e e E\EB, что y <B e, выполнено (x, e, write,) eF, то OPB = OPB u create_entity(x, y, z), Pp, = Pp, u ((x, z, P), create_entity(x, y, z)), Pps = Pps u (create_entity(x, y, z), (x, y, a)).
6.2. Если a = own,, yeS, yeHB(x), (y, x, write,)eF, то для всех zeE, что (x, z, execute,)eR, и для всех e e E\EB, что z <B e, выполнено (x, e, write,)eF, положить OPB = OPB u create_subject(x, z, y), Pp, = Pp, u ((x, z, execute,), create_entity(x, z, y)), Pps = Pps u (create_entity(x, z, y), (x, y, a)).
6.3. Выполнить шаги 3.3 - 3.5 алгоритма 10.
7. Выполнить шаг 4 алгоритма 10.
8. Если xeNS, a = writem, выполнить шаги 5.1 - 5.3 алгоритма 10 и 5.2 - 5.4 алгоритма 12.
9. Если xeNS, a = write,:
9.1. Для всех zeE, таких, что (x, z, reada)eA и yeE\EB, x Ф y, z <By, положить OPB = OPBu access_read(x, z), Pp, = Pp, u ((x, z, read,), access_read(x, z)), Pps = Pps u (access_read(x, z), (x, y, a)).
9.2. Для всех zeE, таких, что (x, z, writea)eA и yeE\EB, x ^ y, z <By, положить OPB = OPB u access_write(x, z), Pp, = Pp, u ((x, z, write,), access_write(x, z)), Pps = Pps u (access_write(x, z), (x, y, a)).
9.3. Для всех zeE, таких, что (x, z, appenda)eA и yeE\ EB, x Ф y, z <By, положить OPB = OPB u access _append(x, z), Pp, = Pp, u ((x, z, append,), access_append(x, z)), Pps = Pps u (access_ append(x, z), (x, y, a)).
9.4. Выполнить шаги 6.4 - 6.5 алгоритма 10.
9.5. Если (x, y, write,)eR , то для всех zeH(y), таких, что {(x, e, write,): e e E\ EB, x Ф e и e <B z} u {(x, s, write,): s e S, x Ф s и (s, e, a,) e R, где e e E \ EB, e <B z и a, e R,}cF, положить OPB = OPB u rename entity(x, z, y), Pp, = Pp, u ((x, y, write,), rename_entity(x, z, y)), Pps = Pps u (rename_ entity(x, z, y), (x, y, a)).
9.6. Для всех eeE, таких, что y <B e, eeH(z), (x, z, write,) u (x, z, write,) u {(x, s, write,): s e S, x Ф s и
(s, e', a,) e R, где e' e E \ EB, e' <B e и a, e R, } с R u F, положить OPB = OPB u rename_entity(x, e, z), Pp, = Pp, u ((x, z, write,), rename_entity(x, e, z)), Pps = Pps u (rename_entity(x, e, z), (x, y, a)).
9.7. Если yeS, то для всех z, z'eE, таких, что zeH(z'), (x, z', write,), (x, z', write,)eR u F, если e <B z и (y, e, a,)eR, где ee E \ EB, a, e R,, то положить OPB = OPBu rename_entity(x, z, z'), Pp, = Pp, u ((x, z', write,), rename_entity(x, z, z')) u ((y, e, a,), rename_entity(x, z, z')), Pps = Pps u (rename_entity(x, z, z'), (x, y, a)).
9.8. Для всех z, z'eE, что zeHB(zr), (x, z, own,)eR, (x, z', P)eR, Pe {write,, append,} и z <B y, положить OPB = OPB u create_entity(x, z', z), Pp, = Pp, u ((x, y, P), create_entity(x, z', z)), Pps = Pps u (create_entity(x, z', z), (x,y, a)).
9.9. Для всех z, z'eE, что (x, z, execute,)eR, z'eH(x), (x, z', own,)eR и z <B _y, положить OPB = OPB u create_subjecty(x, z, z'), Pp, = Pp, u ((x, z, execute,), create_subject(x, z, z')), Pps = Pps u (create_subject(x, z, z), (x, y, a)).
9.10. Если yeHB(x), (x, y, own,)eR, то для всех zeE, что (x, z, execute,)eR, положить OPB = OPB u
create_subjecty(x, z, y), Pp, = Pp, u ((x, z, execute,), create_subject(x, z, y)), Pps = Pps u (create_subject(x, z, y), (x, y, a)).
9.11. Если ^S, (y, x, write^F, то для всех z, z^E, что z <вz', (x, z, ar), (y, z', вr)єR, где ar, вrєRr, положить OPB = OPB u flow(x, z, z', y), Ppr = Ppr u ((x, z, ar), flow(x, z, z', y)) u ((y, z', в,), flow(x, z, z', y)), Pps = Pps u (flow(x, z, z', y), (x, y a)).
9.12. Если ^S, (y, x, write^F, то для всех z, z^E, что z <B z', (y, z, ar), (x, z', вr)єR, где ar, вrєRr, положить OPB = OPB u flow(x, z, z', y), Ppr = Ppr u ((x, z', ar), flow(x, z, z', y)) u ((y, z, в,), flow(x, z, z', y)), Pps = Pps u (flow(x, z, z', y), (x, у a)).
9.13. Для всех zєS, если (x, z, у), (z, y, в)єF, у, вє {write,, write,}, то OPB = OPB u find(x, z, y), Ppr = Ppr u ((x, z, y), find(x, z, y)) u ((z, y в), find(x, z, y)), Pps = Pps u (find(x, z, y), (x, у a)).
9.14. Для всех zєE, если (x, z, write,), (y, z, reada)єAuF, то OPB = OPB u post(x, z, y), Ppr = Ppr u ((x, z,
write,), post(x, z, y)) u ((y, z, read,), post(x, z, y)), Pps = Pps u (post(x, z, y), (x, y a)).
9.15. Для всех zєS, если (z, x, read,), (z, y в) є A u F, где вє {write,, append,, write,, write,}, то OPB = OPB u pass(x, z, y), Ppr = Ppr u ((z, x, read,), pass(x, z, y)) u ((z, y в), pass(x, z, y)), Pps = Pps u (pass(x, z, y), (x, у a)).
10. Для всех элементов вида ((a, b, в), op), добавленных на шагах З - 6 алгоритма 12 в множество Ppr, выполнить шаги 2 - 10 алгоритма 12 для (x, y a), где x = a, ,y = b, a = в.
Для построения графа анализа GA(x, y, a) ФАС ДП-модели модифицируем алгоритм 11 построения графа анализа БК ДП-модели.
Алгоритм ІЗ построения графа анализа GA(x, y, a) ФАС ДП-модели получается из алгоритма 11 добавлением в него следующего шага, выполняемого после шага 2:
З. Если a = own,, то для всех z є E, z є [y], что (x, z, writem)єR, положить OPB = OPB u control(x, y, z),
Ppr = Ppr u ((x, z, writem), control(x, y z)), Pps = Pps u (control(x, y z), (x, y a)).
4. Пример построения графа анализа ФАС ДП-модели
Рассмотрим сеть со следующей конфигурацией (рис. 2):
- на узле Fw установлена уязвимая версия ssh-службы, позволяющая получить права пользователя root через переполнение буфера;
- на узле Ws установлена уязвимая версия web-сервера, запущенного с привилегиями пользователя apache;
- пользователь apache имеет право доступа на чтение к базе данных db;
- в начальном состоянии нарушитель A на узле Attacker имеет доступ только к службе ssh, запущенной
на Fw.
WS
Apache
Рис. 2
На рис. З показана последовательность правил преобразований, в результате применения которой возможна утечка права доступа (A, sw, read,), после чего нарушитель может, используя уязвимость web-сервера, получить доступ к базе данных db. Далее строится граф анализа Ga(A, sw, read,) с помощью алгоритма 1З. Результат представлен на рис. 4.
Примечание. Построение замыкания графа доступов на рисунках не изображено.
A gw root sw apache db
readr, writer readr, write? , readr, writer readr, writer readr
•----------------------------------Щ -------------NgH----------------•---------Ng>
readr, writer
0
vulnssh
+ post (A, gw, root), find (A, root, vulnssh)
readr, writer
0
vuln_apache
A "''^w root sw apache db
* readr, writer readr, writer + readr, writer readr, writer readr
^----------------------------Щ —ИЕН-----------------------------#-NE>
readr, writer
-И8)
readr, writer
0 vulnapache
writem vulnssh
+ control (A, vulnsh, root), takeright (read,, A, root, sw), takeright (writer, A, root, sw)
readr, writer
A __________ gw root '——-.sw apache db
readr, writer readr, writer + readr, write,readr, writer readr
->04------------~0----------------------------•-------N8>
readr, writer
0
readr, writer
0 vuln apache
vuln_ssh
+ post (A, sw, apache), find (A, apache, vuln apache), control (A, vuln_apache, apache)
OwUr
root
A ______—-—‘ gw root sw --------apache db
readr, writer readr, writer * readr, writer readr, write^A readr
-N8H---------------•------------—NgH---------------------------•-Ng>
readr, writer
0
vuln_ssh
readr, writer
vuln_apache
+ take right (read,, A, apache, db) gw root sw apache db
readr, writer readr, writer readr, writer readr, writer readr
— •—------------------Ng*----------------
readr, writer
vuln_ssh <s>
readr
Рис. 3
~Z9
readr, writer
vuln apache 0
5. Предотвращение утечки прав доступа и реализации запрещенных информационных потоков путем управления правами доступами в начальном состоянии ДП-модели
Пусть в системе 1.(0*, ОР, О0) возможна утечка права доступа (х, у, а) или реализация запрещенного информационного потока (х', у', а'). Тогда по определению возможен переход системы в состояние 0' = (5', Е', Я' и А' и Е', Н'), в котором (х, у, а) е Я', (х', у', а') е Е', где х е 50, х', у',у е Е0, х Фу, х' Фу', а е Яг, а' е Я/ и (х,у, а) г Яо, (х',у', а') г Ео.
Формализуем и применим идею метода рекурсивного алгебраического анализа графов атак [6, 7] для предотвращения утечки прав доступа и реализации запрещенных информационных потоков.
Идея метода заключается в следующем. Правила преобразования, права доступа, доступы и информационные потоки интерпретируются логическими переменными. Взаимосвязь между ними характеризуется логическим выражением. Над логическими переменными, соответствующими правам доступа и информационным потокам исходного состояния некоторого правила преобразования, выполняется операция конъ-
a
m
б
в
г
m
д
юнкция. Над логическими переменными, соответствующими правилам преобразования, выполняется операция дизъюнкция, так как получение права доступа или реализация информационного потока возможно в результате применения нескольких правил преобразования. Такая последовательность действий производится рекурсивно, пока не будут достигнуты права доступа начального состояния. В результате проделанных действий будем иметь ДНФ некоторой булевой функции. Если ее приравнять к 0, найти все решения, то исключение прав доступа, соответствующих найденным решениям из множества Я0, позволяет предотвратить утечки прав доступа и реализации запрещенных информационных потоков.
^^(Asw, write,
і
take_right (writer, A, root, sw)
(A , root, own^^^(vot, sw, write,)
і
control (A, root, vuln ssh)
і k.
(A , vuln ssh, writem) z>
і V
find (A, root, vuln ssh)
(A, root, write,
J
post (A, gw, root)
item) (
(root, vuln ssh, write,)
Рис. 4
Алгоритм І4.
1. Построить замыкание графа доступов ДП-модели и граф анализа GA(x, y, a), вершину (x, y, a) обозначить c, положить D = c.
2. Ребра (op1, c), ..., (opm, c) обозначить через db..., dm, L = 0.
3. Положить c = d1 v...v dm.
4. Для всех i = 1, ., m, ребра вида ((ay, by, ay), op,) обозначить c,y, (ay, by, ay) добавить в L.
5. Каждое d, в дизъюнкции c заменить на конъюнкцию cn ci2 . cin.
6. Изменить c в D.
7. Выполнить шаги 2-7 для всех cєL\R0.
8. Решить уравнение D = 0 относительно переменных c,y.
В качестве примера рассмотрим, какие права доступа необходимо исключить из Ro для предотвращения утечки права (A, sw, write,) в рассмотренном выше примере (рис. 4).
В результате применения алгоритма 14 и переименования переменных получим уравнение c1c2c3c4 = 0, где c1 соответствует праву (root, sw, write,), c2 - (root, vuln ssh, write,), c3 - (root, gw, read,), c4 - (A, gw, write,). Соответственно получаем следующие возможные решения:
1) c1 = 0, c3 = 0 - отключение ssh-службы;
2) c2 = 0 - устранение уязвимости vulnssh;
3) c3 = 0 - настройка правил фильтрации МЭ.
6. Формальная модель анализа защищенности сетей REM
В работе [8] представлено неформальное описание модели анализа защищенности сетей REM (Requirements, Effects, Modifies), используемой в топологическом сканере безопасности NetSPA. Основными положениями данной модели являются:
- описание атаки состоит из трех частей - предусловий атаки (requirements), постусловий атаки (effects), координат нарушителя (modifies);
- при описании используются переменные host, software, user, которые соответственно принимают значения (<current_host>, <target_host>), (vendor: product name: common version: exact version), (none, nologin, user, root);
- предусловиями атак служат предикаты: hostj RUNS (ALSO_RUNS) softwarej [DOS] [TROJAN] - установка на узле hostj программного обеспечения softwarej, которое может быть установлено нарушителем или находиться в неработоспособном состоянии; hostj CAN_CONNECT hostj - связь между узлами; [userj on hostj] HAS_ACCESS userj on hostj - пользователь userj с узла hostj имеет доступ на узле hostj с правами userj;
- изменения состояний сети описываются предикатами hostj RUNS softwarej, [userj on hostj]
HAS_ACCESS userj on hostj, TRUST_RELATIONSHIP - перехват данных в сети;
- изменения состояния нарушителя соответствуют изменениям <current_host> = <target_host>,
<current_user> = <target_user>.
Опишем формальную REM ДП-модель анализа защищенности сетей на основе базовой и ФАС ДП-моделей.
Пусть G = (S, E, R и A u F, H) - состояние системы Z(G*, OP). Конкретизируем назначение некоторых элементов системы.
По определению являются: узел (компьютер) - сущностью-контейнером; коммуникационный порт -сущностью-контейнером или сущностью-объектом; файл - либо сущностью-контейнером, либо сущностью-объектом; пользователь или процесс пользователя - сущностью-субъектом.
Обозначим: E - множество сущностей системы, EC - множество узлов КС, CC - множество коммуникационных каналов, CC с E, EC с E; S - множество субъектов системы, при этом для каждого узла c е EC существует «пользователь ОС» osc е S данного компьютера, U - множество пользователей, U с S ;
R - множество ребер графа-состояния G, соответствующих правам доступа пользователей к сущностям;
A - множество ребер графа-состояния G, соответствующих доступам пользователей к сущностям;
F - множество ребер графа-состояния G, соответствующих информационным потокам между сущностями;
H: E ^ 2е - функция иерархии сущностей, ее значения на множестве узлов EC соответствуют заданной в системе иерархии подчиненности компьютеров, и каждая сущность системы e е E
- либо является узлом сети (e е EC),
- либо размещена на некотором единственном для каждой сущности узле (для сущности e существует единственный компьютер c е EC, такой, что e < c),
- либо является коммуникационным каналом (c е EC),
- либо является пользователем (e е S).
Аналогично [3] будем считать, что для каждого узла ci е EC определены доверенные пользователи osci е S, обладающие правом доступа владения к каждой сущности, размещенной на данном компьютере.
В соответствии с положениями модели REM [8]:
- субъект-процесс p, выполняющийся от имени субъекта-пользователя u, будем считать функционально ассоциированным с ним, так как при наличии уязвимостей p нарушитель может получить права доступа пользователя u ко всем сущностям КС;
- наличие уязвимостей определяется по значению переменной software = (vendor: product name: common version: exact version) и дополнительно установленного программного обеспечения;
- уязвимые сетевые сервисы, позволяющие получать доступ к чувствительной информации (например, через нулевые сессии в ОС класса Windows), функционально ассоциированы с субъектом nologin;
- субъект nologin может быть функционально ассоциированным с субъектом-пользователем, информацию о котором он предоставляет.
Для состояния G = (S, E, R u A и F, H) системы Z(G*, OP) формально определим предикаты run_soft(x, y, G), run_soft_dos(x, y, G), can_access_net(x, y, z, v, G), can_connect(x, y, z, v,G), соответствующие предикатам RUNS (ALSO_RUNS), RUNS_DOS, HAS_ACCESS, CAN_CONNECT модели REM.
Предикат run_soft(x, y, G) является истинным тогда и только тогда, когда y < x в состоянии G, где yеS, xеEC. При этом предполагается, что на узле x существует некоторый пользователь uеS, что (u,y, ownr)еR.
Предикат can_connect(x, y, z, v, G) является истинным тогда и только тогда, когда в состоянии G существует cеCC, что (y, c, a^R, (v, c, a^R, где аге {readr, writer}, y < x , v < z, y, vеS, x, zеEC.
Предикат run_soft_dos(x, y, G) является истинным тогда и только тогда, когда предикат run_soft(x, y, G) истинен, а предикат can_connect(x, y, z, v, G) ложен для любых vеS, zеEC.
Предикат has_access(x, y, z, v, G) является истинным тогда и только тогда, когда в состоянии G истинен
предикат can_connect(x, y, z, v, G) и (y, v, ownr)єR, где ,y < x, v < z, ,y^S, x, zєEC.
Предикат trust_relationship(x, y, G) является истинным тогда и только тогда, когда для всех cєCC, что
(v, c, ar^R, где arє {read,, write,}, v < x, истинно (y, c, readr)єR, где,y < x, v, yєS.
Изменение состояния нарушителя отображает последовательное получение доступа нарушителя к различным узлам сети с правами доступа различных пользователей. Если в состоянии G системы нарушитель, имея права доступа пользователя aє Uна узле bєEC, в результате выполнения последовательности преобразований система перейдет в состояние G', а нарушитель может получить права доступа пользователя cєU на узле dєEC, то <current_host> = b, <current_user> = a, <target_host> = d, <target_user> = c. Координатами нарушителя в состоянии G' будем называть пару (<target_host>, <target_user>).
Определенные выше предикаты используются для проверки исходного состояния модели в соответствии с базой описания атак или становятся истинными в результате перехода из одного состояния в другое, что соответствует выполнению последовательности преобразований базовой или ФАС ДП-моделей.
Графом атак модели REM будем называть конечный помеченный ориентированный граф без петель Grem = (G*XECXU, Erem), в котором элементы множества G**ECXU являются вершинами графа атак, а элемент ((G, xxy), (G', zxv)^EREM тогда и только тогда, когда:
- в состоянии G истинны предикаты, соответствующие предусловиям атаки, в состоянии G истинны предикаты, соответствующие постусловиям атаки;
- (z, v) - координаты нарушителя в соответствии с описанием атаки;
- существуют состояния G1, ... , Gn = (SN, EN, RN u AN u FN, HN) и правила преобразования состояний op1, ... , opN, такие, что G |-op1 G1 -op2 ... opN GN = G', где N> 0, и если правило op зависит от сущности eєE\CC, то e < x или e < z.
Ниже показан граф атак модели REM сети, изображенной на рис. 2, где состояниям G, G1, G' соответствуют графы доступов, изображенные на рис. З, а, в, г соответственно.
7. Формальная модель анализа защищенности сетей VTG
Shahriary, Sadoddin, Jalili и Zakeri [2] на основе подходов, используемых в классической модели Take-Grant, предложили модель VTG (vulnerability Take-Grant) для анализа защищенности сетей. Модель VTG является расширением модели Take-Grant, в котором вводятся дополнительные права доступа, понятие уязвимости и новые правила преобразования - vulnerability rewriting rules.
Опишем основные положения модели VTG:
- каждому узлу сети соответствует некоторое множество известных уязвимостей;
- возможны следующие права доступа: h - размещения, x - выполнения, o - владения, r, w, t, g - как в классической модели Take-Grant;
- уязвимость сущностей обозначается с помочью их метки;
- рассматриваются 3 класса уязвимостей - переполнение буфера, слабые пароли, отношение доверия;
- для первых двух классов вводятся новые правила преобразования состояния модели: buffer overflow (bofrule) и password cracking (pcrule) rewriting rule;
- для проверки истинности предиката can_access(a, x, y, VTG0) строится замыкание графа доступов;
- предикат can_access(a, x, y, VTG0) является истинным тогда и только тогда, когда существуют состояния VTG1, ..., VTGN и правила преобразования состояний op1, ... , opN е {bof rule,pc rule, take}, такие, что VTG0 |-ор VTG1 |“ор2 ... ^opN VTGN и ребро (x,y) помечено a в VTGN, где N> 0.
Опишем формальную VTG ДП-модель анализа защищенности сетей на основе базовой и ФАС ДП-моделей. Неформально, под уязвимостью принято понимать некоторое нежелательное свойство КС, которое может быть использовано нарушителем при реализации атаки и может привести к осуществлению угрозы. Уязвимостями будем называть сущности, функционально ассоциированные с другими субъектами КС, если при реализации информационных потоков к ним происходит нарушение безопасности. Субъекты, имеющие такие сущности, назовем уязвимыми. По определению уязвимость является сущностью-объектом КС.
Будем использовать введенные ранее обозначения. Через V обозначим множество уязвимостей системы.
Правам r, w, x модели VTG соответствуют права доступа read,, write,, execute, ДП-моделей; вместо прав t, g, o используется право own,, дуге в VTG-графе из вершины x в y, помеченной правом h, соответствует отношение y<x в ДП-модели.
В соответствии с положениями модели VTG:
- при активации пользователем u некоторого процессаp последний наследует все права пользователя u;
- уязвимости процесса, связанные с переполнением буфера, функционально ассоциированы с пользователем, от имени которого данный процесс запущен;
- уязвимость вида «слабый пароль» функционально ассоциирована с пользователем-владельцем пароля, что позволяет проводить анализ условий передачи прав доступа и реализации информационных потоков по памяти, но не по времени.
Вместо правил bof rule и pc rule модели VTG будем использовать правило преобразования control() ФАС ДП-модели. Если пользователь u доверяет пользователю v в некотором состоянии G = (S, E, R u A и F, H), то (v, u, own,) еR. Для построения замыкания VTG ДП-модели применим алгоритм 8 построения control-замыкания ФАС ДП-модели. Граф атак модели VTG - замыкание графа доступа VTG ДП-модели.
ЛИТЕРАТУРА
1. Колегов Д.Н. Проблемы синтеза и анализа графов атак // Вестник ТГУ. Приложение. 2007. № 23. С. 180 - 188.
2. Shahriary H., Sadoddin R., Jalili R., Zakeri R. Network vulnerability analyses thorough vulnerability Take-Grant model // ce.sharif.edu/~shahriari/publications/ICICS2005.pdf.
3. Девянин П.Н. Анализ безопасности управления доступом и информационными потоками в компьютерных системах. М.: Радио и связь, 2006. 176 с.
4. Bishop M., Frank J. Extending the Take-Grant protection system // http://citeseer.ist.psu.edu/frank96extending.html.
5. Девянин П.Н. Модели безопасности компьютерных систем: Учеб. пособие для студ. высш. учеб. заведений. М.: Издательский центр «Академия», 2005. 144 с.
6. Jajodia S., Noel S., O'Berry B. Managing Cyber Threats: Issues, Approaches and Challenges, ch. Topological Analysis of Network Attack Vulnerability. Kluwer Academic Publisher, 2003.
7. Jajodia S., Noel S., et al. Efficient Minimum-Cost Network Hardening Via Exploit Dependency Graphs // Proceedings of the 19th Annual Computer Security Applications Conference, Las Vegas, NV, USA, December 2003.
8. Artz M. NETspa, A Network Security Planning Architecture, M.S. Thesis. Cambridge: Massachusetts Institute of Technology, May 2002.