ПРИКЛАДНАЯ ДИСКРЕТНАЯ МАТЕМАТИКА
11 ПРИЛОЖЕНИЕ Сентябрь 2018
Секция 4
МАТЕМАТИЧЕСКИЕ ОСНОВЫ КОМПЬЮТЕРНОЙ БЕЗОПАСНОСТИ
УДК 519.7 DOI 10.17223/2226308X/11/28
ЭФФЕКТИВНЫЙ АЛГОРИТМ ПОСТРОЕНИЯ МНОЖЕСТВА КРАТЧАЙШИХ АТАК В РАМКАХ ОДНОЙ МОДЕЛИ РАЗВИТИЯ АТАК В КОМПЬЮТЕРНОЙ СЕТИ1
Д. Е. Горбатенко, А. А. Семёнов
Рассматривается задача компактного представления множества всех кратчайших атак в компьютерной сети. Для одной модели развития атак показывается, что задача имеет эффективное решение. Описывается алгоритм с временной сложностью O(n2), где n — число хостов в сети, который строит множество всех кратчайших атак в форме графа специального вида.
Ключевые слова: атаки в компьютерных сетях, графы атак, дискретные динамические системы.
Впервые идея представлять множество атак в сети в виде графа специального вида высказана в [1], где были использованы программные средства решения задач символьной верификации. Однако довольно быстро стало ясно, что такой способ представления атак неэффективен с вычислительной точки зрения. В [2, 3] и ряде других работ предложены иные подходы к построению графов атак. Ценность работы [2] заключается в том, что в ней впервые представлена модель развития атак, в рамках которой граф, представляющий все атаки в сети, строится за полиномиальное от числа хостов сети время. Помимо собственно генерации графов атак, в [1, 2] исследованы задачи оптимизационного характера. Так, в [1] показано, что в рамках использованной в данной работе модели задача поиска «минимальной атаки» является NP-трудной. В [2] описан полиномиальный алгоритм поиска «локально минимальной атаки». По-видимому, наиболее эффективными на сегодняшний день способами представления атак являются модели, описанные в [3-5]. На наш взгляд, основной недостаток этих моделей заключается в том, что получаемые в них графы содержат петли, что не позволяет корректно определять длину атаки. В настоящей работе рассматривается модель развития атак в сети, при которой задача представления множества кратчайших атак имеет эффективное решение.
Следует отметить, что во многих ключевых работах по графам атак, к сожалению, недостаточно чётко прописана система базовых понятий — абстратные понятия часто путаются с конкретными. Такая ситуация имеет место, например, по отношению к понятию «доступ». Наилучшим образом в плане таксономии организована диссертация М. Данфорт [6], но и в ней имеется ряд упущений. Например, Данфорт выделяет два уровня доступа, которые злоумышленник может иметь на атакуемом им хосте: это «user» и «root». Эти формы доступа злоумышленник получает, эксплуатируя уязвимости, имеющиеся на хосте. Возникает вопрос об уровне доступа, который был у
1 Работа выполнена при финансовой поддержке Российского научного фонда, проект № 16-11-10046.
злоумышленника в тот момент, когда он провёл первую элементарную атаку. Этот и другие похожие вопросы никак не акцентируются в подавляющем большинстве работ. Далее мы пытаемся исправить указанные недостатки: строим конкретный пример набора базовых понятий, в рамках которого доказываем основной результат о сложности представления множества кратчайших атак. Используемая система понятий и соответствующая ей модель являются весьма простыми, однако при необходимости их легко дополнить до уровня, достаточного для описания атак в реальных компьютерных сетях.
Будем рассматривать компьютерную сеть в виде простого неориентированного помеченного графа G = (V, E,Ly). Здесь V — множество вершин, называемых далее хостами, | V| = n. Выделим в V две вершины: vm (M от Malefactor) —хост злоумышленника, vt — «целевой хост». Через E обозначено множество рёбер графа G. Произвольное ребро (vi,v2) Е E отображает прямую физическую связь между хостами vi и v2 , простейшая конкретизация — проводное соединение компьютера с маршрутизатором. Окрестность вершины v Е V — множество смежных с ней вершин. С хостом v Е V связывается двоичное слово lv, называемое вектором уязвимостей. Множество всех слов вида lv обозначается через Ly.
Далее потребуется такое важнейшее понятие, как «доступ». В соответствии с [7] доступ объекта A (обычно называемого субъектом) к объекту B — это возможность A читать, а в некоторых случаях и модифицировать данные, которыми располагает B. В рамках рассматриваемой далее (базовой) модели развития атак целесообразно выделить следующие три уровня доступа:
1) Уровень доступа, обозначаемый usero, хоста v' к хосту v" предполагает возможность v' читать вектор lv». Данный уровень доступа — то, чего не хватает в упомянутых выше работах. Он соответствует ситуации, когда хост v' (v' может быть как хостом Vm , так и хостом, на котором M получил некие права) может физически связаться с хостом v'' (например, сканируя некоторые порты).
2) Уровень доступа, обозначаемый user, хоста v' к хосту v'' предполагает, что v' может вычислять все функции из некоторого списка S, аргументами которых являются координаты вектора lv».
3) Уровень доступа, обозначаемый root, хоста v' к хосту v'' предполагает, что v' получает право user0 на все хосты, находящиеся в окрестности v'' в графе G.
Здесь необходимо оговориться, что в контексте представления атак на сеть G нас интересуют только действия злоумышленника. Везде далее предполагаем, что повышение прав доступа с хоста v' на хост v'' осуществляет M, который действует «от имени» v'. В таком контексте удобно рассмотреть развитие атак в сети как дискретный динамический процесс: например, получению M права user на v'' в момент t + 1 предшествует получение M права user0 на v'' в момент t плюс некоторые дополнительные действия. При этом получению M права user0 на v'' в момент t предшествует получение M в момент t — 1 права root на хосте v', таком, что (v',v'') Е E.
Далее понадобится ещё одно ключевое понятие — уязвимость. Уязвимости хоста V — это условия, наличие которых позволяет злоумышленнику, атакующему данный хост, поднять свой уровень доступа к V. Через U будем обозначать список всех возможных уязвимостей в сети. В произвольном векторе lv координаты, равные 1, указывают на те уязвимости из U, которые присутствуют на хосте V.
Повышение прав доступа (privilege escalation [3, 4, 6]) M с хоста v' на хост v'' (с user0 до user и root) происходит за счёт процесса, называемого эксплуатацией уяз-
вимостей. Эксплуатация уязвимостей — это последовательность вычислений значений функций из некоторого списка S. Каждое такое вычисление называется элементарной атакой [6] (или правилом взаимодействия [3, 4]). Тот факт, что при переходе от момента t к моменту t +1 M получает на v более высокий уровень доступа, будем отображать в специальном регистре (одномерном массиве), который связывается с M в моменты времени t = 0,1,... Состояние регистра в момент t будем обозначать R(t). В регистре R в момент t с каждым хостом v связано множество ячеек, разбитое на три подобласти. Первая подобласть, обозначаемая at, содержит один бит, который равен 1, если M в момент t имеет на v доступ usero. Вторая подобласть Ъ\, в свою очередь, разбивается на две подобласти. Первая содержит один бит, который равен 1, если M в момент t имеет на v доступ с правом user. Во второй хранится множество пар вида (u, f ), u G U, f G S : каждая такая пара отображает тот факт, что M в момент t реализовал элементарную атаку f, эксплуатирующую уязвимость u, и получил в результате право user на хосте v. Аналогично устроена область ct, в которой содержится информация о получении M права root на v в момент t.
Атака на сеть состоит из элементарных атак, последовательно реализуя которые, M получает доступ на всё большее число хостов сети. Атака считается успешной, если существует такая последовательность элементарных атак, реализуя которую, M в некоторый момент времени получает право root на целевой хост vy.
Далее постулируем следующие два факта (первый акцентируется во всех отмеченных выше работах, второй явно упоминается не всегда):
1) Требование монотонности: будем считать, что любое действие, совершённое злоумышленником в момент t ^ 1, не может быть отменено в последующие моменты времени. Это означает, что если в некоторый момент t в некоторую ячейку регистра R была записана 1, то в каждый момент вида t + e, e ^ 1, в данной ячейке в состоянии R(t + e) также будет находиться 1.
2) Полагаем, что мощности множеств U и S — константы, не зависящие от n.
Учитывая второе свойство, отмечаем, что размер областей btv и cCv ограничен константой, соответственно длина регистра R — O(n) бит.
Опишем алгоритм построения множества атак в сети G, основанный на процедуре обхода G (вариант обхода в ширину). Действуя в стиле [8], будем представлять развитие атак в G как дискретный динамический процесс, происходящий в моменты t = 0,1,... Состояния соответствующей дискретной динамической системы (ДДС) — это R(t). Все состояния регистра R(t) сохраняются.
Алгоритм состоит из трёх стадий: начальной, инициализации и переходов в новые состояния. Начальная стадия соответствует моменту t = 0. Стадий инициализации и переходов в новые состояния может быть несколько. Приведём неформальное описание алгоритма.
B (начальная стадия). Строится состояние R(0) —нулевой вектор.
I (стадия инициализации). Вход: множество хостов Wг = {vi1,... , vip}, выход: множество хостов Wo = {v0l,..., v0q} (детализация далее).
T (стадия переходов в новые состояния). Вход: множество Wo. Полагаем, что построены состояния R(0),..., R(t).
1) Рассматривается момент t. В состоянии R(t) области at, bt, ct заполнены нулями для всех v G Wo. В момент t +1 ati+1) = 1 для всех v G Wo. Итог: состояние R(t + 1).
2) Рассматривается момент t + 1. По всем вершинам v Е Wo проверяется, может ли M получить на них право user. Выделяется множество Wo С Wo вершин, на которых M получает право user, вычисляя некоторые функции из S. Соответствующая информация записывается в область Итог: состояние R(t + 2).
3) Рассматривается момент t + 2. По всем вершинам v Е Wo проверяется, может ли M получить на них право root. Выделяется множество Wo С Wo вершин, на которых M получает право root, вычисляя некоторые функции из S. Соответствующая информация записывается в область c[,í+3). Итог: состояние R(t + 3).
Конец стадии переходов. Множество Wo является входом следующей стадии инициализации.
Алгоритм завершает работу в некоторый момент t* тогда и только тогда, когда R(t*) = R(t* + 1).
Остановимся более детально на стадиях инициализации. Первая стадия инициализации — это выбор всех вершин из G, смежных с Vm. Обозначим данное множество W и пометим все вершины в нём как пройденные. Множество W — выход первой стадии инициализации (к W применяется стадия переходов в новые состояния). Пусть W¿ — вход стадии инициализации с номером k ^ 2. Инициализация Ik заключается в следующем: рассматриваются окрестности всех вершин из W¿ и выбираются только те вершины, которые не были помечены как пройденные. Объединяем полученные множества вершин. Результат — множество W^, все его вершины помечаются как пройденные.
Отметим, что алгоритм формирования множеств W¿,W/° близок по смыслу алгоритму обхода графа в ширину (требуется помечать некоторые вершины как пройденные и исключать их из дальнейшего рассмотрения). Таким образом, сложность данного этапа составляет (в худшем случае) O(n2).
Легко понять, что алгоритм всегда завершит работу: в силу свойства монотонности обязательно найдётся такое t*, что R(t* + 1) = R(t*) (R(t*) —неподвижная точка рассматриваемой ДДС). В силу определения массива R и предположения о множествах U и S значение t* ограничено сверху величиной O(n). Полагая, что вычислительное устройство имеет прямой доступ к памяти, заключаем, что сложность алгоритма равна O(n2). Отметим, что граф (рис. 1) является графом перехода между состояниями рассматриваемой ДДС. Будем обозначать его Г^. Покажем, как по графу Г^ представить множество кратчайших атак.
R(0)-- ... -- R(í*)^)
Рис. 1
Сначала построим специальный граф, обозначаемый A(G). Будем считать, что в состоянии R(t*) M имеет права root на хосте Vt, поскольку в противном случае множество успешных атак пусто. Обозначим через t0, t0 ^ t*, момент, в который M получает право root на хосте Vt. Пусть Ii,... , Id — стадии инициализации, пройденные алгоритмом до момента времени t0. Будем считать, что выходом стадии Id является множество вершин Qd, такое, что в окрестности некоторой вершины w Е Qd находится вершина vt. Построим (d + 1)-дольный граф A(G). В доле с номером d +1 находится одна вершина Vt . В доле с номером d находятся вершины из Qd, смежные с Vt в графе G. Данное множество вершин обозначим Пd. В доле с номером r находятся
вершины, смежные с вершинами из ПO+i, r = d — 1,..., 2. В доле с номером 1 графа A(G) находится одна вершина vm .
Определение 1. Пусть A — произвольная успешная атака. Назовём длиной A число функций вида f Е S (элементарных атак), значения которых были вычислены в процессе реализации A.
Лемма 1. В рамках рассмотренной модели развития атак в сети G длина кратчайшей атаки равна 2d.
Построим граф A* (G), который представляет все кратчайшие атаки в рамках рассматриваемой модели. Он строится на основе графа A(G): добавляем в граф A(G) дополнительные доли, в которых отображаются шаги из стадии переходов в новые состояния (стадия Т), которые совершаются между соседними стадиями инициализации. Данная информация берётся из соответствующих состояний регистра R. На рис. 2 приведены две соседние доли графа A(G) и соответствующий им фрагмент графа A*(G). Через Su, j Е {l + 1,..., l + m}, обозначены списки элементарных атак, реализация которых (произвольной атаки из списка) приводит к получению M права user на хосте vj. Аналогичный смысл (в отношении права root) имеет запись Sj- (j Е {l + 1,... , l + m}).
МО)
t+1 t+2 i+3 M(G)
Рис. 2. Пример графов A(G) и A*(G)
Теорема 1. В рамках рассмотренной модели развития атак в сети G граф, представляющий все кратчайшие атаки в сети, строится за время O(n2).
Авторы благодарят рецензента за ряд конструктивных замечаний, учёт которых способствовал улучшению качества представляемого материала.
ЛИТЕРАТУРА
1. Sheyner O., Haines J.W., Jha S., et al. Automated generation and analysis of attack Graphs // Proc. 2002 IEEE Symp. Security and Privacy. 2002. P. 273-284.
2. Amman P., Wijesekera D., and KaushikS. Scalable, graph-based network vulnerability analysis // Proc. CCS 2002: 9th ACM Conf. Computer and Communications Security. 2002. P. 217-224.
3. Ou X., Wayne B., and Miles M. A scalable approach to attack graph generation // Proc. 13th ACM Conf. Computer and Communications Security. 2006. P. 336-345.
4. OuX., Govindavajhala S., and Appel A. MulVAL: A logic-based network security analyzer // SSYM'05 Proc. 14th Conf. USENIX Security Symp. 2005. V. 14. P. 113-128.
5. Ingols K., Lippmann R., and Piwowarski K. Practical attack graph generation for network defense // ACSAC'06: Proc. 22nd Ann. Computer Security Appl. Conf. 2006. P. 121-130.
6. Danforth M. Models for Threat Assessment in Networks. PhD Thesis, University of CaliforniaDavis, 2006.
7. Девянин П. Н. Модели безопасности компьютерных систем. М.: Academia, 2005.
8. Горбатенко Д. Е., Кочемазов С. Е., Семёнов А. А. О дискретно-автоматных моделях атак в компьютерных сетях // Прикладная дискретная математика. Приложение. 2016. №9. С.80-83.
УДК 004.94 DOI 10.17223/2226308X/11/29
ПОДХОДЫ К МОДЕЛИРОВАНИЮ УПРАВЛЕНИЯ ДОСТУПОМ В СУБД PostgreSQL В РАМКАХ МРОСЛ ДП-МОДЕЛИ
П. Н. Девянин
Широкое применение СУБД PostgreSQL в защищённых операционных системах, в том числе в операционной системе специального назначения (ОССН) Astra Linux Special Edition, требует разработки научно-обоснованных подходов к исследованию безопасности реализованного в этой СУБД механизма управления доступом. Для этого необходимо проанализировать как изначально используемое в СУБД PostgreSQL ролевое управление доступом, так и востребованные в практике создания защищённых систем мандатное управление доступом и мандатный контроль целостности. Известно, что научной основой при разработке механизма управления доступом в ОССН стала мандатная сущностно-ролевая ДП-модель (МРОСЛ ДП-модель), включающая перечисленные три вида управления доступом, имеющая иерархическое представление (позволяющее дополнять модель новыми элементами без её полной переработки), а также прошедшая проверку на корректность с применением инструментальных средств дедуктивной верификации. В связи с этим предлагаются подходы к построению в рамках иерархического представления МРОСЛ ДП-модели новых уровней, соответствующих механизму управления доступом в СУБД PostgreSQL. При этом из-за наличия существенных отличий этого механизма в ОССН и СУБД на первом этапе моделирования основное внимание уделено ролевому управлению доступом.
Ключевые слова: компьютерная безопасность, формальная модель, управление доступом, PostgreSQL.
С введением в действие ФСТЭК России с июня 2017 г. [1] профилей защиты операционных систем (ОС) общего назначения (типа «А»), включающих, начиная с третьего класса защиты, компоненты доверия ADV_SPM.1 «Формальная модель политики безопасности», AVA_CCA_EXT.1 «Анализ скрытых каналов» и ADV_FSP.5 «Полная полуформальная функциональная спецификация с дополнительной информацией об ошибках» [2], разработка научных подходов по формированию модели безопасности управления доступом, верификации её реализации, анализа на её основе безопасности информационных потоков (скрытых каналов) стала актуальной задачей для специалистов в области защиты информации. Можно ожидать, что в ближайшей перспективе ФСТЭК России будут введены аналогичные требования для систем управления базами данных (СУБД).