Научная статья на тему 'Противодействие сговору в дискретных динамических моделях компьютерных сетей'

Противодействие сговору в дискретных динамических моделях компьютерных сетей Текст научной статьи по специальности «Математика»

CC BY
80
18
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ДИСКРЕТНЫЕ ДИНАМИЧЕСКИЕ СИСТЕМЫ / МОДЕЛЬ "TAKE-GRANT" / ГРАФ СГОВОРА / SAT / DISCRETE DYNAMICAL SYSTEMS / "GRANT MODEL" / CONSPIRACY GRAPH

Аннотация научной статьи по математике, автор научной работы — Горбатенко Дмитрий Евгеньевич, Семёнов Александр Анатольевич

Исследуется проблема противодействия сговору субъектов в компьютерных сетях. Для моделирования соответствующих ситуаций используются дискретные модели автоматного типа, близкие по своей сути к синхронным булевым сетям. В реальных ситуациях целью сговора является возникновение некоторых прав между двумя выделенными субъектами сети. В рамках введенной в статье модели сговор рассматривается как динамический процесс, протекающий в дискретном времени. Исходной сети сопоставляется дискретная динамическая система (ДДС), в которой сговору соответствует некоторая последовательность переходов между состояниями. Сговор считается успешным, если в результате некоторой последовательности переходов происходит передача прав от одного выделенного субъекта другому. Противодействие сговору осуществляется за счет деактивации ряда узлов. В реальной сети деактивации соответствует понижение уровня доступа между некоторыми субъектами. Конкретному примеру деактивации нескольких узлов будет соответствовать новая ДДС. Заключительным состоянием данной ДДС (как и исходной) обязательно будет неподвижная точка. Если в неподвижной точке новой ДДС нет передачи прав между двумя выделенными субъектами, то это означает, что деактивация блокировала сговор. Рассматривается комбинаторная задача выбора наименьшего деактивирующего множества. Данная задача сводится к задаче о булевой выполнимости (SAT) и решается с использованием современных SAT-решателей. В качестве модели распространения прав доступа рассматривается модель «Take-Grant» как одна из самых простых и хорошо изученных моделей компьютерной безопасности.

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

Counteraction to conspiracy in discrete dynamical models of computers network

The paper studies the problem of counteracting the collusion of subjects in computer networks. In real world situations the goal of the collusions is to obtain some access rights between two network subjects. Within the proposed model, collusion is considered as a dynamic process taking place at discrete time. An original network is associated with a discrete dynamic system (DDS), in which collusion corresponds to a sequence of transitions between states. Collusion is successful if as a result of a sequence of steps the access rights are transferred from one particular subject to another. A counteraction to such collusion is achieved by deactivating some nodes. In a real network a deactivation corresponds to reducing access level between subjects. Deactivation of several nodes induces a new DDS. A final state of such DDS is a stationary point. If in this point the access rights are not transferred between selected subjects, then deactivation successfully blocked collusion. In the paper we consider a problem of finding minimal deactivating set. It is reduced to Boolean satisfiability problem and solved using state-of-the-art SAT solvers. We use the Take-Grant model of computer security because it is one of the most simple and well-studied models.

Текст научной работы на тему «Противодействие сговору в дискретных динамических моделях компьютерных сетей»

ПРОТИВОДЕЙСТВИЕ СГОВОРУ В ДИСКРЕТНЫХ ДИНАМИЧЕСКИХ МОДЕЛЯХ КОМПЬЮТЕРНЫХ СЕТЕЙ1

Горбатенко Д.Е.2

(Институт математики, экономики и информатики, Иркутск)

Семенов А. А.3 (Институт динамики систем и теории управления им. В.М. Матросова, Иркутск)

Исследуется проблема противодействия сговору субъектов в компьютерных сетях. Для моделирования соответствующих ситуаций используются дискретные модели автоматного типа, близкие по своей сути к синхронным булевым сетям. В реальных ситуациях целью сговора является возникновение некоторых прав между двумя выделенными субъектами сети. В рамках введенной в статье модели сговор рассматривается как динамический процесс, протекающий в дискретном времени. Исходной сети сопоставляется дискретная динамическая система (ДДС), в которой сговору соответствует некоторая последовательность переходов между состояниями. Сговор считается успешным, если в результате некоторой последовательности переходов происходит передача прав от одного выделенного субъекта другому. Противодействие сговору осуществляется за счет деактивации ряда узлов. В реальной сети деактивации соответствует понижение уровня доступа между некоторыми субъектами. Конкретному примеру деактивации нескольких узлов будет соответствовать новая ДДС. Заключительным состоянием данной ДДС (как и исходной) обязательно будет неподвижная точка. Если в неподвижной точке новой ДДС нет передачи прав между двумя выделенными субъектами, то это означает, что деактивация блокировала сговор. Рассматривается комбинаторная задача выбора наименьшего деактивирующего множества. Данная задача сводится к задаче о булевой выполнимости (SAT) и решается с использованием современных SAT-решателей. В качестве модели распространения прав доступа рассматривается модель «Take-Grant» как одна из самых простых и хорошо изученных моделей компьютерной безопасности.

Ключевые слова: дискретные динамические системы, модель «Take-Grant», граф сговора, SAT.

1 Работа выполнена при финансовой поддержке Российского научного фонда, проект №16-11-10046.

2Дмитрий Евгеньевич Горбатенко, аспирант (gorbadima@yandex.ru).

3 Александр Анатольевич Семенов, к.т.н., доцент

(biclop.rambler@yandex.ru).

1. Введение

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

Простой пример такого типа - возникновение несанкционированных прав доступа вследствие неумышленных или умышленных действий некоторых участников сети. К неумышленным действиям можно отнести программно-аппаратные сбои, тогда как к умышленным - сговор между недобросовестными пользователями. Мэтт Бишоп в [13] построил эффективные алгоритмы выявления ситуаций сговора в рамках известной модели распространения прав доступа «Take-Grant». Однако нам ничего не известно о работах, в которых рассматривались бы задачи блокирования сговора. При детализации постановок такого рода задач становится ясна их комбинаторная природа. И если для выявления множеств объектов, которые в принципе могут вступить в сговор, может быть использовано имитационное моделирование (о чем М. Бишоп, кстати, не упоминает), то для блокирования ситуаций сговора обычного «проигрывания модели во времени», вообще говоря, недостаточно. Как мы увидим далее, ключевое свойство объектов в сети, способствующее возникновению сговора, - это свойство быть активными, т.е. выступать в роли проводников информации. Соответственно, противодействовать сго-

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

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

В качестве основы для формального описания понятий и процессов, напрямую относящихся к компьютерной безопасности, была взята известная модель «Take-Grant» (TG) [1,2, 13, 18, 21]. В роли комбинаторной задачи с хорошо развитой алгорит-микой использовалась задача о булевой выполнимости (Boolean Satisfiability Problem), сокращенно обозначаемая SAT [12]. Наконец, для исследования механизмов противодействия ситуациям, приводящим к сговору в сети, применялся подход, близкий к подходу, использованному ранее для анализа феномена конформного коллективного поведения [6, 20].

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

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

Приведем краткое описание структуры статьи. Второй раздел содержит необходимые в дальнейшем понятия, касающиеся дискретных динамических систем (ДДС), которые порождаются сетями. Здесь же приведены основные определения, относящиеся к задаче о булевой выполнимости (SAT), а также схематично описана техника сведения к SAT задач поиска циклов в ДДС. В третьем разделе приведено краткое описание известной модели «Take-Grant» (TG) передачи прав доступа в компьютерных сетях, а также результатов М. Бишопа по анализу ситуаций сговора в рамках расширенной TG-модели. Четвертый раздел является основным. В нем вводится понятие графа сговора и описывается алгоритм выделения графа сговора из графа исходной модели, сложность которого линейна от размера исходного графа. Данный алгоритм является модификацией алгоритма Бишопа. Затем ставится задача устранения сговора за счет деактивации как можно меньшего числа активных вершин в графе сговора (задача построения наименьшего по мощности множества, устраняющего сговор). Рассматриваются дискретные динамические системы, порождаемые графами сговора и их модификациями, в которых некоторые изначально активные вершины деактивированы. Установлена прямая связь между тем, что множество деактивирован-ных вершин устраняет сговор, и видом неподвижной точки соответствующей ДДС. Затем задача поиска наименьшего по мощности множества, устраняющего сговор, сводится к SAT с использованием разработанных ранее техник пропозиционального кодирования ДДС. Пятый раздел содержит результаты вычислительных экспериментов.

2. Теоретические основы

2.1. СЕТИ И ПОРОЖДАЕМЫЕ ИМИ ДИСКРЕТНЫЕ

ДИНАМИЧЕСКИЕ СИСТЕМЫ

Везде далее сеть - это произвольный граф (как правило, ориентированный и размеченный), вершины которого интерпретируются как участники некоторого коллектива, часто называемые агентами, а ребра или дуги интерпретируются как бинарные отношения на множестве агентов (например, «друзья», «влияние», «доступ» и т.п.). Наша ближайшая цель - дать содержательное определение динамических процессов, при помощи которых в дальнейшем можно будет представлять распространение прав по сети. С этой целью мы свяжем с рассматриваемой сетью дискретную динамическую систему (ДДС) автоматного типа [7]. Такие системы могут определяться различными способами. Мы начнем с описания класса ДДС, нашедших широкое применение при изучении коллективного поведения.

Итак, пусть С = (V., А) - простой ориентированный граф, в котором V - множество вершин, А - множество дуг. Везде далее граф С называем сетью. Произвольная дуга (, V) € А будет интерпретироваться как отношение «агент и> влияет на агента V». Для произвольной вершины V € V определим ее окрестность следующим образом:

К = {ш € = ьК'ш.ь) € А}.

Можно сказать, что окрестность V образована теми вершинами сети, которые напрямую влияют на данную вершину. Под этим влиянием вершина V может менять свое поведение, например, переходить в активное или неактивное состояние. Для отображения такого рода процессов будем связывать с произвольной вершиной V € V специальную функцию, значениями которой являются элементы некоторого конечного множества П. Будем рассматривать нашу сеть в дискретные моменты времени Ь € {0,1, 2,... }, полагая, что в каждый конкретный момент £ вершине V сопоставлен некоторый (¿) € П (вообще говоря, некоторый символ - например, 0 или 1). 80

Пусть v Е V - произвольная вершина сети и Vv = {v1,...,vl} - окрестность v. Определим правило fv, в соответствии с которым в момент времени t + 1 элементам wv' (t),..., wv' (t) сопоставляется элемент wv(t + 1):

(1)1 г Wv(t + 1) = fvK;(t),...,^v{Ш

Определение 1. Функцию fv : Qv' x ■ ■ ■ x Qv' ^ Qv вида (1) будем называть весовой функцией вершины v. Явное задание всех весовых функций вершин сети задает функцию

(2) Fg : Q ^ Q,

где Q = Qvi x ■ ■ ■ x Qvn. Значения Fg, рассматриваемые в моменты времени t Е {0,1,2,... }, будем называть состояниями сети. Произвольное состояние сети в момент t будем обозначать через Wc(t). Состояние ^g(0) называется начальным.

Если для каждой v Е V имеет место Qv = {0,1}, то рассматриваемая сеть называется синхронной булевой сетью (Synchronous Boolean Network, SBN) или сетью Кауффмана. Таким образом, в SBN весовые функции - это булевы функции, для задания которых можно использовать таблицы истинности или формулы.

В оригинальной статье Стюарта Кауффмана [19] рассматривались SBN, которые использовались в роли простых моделей динамических процессов в генных сетях. Однако природа коллективов, к которым могут применяться ключевые понятия и идеи этой работы, существенно разнообразней. Следуя [19], мы будем представлять функцию (2) в виде специального графа Г, называемого графом переходов между состояниями, или кратко графом состояний (State Transition Graph, STG). Вершины Г интерпретируются как состояния сети, т.е. n-кортежи из Q. Дуги Г интерпретируются как переходы между состояниями сети из момента t в момент t +1. В некоторых работах Г называют пространством фазовых переходов, подразумевая аналогию с непрерывными динамическими системами. Часто говорят, что граф Г представляет поведение дискретной динамической системы (ДДС), заданной сетью G.

В случае ДДС граф Г всегда содержит конечное число вершин. Так, если G - SBN, то граф Г содержит 2п вершин, каждой из которых соответствует двоичное слово длины п, представляющее собой набор значений весовых функций всех вершин сети.

Определение 2. Ввиду конечности числа состояний ДДС, для любого начального состояния WG(0) обязательно найдутся такие натуральные числа L и М, 0 ^ L < М, что в последовательности состояний

WG(0),WG(1),...,WG(M)

имеет место: WG(L) = WG(M). Обозначим через L0,M0 наименьшие L и М, обладающие таким свойством. Последовательность Wg(L0), ..., WG(M0) будем называть циклом (в некоторых работах используется термин «аттрактор») длины М0 — L0. Цикл длины 1 называется стационарным состоянием или неподвижной точкой функции FG.

На рис. 1 приведен пример SBN, иллюстрирующий введенные выше понятия. Приведено два способа задания весовых функций вершин рассматриваемой сети - таблицами и формулами.

Поскольку в общем случае имеет место экспоненциальная зависимость числа вершин в графе Г от числа вершин в сети G, то задачи поиска стационарных состояний и циклов отображений вида (2) относятся к комбинаторным. При исследовании конкретных сетей для решения данных задач можно использовать различные эффективные на практике комбинаторные алгоритмы. В ряде работ для этих целей использовались алгоритмы решения проблемы булевой выполнимости (SAT) [3, 6, 16, 17, 20]. В следующем разделе мы кратко опишем техники сведения задач поиска циклов отображений вида (2) к SAT.

G A

Г

B

C

(000) (011) (110)

(001) (111) (101) (100) (010))

fB (t) fc (t) fA(t +1) fA(t) fc (t) fB(t + 1) fA(t) fB (t) fc (t +1)

0 0 0 0 0 1 0 0 1

0 1 1 0 1 1 0 1 0

1 0 0 1 0 1 1 0 0

1 1 1 1 1 0 1 1 1

М +1) = (¡в(1) V ¡с(*)) л (-¡в(г) V ¡с(*))) /в (г + 1) = -(¡А(г) л ¡с(I)) ¡с (ъ + 1) = аА(1) = ¡в (-1))

Рис. 1. Пример синхронной булевой сети, весовые функции вершин в которой заданы таблицами и булевыми формулами

2.2. ЭФФЕКТИВНЫЕ СВОДИМОСТИ К SAT ЗАДАЧ ПОИСКА ЦИКЛОВ ДИСКРЕТНЫХ ФУНКЦИЙ, ЗАДАВАЕМЫХ СЕТЯМИ

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

Пусть {0,1}п- множество всех двоичных последовательностей длины п(п £ N), а {0,1}* - множество всех двоичных последовательностей произвольной конечной длины.

Рассмотрим произвольную всюду определенную (тотальную) дискретную функцию f : {0,1}* ^ {0,1}*, заданную некоторым алгоритмом A(f). Алгоритм A(f) задает счетное семейство тотальных функций вида fn : {0,1}га ^ {0,1}*. Везде далее

мы будем рассматривать только такие ситуации, когда сложность A( f) ограничена полиномом от п.

Задача обращения произвольной функции

(3) la : {0,1}га ^{0,1Г

состоит в том, чтобы по известному 7 Е Rangefn найти такой а Е {0,1}га, что fn(a) = 7.

Хорошо известно, что для рассматриваемого класса функций описанная задача обращения эффективно (за полиномиальное от п время) сводится поиску выполняющего набора выполнимой конъюнктивной нормальной формы (КНФ). По сути, данный факт является прямым следствием известной теоремы Кука-Левина [4, 15].

Задача SAT (Boolean Satisfiability Problem) заключается в ответе на вопрос, выполнима ли произвольная КНФ С. SAT в распознавательной формулировке - классическая NP-полная задача. Тем не менее в последние 20 лет наблюдается выдающийся прогресс в разработке вычислительных алгоритмов решения SAT, применимых к различным тестам индустриального характера. В настоящее время лучшие алгоритмы решения SAT справляются с КНФ, содержащими десятки тысяч переменных и сотни тысяч дизъюнктов. Такие алгоритмы используются в символьной верификации, биоинформатике, комбинаторике и криптоанализе. Опишем кратко суть процедур перехода от задачи обращения дискретной функции к SAT.

Итак, рассматриваем задачу обращения произвольной функции вида (3). Заметим, что произвольную такую функцию мы можем рассматривать как набор из т, булевых функций арности п. Соответственно, функцию (3) мы можем задать при помощи схемы из функциональных элементов Sfn над любым полным базисом [5]. У схемы Sfn будет п входов и т, выходов. Существует специальная техника, называемая преобразованиями Цейтина [8], которая произвольной схеме Sfn ставит в соответствие CNF Cfn над множеством булевых переменных U, X С U. Здесь X = {х]^,... ,хп} - переменные, приписанные входам схемы Sfn, а U\Х - переменные, приписанные всем гей-

там Sfn. Сложность (time complexity) процедуры построения Cfn по Sfn линейна от общего числа узлов схемы Sfn. В U выделим подмножество Y переменных, приписанных выходам Sfn. Пусть 7 Е {0,1}т - произвольный набор значений переменных из Y. Означим в Cfn все переменные из Y их значениями из 7 и проделаем все возможные элементарные преобразования над полученной формулой. Обозначим результирующую CNF через Cfn (7). Из свойств преобразований Цейтина следует, что если 7 Е Rangefn, то Cfn (7) выполнима, и из любого выполняющего ее набора можно выделить такой набор а значений переменных из X, что fn(&) = 7. Тем самым задача обращения произвольной функции вида (3) сведена к SAT.

В соответствии с описанной процедурой можно эффективно преобразовать задачу поиска цикла произвольного отображения вида (2) к SAT. Проиллюстрируем это на примере SBN. Пусть G = (V, А) - SBN на п вершинах, весовые функции которых заданы булевыми формулами. Легко видеть, что функция (2) в данном случае - это дискретная функция вида

(4) Fg : {0,1}га ^{0,1}га,

которую можно задать простым алгоритмом. Используя описанную выше технику, построим CNF Cfg . Пусть U - множество булевых переменных, фигурирующих в Cfg , и пусть X = {ж],..., хп} и Y = {у1,..., уп} - переменные, приписанные входам/выходам схемы SpG. Рассмотрим следующую CNF:

(5) CFg Л (Ж1 = yi) Л ■ ■ ■ Л (хп = уп),

где через = обозначена логическая эквивалентность. В свете сказанного выше несложно видеть, что CNF (5) выполнима тогда и только тогда, когда отображение Fq имеет неподвижные точки. Если (5) выполнима и ^ - выполняющий её набор, то из него можно выделить набор а переменных из X, который определяет стационарное состояние в STG Г(^с). Подобным же образом к SAT может быть сведена и задача поиска циклов произвольной длины в графах состояний отображений типа (2). В случае, когда G - это SBN на п вершинах, для этой цели можно рассмотреть функцию Fq, являющуюся i-кратной суперпозицией функции вида (4), где t - длина искомого цикла. Соответствующая

схема Бр^ - это, по сути, цепочка из £ схем вида Бра, в которой входы каждой последующей схемы соединены с выходами предшествующей. К КНФ Срь по аналогии с (5) потребует приписать

условие на совпадение состояний на входе и выходе Fq

- G

тоянийна входе и выходе ^

Описанный здесь алгоритм перехода от задачи поиска циклов в STG отображений типа (2) к SAT относится к классу процедур, называемых пропозициональными кодированиями. В работах [6, 20] более детально описаны процедуры пропозиональ-ного кодирования ряда задач активационной динамики на сетях Кауффмана.

3. Модели компьютерной безопасности семейства «Take-Grant» и их основные свойства

Базовая модель «Take-Grant» (TG) [18, 21] - это формальная модель, интерпретирующая процессы передачи прав доступа в компьютерной сети. Сеть представляется в рамках TG-модели в виде простого ориентированного размеченного графа

G = (О, А).

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

R = {г\, г2 ... rn} U {t,g} - множество видов прав доступа, в котором выделены следующие права:

• t - право брать права доступа;

• g - право давать (делегировать) права доступа;

А - множество дуг графа: А С О х О х R. Таким образом, дуги означают в TG права доступа между объектами.

Изменениям состояний системы соответствуют изменения графа. В классической TG-модели выделено два типа базовых 86

правил, определяющих передачу прав доступа между объектами: take(P, х, у, z) и grant(P, х, у, z). Через х, у, z здесь обозначены объекты, причем х - обязательно субъект. Через Р обозначено множество прав доступа, которые в случае правила «take» х берет у у и передает z; в случае правила «grant» х передает свои права доступа Р к объекту z некоторому объекту у (в соответствии с отношением х grant у). Базовые правила take и grant называются де-юре правилами.

На рис. 2 показано, что в некоторый момент времени субъект х, имеющий право брать у объекта у некоторые права доступа на объект z, получает часть прав (А С В) на объект z. Как результат, в графе доступов возникает новая дуга (х, z) помеченная А. Так работает правило take. Работа правила grant продемонстрирована на втором рисунке в аналогичном стиле.

А

X у Z X у Z

А

У х z У х z

Рис. 2. Иллюстрация работы правил «take» и «grant» в базовой

TG-модели

В статье [14] была описана расширенная модель «Take-Grant», в которой присутствовали де-факто правила, а также регламентировалась работа с информационными потоками. Далее мы будем использовать терминологию из [1], в рамках которой при наличии информационных потоков вида р read q и р write q будем говорить о соответствующих правах read(r) и write(w). Дуги, которые соответствуют этим правам в графе расширенной TG-модели, называются мнимыми.

Весьма детально базовая модель TG и ее расширения рассмотрены в [1, 2]. Для варианта «Take-Grant» без возможности

создания и удаления объектов в [18, 21] были предложены эффективные алгоритмы проверки ряда свойств, определяющих безопасность системы.

Основные интересующие нас вопросы будут касаться ситуаций получения в рамках модели расширенной TG прав вида р read q в результате вступления в сговор некоторых объектов сети. Соответствующие проблемы были поставлены и изучены М. Бишопом в работе [13]. Сговор между участниками сети в [13] явно не определяется, однако по смыслу это ситуация, в которой сотрудничество ряда объектов/субъектов может привести к появлению информационных потоков на чтение или запись и соответствующих им прав на некоторый критический объект в сети. Важный факт заключается в том, что сговор может быть успешным лишь тогда, когда среди объектов, вступающих в сговор, имеется необходимое число активных объектов, в отношении которых М. Бишоп использует термин «actors». Именно такие объекты выполняют роль «проводников» информации, обеспечивая передачу прав г и w по сети. Основные достижения работы [13] - это эффективные (полиномиальные от числа вершин в графе) процедуры проверки возможности получения доступа к данным тех или иных вершин в результате сговора. Также в [13] устанавливается явная связь между числом активных объектов (actors) в специальном графе действий (acting graph) и успешностью сговора. Проиллюстрируем сказанное на следующем примере из [13].

В верхней части рис. 3 изображен фрагмент графа доступа компьютерной сети. Вершины графа помечены латинскими буквами. В данном примере по сети распространяются только два права: read(r) и write(w). Активные объекты (actors) обозначены сплошными точками, неактивные - пустыми. В нижней части рис. 3 изображен соответствующий граф действий (acting graph). Произвольная дуга (v1,v2) в графе действий означает получение права read объекта v1 на данные объекта v2. Можно заметить, что вершина р получает право г к данным вершины Ъ, поскольку b пишет в а (которая сама по себе неактивна),

а р читает из а. Аналогично, с читает из й и затем пишет в Ь, соответственно, у р возникает право читать данные й. И так далее. Как итог, р может читать данные объекта д. Описанная ситуация дает пример сговора по похищению права на чтение данных вершины д: если вершины из множества {р, Ь, с, й, е} действуют так, как только что было сказано, то р получает возможность читать данные д. С другой стороны, вершина 8 не может получить доступ к данным д. И, что очень важно, этому препятствуют две неактивных вершины г,]. Несмотря на право ] писать в г, вершина ] этого не делает, поскольку неактивна (здесь принципиальное отличие от предыдущего случая, где от вершины а не требовалось никаких действий). Соответственно, информация от д не проходит дальше вершины

f У t

Рис. 3. Фрагмет сети «Take-Grant» и пример графа действий

из работы [13]

4. Противодействие сговору в ДДС на базе модели «Take-Grant» (качественный анализ)

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

Еще раз отметим, что некоторые задачи анализа свойств безопасности сетей в рамках TG-модели, рассмотренные в [13, 18, 21], решаются за полиномиальное время. Тем не менее несложно описать задачи, естественным образом связанные с рассмотренными, но при этом являющиеся комбинаторными по своей природе. Далее мы концентрируемся на изучении задач такого типа. Следуя [13], будем рассматривать распространение по сети только прав read и write. Дополнительно отметим, что (как и в работах [13, 18, 21]) во всех рассматриваемых далее сетях запрещено создавать новые и удалять имеющиеся объекты. Это позволяет обеспечить так называемое «свойство монотонности» [9], наличие которого, собственно, и позволяет рассматривать распространение информации по сети как конечный процесс.

Сначала обратимся к задаче выявления множеств объектов, сговор между которыми приводит к появлению права read у объекта р на объект q. Предварительно уточним ряд понятий.

Определение 3. Пусть G(0, А) - граф расширенной модели «Take-Grant» до начала каких-либо действий по распространению прав. Все дуги из А будем называть базовыми. Появление отношения read или write между двумя объектами будем интерпретировать новой дугой, не входящей в А. Будем называть такие дуги приобретенными.

Теперь предположим, что в результате распространения прав в рамках рассматриваемой модели возникло право р read q. В [13] был предложен эффективный (на самом деле линейный от размера исходного графа) алгоритм построения графа действий (acting graph) G'. Все вершины, входящие в G', - это активные объекты, принимающие участие в передаче прав от q к р. Для дальнейших целей нам более удобен граф, который содержит вообще все объекты (как активные, так и неактивные), при участии которых возникает отношение р read q.

Определение 4. Граф Gpq = (Opq,Apq), который содержит

все вершины и базовые дуги G, участвующие в передаче прав от q к р, будем называть графом сговора. Произвольное множество О',О' С Орд, объекты которого, взаимодействуя в рамках правил расширенной модели TG, обеспечивают передачу прав от q к р, будем называть множество сговора. Множество Opq будем называть полным множеством сговора.

Еще раз подчеркнем, что множество Opq может содержать неактивные объекты (в рассмотренном выше примере такой объект представлен вершиной а). Анализируя алгоритм, приведенный в [12], несложно его модифицировать с целью построения графа GPq. Соответствующий алгоритм неформально описан ниже.

Алгоритм 1 (Выделение графа сговора Gpq).

1. При всех перечисленных выше условиях (в том числе с учетом свойства монотонности) проследить распространение прав г и w в сети, запоминая для каждой приобретенной дуги те дуги (как базовые, так и приобретенные), благодаря которым она возникла (такие дуги называем предками).

2. В конечном состоянии сети (после которого не возникает новых дуг) убедиться, что между вершинами р, q существует отношение р read q, которое отсутствовало в начальном состоянии.

3. Рекурсивно обойти предков приобретенной дуги (р, q).

4. Те вершины графа G и его базовые дуги, которые были пройдены в процессе выполнения шага 3, образуют граф сговора Gpq — (Opq, Apq).

Нетрудно убедиться, что для конкретных заданных p,q £ О сложность описанного алгоритма построения Gpq зависит линейным образом от числа базовых дуг в графе G.

Определение 5. Пусть Gpq — (Opq, Apq) - граф сговора по передаче прав от q к р. Пусть О',О' С Opq, произвольное множество сговора. В О1 исключим из рассмотрения произвольную вершину v, обозначив полученное множество через О". Если для любой вершины v £ О' соответствующее множество О" не является множеством сговора по передаче прав от q к р, то множество О' назовем каналом сговора в графе Gpq.

Грубо говоря, канал - это один конкретный пример реализации сговора. Множество различных каналов, обеспечивающих отношение р read q в графе Gpq, может быть очень большим. Наша ближайшая задача - научиться блокировать такие каналы. Как уже было сказано, в рамках рассматриваемой модели передача прав в сети возможна только благодаря активным объектам. Соответственно, естественный способ блокирования каналов сговора - это придание некоторым активным объектам неактивного статуса (деактивация). Заметим, однако, что на практике далеко не каждый объект может быть деактивирован.

Определение 6. Пусть Gpq = (Opq, Apq) - граф сговора по передаче прав от q к р. Деактивируем один или несколько объектов из Opq. Любое подмножество в Opq, которое до деактивации было каналом сговора, а после деактивации перестало им быть, назовем фиктивным каналом. Множество вершин D С Opq, деактивация которых делает фиктивными все каналы сговора в Gpq, будем называть множеством, устраняющим сговор по передаче прав от q к р.

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

В данном контексте важно отметить следующий нюанс: деактивация некоторого активного объекта в канале, обеспечивающем право р read q, может не дать фиктивный канал. Соответствующий пример приведен на рис. 3: в канале (р, а, Ь, с, d, е, q) вершина а неактивна, но данный канал не является фиктивным. Таким образом, на первый взгляд непонятно, как можно было

бы свести рассматриваемую задачу к «традиционным» комбинаторным задачам на графах (типа поиска максимальных клик или независимых множеств).

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

Итак, пусть G = (О, А) - исходная сеть, рассматриваемая в рамках описанной выше модели распространения прав read и write. Пусть p,q £ О - фиксированные вершины сети и Gpq = (Opq, Apq) - эффективно выделенный из исходной сети граф сговора по передаче прав от q к р. Будем рассматривать распространение информации по графу Gpq как дискретный динамический процесс, шаги которого осуществляются в моменты времени t £ {0,1,... }.

Выделим в множестве Opq х Opq подмножество A^q, образованное всеми теми парами вида (и, v), в которых и не имеет права read на v в графе Gpq. Каждому моменту t £ {0,1,... } поставим в соответствие граф Gfvq. Граф Gpq совпадает с графом Gpq. При переходе от t = 0 к t = 1 для любой пары вершин (и, v) £ A®q проверяется возможность возникновения права и read v. Если такое право возникает, оно интерпретируется новой дугой (и, v), помеченной правом г. Множество пар из Apq, для которых отношение «и read v» не возникло, обозначается через A^q. При переходе от t = 1 к t = 2 аналогичным образом проверяются все пары из A^q. И так далее. Ввиду свойства монотонности через конечное число М моментов времени данный процесс перестанет порождать новые дуги. Рассмотрим граф G]jfq. Все дуги в G1jfq, отличные от дуг из Gpq, порожденные описанным выше процессом, будем называть пунктирными. Очевидно, что каждой пунктирной дуге соответствует некоторая приобретенная дуга в смысле определения 3. Удалим из Gifq все дуги графа Gpq. Обо-

значим получившийся граф через Gpq = (Opq,А*). Множество А*, таким образом, включает только пунктирные дуги.

Пусть А* = {а\,...,ак}, причем ак = (p,q) (очевидно, что пунктирная дуга ак заведомо существует, поскольку Gpq -граф сговора по передаче прав от q к р). В каждый момент времени t £ {0,1,... ,М} произвольной дуге а £ А* поставим в соответствие вес wa(t) £ {0,1}. Факт wa(t) = 0 интерпретирует отсутствие в момент t права read между соответствующими объектами, а wa(t) = 1 интерпретирует наличие данного права. Вектор W(t) = (wai(t),... ,waK(t)) - это состояние нашей ДДС в момент t. Начальное состояние соответствует состоянию рассматриваемой модели до начала каких-либо действий по распространению прав. В этот момент всем пунктирным дугам приписан вес 0. В моменты времени t £ {1, 2,..., М} веса пунктирных дуг пересчитываются фактически в соответствии с правилами выделения графа сговора приведенным выше алгоритмом (алгоритм 1). Иными словами, для каждого момента в отношении конкретной пунктирной дуги проверяется, возникла ли в рамках TG-модели соответствующая приобретенная дуга; в случае ответа «да» рассматриваемая пунктирная дуга получает вес 1, в противном случае она получает вес 0. Как итог имеем ДДС, которую будем обозначать через A(G*q). Ввиду всего сказанного выше, несложно заметить, что данная ДДС не имеет циклов длины > 1 и имеет единственную неподвижную точку - состояние W (М).

Рассмотрим граф Gpq = (Opq,А*) и рассмотрим произвольное множество D,D С Opq. В множестве Opq промаркируем все вершины, которые входят в D, как неактивные. Полученное множество обозначим через Opq. Рассмотрим граф Gpq = (Opq,А*). Построим на основе графа Gpq ДДС, действующую в точности по тем же правилам, по которым действует ДДС A(G*q). Обозначим данную ДДС через A(Gpq). Установим справедливость следующего факта.

Теорема 1. Множество вершин D С Opq устраняет сговор по передаче прав от q к р тогда и только тогда, когда в неподвижной точке системы A(Gpq) вес дуги ак равен 0.

Доказательство. Докажем необходимость. Пусть D - множество, устраняющее сговор по передаче прав от q к р. Это, согласно определению 4, означает, что деактивация вершин из D делает фиктивными все каналы в Gpq, обеспечивающие передачу прав от q к р. Если предположить, что в неподвижной точке системы A(Gpq) дуга ак имеет вес 1, то это, согласно правилам построения A(Gpq), будет означать, что в процессе перехода данной системы от начального состояния к неподвижной точке у объекта р возникло право read на объект q. Следовательно, некоторый канал в графе сговора после деактивации вершин из D не является фиктивным. Полученное противоречие доказывает необходимость. Наоборот, пусть в неподвижной точке системы A(GPq) дуга ак имеет вес 0. Предположим, что при этом существует канал сговора в Gpq, не являющийся фиктивным. Но тогда в процессе входа системы A(Gpq) в неподвижную точку обязательно должно возникнуть право р read q, соответственно, дуга а к в этом случае получила бы вес 1. Данное противоречие доказывает достаточность. Теорема 1 доказана.

Рисунки 4 и 5 иллюстрируют понятия, использованные в доказательстве теоремы 1.

¿=0

¿=1

¿=2

0

0 X

0' Шг

/0 /

р

0

"Г"

-я)

1/ ' /1 /

1

р

1 %

/1 /

0

0/

0 V

/0 /

"Г Ч

/ V N

' "Ч *

' П 4 4

____-0-._ Ч \

!Р .....

0 \

/1 /

Рис. 5. Слева изображена ДДС А(С*д), построенная на основе графа сговора, приведенного на рис. 4. Справа ДДС ).

В первом случае ДДС входит в неподвижную точку в момент £ = 2, во втором случае - в момент £ = 1

0

р

0

0

Ч

0

1

1

0

0

1

0

1

1

1

1

5. Результаты вычислительных экспериментов

Опишем кратко вычислительные алгоритмы, которые позволяют строить устраняющие сговор множества наименьшей мощности. В основе разработанных алгоритмов лежат те же идеи, которые были использованы в статье [20]. Более точно, рассматривается конкретный граф сговора Gpq. Относительно каждой вершины из Орд за исключением специально выделенных (вершина q, а также вершины, находящиеся слишком близко к q в смысле расстояния в графе) делается предположение о ее потенциально возможном попадании в D. Данный факт кодируется при помощи специально вводимых булевых переменных (значение 1 такой переменной соответствует тому факту, что соответствующая вершина попадает в D, значение 0 означает, что рассматриваемая вершина не попадает в D). Затем мы кодируем процесс входа системы A(Gpq) в неподвижную точку. Из сказанного выше следует, что для этой цели достаточно закодировать последовательность переходов A(Gpq) между состояниями W(0),...,^(М). Затем мы добавляем условие waK (М) — 0, а также условие, что число точек из Opq, оказавшихся в D, не превосходит некоторого числа d. Также мы используем дополнительные ограничения на возможность вершин из Opq попадать в D. В частности, мы запрещаем попадать в D вершинам, находящимся от q (целевой вершины) на расстоянии, меньшем заданного значения (в смысле стандартного расстояния в графе). Для кодирования последнего условия так же, как и в [20], используются известные техники работы с мощностными ограничениями (cardinality constraints) [10].

В тестовых экспериментах в роли исходных сетей использовались случайные графы на 200 вершинах, сгенерированные в соответствии с моделью Барабаши-Альберт [11]. Дополнительно предполагалось, что число активных вершин (субъектов) в сети не должно превышать 40. В каждом таком графе строился граф сговора Gpq (вершины р и q выбирались случайным образом). Всего в соответствии с описанной схемой было сгенерировано 700 графов, представляющих сети, для которых число вершин в

графе GPq варьировалось от 30 до 50. Для каждого такого Gpq ставилась задача построения множества D (устраняющего сговор по передаче прав от q к р) наименьшей мощности. При этом мы накладывали запрет на деактивацию любой вершины в Gpq, из которой существует путь в q по дугам Gpq длины ^ 6. Поставленная так задача сводилась к SAT с использованием описанной выше техники. Средний размер (по 700 задачам) построенных КНФ составил 126 мегабайт. Для решения SAT-задач использовался SAT-решатель minisat2.2 [22]. Все SAT-задачи были решены. Среднее время решения составило 0,11 секунды. Использовалась вычислительная платформа следующей конфигурации: процессор Core Í7-2670QM, 8Gb RAM. Примерно в 50 случаях наименьшее множество, устраняющее сговор, имело размер от 3 до 5 вершин. В большинстве случаев находилось D мощности менее чем из 3 вершин. Примерно в 100 тестах SAT-решатель выдал UNSAT. Это означает, что в соответствующих случаях при имеющихся ограничениях (на расстояние от q до вершин, которые допустимо деактивировать) устранить сговор невозможно.

6. Заключение

В статье представлен подход к анализу и устранению ситуаций сговора, возникающих в рамках известной модели «Take-Grant» распространения прав в компьютерных сетях. В основе подхода лежит эффективный алгоритм выделения в исходном графе модели т.н. «графа сговора». Данный алгоритм является модификацией известного алгоритма построения графа действий, предложенного М. Бишопом в 1996 году. Деактивируя в графе сговора некоторые вершины, можно полностью устранить ситуацию сговора по передаче прав между двумя выделенными вершинами. Соответствующее множество деактивируемых вершин называется множеством, устраняющим сговор. Мы рассматриваем задачу построения наименьшего по мощности множества, устраняющего сговор. Данная задача является комбинаторной по своей природе, и для ее вычислительного решения мы сводим ее к задаче о булевой выполнимости (SAT). Для сведения мы стро-98

им на основе графа сговора дискретную динамическую систему и используем известные техники пропозиционального кодирования таких систем. Описанный в статье подход к устранению ситуаций сговора был программно реализован и протестирован на случайных графах TG-модели размерностью 200 вершин. Задачи построения устраняющих сговор множеств наименьшей мощности удавалось успешно решать на обычном ПК.

Дополнительно мы хотим еще раз подчеркнуть, что основная цель статьи заключалась в демонстрации принципиальной возможности применения современных алгоритмов вычислительной логики (конкретно алгоритмов решения SAT) к комбинаторным задачам, возникающим при изучении ряда аспектов безопасности компьютерных сетей. На наш взгляд поставленная цель была достигнута, поскольку комбинаторная размерность задач, которые удается успешно решать на обычном ПК с использованием предложенных алгоритмов, существенно превосходит возможности простого перебора. Конечно, применение идей и методов, представленных в статье, к реальным сетям потребует большой исследовательской работы и тесной кооперации со специалистами по практической компьютерной безопасности. Однако, с нашей точки зрения, этот шаг представляется осуществимым, и мы надеемся в дальнейшем работать над его реализацией.

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

Литература

1. ДЕВЯНИН П.Н. Модели безопасности компьютерных систем: учеб. пособие. - 2005.

2. ДЕВЯНИН П.Н. Модели безопасности компьютерных систем. Управление доступом и информационными потоками: учеб. пособие. - 2011.

3. ЕВДОКИМОВ А.А., КОЧЕМАЗОВ С.Е., СЕМЕНОВ А.А. Применение символьных вычислений к исследованию дискретных моделей некоторых классов генных сетей // Вычислительные технологии. - 2011. - Т. 16, №1. - С. 30-47.

4. ЛЕВИН Л.А. Универсальные задачи перебора // Проблемы передачи информации. -1973. - Т. 9, №3. - P. 265-266.

5. НИГМАТУЛЛИН Р.Г. Сложность булевых функций. - М.: Наука, Гл. ред. физ.-мат. лит-ры, 1991. - 240 с.

6. СЕМЁНОВ А.А., КОЧЕМАЗОВ С.Е. О дискретно-автоматных моделях конформного поведения // Управление большими системами. - 2013. - Вып. 46. - С. 266-292.

7. Системная компьютерная биология / Под ред. Н.А. Колча-нова. - Новосибирск: Изд-во Сибирского отделения Российской академии наук, 2008. - 769 с.

8. ЦЕЙТИН Г.С. О сложности вывода в исчислении высказываний // Записки научных семинаров ЛОМИ АН СССР. -1968. - Т. 8. - С. 234-259.

9. AMMANN P., WIJESEKARA D., KAUSHIK S. Scalable, Graph-Based Network Vulnerability Analysis // Proc. of the 9th ACM Conference on Computer and Communication Security (CCS'02), Washington, DC, USA, November 17-21, 2002. -P. 217-224.

10. ASIN R., NIEUWENHUIS R., OLIVERAS A., RODRIGUEZ-CARBONELL E. Cardinality networks: a theoretical and empirical study // Constraints. - 2011. - Vol. 16, No. 2. -

P. 195-221.

11. BARABASI A.L., ALBERT R. Emergence of scaling in random networks // Science. - 1999. - Vol. 286. - P. 509-512.

12. BIERE A., HEULE M., VAN MAAREN H., WALSH T. Handbook of Satisfiability // Frontiers in Artificial Intelligence and Applications. - 2009. - Vol. 185. - P. 1-980.

13. BISHOP M. Conspiracy and Information Flow in the Take-Grant Protection Model // Journal of Computer Security. -1996. - Vol. 4, No. 4. - P. 331-359.

14. BISHOP M., SNYDER L. The Transfer of Information and Authority in a Protection System // Proc. of the 7th Symp. on Operating Systems Principles, Pacific Grove, California, USA, December 10-12, 1979. - P. 45-54.

15. COOK S. The complexity of theorem-proving procedures // Proc. of the third annual ACM symposium on Theory of computing (STOC'71), Shaker Heights, Ohio, USA, May 0305, 1971. - P. 151-158.

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

16. DUBROVA E., TESLENKO M. A SAT-based algorithm for finding attractors in synchronous boolean networks // IEEE/ACM Trans. on Computational Biology and Bioinformatics. - 2011. - Vol. 8. - P. 1393-1399.

17. EVDOKIMOV A.A., KOCHEMAZOV S.E., OTPUSHCHENNIKOV I.V., SEMENOV A.A. Study of discrete automaton models of gene networks of non-regular structure using symbolic calculations // Journal of Applied and Industrial Mathematics. - 2014. - Vol. 8, No. 3. - P. 307-316.

18. JONES A., LIPTON R., SNYDER L. A Linear Time Algorithm for Deciding Security // Proc. of the 17th Annual Symp. on the Foundations of Computer Science, Houston, TX, USA, October 25-27, 1976. - P. 33-41.

19. KAUFFMAN S. Metabolic stability and epigenesis in randomly constructed genetic nets // Journal of Theoretical Biology. -1969. - Vol. 22. - P. 437-467.

20. KOCHEMAZOV S., SEMENOV A. Using Synchronous Boolean Networks to Model Several Phenomena of Collective Behavior. // PLOS ONE. - 2014. - Vol. 9, No. 12, e115156. -P. 1-28.

21. LIPTON R., SNYDER L. A Linear Time Algorithm for Deciding Subject Security // Journal of the ACM. - 1977. -Vol. 24, No. 3. - P. 455-464.

22. The MiniSat Page [Электронный ресурс]. - http://minisat.se.

COUNTERACTION TO CONSPIRACY IN DISCRETE DYNAMICAL MODELS OF COMPUTERS NETWORK

Dmitriy Gorbatenko, Institute of Mathematics, Economics and Informatics, Irkutsk, postgraduate student (gorbadima@yandex.ru). Alexander Semenov, Matrosov Institute for System Dynamics and Control Theory, Irkutsk, Cand.Sc., assistant professor (biclop.rambler@yandex.ru).

Abstract: The paper studies the problem of counteracting the collusion of subjects in computer networks. In real world situations the goal of the collusions is to obtain some access rights between two network subjects. Within the proposed model, collusion is considered as a dynamic process taking place at discrete time. An original network is associated with a discrete dynamic system (DDS), in which collusion corresponds to a sequence of transitions between states. Collusion is successful if as a result of a sequence of steps the access rights are transferred from one particular subject to another. A counteraction to such collusion is achieved by deactivating some nodes. In a real network a deactivation corresponds to reducing access level between subjects. Deactivation of several nodes induces a new DDS. A final state of such DDS is a stationary point. If in this point the access rights are not transferred between selected subjects, then deactivation successfully blocked collusion. In the paper we consider a problem of finding minimal deactivating set. It is reduced to Boolean satisfiability problem and solved using state-of-the-art SAT solvers. We use the Take-Grant model of computer security because it is one of the most simple and well-studied models.

Keywords: discrete dynamical systems, "Grant model", conspiracy graph, SAT.

УДК 519.7 ББК 22.17

Статья представлена к публикации членом редакционной коллегии М.В. Губко.

Поступила в редакцию 06.03.2018. Дата опубликования 30.09.2018.

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