Глава 3. Модель политики безопасности управления доступом — требования к составу и структуре модели. Базовый уровень МРОСЛ ДП-модели

3.1. Требования к составу и структуре модели

Основу системы требований по созданию на основе ОС общего назначения механизма управления доступом, сертификации ОС на соответствие «Требованиям безопасности информации к операционным системам», утвержденным приказом ФСТЭК России от 19 августа 2016 г. № 119 [15], составляют шесть профилей защиты ОС типа «А» [17]. Эти профили защиты, основываясь на ГОСТ Р ИСО/МЭК 15408, а также дополняя его, включают иерархическую систему функциональных требований и требований доверия, состав которых постепенно усиливается от шестого к первому классу защиты ОС.

Наибольший интерес, с учетом сложившейся практики создания и сертификации отечественных защищенных ОС, представляют профили защиты для третьего и второго классов [13, 14], ориентированные на информационные системы, в которых обрабатывается информация, содержащая секретные или совершенно секретные сведения соответственно.

Начиная с третьего класса защиты профили защиты включают компонент доверия ADV_SPM.1 «Формальная модель политики безопасности». В соответствии с ГОСТ Р ИСО/МЭК 15408 в этом компоненте указывается, что формальная модель должна быть изложена в формальном стиле (с использованием, например, математического языка), должно быть определено понятие «безопасность» для ОО и должно быть представлено формальное доказательство того, что ОО не может перейти в небезопасное состояние, а также должно быть продемонстрировано соответствие между какой-либо функциональной спецификацией, используемой ОО, и моделью. При этом непосредственно в замечаниях по применению компонента ADV_SPM.1 в профилях защиты испытательной лаборатории при выполнении соответствующей проверки предписывается руководствоваться п. 10.7.1 ГОСТ Р ИСО/МЭК 18045 [18]. Однако в нем лишь говорится, что «общее руководство отсутствует; за консультациями по выполнению данного подвида деятельности следует обращаться в конкретную систему оценки», т. е. не дается содержательных пояснений, как выполнить данную проверку.

Кроме того, выполнение требований компонента доверия ADV_SPM.1 тесно связано еще, как минимум, с двумя компонентами. В самом компоненте доверия указывается на наличие зависимости от компонента доверия ADV_FSP.4 «Полная функциональная спецификация». Более того, в профилях защиты для ОС третьего и второго классов это требование усилено включением в них компонента доверия ADV_FSP.5 «Полная полуформальная функциональная спецификация с дополнительной информацией об ошибках» и ADV_FSP.6 «Полная полуформальная функциональная спецификация с дополнительной формальной спецификацией» соответственно. Разработка полуформальной функциональной спецификации, тем более формальной спецификации без «привязки» к формальной модели политики безопасности вряд ли представляется возможной.

Также в эти профили защиты включен отсутствующий в ГОСТ Р ИСО/МЭК 15408 компонент доверия AVA_CCA_EXT.1 «Анализ скрытых каналов». Для определения этого компонента в профилях защиты указано, что «анализ скрытых каналов является частью анализа уязвимостей и проводится с целью сделать заключение о существовании и потенциальной пропускной способности каналов передачи сигналов (коммуникационных каналов), которые не предусмотрены для передачи защищаемой информации (данных пользователя и иной информации) или неразрешенных сигналов, но которые могут быть для этого использованы потенциальными нарушителями (в нарушение установленных политик управления информационными потоками, управления доступом или иных установленных ограничений)».

В качестве скрытых каналов в профилях защиты рассматриваются:

  • каналы передачи, предназначенные для управления, но которые (в нарушение политики управления доступом или политики управления потоками) потенциально могут использоваться для передачи данных пользователя;

  • каналы передачи, предназначенные для передачи данных пользователя, но которые потенциально могут использоваться для передачи сигналов нарушителя (в том числе с использованием модуляции передачи данных);

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

  • иные типы скрытых каналов.

Это значит, что в качестве скрытых каналов должны быть рассмотрены информационные потоки по времени [19], возникающие в результате действий над объектами доступа (получение доступов, изменение прав доступа, создание, удаление, переименование и т. д.), осуществляемых кооперирующими субъектами доступа ОС, примеры которых рассмотрены в [9, 20]. В результате анализ таких скрытых каналов вне рамок формальной модели политики безопасности, в первую очередь политики управления доступом, будет трудно признать адекватным.

Для выполнения требований компонента доверия ADV_SPM.1 необходимо, чтобы язык представления формальной модели был либо математическим [9], либо формальным (например, [21]). Однако не менее важным является содержательная сторона дела, каковы требования к свидетельствам, предоставляемым при выполнении компонента доверия, какова «глубина» проработки формальной модели. Можно ли считать удовлетворительным, например, следующее «математическое» представление механизма управления доступом ОС в рамках модели в виде кортежа (V,T), где V — множество состояний системы, как-то задающее доступы (текущие доступы или права доступа) субъектов из множества S к объектам из множества O, а T — какая-то функция переходов системы из состояния в состояние, без какой-либо детализации?

Довольно популярной среди разработчиков отечественных защищенных ОС до сих пор является модель Белла-ЛаПадулы. Можно ли признать ее адекватной современным ОС и достаточной для представления в профиле защиты, например механизма мандатного управления доступом, реализуемого в защищенных ОС, принадлежащих семейству Linux? При том, что в этой модели не содержится средств описания информационных потоков по времени, иерархии сущностей (адекватной файловым системам ОС), функционально ассоциированных с субъектами сущностей, мандатного контроля целостности, различий в условиях функционирования доверенных и недоверенных субъектов и др. Ответ, очевидно, отрицательный.

Здесь целесообразно отметить, что если принципы реализации мандатного управления доступом хотя бы в том объеме, в котором они были изложены в классической модели Белла-ЛаПадулы, известны многим разработчикам отечественных защищенных ОС, то в случае с мандатным контролем целостности ситуация часто обстоит иначе. С одной стороны, мандатный контроль целостности был впервые теоретически описан еще в 1975 г. в рамках во многом похожей на модель Белла-ЛаПадулы модели Биба [22]. Он с 2007 г. реализуется в механизме MIC (Mandatory Integrity Control) всех ОС семейства Microsoft Windows, где показал свою высокую эффективность при противодействии компьютерным вирусам и атакам, направленным на несанкционированное повышение привилегий. С другой стороны, среди отечественных ОС мандатный контроль целостности применен только ОССН Astra Linux Special Edition версии 1.5. По этой причине напомним читателю основные свойства мандатного контроля целостности.

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

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

В связи с изложенным для удовлетворения требованиям компонента доверия ADV_SPM.1 на основе опыта авторов по разработке, верификации и внедрению математической модели для обеспечения должной «глубины» и детализации целесообразно предложить следующие требования к ее содержанию. Модель должна включать в себя строго описанные:

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

  • множества реализуемых прав доступа и доступов субъектов к сущностям, используемых для задания прав доступа и доступов (непосредственно, с использованием групп, ролей, типов, атрибутов) множеств, функций (отношений);

  • решетки уровней целостности (для большинства современных ОС без мандатного контроля целостности трудно достичь необходимого уровня защищенности), используемых для задания уровней целостности учетных записей пользователей, субъектов, сущностей функций (отношений);

  • решетки уровней конфиденциальности (при необходимости реализации в ОС мандатного управления доступом), используемых для задания уровней доступа учетных записей пользователей и субъектов, уровней конфиденциальности сущностей функций (отношений);

  • множества функций (отношений), используемых для задания сущностей, функционально ассоциированных с доверенными субъектами или параметрически ассоциированных с учетными записями пользователей;

  • множества функций (отношений), используемых для задания сущностей-контейнеров, доступ к содержащимся в которых сущностям субъектами может быть разрешен без учета уровней целостности или без учета уровней конфиденциальности (при необходимости) таких сущностей-контейнеров;

  • виды информационных потоков (как минимум по памяти), используемых для задания информационных потоков между сущностями и субъектами множеств, функций (отношений);

  • элементы состояний, моделирующей ОС абстрактной системы, используемых для этого множеств, функций (отношений);

  • условия предоставления субъектам прав доступа и доступов к сущностям или субъектам и условий выполнения иных правил перехода системы из состояния в состояние (команд, операций, функций перехода) над учетными записями пользователей, субъектами и сущностями (создание, удаление, переименование, получение параметров), заданных для этого специальных элементов ОС (привилегией, ролей, административных ролей);

  • условия возникновения информационных потоков за счет реализации субъектами доступов к сущностям или субъектам или получения субъектами контроля над другими субъектами;

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

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

  • доказательства выполнения условий консистентности модели политики безопасности управления доступом: при применении правил перехода системы из состояния в состояние (команд, операций, функций перехода), моделирующей ОС абстрактной системы, верны условия предоставления субъектам прав доступа и доступов к сущностям или субъектам, условия выполнения иных правил перехода системы из состояния в состояние (команд, операций, функций перехода) над учетными записями пользователей, субъектов и сущностей (создание, удаление, переименование, получение параметров);

  • доказательства в рамках моделирующей ОС абстрактной системы того, что реализованный мандатный контроль целостности позволяет обеспечить защиту от несанкционированного изменения субъектом-нарушителем параметров или данных в сущностях, параметров или функциональности субъектов (захватить контроль над субъектом) с более высоким, чем у него, уровнем целостности, и в результате нарушить целостность программно-аппаратной среды ОС;

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

Примером представления элементов такого описания является рассмотренный ниже базовый уровень мандатной сущностно-ролевой модели управления доступом и информационными потоками в ОС семейства Linux (МРОСЛ ДП-модели). В своей работе авторы используют именно ее в качестве исходной, математической модели политики безопасности управления доступом. Базовый уровень МРОСЛ ДП-модели описывает механизм управления доступом на основе ролей. Основное свойство этого механизма состоит в том, что субъект может получить доступ определенного вида к какой-либо сущности только тогда, когда он обладает ролью, имеющей право на этот вид доступа к этой сущности. Каждая роль представляет собой набор таких пар из сущности и права определенного доступа к ней, а назначение ролей субъектам осуществляет администратор безопасности. Другие уровни МРОСЛ ДП-модели описывают механизмы мандатного контроля целостности и мандатного управления доступом и в настоящей монографии детально не рассматриваются. По этой причине в монографии не излагаются подходы к анализу условий реализации скрытых каналов (информационных потоков) по памяти и по времени, как относящиеся в первую очередь к мандатному управлению доступом и выполненные на последующих после базового уровнях модели [9, 20]. В то же время в силу отмеченной важности осуществления такого анализа в рамках формальной модели безопасности управления доступом для выполнения требований компоненты доверия AVA_CCA_EXT.1 там, где это возможно, при описании базового уровня МРОСЛ ДП-модели даются пояснения, раскрывающие пути дальнейшего осуществления анализа скрытых каналов.

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

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

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

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

  • результатов верификации модели политики безопасности управления доступом с использованием инструментальных средств верификации с указанием того, какие элементы модели были верифицированы в автоматическом режиме, а какие в полуавтоматическом (ручном) режиме;

  • с применением инструментальных средств результатов верификации выполнения условий консистентности модели политики безопасности управления доступом: при применении правил перехода системы из состояния в состояние (команд, операций, функций перехода), моделирующей ОС абстрактной системы, верны условия предоставления субъектам прав доступа и доступов к сущностям или субъектам, условия выполнения иных правил перехода системы из состояния в состояние (команд, операций, функций перехода) над учетными записями пользователей, субъектами и сущностями (создание, удаление, переименование, получение параметров);

  • с применением инструментальных средств результатов верификации в рамках моделирующей ОС абстрактной системы того, что реализованный мандатный контроль целостности позволяет обеспечить защиту от несанкционированного изменения субъектом-нарушителем параметров или данных в сущностях, параметров или функциональности субъектов (захватить контроль над субъектом) с более высоким, чем у него уровнем целостности, и в результате нарушить целостность программно-аппаратной среды ОС;

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

Возможность практического выполнения этих условий подтверждается опытом верификации МРОСЛ ДП-модели, представленной на формальном языке Event-B в инструментальной среде Rodin. Примерам такой верификации для базового уровня модели посвящена глава 3 настоящей монографии, а подходу к представлению на основе модели формальной функциональной спецификации элементов механизма управления доступом — глава 4.

3.2. Базовый уровень МРОСЛ ДП-модели в математической нотации

Как было показано в предыдущей главе, отправной точкой выполнения требований компонента доверия ADV_SPM.1 является либо разработка модели политики безопасности управления доступом в математической нотации с ее дальнейшим переводом формализованную нотацию, либо изначально представление модели в формализованной нотации. Первый путь базируются на отработанной десятилетиями опыте формирования классических математических моделей, начиная с модели Белла-ЛаПадулы, Take-Grant и др. [9]. Хотя перевод в формализованную нотацию представляет собой достаточно сложную с научной и практической точек зрения задачу, ее решение при наличии уже разработанной математической модели все же проще, чем второй путь — разработка модели политики безопасности управления доступом в формализованной нотации с нуля.

В связи с этим авторами настоящей монографии был выбран первый путь — разработка в математической нотации мандатной сущностно-ролевой ДП-модели (МРОСЛ ДП-модели) как теоретической основы для реализации механизма управления доступом ОССН. Этому, в свою очередь, предшествовал достаточно длительный этап формирования на основе классических моделей семейства ДП-моделей безопасности управления доступом в компьютерных системах с дискреционным, мандатным или ролевым управлением доступом. Рассмотрим его подробнее.

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

Основой всех моделей семейства стала дискреционная базовая ДП-модель, построенная с применением расширенной модели Take-Grant, модели Белла-ЛаПадулы, модели систем военных сообщений и субъектно-ориентированной модели изолированной программной среды [9]. При этом был использован классический субъект-сущностный подход. В рамках базовой ДП-модели были обоснованы необходимые и достаточные условия передачи в прав доступа или реализации информационных потоков по памяти или по времени для самого простого случая, когда все субъекты идеально кооперируют друг с другом при передаче прав доступа и создании информационных потоков.

Для анализа компьютерных систем, в которых все субъекты являются либо доверенными, либо недоверенными, когда доверенные субъекты не кооперируют с недоверенными при передаче прав доступа или реализации информационных потоков, были построены ДП-модель без кооперации доверенных и недоверенных субъектов (БК ДП-модель), ДП-модель с блокирующими доступами доверенных субъектов (БД ДП-модель) и ДП-модель с функционально ассоциированными с субъектами сущностями (ФАС ДП-модель), которая позволяет анализировать условия получения недоверенным субъектом права доступа владения к доверенному субъекту с использованием реализации недоверенным субъектом информационного потока по памяти к сущности, функционально ассоциированной с доверенным субъектом.

Для анализа безопасности компьютерных систем с мандатным управлением доступом были построены мандатная ДП-модель, мандатная ДП-модель с блокирующими доступами доверенных субъектов (БДМ ДП-модель), мандатная ДП-модель с отождествлением порожденных субъектов (ОСМ ДП-модель) и мандатная ДП-модель

КС, реализующих политику строгого мандатного управления доступом (ПСМ ДП-модель).

Дальнейшее развитие семейства ДП-моделей пошло по следующим двум направлениям:

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

По первому направлению построены ДП-модели для нескольких реальных компьютерных систем, в том числе ДП-модель веб-системы и веб-системы на основе СУБД, в рамках которых осуществлен анализ защищенности типовых веб-систем от угроз реализации атак вида межсайтового скриптинга ( Cross\ Site\ Scripting,\ XSS ) [24] и SQL-инъекции [25].

По второму направлению с использованием ДП-модели с функционально или параметрически ассоциированными с субъектами сущностями (ФПАС ДП-модели) [26] был рассмотрен случай, когда в компьютерной системе могут существовать параметрически ассоциированные с субъектами сущности (файлы паролей, файлы cookies), реализация от которых информационных потоков по памяти (например, их чтение) к недоверенным субъектам позволяет им получить контроль над другими субъектами системы, в том числе доверенными. Кроме того, описана ДП-модель файловых систем (ФС ДП-модель) [27], в которой анализируется характерный для файловых систем новый вид доверенных субъектов — потенциальных доверенных субъектов, из которых могут быть созданы доверенные субъекты, реализующие доступ к сущностям, защищенным механизмами файловых систем (например, механизмами файловой системы EFS в среде ОС семейства Windows\ XP/2003/Vista ).

Также по второму направлению для исследования безопасности компьютерных систем с учетом особенностей ролевого управления доступом на основе семейства ролевых моделей RBAC и семейства дискреционных и мандатных ДП-моделей были построены две ролевые ДП-модели (БР ДП-модель и РОСЛ ДП-модель) [28, 29], ставшие «промежуточными», заложившими фундамент формирования современной МРОСЛ ДП-модели.

В МРОСЛ ДП-модели было обеспечено сочетание мандатного управления доступом, мандатного контроля целостности с перспективным ролевым управлением доступом. При этом особое внимание уделялось детальному описанию правил переходов системы из состояние в состояние, которые классифицированы на де-юре и де-факто правила.

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

  • в смысле мандатного контроля целостности, позволяющее недоверенной субъект-сессии с низким уровнем целостности захватить контроль (фактическое владение) над доверенной субъект-сессии с высоким уровнем целостности;
  • в смысле Белла-ЛаПадулы, результатом которого является создание запрещенного информационного потока по памяти «сверху-вниз»;
  • в смысле контроля информационных потоков по времени создание запрещенного информационного потока по времени «сверху-вниз» между сущностями.

С использованием этих определений в модели были сформулированы и обоснованы достаточные условия безопасности системы во всех трех смыслах.

Однако такое описание МРОСЛ ДП-модели имело достаточно существенный объем и являлось «монолитным», т.е. элементы модели давались в порядке, удобном для описания модели в целом. Из-за большого объема и монолитности модели, невозможности в таком виде ее поэтапной реализации затрудняется использование модели разработчиками ОССН, а также создание на ее основе новых моделей.

Все выше перечисленное стало причиной переработки МРОСЛ ДП-модели в ее иерархическое представление. Первоначально при его разработке в модель (по сравнению с ее «монолитным» представлением) не добавлялись новые элементы, а основной целью являлось формирование следующих четырех упорядоченных уровней [30] (рис. 3.1):

fig31 n11 1.1. Модель системы ролевого управления доступом n12 1.2. Модель системы вида 1.1 с запрещающими ролями n11->n12 n21 2.1. Модель системы вида 1.1 с мандатным контролем целостности n11->n21 n13 1.3. Модель системы вида 1.2 и СУБД PostgreSQL n12->n13 n22 2.2. Модель системы вида 2.1 с невырожденной решёткой уровней целостности n23 2.3. Модель системы видов 1.2 и 2.2 n12->n23 n21->n22 n31 3.1. Модель системы вида 2.1 с мандатным управлением доступом с информационными потоками по памяти n21->n31 n22->n23 n32 3.2. Модель системы видов 3.1 и 2.3 n23->n32 n24 2.4. Модель системы вида 2.3 и гипервизора n23->n24 n31->n32 n41 4.1. Модель системы вида 3.1 с мандатным управлением доступом с информационными потоками по времени n31->n41 n42 4.2. Модель системы видов 4.1 и 3.2 n32->n42 n41->n42

Рис. 3.1. Актуальное иерархическое представление МРОСЛ ДП-модели

  • первый уровень (базовый) модель системы ролевого управление доступом (1.1);
  • второй уровень модель системы ролевого управление доступом и мандатного контроля целостности (2.1);
  • третий уровень модель системы ролевого управление доступом, мандатного контроля целостности и мандатного управления доступом только с информационными потоками по памяти (3.1);
  • четвертый уровень модель системы ролевого управление доступом, мандатного контроля целостности и мандатного управления доступом с информационными потоками по памяти и по времени (4.1).

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

Следующим шагом стало включение в иерархическое представление МРОСЛ ДП-модели новых уровней, содержащих элементы, до этого не использованные в «монолитном» представлении.

Практика использования МРОСЛ ДП-модели при реализации ОССН показала, что в ряде случаев применение ролей, обладающих только правами доступа к сущностям, разрешающим субъектам получение соответствующих доступов к ним, является недостаточным и создает неудобство при администрировании ОССН. В [31] описываются ситуации, когда, например, только одну учетную запись пользователя системы необходимо лишить права доступа, предоставляемого ей через роль, которой обладают все учетные записи пользователей системы, при этом все другие права доступа этой роли должны быть оставлены без изменений. В связи с этим в иерархическое представление модели был добавлен уровень запрещающих ролей (1.2). Запрещающие роли в отличие от «обычных» ролей содержат права доступа к сущностям или субъектам, которые не разрешают, а, наоборот, запрещают получение соответствующих доступов. Этот уровень основан на базовом уровне модели, на нем не реализованы мандатное управление доступом и мандатный контроль целостности, а для задания запрещающих ролей используется описанный еще в ролевых моделях семейства RBAC механизм ограничений (constraint).

Следует отметить, что мандатный контроль целостности — важнейший, хорошо зарекомендовавший себя механизм безопасности, который аналогично мандатному управлению доступом направлен на задание и применение четких, понятных для пользователей и администраторов современных операционных систем правил обеспечения целостности их программной среды. Изначально в МРОСЛ ДП-модели для задания мандатного контроля целостности применялись всего два уровня целостности: высокий (i_high) и низкий (i\_low) . Этого было вполне достаточно для разделения всех элементов ОССН на системные (доверенные компоненты ОССН, обеспечивающие функционирование процессов ее ядра и системных процессов, в том числе механизмов защиты и администрирования), обладающие высоким уровнем целостности, и пользовательские (недоверенные компоненты ОССН, выполняющие функции процессов непривилегированных пользователей, в том числе нарушителей), обладающие низким уровнем целостности.

Именно в таком виде мандатный контроль целостности реализован в версиях 1.4 и 1.5 ОССН. Но при использовании в ОССН технологий виртуализации (гипервизора), например на основе ПК «ВИУ» [32], а также при реализации сетевой доменной архитектуры, требуются дополнительные уровни целостности. Например, одним из возможных решений здесь может быть использование трех уровней целостности: высокого, соответствующего системному для основной ОССН, среднего, соответствующего системному для ОССН, запущенной в среде виртуализации (виртуализированной), и низкому — пользовательскому для основной и виртуализированной ОССН. Кроме того, в перспективе уровней целостности может потребоваться больше, в том числе для реализации невырожденной (состоящей из более чем двух уровней, где не каждый уровень сравним с каждым) решетки уровней целостности. В связи с изложенным был разработан уровень мандатного контроля целостности с невырожденной решеткой уровней целостности (2.2) [33].

Наиболее интересным было формирование уровня ролевого управления доступом с запрещающими ролями и мандатного контроля целостности с невырожденной решеткой уровней целостности (2.3) МРОСЛ ДП-модели, основанном не на одном, а впервые на двух предшествующих уровнях 1.2 и 2.2. В результате было показано, что структура иерархического представления модели может развиваться не только «древовидно». Она позволяет после разработки уровня, содержащего существенные новые элементы, далее дополнить этими элементами существующие «верхние» уровни модели, ориентированные на мандатное управление доступом с контролем информационных потоков по памяти и по времени.

Именно это было осуществлено далее при создании уровней ролевого управления доступом с запрещающими ролями, мандатного контроля целостности с невырожденной решеткой уровней целостности и мандатного управления доступом с информационными потоками по памяти (3.2) и по времени (4.2).

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

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

По мере описания модели также даются пояснения возможных способов или особенностей реализации ее элементов в реальной ОССН.

3.3. Состояние системы: структуры данных модели

3.3.1. Элементы состояния системы

Выбранный подход к моделированию политики безопасности управления доступом в литературе принято называть как state-based modeling, т. е. построение модели в форме системы переходов из состояния в состояние. Синонимом «системы переходов» в данном случае может быть термин «автоматная модель».

Основным элементам состояния системы в рамках модели, образующим конструкцию базового уровня иерархического представления МРОСЛ ДП-модели, соответствуют учетные записи пользователей, представляющие пользователей ОССН, функционирующих от их имени субъект-сессий — «активных» компонентов (процессов) ОССН, так называемые «пассивные» сущности, представляющие файлы, каталоги, сокеты и другие ресурсы ОССН, представляющие связи между пользователями и пассивными сущностями. Все эти элементы применяются для описания состояний рассматриваемой в рамках модели абстрактной системы, для чего используем следующие обозначения:

  • U — конечное непустое множество учетных записей пользователей (в любой ОССН задана хотя бы одна учетная запись пользователя);

  • S — конечное непустое множество субъект-сессий учетных записей пользователей (всех «активных» компонентов защищенной ОССН, при этом в любой ОССН есть хотя бы одна субъект-сессия, например, соответствующая системному процессу, реализующему процедуру входа пользователя в систему и запуска от имени его учетной записи процессов);

  • user: S \to U — функция принадлежности субъект-сессии учетной записи пользователя, задающая для каждой субъект-сессии учетную запись пользователя, от имени которой она активизирована;

  • E=O\cup C — конечное непустое множество сущностей (всех «пассивных» компонентов защищенной ОС, к которым назначаются права доступа, включающее файлы, каталоги, порты, сокеты, очереди, семафоры и другие объекты хранения данных, сетевого и межпроцессного взаимодействия), где O — множество объектов (например, файлов), C — множество контейнеров (например, каталогов) и O\cap C=\varnothing .

Также определим:

  • NAMES — множество допустимых имен сущностей, ролей и административных ролей;

  • entity\_name: C \times E \to 2^{NAMES} — функция имен сущностей в составе сущностей-контейнеров. При этом для любых контейнеров c,\ cx \in C по определению выполняются условия:

    • |entity\_name(c, cx)| \leq 1 ;
    • если c \neq cx и существует cy \in C такой, что entity\_name(c,cy) \neq \emptyset , то entity\_name(cx,cy) = \emptyset ;
    • существует единственная сущность «корневой контейнер» ROOT \in C такая, что entity\_name(c,ROOT) = \emptyset и, если c \neq ROOT , то существует единственная последовательность контейнеров c_1 = c, c_2, \ldots, c_n = ROOT \in C такая, что n \geqslant 2 и entity\_name(c_i, c_{i-1}) \neq \emptyset , где 1 < i \leqslant n .

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

Определение 3.1. Иерархией сущностей называется заданное на множестве сущностей E бинарное отношение « \leqslant », удовлетворяющее условию: для двух сущностей e, ex \in E , выполняется отношение e \leqslant ex , когда либо e = ex, либо существует последовательность сущностей e_1 = e, e_2, \ldots, e_n = ex \in E такая, что n \geqslant 2 и entity\_name(e_i, e_{i-1}) \neq \emptyset , где 1 < i \leqslant n . В случае, когда для двух сущностей e_1,e_2\in E выполняются условия e_1\leqslant e_2 и e_1\neq e_2 , будем говорить, что сущность e_1 содержится в сущности-контейнере e_2 , и будем использовать обозначение e_1< e_2 . Определим функцию иерархии сущностей H_E\colon E\to 2^E , где для e\in E выполняется H_E(e)=\{ex\in E\mid entity\_name(e,ex)\neq\varnothing\}.

Аналогичная иерархия необходима и для построения структур из субъект-сессий, так как в ОССН для процесса может быть определен его родительский процесс и, если существуют, дочерние процессы, что в совокупности образует множество древовидных структур (лес).

Определение 3.2. Иерархией субъект-сессий называется заданное на множестве S отношение частичного порядка « \leqslant », удовлетворяющее условию: если для субъект-сессии s \in S существуют субъект-сессии s_1, s_2 \in S такие, что s \leqslant s_2, s \leqslant s_1 , то s_1 \leqslant s_2 или s_2 \leqslant s_1 . В случае, когда для двух субъект-сессий s_1, s_2 \in S выполняются условия s_1 \leqslant s_2 и s_1 \neq s_2 , будем говорить, что субъект-сессия s_1 является потомком s_2 , и будем использовать обозначение s_1 < s_2 . Определим H_S : S \to 2^S — функцию иерархии субъект-сессий (сопоставляющую каждой субъект-сессии s \in S множество субъект-сессий H_S(s) \subset S , непосредственно в ней содержащихся), удовлетворяющую условиям:

  • если субъект-сессия s_1\in H_S(s_2) , то s_1< s_2 , и не существует субъект-сессии s\in S такой, что s_1< s< s_2 .
  • для любых субъект-сессий s_1, s_2 \in S, s_1 \neq s_2 выполняется равенство H_S(s_1) \cap H_S(s_2) = \emptyset .

Заметим, что в рамках МРОСЛ ДП-модели иерархия сущностей задана не «абстрактной» функцией H_E , а реализуемой явно в ОССН функцией имен сущностей в составе сущностей-контейнеров entity_name, что, кроме того, позволит в дальнейшем описать правила предоставления содержимого контейнеров (например, списков файлов и каталогов, выдаваемых в реальной ОССН по команде ls) с учетом параметров мандатного управления доступом. При этом учтено наличие механизма создания «жестких» ссылок (hard link) в файловой системе ОССН, обеспечивающего возможность размещения сущностей-объектов одновременно в нескольких сущностях-контейнерах, в том числе несколько «жестких» ссылок на одну сущность-объект в составе одной сущности-контейнере. Также описаны свойства корневой сущности-контейнера ROOT, как правило, соответствующей в реальных защищенных ОС корневому каталогу «/».

Еще одним важным отличием МРОСЛ ДП-модели от других ДП-моделей и классических моделей является то, что множество субъект-сессий не входит во множество сущностей. Это связно с тем, что в реальной ОССН функции управления доступом к субъект-сессиям (процессам) и сущностям (файлам, каталогам) реализуются раздельно. Таким образом, иерархия на множестве субъект-сессий определяется независимо от иерархии сущностей и при реализации в ОССН может быть задана двумя способами. Первый способ, когда существует явная связь между родительскими субъект-сессиями и их потомками (например, когда при завершении работы родительской субъект-сессии завершают работу ее субъект-сессии потомки, подчиненные родительской в иерархии). Второй способ, когда порожденная субъект-сессией другая субъект-сессия функционирует независимо, в этом случае подчинение ее в иерархии родительской субъект-сессии нецелесообразно.

Ролевое управление доступом является развитием политики безопасности дискреционного управления доступом, при этом права доступа субъектов (сессий) системы к сущностям группируются с учетом специфики их применения, образуя роли. При этом учитываются либо информационная технология, для реализации которой необходим соответствующий набор прав доступа, либо принадлежность роли пользователю, занимающему определенное место в должностной иерархии. Задание ролей позволяет определить более четкие и понятные для пользователей компьютерных систем правила управления доступом, а также предоставлять возможность задать гибкие, изменяющиеся динамически в процессе функционирования компьютерной системы правила управления доступом.

Для введения ролей на базовом уровне иерархического представления МРОСЛ ДП-модели используем следующие обозначения:

  • R — множество ролей;

  • AR — множество административных ролей, при этом по определению AR\cap R=\varnothing (административные роли — особый вид ролей, предназначенный для изменения множеств прав доступа ролей, авторизации на роли, а также выполнения функций по администрированию системы, например управления мандатными уровнями конфиденциальности сущностей и субъект-сессий);

  • SAR \subset AR — множество специальных административных ролей, которые не могут создаваться, удаляться, переименовываться, менять свои параметры в процессе функционирования системы;

  • R_r = \{read_r, write_r, execute_r, own_r\} — множество видов прав доступа;

  • R_a = \{read_a, write_a\} — множество видов доступа.

Поскольку в ОССН реализованы три вида прав доступа к сущностям: на чтение, на запись и на выполнение (или на использование контейнера-каталога), а также при управлении доступом к сущностям и субъект-сессиям учитывается наличие у каждой из них уникального владельца, имеющего право передавать права доступа к ним другим учетным записям пользователей, то соответственно в рамках МРОСЛ ДП-модели будем использовать виды прав доступа read_r , write_r , execute_r , own_r . Кроме того, так как в ОССН при получении субъект-сессиями доступов к сущностям они реализуют одну из двух (или обе) основных возможностей: читать или записывать в сущности данные (например, когда процесс открывает доступ к файлу на чтение или на запись), то в модели заданы следующие виды доступов read_a и write_a :

  • P\subseteq (E\times R_r)\cup (S\times \{own_r\}) — множество прав доступа к сущностям и субъект-сессиям;

  • AP\subseteq (R\cup AR)\times R_r — множество административных прав доступа к ролям или административным ролям;

  • A\subseteq S\times E\times R_a — множество доступов субъект-сессий к сущностям;

  • AA\subseteq S\times (R\cup AR)\times R_a — множество доступов субъект-сессий к ролям или административным ролям;

  • PA:\ R\cup AR\to 2^P — функция прав доступа к сущностям ролей и административных ролей, при этом для каждого права доступа p\in P существует роль r\in R\cup AR такая, что выполняется условие p\in PA(r) ;

  • APA: AR \to 2^{AP} — функция административных прав доступа к ролям и административным ролям административных ролей, при этом для каждого административного права доступа ap \in AP существует административная роль ar \in AR такая, что выполняется условие ap \in APA(ar) ;

  • shared\_container: C \cup R \cup AR \to \{true, false\} — функция разделяемых контейнеров такая, что сущность-контейнер, роль или административная роль c \in C \cup R \cup AR является разделяемой, когда shared\_container(c) = true , в противном случае shared\_container(c) = false ;

  • V\colon E\cup R\cup AR \to \{(a_1,\dots,a_n)\colon a_i\in\{0,1\}, 1\leqslant i\leqslant n,n\geqslant 1\}\cup \cup\{\varnothing\} — функция значений сущностей, ролей и административных ролей (как аналогов сущностей-контейнеров), задающая возможность для каждой из них принимать значение любой (в том числе пустой) конечной последовательности битов;

role\_name: (R \cup AR) \times (R \cup AR) \to NAMES — функция имен ролей и административных ролей в составе роли или административной роли (как контейнера). При этом для любых ролей или административных ролей r, rx \in R \cup AR по определению выполняются условия:

  • |role\_name(r, rx)| \leq 1 ;
  • если role\_name(r, rx) \neq \emptyset , то либо r, rx \in R , либо r, rx \in AR ;
  • для роли или административной роли ry \in R \cup AR справедливо role\_name(r,ry) = role\_name(rx,ry);
  • если существует последовательность ролей или административных ролей r_1=r,r_2,\ldots,r_n=rx\in R\cup AR такая, что n\geqslant 2 и role\_name(r_i,r_{i-1})\neq\varnothing , где 1< i\leqslant n , то не существует последовательности ролей или административных ролей rx_1=rx,rx_2,\ldots,rx_m=r\in R\cup AR такой, что m\geqslant 2 и role\_name(rx_i,rx_{i-1})\neq\varnothing , где 1< i\leqslant m ;
  • для административной роли ar \in AR , если (r, read_r) \in APA(ar) и role\_name(r, rx) \neq \emptyset , то выполняется условие (rx, read_r) \in APA(ar) .

Роли также образуют иерархическую структуру, что было предусмотрено еще в классических ролевых моделях семейства RBAC. Это упрощает администрирование политики безопасности, делает ее более понятной для пользователей и администраторов компьютерной системы. Например, довольно часто ролевая иерархия задается в соответствии с должностной иерархией пользователей компьютерной системы.

Определение 3.3. Иерархией ролей или административных ролей называется заданное на множестве ролей R или AR соответственно бинарное отношение « \leqslant », удовлетворяющее условию: для ролей или административных ролей r, rx \in R \cup AR выполняется отношение r \leqslant rx , когда либо r = rx, либо существует последовательность ролей или административных ролей r_1 = r, r_2, \ldots, r_n = rx \in R \cup AR такая, что n \geqslant 2 и role\_name(r_i, r_{i-1}) \neq \varnothing , где 1 < i \leqslant n . В случае, когда для двух ролей или административных ролей r_1, r_2 \in R \cup AR выполняются условия r_1 \leqslant r_2 и r_1 \neq r_2 , будем говорить, что роль или административная роль r_1 содержится в роли или административной роли r_2 , и будем использовать обозначение r_1 < r_2 . Определим функцию иерархии ролей или административных ролей H_R : R \cup AR \rightarrow 2^R \cup 2^{AR} , где для r \in R \cup AR выполняется H_R(r) = \{rx \in R \cup AR \mid role\_name(r, rx) \neq \varnothing\} .

В отличие от других ролевых моделей МРОСЛ ДП-модель предлагает рассматривать роли как аналог сущностей-контейнеров [34], к которым субъект-сессии могут иметь (через административные роли) права доступа и получать доступы. При этом в рамках МРОСЛ ДП-модели иерархии ролей и административных ролей заданы (по аналогии с иерархией сущностей) не функцией H_R , а функцией имен ролей в составе ролей-контейнеров role_name. Таким образом, право доступа own_r — владелец роли, read_r — право получать роль как текущую, просматривать ее параметры, write_r право изменять множество прав доступа роли, execute_r — право обращаться к ролям, подчиненным данной роли в иерархии ролей (по умолчанию предполагается, что такое право доступа к ролям имеется всегда); доступ read_a — получение субъект-сессией роли как текущей, доступ write_a — изменение прав доступа роли или состава ролей, подчиненных ей в иерархии. Имеющиеся в ОС привилегии целесообразно задать административными или «обычными» ролями, это обеспечит целостность механизма управления доступом в ОССН и, кроме того, позволит в дальнейшем присваивать ролям-привилегиям уровни конфиденциальности и уровни целостности. В результате закладывается основа единого механизма мандатного управления доступом и мандатного контроля целостности для доступов к сущностям, получения в качестве текущих и администрирования ролей субъект-сессиями, с возможностью противодействия в дальнейшем запрещенным информационным потокам по памяти или по времени.

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

В моделях семейства RBAC и других ролевых ДП-моделях предполагалось, что функция авторизованных ролей учетных записей пользователей UA обладает свойством «наследования» подчиненных ролей, т. е. выполняется следующее условие: для учетной записи пользователя u \in U , если роли r, r' \in R такие, что r \in UA(u) и r' \leqslant r , то выполняется условие r' \in UA(u) . Это обеспечивается «наследованием» административной ролью права доступа read_r от данной роли ко всем подчиненным ей ролям в иерархии. При этом права доступа write_r и own_r таким свойством не обладают, что может позволить гибко задавать «диапазоны» администрируемых ролей по аналогии с моделью ролевого администрирования ARBAC.

Ранее в моделях семейства RBAC и ролевых ДП-моделях для задания текущих ролей использовалась функция roles [35, 36], а для администрирования ролей функции вида can\_assign , can\_revoke и can\_manage\_rights , которые потребовали бы отдельной реализации в ОССН. В МРОСЛ ДП-модели для этого используются контролируемые системой мандатного управления доступом доступы субъект-сессий к ролям (задаются множество AA) и административные права доступа административных ролей (задаются функцией APA). При этом для обеспечения большего быстродействия ОССН при проверке прав доступа субъект-сессий к сущностям целесообразно для каждой субъект-сессии хранить списки (по аналогии со списком привилегий) текущих ролей, к которым она имеет соответственно доступы read_a или write_a .

Поскольку в реальной ОССН любой доступ субъект-сессии к сущности сопровождается последовательной проверкой наличия у субъект-сессии прав доступа на выполнение execute_r ко всем контейнерам, начиная с корневого, в котором содержится сущность, то для удобства и краткости дальнейшего описания таких ситуаций определим функцию:

execute\_container : S \times C \times E \to \{true, false\} — функция доступа субъект-сессии к сущностям в контейнерах такая, что по определению для субъект-сессии s \in S , контейнера c \in C и сущности e \in E справедливо равенство execute\_container(s,c,e)=true тогда и только тогда, когда существует последовательность сущностей e_1,\ldots,e_n\in E , где либо n=1 и c=e=e_1 , либо n\geqslant 2 , c=e_{n-1} , e=e_n и выполняются следующие условия:

  • не существует сущности-контейнера e_0 \in E такой, что e_1 \in H_E(e_0) ;
  • верно e_i \in H_E(e_{i-1}) , где 1 < i \leqslant n ;
  • существует r_i \in R \cup AR такая, что (s,r_i,read_a) \in AA и (e_i,execute_r) \in PA(r_i) , где 1\leqslant i < n .

Также используем следующее обозначение для состояния системы в целом:

G = (APA, PA, user, A, AA, H_R, H_E, H_S),

где:

  • множества учетных записей пользователей U, сущностей E, субъект-сессий S, прав доступа к сущностям P, доступов субъект-сессий к сущностям A, доступов субъект-сессий к ролям и административным ролям AA;

  • функции административных прав доступа к ролям административных ролей APA, прав доступа ролей и административных ролей PA, принадлежности субъект-сессий учетным записям пользователей user, иерархии ролей H_R , иерархии сущностей H_E , иерархии субъект-сессий H_S .

Используем обозначение:

  • \Sigma(G^*, OP) — система, при этом:

    • G^* множество всех возможных состояний;
    • OP множество правил перехода системы из состояния в состояние, заданных в табл. 3.1 (см. разд. 3.3.3).

Также по традиции с классическими моделями используем следующее обозначение:

  • G \vdash_{op} G' — переход системы \Sigma(G^*, OP) из состояния G в состояние G’ с использованием правила перехода системы из состояния в состояние op \in OP , при этом, если условия применения правила op не выполняются в состоянии G, то по определению справедливо равенство G = G’.

Если для системы \Sigma(G^*, OP) определено начальное состояние, то будем использовать обозначение \Sigma(G^*, OP, G_0) — система \Sigma(G^*, OP) с начальным состоянием G_0 .

Таким образом, определены все основные элементы, используемые для описания состояний рассматриваемой в рамках базового уровня иерархического представления МРОСЛ ДП-модели абстрактной системы.

3.3.2. Условия консистентности модели

Связи между элементами, задающими каждое состояние абстрактной системы в рамках МРОСЛ ДП-модели и определяющими условия функционирования механизма управления доступом реальной ОССН, строятся не произвольным образом. Имеются ограничения, которые по сути являются критериями корректного, консистентного состояния МРОСЛ ДП-модели, а также переходов из состояния в состояние. Кратко будем называть эти ограничения условиями консистентности модели. Таким образом, консистентность состояний и переходов системы на базовом уровне иерархического представления МРОСЛ ДП-модели состоит в выполнении следующих условий.

Условие 1 (права доступа ролей или административных ролей к субъект-сессиям и доступы субъект-сессий друг к другу):

  • роли или административные роли могут обладать к субъект-сессиям только правом доступа владения: для роли или административной роли r \in R \cup AR и субъект-сессии s \in S , если (s,\alpha_r) \in PA(r) , то \alpha_r = own_r ;

  • субъект-сессии не могут иметь друг к другу никаких доступов: для субъект-сессий s,s'\in S выполняется \{(s,s',\alpha_a): \alpha_a\in R_a\}\cap A=\varnothing .

Условие 2 (административные права доступа и иерархия ролей или административных ролей):

  • все роли и административные роли являются «разделяемыми контейнерами»: для каждой роли или административной роли r \in R \cup AR справедливо равенство shared\_container(r) = true;
  • у каждой административной роли есть права доступа execute_r ко всем ролям и административным ролям: для каждой административной роли ar \in AR , роли или административной роли r \in R \cup AR выполняется условие (r, execute_r) \in APA(ar) .

Условие 3 (доступы и права доступа, право доступа владения, администрирование параметров прав доступа сущностей, ролей, административных ролей):

  • к ролям, административным ролям и сущностям субъект-сессии могут иметь любые виды доступа из множества R_a ;

  • роли и административные роли могут иметь к сущностям любые права доступа из множества R_r , только административные роли могут иметь к ролям или административным ролям права доступа из множества R_r ;

  • для управления доступом к сущности субъект-сессия должна иметь к ней через соответствующую текущую роль или административную роль право доступа владения;

  • для каждой сущности или субъект-сессии, если существует, то единственная роль или административная роль, обладающая к ней правом доступа владения, при этом для изменения роли или административной роли, обладающей правом доступа владения к сущности или субъект-сессии, необходимо наличие у субъект-сессии доступа на чтение к административной роли entities_admin_role или subjects_admin_role соответственно: для каждой сущности e \in E выполняется условие |\{r \in R \cup AR: (e, own_r) \in PA(r)\}| \leq 1 , для каждой субъект-сессии s \in S выполняется условие |\{r \in R \cup AR: (s, own_r) \in PA(r)\}| \leq 1 , где entities_admin_role, subjects_admin_role \in SAR ;

  • для каждой роли существует единственная административная роль roles_admin_role, обладающая к ней правом доступа владения, для каждой административной роли существует единственная административная роль admin_roles_admin_role, обладающая к ней правом доступа владения: для каждой роли r \in R выполняется условие \{ar' \in AR: (r, own_r) \in APA(ar')\} = \{roles\_admin\_role\} , для каждой административной роли ar \in AR выполняется условие \{ar' \in AR: (ar, own_r) \in APA(ar')\} = \{admin\_roles\_admin\_role\} , где roles\_admin\_role , admin\_roles\_admin\_role SAR;

  • для управления доступом к роли или административной роли субъект-сессия должна иметь доступ на чтение к административной роли roles_admin_role или admin_roles_admin_role соответственно.

Условие 4 (доступ к сущностям в иерархии сущностей). Для получения субъект-сессией любого доступа к сущности, создания «жесткой» ссылки на нее, получения или изменения параметров, прав доступа к ней, активизации из нее субъект-сессии требуется существование последовательности непосредственно вложенных друг в друга сущностей-контейнеров, начинающейся с некоторой сущности-«корневой контейнер» (например, корневой контейнер «/» в ОССН) и заканчивающейся сущностью-контейнером, в состав которой непосредственно входит сама сущность, и наличие у субъект-сессии текущих ролей или административных ролей, обладающих в совокупности правами доступа execute, ко всем сущностям-контейнерам этой последовательности: для состояний системы G и G’, правила перехода системы из состояния в состояние op \in OP таких, что G \vdash_{op} G' , если субъект-сессия s \in S , сущность e \in E , (s, e, \alpha_a) \notin A и (s,e,\alpha_a)\in A' , где \alpha_a\in R_a , то существует контейнер c\in C и execute\_container(s, c, e) = true.

Условие 5 (создание, переименование или удаление сущности, роли или административной роли или «жесткой» ссылки на нее, получение ее параметров):

  • для создания, переименования или удаления сущности, роли или административной роли или «жесткой» ссылки на нее в сущности-контейнере, роли или административной роли соответственно субъект-сессии необходимо иметь к последней доступ на запись и текущую роль или административную роль, обладающую к последней правом доступа на выполнение executer;
  • для изменения прав доступа роли или административной роли субъект-сессии необходимо иметь к ней доступ на запись, за исключением случаев, когда либо административным ролям назначаются административные права доступа read_r или execute_r к ролям или административным ролям при изменении их иерархии в соответствии условием 2 и определением 3.3, либо удаляются сущности, субъект-сессии, роли или административные роли и, соответственно, удаляются имеющиеся к ним у ролей или административных ролей права доступа;
  • для переименования, удаления сущности или «жесткой» ссылки на сущность e в сущности-контейнере c ( e \in H_E(c) ), помеченной как разделяемая ( shared\_container(c) = true ), требуется наличие у субъект-сессии доступа на чтение к роли или административной роли, обладающей правом доступа владения own_r к сущности e;
  • сущности-контейнеры при создании помечаются как неразделяемые. Для изменения метки разделяемости сущности-контейнера субъект-сессии необходимо обладать текущей ролью или административной ролью, имеющей право доступа владения к этой сущности-контейнеру или доступом на чтение к административной роли entities_admin_role;
  • для получения субъект-сессией данных о ролях или административных ролях, обладающих правами доступа к сущности, требуется либо наличие у субъект-сессии доступа на чтение к административной роли entities_admin_role, либо роли или административной роли, обладающей правом доступа владения ownT к этой сущности;
  • для получения субъект-сессией данных о ролях или административных ролях, обладающих правом доступа владения к другой субъект-сессии или имеющихся у этой субъект-сессии текущих ролях или административных ролях, требуется либо наличие у первой субъект-сессии доступа на чтение к административной роли subjects_admin_role, либо к роли или административной роли, обладающей правом доступа владения own, ко второй субъект-сессии;
  • для создания, переименования, удаления, получения параметров роли или административной роли, «жесткой» ссылки на нее, числа «жестких» ссылок к ней, множества административных ролей, обладающих к ней правами доступа, требуется наличие у субъект-сессии доступа на чтение к административной роли roles_admin_role или admin_roles_admin_role соответственно.

Условие 6 (администрирование учетных записей пользователей):

  • для создания или удаления учетной записи пользователя требуется наличие у субъект-сессии доступа на чтение к административной роли users\_admin\_role \in SAR , доступов на чтение, а при создании и на запись, к административным ролям roles_admin_role и admin_roles_admin_role, при этом множество субъект-сессий, функционирующих от имени данной учетной записи пользователя, должно быть пустым;

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

Условие 7 (создание и удаление субъект-сессий): - субъект-сессия может активизировать из сущности новую субъект-сессию от имени некоторой учетной записи пользователя только при наличии к сущности права доступа на выполнение у хотя бы одной из ролей, к которой активизирующая субъект-сессия имеет доступ на чтение; - субъект-сессия может удалить субъект-сессию, только обладая текущей ролью или административной ролью, имеющей к ней право доступа владения.

Условие 8 (вид метки): - для каждой сущности, роли или административной роли задается вид ее метки: прямая или косвенная, который не изменяется в процессе функционирования системы: задается функция direct: E \cup R \cup AR \rightarrow \{true, false\} , где для e \in E \cup R \cup AR , если direct(e) = true, то метка прямая, иначе косвенная; - метка каждой роли или административной роли является прямой: для r \in R \cup AR верно равенство direct(r) = true; - если у некоторой сущности-контейнера метка косвенная, то у всех сущностей ниже ее в иерархии она также косвенная: если для сущности-контейнера c \in C выполняется direct(c) = false, то для всех сущностей e \in E таких, что e \leqslant c , выполняется direct(e) = false; - для каждой сущности с косвенной меткой существует единственная старшая ее в иерархии сущность-контейнер с прямой меткой, для которой все сущности, находящиеся ниже ее в иерархии, имеют косвенные метки, а права доступа всех ролей или административных ролей к ним равны правам доступа к этой сущности-контейнеру: для каждой сущности e \in E такой, что direct(e) = false, существует единственная сущность-контейнер c \in C такая, что direct(e) = true, e < c и для любой сущности e' \in E такой, что e’ < c, верно direct(e’) = false и выполняется (e', \alpha_r) \in PA(r) тогда и только тогда, когда (c, \alpha_r) \in PA(r) ; - в сущностях-контейнерах с косвенной меткой нельзя создавать сущности с прямой меткой или «жесткие» ссылки на них.

В сущности-контейнере с прямой меткой могут создаваться сущности или «жесткие» ссылки на них с метками одного вида. «Жесткая» ссылка на сущность-объект с косвенной меткой может создаваться в сущности-контейнере, подчиненной в иерархии той же самой единственной сущности-контейнеру, которой подчинена в иерархии сама сущность-объект.

Условие 9 (индивидуальная административная и индивидуальная роли учетной записи пользователя, общая роль):

  • для каждой учетной записи пользователя u \in U задается индивидуальная административная роль u\_admin \in AR , не находящаяся в иерархии других ролей, при этом задано множество всех индивидуальных административных ролей U\_ADMIN = \{u\_admin: u \in U\} . Множество других ролей учетной записи пользователя u задается с использованием административных прав доступа этой административной роли, определяемых функцией APA. На траекториях функционирования системы у этой административной ролей не изменяется имя;
  • для каждой учетной записи пользователя задается индивидуальная роль, не находящаяся в иерархии других ролей, административными правами доступа на чтение, запись и выполнение к которой обладает ее индивидуальная административная роль: для каждых учетной записи пользователя u \in U задается роль u\_c \in R такая, что (u\_c, \alpha_r) \in APA(u\_admin) , где \alpha_r \in \{read_r, write_r, execute_r\} , при этом задано множество всех индивидуальных ролей U\_ROLES = \{u\_c : u \in U\} ;
  • задается общая роль common\_role \in R , не находящаяся в иерархии других ролей, административными правами доступа на чтение, запись и выполнение к которой обладают все индивидуальные административные роли всех учетных записей пользователей, и задано множество COMMON\_ROLES = \{common\_role\} : для каждой учетной записи пользователя u \in U выполняется (common\_role, \ \alpha_r) \in APA(u\_admin) , где \alpha_r \in \{read_r, write_r, execute_r\} ;
  • административные роли roles_admin_role и admin_roles_admin_ role не используются для нарушения правил назначения административных прав доступа к индивидуальным административным ролям, индивидуальным ролям учетных записей пользователей и общим ролям.

Условие 10 (доступы субъект-сессии к индивидуальным ролям и общим ролям):

  • при создании каждой субъект-сессии она получает доступ на чтение к индивидуальной административной роли и доступ на чтение и запись к индивидуальной роли ее учетной записи пользователя и общей роли: для субъект-сессии s \in S выполняются условия (s, user(s)\_admin, read_a) , (s, user(s)\_c, read_a) , (s, common\_role, read_a) , (s, user(s)\_c, write_a) , (s, common\_role, write_a) \in AA ;

  • при создании каждой субъект-сессии индивидуальная роль ее учетной записи пользователя получает право доступа владения к этой субъект-сессии: для субъект-сессии s \in S выполняется условие (s, own_r) \in PA(user(s)\_c) ;

  • при удалении субъект-сессии удаляются все ее административные доступы к индивидуальной, индивидуальной административной и общей ролям.

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

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

Условие 2 обеспечивает потенциальную возможность получения доступа к роли вне зависимости от ее положения в иерархии ролей. Кроме того, оно не позволяет субъект-сессии, не обладающей соответствующими административными ролями, изменить иерархию ролей. Получая доступ на запись к некоторой роли (дающий возможность изменять множество ее прав доступа), такая субъект-сессия не может удалить роли, подчиненные данной роли в иерархии, так как она помечена как «разделяемый контейнер».

Условие 3 задает общий порядок получения доступов и назначения прав доступа ролей или административных ролей, ролей-«владельцев» к сущностям, субъект-сессиям, ролям или административным ролям, при этом вводятся специальные административные роли entities_admin_role, subjects_admin_role, roles_admin_role и admin_roles_admin_role, используемые для администрирования сущностей, субъект-сессий, ролей или административных ролей соответственно.

Условия 4 и 5 задают порядок получения доступа к сущностям, их создания, переименования или удаления, получения параметров типичный для ОССН, при этом эти условия основаны на ролевом управлении доступом и использовании функции execute_container. Соответствующие условия задаются для осуществления аналогичных действий с ролями и административными ролями, при этом требуются специальные административные роли roles_admin_role и admin_roles_admin_role.

В условии 6 указываются роли, требуемые для администрирования учетных записей пользователей, что в предшествующих ДП-моделях не допускалось. Типичные для ОССН условия создания или удаления субъект-сессий заданы в условии 7.

Для обеспечения возможности задания в ОССН прав доступа к сущностям, находящимся в архивах или на внешних устройствах (файловая система которых часто не позволяет хранить права доступа или другие параметры механизма управления доступом, например уровни конфиденциальности или целостности, в соответствии с требованиями МРОСЛ ДП-модели), в условии 8 используются косвенные метки сущностей, с помощью которых указывается, что права доступа ролей или административных ролей к сущности (в дальнейшем уровни конфиденциальности или целостности) наследуются от сущности-контейнера, являющейся «точкой монтирования» к файловой системе архива или внешнего устройства. Так как файловая система ОССН не позволяет создавать «жесткие» ссылки на сущности между файловыми системами различных устройств, то в соответствии с условием 2 такая «точка монтирования» определяется однозначно для каждой сущности с косвенной меткой, а следовательно, однозначно задаются права доступа к ней.

В условиях 9 и 10 в отличие от моделей семейства RBAC и других ролевых ДП-моделей впервые вместо функций UA и AUA для задания авторизованных ролей и административных ролей учетных записей пользователей используются права доступа их индивидуальных административных ролей, задаваемых функцией APA. Такой подход позволяет реализовать ролевое управление доступом — назначение прав доступа учетным записям пользователей только через роли. Также достигается большая совместимость со штатными механизмами управления доступом реальной ОССН. Для обеспечения возможности функционирования в реальной ОССН субъект-сессии (процессу) необходимо предоставить хотя бы одну индивидуальную роль, обладающую или имеющую возможность получения прав доступа к сущностям (особенно при их создании), «принадлежащим» только учетной записи пользователя, от имени которой функционирует субъект-сессия. Например, такие сущности могут располагаться в «домашнем» каталоге («/home/user»). Кроме того, для представления прав доступа ролей, которые в реальных дискреционных ОС семейства Linux задаются «для всех остальных» учетных записей пользователей, аналогично индивидуальным ролям учетных записей пользователей используется общая роль. На базовом уровне модели она единственная, на последующих уровнях модели их может быть несколько, поэтому для общих ролей задано соответствующее множество COMMON_ROLES. Таким образом, с использованием индивидуальных административных, индивидуальных ролей учетных записей пользователей и общей роли легко выразить традиционный для ОС семейства Linux подход к реализации дискреционного управления доступом.

3.3.3. Де-юре правила перехода системы из состояния в состояние

МРОСЛ ДП-модель, как и большинство классических моделей политик безопасности управления доступом [9], является автоматной, а значит, после задания состояний моделируемой абстрактной системы должна быть задана функция переходов, которая в модели по традиции определяется через описание правил перехода системы из состояния в состояние.

В рамках базового уровня иерархического представления МРОСЛ ДП-модели используются правила перехода системы из состояния в состояние из множества OP, которые по аналогии с моделью Take-Grant классифицированы на де-юре правила — правила, которые требуют реализации в ОССН, т. е. приводящие к «реальным» изменениям ее параметров: изменению множеств прав доступа ролей, получению доступов субъект-сессий к сущностям или ролям и т. д.; и де-факто правила — правила, которые не требуют реализации в ОССН, так как используются в модели для отражения факта получения субъект-сессией де-факто владения субъект-сессиями или факта реализации информационного потока по памяти или по времени. В связи с этим на базовом уровне иерархического представления МРОСЛ ДП-модели задаются только де-юре правила перехода системы из состояния в состояние (табл. 3.1).

Таблица 3.1

Де-юре правила перехода системы из состояния в состояние на базовом уровне иерархического представления МРОСЛ ДП-модели

Исходное состояние G

Результирующее состояние G'

1. create_user(x, u)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & u \notin U, \\ & (x, users\_admin\_role, read_{a}) \in AA, \\ & (x, roles\_admin\_role, \alpha_{a}) \in AA, \\ & (x, admin\_roles\_admin\_role, \alpha_{a}) \in AA, \\ & \text{ где } \alpha_{a} \in \{read_{a}, write_{a}\} \end{aligned}

Результирующее состояние G':

\begin{aligned} & U' = U \cup \{u\}, \\ & AR' = AR \cup \{u\_admin\}, \\ & PA'(u\_admin) = \emptyset, \\ & direct'(u\_admin) = shared\_container'(u\_admin) = true, \\ & role\_name'(u\_admin) = “u\_admin”, \\ & H_{R}'(u\_admin) = \emptyset, \\ & R' = R \cup \{u\_c\}, \\ & PA'(u\_c) = \emptyset, \\ & direct'(u\_c) = shared\_container'(u\_c) = true, \\ & role\_name'(u\_c) = “u\_c”, \\ & H_{R}'(u\_c) = \emptyset, \\ & APA'(admin\_roles\_admin\_role) = APA(admin\_roles\_admin\_role) \cup \{(u\_admin, own_{r})\}, \\ & APA'(roles\_admin\_role) = APA(roles\_admin\_role) \cup \{(u\_c, own_{r})\}, \\ & \text{ для } ar \in AR \text{ выполняется } APA'(ar) = APA(ar) \cup \{(u\_admin, execute_{r})\} \cup \{(u\_c, execute_{r})\}, \\ & APA'(u\_admin) = \{(u\_admin, \alpha_{r}): \alpha_{r} \in \{read_{r}, write_{r}, execute_{r}\}\} \cup \{(u\_c, \alpha_{r}), (common\_role, \alpha_{r}): \alpha_{r} \in \{read_{r}, write_{r}, execute_{r}\}\} \cup \{(r, execute_{r}): r \in R' \cup AR'\} \end{aligned}

2. delete_user(x, u)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & u \in U, \\ & user^{-1}(u) = \emptyset, \\ & (x, users\_admin\_role, read_{a}) \in AA, \\ & (x, admin\_roles\_admin\_role, read_{a}) \in AA, \\ & (x, roles\_admin\_role, read_{a}) \in AA \end{aligned}

Результирующее состояние G':

\begin{aligned} & U' = U \setminus \{u\}, \\ & AR' = AR \setminus \{u\_admin\}, \\ & R' = R \setminus \{u\_c\}, \\ & \text{ для } ar \in AR' \text{ выполняется } APA'(ar) = APA(ar) \setminus (\{(u\_admin, \alpha_{r}): \alpha_{r} \in R_{r}\} \cup \{(u\_c, \alpha_{r}): \alpha_{r} \in R_{r}\}) \end{aligned}

3. get_user_attr(x, u, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & u \in U, \\ & z \in O, \\ & (x, z, write_{a}) \in A \end{aligned}

Результирующее состояние G':

\begin{aligned} V'(z) = ( & (\text{если } user(x) = u \text{ или } (x, users\_admin\_role, read_{a}) \in AA, \text{ то } \{(r', \alpha_{r}): (r', \alpha_{r}) \in APA(u\_admin)\}, \text{ иначе } «\emptyset»), \\ & (\text{если } user(x) = u \text{ или } (x, users\_admin\_role, read_{a}) \in AA, \text{ то } \{s \in S: user(s) = u\}, \text{ иначе } «\emptyset») ) \end{aligned}

4. access_write(x, y)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E \cup R \cup AR, \\ & \text{ существует } r \in R \cup AR: (x, r, read_{a}) \in AA, \\ & [\text{если } y \in E, \text{ то } (y, write_{r}) \in PA(r) \text{ и существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true], \\ & [\text{если } y \in R \cup AR, \text{ то } (y, write_{r}) \in APA(r)] \end{aligned}

Результирующее состояние G':

\begin{aligned} & \text{если } y \in E, \\ & \text{ то } A' = A \cup \{(x, y, write_{a})\}, \\ & AA' = AA, \\ & \text{ если } y \in R \cup AR, \\ & \text{ то } AA' = AA \cup \{(x, y, write_{a})\}, \\ & A' = A \end{aligned}

5. access_read(x, y)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E \cup R \cup AR, \\ & \text{ существует } r \in R \cup AR: (x, r, read_{a}) \in AA, \\ & [\text{если } y \in E, \text{ то } (y, read_{r}) \in PA(r) \text{ и существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true], \\ & [\text{если } y \in R \cup AR, \text{ то } (y, read_{r}) \in APA(r)] \end{aligned}

Результирующее состояние G':

\begin{aligned} & \text{если } y \in E, \\ & \text{ то } A' = A \cup \{(x, y, read_{a})\}, \\ & AA' = AA, \\ & \text{ если } y \in R \cup AR, \\ & \text{ то } AA' = AA \cup \{(x, y, read_{a})\}, \\ & A' = A \end{aligned}

6. delete_access(x, y, α_a)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E \cup R \cup AR, \\ & (x, y, \alpha_{a}) \in A \cup AA \end{aligned}

Результирующее состояние G':

\begin{aligned} & \text{если } y \in E, \\ & \text{ то } A' = A \setminus \{(x, y, \alpha_{a})\}, \\ & AA' = AA, \\ & \text{ если } y \in R \cup AR, \\ & \text{ то } AA' = AA \setminus \{(x, y, \alpha_{a})\}, \\ & A' = A \end{aligned}

7. grant_rights(x, r, {(y, α_rj): 1 ≤ j ≤ k})

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & r \in R \cup AR, \\ & \alpha_{rj} \in \{write_{r}, read_{r}, execute_{r}\}, \\ & (x, r, write_{a}) \in AA, \\ & direct(y) = true, \\ & [\text{существует } r' \in R \cup AR: (x, r', read_{a}) \in AA, (y, own_{r}) \in PA(r')], \\ & [\text{существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true], \\ & \text{ где } 1 \le j \le k \end{aligned}

Результирующее состояние G':

\begin{aligned} & PA'(r) = PA(r) \cup \{(y, \alpha_{rj}): 1 \le j \le k\}, \\ & \text{ если } H_{E}(y) = \{y' \in H_{E}(y): direct(y') = false\}, \\ & \text{ то для всех } y' < y \text{ верно } PA'(r) = PA(r) \cup \{(y', \alpha_{rj}): 1 \le j \le k\} \end{aligned}

8. remove_rights(x, r, {(y, α_rj): 1 ≤ j ≤ k})

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & r \in R \cup AR, \\ & \alpha_{rj} \in \{write_{r}, read_{r}, execute_{r}\}, \\ & \{(y, \alpha_{rj}): 1 \le j \le k\} \subset PA(r), \\ & (x, r, write_{a}) \in AA, \\ & direct(y) = true, \\ & [\text{существует } r' \in R \cup AR: (x, r', read_{a}) \in AA, (y, own_{r}) \in PA(r')], \\ & [\text{существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true], \\ & \text{ где } 1 \le j \le k \end{aligned}

Результирующее состояние G':

\begin{aligned} & PA'(r) = PA(r) \setminus \{(y, \alpha_{rj}): 1 \le j \le k\}, \\ & \text{ если } H_{E}(y) = \{y' \in H_{E}(y): direct(y') = false\}, \\ & \text{ то для всех } y' < y \text{ верно } PA'(r) = PA(r) \setminus \{(y', \alpha_{rj}): 1 \le j \le k\} \end{aligned}

9. set_entity_owner(x, r, r’, y)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & r, r' \in R \cup AR, \\ & \{(x, r', write_{a}), (x, entities\_admin\_role, read_{a})\} \subset AA, \\ & [(\{(x, r, read_{a}), (x, r, write_{a})\} \subset AA, (y, own_{r}) \in PA(r)) \text{ или } (\text{для всех } r'' \in R \cup AR \text{ выполняется } (y, own_{r}) \notin PA(r''))], \\ & direct(y) = true, \\ & [\text{существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true] \end{aligned}

Результирующее состояние G':

\begin{aligned} & PA'(r) = PA(r) \setminus \{(y, own_{r})\}, \\ & PA'(r') = PA(r') \cup \{(y, own_{r})\}, \\ & \text{ если } H_{E}(y) = \{y' \in H_{E}(y): direct(y') = false\}, \\ & \text{ то для всех } y' < y \text{ верно } PA'(r) = PA(r) \setminus \{(y', own_{r})\}, \\ & PA'(r') = PA(r') \cup \{(y', own_{r})\} \end{aligned}

10. set_subject_owner(x, r, r’, y)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in S, \\ & r, r' \in R \cup AR, \\ & \{(x, r', write_{a}), (x, subjects\_admin\_role, read_{a})\} \subset AA, \\ & [(\{(x, r, read_{a}), (x, r, write_{a})\} \subset AA, (y, own_{r}) \in PA(r)) \text{ или } (\text{для всех } r'' \in R \cup AR \text{ выполняется } (y, own_{r}) \notin PA(r''))] \end{aligned}

Результирующее состояние G':

\begin{aligned} & PA'(r) = PA(r) \setminus \{(y, own_{r})\}, \\ & PA'(r') = PA(r') \cup \{(y, own_{r})\} \end{aligned}

11. grant_admin_rights(x, ar, {(r, α_rj): 1 ≤ j ≤ k})

Исходное состояние G:

\begin{aligned} & x \in S, \\ & r \in R \cup AR, \\ & ar \in AR, \\ & \alpha_{rj} \in \{write_{r}, read_{r}\}, \\ & (x, ar, write_{a}) \in AA, \\ & [\text{если } r \in R, \text{ то } (x, roles\_admin\_role, read_{a}) \in AA, \text{ если } r \in AR, \text{ то } (x, admin\_roles\_admin\_role, read_{a}) \in AA], \\ & \text{ где } 1 \le j \le k \end{aligned}

Результирующее состояние G':

\begin{aligned} & APA'(ar) = APA(ar) \cup \{(r, \alpha_{rj}): \alpha_{rj} = write_{r}, 1 \le j \le k\} \cup \{(r', \alpha_{rj}): \alpha_{rj} = read_{r}, r' \le r, 1 \le j \le k\} \end{aligned}

12. remove_admin_rights(x, ar, {(r, α_rj): 1 ≤ j ≤ k})

Исходное состояние G:

\begin{aligned} & x \in S, \\ & r \in R \cup AR, \\ & ar \in AR, \\ & \alpha_{rj} \in \{write_{r}, read_{r}\}, \\ & \{(r, \alpha_{rj}): 1 \le j \le k\} \subset APA(ar), \\ & (x, ar, write_{a}) \in AA, \\ & [\text{если } r \in R, \text{ то } (x, roles\_admin\_role, read_{a}) \in AA, \text{ если } r \in AR, \text{ то } (x, admin\_roles\_admin\_role, read_{a}) \in AA], \\ & [\text{не существует } u \in U \text{ таких, что } ar = u\_admin \text{ и } r \in \{u\_admin, u\_c, common\_role\}] \end{aligned}

Результирующее состояние G':

\begin{aligned} & APA'(ar) = APA(ar) \setminus (\{(r, \alpha_{rj}): \alpha_{rj} = write_{r}, 1 \le j \le k\} \cup \{(r', \alpha_{rj}): \alpha_{rj} = read_{r}, r \le r', 1 \le j \le k\}) \end{aligned}

13. create_object(x, y, yd, name, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \notin E, \\ & z \in C, \\ & [(x, z, write_{a}) \in A, \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (z, execute_{r}) \in PA(r)], \\ & name \in NAME \setminus (\{“”\} \cup \{entity\_name(z, y'): y' \in H_{E}(z)\}), \\ & (x, user(x)\_c, write_{a}) \in AA, \\ & H_{E}(z) = \{y' \in H_{E}(z): direct(y') = yd\}, \\ & [\text{если } yd = true, \text{ то } direct(z) = true] \end{aligned}

Результирующее состояние G':

\begin{aligned} & E' = E \cup \{y\} (O' = O \cup \{y\}, C' = C), \\ & entity\_name'(z, y) = \{name\}, \\ & direct'(y) = yd, \\ & \text{ если } yd = true, \\ & \text{ то } PA'(user(x)\_c) = PA(user(x)\_c) \cup \{(y, own_{r})\}, \\ & \text{ если } yd = false \text{ и } c \in C \text{ такая, что } direct(c) = true, \\ & H_{E}(c) = \{y' \in H_{E}(y): direct(y') = false\} \text{ и } y < c, \\ & \text{ то для всех } r' \in R \cup AR \text{ выполняется } PA'(r') = PA(r') \cup \{(y, \alpha_{rj}): (c, \alpha_{rj}) \in PA(r')\}, \\ & V'(y) = \emptyset, \\ & H_{E}'(z) = H_{E}(z) \cup \{y\}, \\ & H_{E}'(y) = \emptyset \end{aligned}

14. create_container(x, y, yd, name, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \notin E, \\ & z \in C, \\ & [(x, z, write_{a}) \in A, \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (z, execute_{r}) \in PA(r)], \\ & name \in NAME \setminus (\{“”\} \cup \{entity\_name(z, y'): y' \in H_{E}(z)\}), \\ & (x, user(x)\_c, write_{a}) \in AA, \\ & H_{E}(z) = \{y' \in H_{E}(z): direct(y') = yd\}, \\ & [\text{если } yd = true, \text{ то } direct(z) = true] \end{aligned}

Результирующее состояние G':

\begin{aligned} & E' = E \cup \{y\} (C' = C \cup \{y\}, O' = O), \\ & entity\_name'(z, y) = \{name\}, \\ & shared\_container'(y) = false, \\ & direct'(y) = yd, \\ & \text{ если } yd = true, \\ & \text{ то } PA'(user(x)\_c) = PA(user(x)\_c) \cup \{(y, own_{r})\}, \\ & \text{ если } yd = false \text{ и } c \in C \text{ такая, что } direct(c) = true, \\ & H_{E}(c) = \{y' \in H_{E}(y): direct(y') = false\} \text{ и } y < c, \\ & \text{ то для всех } r' \in R \cup AR \text{ выполняется } PA'(r') = PA(r') \cup \{(y, \alpha_{rj}): (c, \alpha_{rj}) \in PA(r')\}, \\ & V'(y) = \emptyset, \\ & H_{E}'(z) = H_{E}(z) \cup \{y\}, \\ & H_{E}'(y) = \emptyset \end{aligned}

15. delete_entity(x, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & z \in C, \\ & y \in H_{E}(z), \\ & H_{E}(y) = \emptyset, \\ & [\text{не существует } z' \in \text{ С такой, что } z' \neq z \text{ и } y \in H_{E}(z'), \text{ и } |entity\_name(z, y)| = 1], \\ & [(x, z, write_{a}) \in A, \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (z, execute_{r}) \in PA(r)], \\ & [\text{если } shared\_container(z) = true, \text{ то существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (y, own_{r}) \in PA(r)] \end{aligned}

Результирующее состояние G':

\begin{aligned} & E' = E \setminus \{y\}, \\ & H_{E}'(z) = H_{E}(z) \setminus \{y\}, \\ & \text{ для } r \in R \text{ выполняются равенства } PA'(r) = PA(r) \setminus \{(y, \alpha_{r}): \alpha_{r} \in R_{r}\}, \\ & A' = A \setminus \{(s, y, \alpha_{a}): s \in S, \alpha_{a} \in R_{a}\} \end{aligned}

16. create_hard_link(x, y, name, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in O, \\ & z \in C, \\ & [\text{существует } c \in C: execute\_container(x, c, y) = true], \\ & [(x, z, write_{a}) \in A, \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (z, execute_{r}) \in PA(r)], \\ & name \in NAME \setminus (\{“”\} \cup \{entity\_name(z, y'): y' \in H_{E}(z)\}), \\ & H_{E}(z) = \{y' \in H_{E}(z): direct(y') = direct(y)\}, \\ & [\text{если } direct(y) = true, \text{ то } direct(z) = true], \\ & [\text{если } direct(y) = false, \text{ то существует } z' \in C \text{ такая, что } direct(z) = true, y < z', z \le z' \text{ и для всех } y' < z' \text{ верно } direct(y') = false] \end{aligned}

Результирующее состояние G':

\begin{aligned} & entity\_name'(z, y) = entity\_name(z, y) \cup \{name\}, \\ & H_{E}'(z) = H_{E}(z) \cup \{y\} \end{aligned}

17. delete_hard_link(x, y, name, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in O, \\ & z \in C, \\ & y \in H_{E}(z), \\ & name \in entity\_name(z, y), \\ & [\text{существует } z' \in C \text{ такой, что } z' \neq z \text{ и } y \in H_{E}(z')], \\ & [(x, z, write_{a}) \in A, \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (z, execute_{r}) \in PA(r)], \\ & [\text{если } shared\_container(z) = true, \text{ то существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (y, own_{r}) \in PA(r)] \end{aligned}

Результирующее состояние G':

\begin{aligned} & entity\_name'(z, y) = entity\_name(z, y) \setminus \{name\}, \\ & \text{ если } entity\_name'(z, y) = \emptyset, \\ & \text{ то } H_{E}'(z) = H_{E}(z) \setminus \{y\} \end{aligned}

18. create_role(x, r, name, rz)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & r \notin R \cup AR, \\ & rz \in (R \cup AR) \setminus (U\_ADMIN \cup U\_ROLES \cup COMMON\_ROLES \cup SAR), \\ & [\text{если } rz \in R, \text{ то } (x, roles\_admin\_role, \alpha_{a}) \in AA, \text{ если } rz \in AR, \text{ то } (x, admin\_roles\_admin\_role, \alpha_{a}) \in AA, \text{ где } \alpha_{a} \in \{read_{a}, write_{a}\}], \\ & (x, rz, write_{a}) \in AA, \\ & name \in NAME \setminus (\{“”\} \cup \{role\_name(r', r''): r', r'' \in R \cup AR\}) \end{aligned}

Результирующее состояние G':

\begin{aligned} & \text{если } rz \in R, \\ & \text{ то } R' = R \cup \{r\}, \\ & APA'(roles\_admin\_role) = APA(roles\_admin\_role) \cup \{(r, own_{r}), (r, execute_{r})\} \cup \{(r, read_{r}): (rz, read_{r}) \in APA(roles\_admin\_role)\}, \\ & \text{ если } rz \in AR, \\ & \text{ то } AR' = AR \cup \{r\}, \\ & APA'(admin\_roles\_admin\_role) = APA(admin\_roles\_admin\_role) \cup \{(r, own_{r}), (r, execute_{r})\} \cup \{(r, read_{r}): (rz, read_{r}) \in APA(admin\_roles\_admin\_role)\}, \\ & APA'(r) = \{(r', execute_{r}): r' \in R \cup AR'\}, \\ & \text{ для } ar \in AR \setminus \{admin\_roles\_admin\_role, roles\_admin\_role\} \text{ выполняется } APA'(ar) = APA(ar) \cup \{(r, execute_{r})\} \cup \{(r, read_{r}): (rz, read_{r}) \in APA(ar)\}, \\ & role\_name'(rz, r) = name, \\ & direct(r) = true, \\ & shared\_container'(r) = true, \\ & PA'(r) = \emptyset, \\ & H_{R}'(rz) = H_{E}(z) \cup \{r\}, \\ & H_{R}'(r) = \emptyset \end{aligned}

19. delete_role(x, r, rz)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & r \in (R \cup AR) \setminus (U\_ADMIN \cup U\_ROLES \cup COMMON\_ROLES \cup SAR), \\ & [\text{если } r \in R, \text{ то } (x, roles\_admin\_role, \alpha_{a}) \in AA, \text{ если } r \in AR, \text{ то } (x, admin\_roles\_admin\_role, \alpha_{a}) \in AA, \text{ где } \alpha_{a} \in \{read_{a}, write_{a}\}], \\ & r \in H_{R}(rz), \\ & H_{R}(r) = \emptyset, \\ & [\text{не существует } rz' \in R \cup AR \text{ такой, что } rz' \neq rz \text{ и } r \in H_{R}(rz')], \\ & (x, rz, write_{a}) \in AA \end{aligned}

Результирующее состояние G':

\begin{aligned} & R' = R \setminus \{r\}, \\ & AR' = AR \setminus \{r\}, \\ & H_{R}'(rz) = H_{R}(rz) \setminus \{r\}, \\ & \text{ для } ar \in AR' \text{ выполняются равенства } APA'(ar) = APA(ar) \setminus \{(r, \alpha_{r}): \alpha_{r} \in R_{r}\}, \\ & AA' = AA \setminus \{(s, r, \alpha_{a}): s \in S, \alpha_{a} \in R_{a}\} \end{aligned}

20. create_hard_link_role(x, r, rz)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & r \in (R \cup AR) \setminus (U\_ADMIN \cup U\_ROLES \cup COMMON\_ROLES \cup SAR), \\ & rz \in (R \cup AR) \setminus (U\_ADMIN \cup U\_ROLES \cup COMMON\_ROLES), \\ & \text{ не выполняется условие } rz \le r, \\ & [\text{если } rz \in R, \text{ то } (x, roles\_admin\_role, \alpha_{a}) \in AA, \text{ если } rz \in AR, \text{ то } (x, admin\_roles\_admin\_role, \alpha_{a}) \in AA, \text{ где } \alpha_{a} \in \{read_{a}, write_{a}\}], \\ & (x, rz, write_{a}) \in AA \end{aligned}

Результирующее состояние G':

\begin{aligned} & role\_name'(rz, r) = role\_name(rz', r), \\ & \text{ где } rz' \in R \cup AR \text{ и } r \in H_{R}(rz'), \\ & H_{R}'(rz) = H_{R}(rz) \cup \{r\}, \\ & \text{ для } ar \in AR \text{ таких, что } (rz, read_{r}) \in APA(ar) \text{ выполняется } APA'(ar) = APA(ar) \cup \{(r', read_{r}): r' \le r\} \end{aligned}

21. delete_hard_link_role(x, r, rz)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & r \in (R \cup AR) \setminus (U\_ADMIN \cup U\_ROLES \cup COMMON\_ROLES \cup SAR), \\ & [\text{если } r \in R, \text{ то } (x, roles\_admin\_role, \alpha_{a}) \in AA, \text{ если } r \in AR, \text{ то } (x, admin\_roles\_admin\_role, \alpha_{a}) \in AA, \text{ где } \alpha_{a} \in \{read_{a}, write_{a}\}], \\ & r \in H_{R}(rz), \\ & [\text{существует } rz' \in R \cup AR \text{ такая, что } rz' \neq rz \text{ и } r \in H_{R}(rz')], \\ & (x, rz, write_{a}) \in AA \end{aligned}

Результирующее состояние G':

\begin{aligned} & H_{R}'(rz) = H_{R}(rz) \setminus \{r\} \end{aligned}

22. rename_entity(x, y, old_name, name, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & z \in C, \\ & y \in H_{E}(z), \\ & old\_name \in entity\_name(z, y), \\ & name \in NAME \setminus (\{“”\} \cup \{entity\_name(z, y'): y' \in H_{E}(z)\}), \\ & [(x, z, write_{a}) \in A, \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (z, execute_{r}) \in PA(r)], \\ & [\text{если } shared\_container(z) = true, \text{ то существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (y, own_{r}) \in PA(r)] \end{aligned}

Результирующее состояние G':

\begin{aligned} & entity\_name(z, y) = (entity\_name(z, y) \cup \{name\}) \setminus \{old\_name\} \end{aligned}

23. rename_role(x, ry, name)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & ry \in (R \cup AR) \setminus (U\_ADMIN \cup U\_ROLES \cup COMMON\_ROLES \cup SAR), \\ & name \in NAME \setminus (\{“”\} \cup \{role\_name(rz, ry'): ry', rz \in R \cup AR, ry' \in H_{R}(rz)\}), \\ & [\text{если } ry \in R, \text{ то } (x, roles\_admin\_role, read_{a}) \in AA, \text{ если } ry \in AR, \text{ то } (x, admin\_roles\_admin\_role, read_{a}) \in AA], \\ & [\text{для } rz \in R \cup AR: ry \in H_{R}(rz), \text{ выполняется } (x, rz, write_{a}) \in AA] \end{aligned}

Результирующее состояние G':

\begin{aligned} & \text{для } rz \in R \cup AR \text{ таких, что } ry \in H_{R}(rz), \\ & \text{ выполняется } role\_name'(rz, ry) = name \end{aligned}

24. read_container(x, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in C \cup R \cup AR, \\ & z \in O, \\ & (x, z, write_{a}) \in A, \\ & \text{ существует } r \in R \cup AR: (x, r, read_{a}) \in AA, \\ & [\text{если } y \in C, \text{ то } (y, read_{r}) \in PA(r), \text{ существует } r' \in R \cup AR: (x, r', read_{a}) \in AA, (y, execute_{r}) \in PA(r'), \text{ и существует контейнер } c \in C: execute\_container(x, c, y) = true], \\ & [\text{если } y \in R \cup AR, \text{ то } (y, read_{r}) \in APA(r)] \end{aligned}

Результирующее состояние G':

\begin{aligned} & \text{если } y \in C, \\ & \text{ то } V'(z) = \{entity\_name(y, e): e \in H_{E}(y)\}, \\ & \text{ если } y \in R \cup AR, \\ & \text{ то } V'(z) = \{role\_name(y, r): r \in H_{R}(y)\} \end{aligned}

25. get_entity_attr(x, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & z \in O, \\ & [\text{существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true], \\ & (x, z, write_{a}) \in A \end{aligned}

Результирующее состояние G':

\begin{aligned} V'(z) = ( & direct(y), \\ & (\text{если } y \in C, \text{ то } shared\_container(y), \text{ иначе } «false»), \\ & (\text{если } y \in O, \text{ то } |\{e \in C: y \in H_{E}(e)\}|, \text{ иначе } «0»), \\ & (\text{если } [\text{существует } r \in R \cup AR: (x, r, read_{a}) \in AA, (y, own_{r}) \in PA(r)] \text{ или } [(x, entities\_admin\_role, read_{a}) \in AA], \text{ то } \{(r', \alpha_{r}): r' \in R \cup AR, (y, \alpha_{r}) \in PA(r')\}, \text{ иначе } «\emptyset») ) \end{aligned}

26. get_subject_attr(x, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in S, \\ & z \in O, \\ & (x, z, write_{a}) \in A \end{aligned}

Результирующее состояние G':

\begin{aligned} V'(z) = ( & user(s), \\ & (\text{если } [\text{существует } r \in R \cup AR: (x, r, read_{a}) \in AA, (y, own_{r}) \in PA(r)] \text{ или } [(x, subjects\_admin\_role, read_{a}) \in AA], \text{ то } \{(r', own_{r}): r' \in R \cup AR, (y, own_{r}) \in PA(r')\}, \text{ иначе } «\emptyset»), \\ & (\text{если } [\text{существует } r \in R \cup AR: (x, r, read_{a}) \in AA, (y, own_{r}) \in PA(r)] \text{ или } [(x, subjects\_admin\_role, read_{a}) \in AA], \text{ то } \{(r', \alpha_{a}): (y, r', \alpha_{a}) \in AA\}, \text{ иначе } «\emptyset») ) \end{aligned}

27. get_role_attr(x, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in R \cup AR, \\ & z \in O, \\ & (x, z, write_{a}) \in A \end{aligned}

Результирующее состояние G':

\begin{aligned} V'(z) = ( & direct(y), \\ & shared\_container(y), \\ & (\text{если } [y \in R \text{ и } (x, roles\_admin\_role, read_{a}) \in AA] \text{ или } [y \in AR \text{ и } (x, admin\_roles\_admin\_role, read_{a}) \in AA], \text{ то } |\{r \in R \cup AR: y \in H_{R}(r)\}|, \text{ иначе } «0»), \\ & (\text{если } [y \in R \text{ и } (x, roles\_admin\_role, read_{a}) \in AA] \text{ или } [y \in AR \text{ и } (x, admin\_roles\_admin\_role, read_{a}) \in AA], \text{ то } \{(r, \alpha_{r}): r \in AR, (y, \alpha_{r}) \in APA(r)\}, \text{ иначе } «\emptyset») ) \end{aligned}

28. set_container_attr(x, y, t)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in C, \\ & t \in \{true, false\}, \\ & [\text{либо существует } r \in R \cup AR: (x, r, read_{a}) \in AA, (y, own_{r}) \in PA(r), \text{ либо } (x, entities\_admin\_role, read_{a}) \in AA], \\ & [\text{существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true] \end{aligned}

Результирующее состояние G':

\begin{aligned} & shared\_container'(y) = t \end{aligned}

29. create_first_subject(x, u, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & u \in U, \\ & y \in E, \\ & z \notin S, \\ & \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (y, execute_{r}) \in PA(r), \\ & \text{ существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true \end{aligned}

Результирующее состояние G':

\begin{aligned} & S' = S \cup \{z\}, \\ & user'(z) = u, \\ & AA' = AA \cup \{(z, u\_admin, read_{a}), (z, u\_c, write_{a}), (z, common\_role, write_{a}), (z, u\_c, read_{a}), (z, common\_role, read_{a})\}, \\ & H_{S}'(z) = \emptyset, \\ & PA'(u\_c) = PA(u\_c) \cup \{(z, own_{r})\} \end{aligned}

30. create_subject(x, y, z)

Исходное состояние G:

\begin{aligned} & x \in S, \\ & y \in E, \\ & z \notin S, \\ & \text{ существует } r \in R \cup AR \text{ такая, что } (x, r, read_{a}) \in AA \text{ и } (y, execute_{r}) \in PA(r), \\ & \text{ существует контейнер } c \in C \text{ такой, что } execute\_container(x, c, y) = true \end{aligned}

Результирующее состояние G':

\begin{aligned} & S' = S \cup \{z\}, \\ & user'(z) = user(x), \\ & AA' = AA \cup \{(z, user(x)\_admin, read_{a}), (z, user(x)\_c, write_{a}), (z, common\_role, write_{a}), (z, user(x)\_c, read_{a}), (z, common\_role, read_{a})\}, \\ & PA'(user(x)\_c) = PA(user(x)\_c) \cup \{(z, own_{r})\}, \\ & H_{S}'(x) = H_{S}(x) \cup \{z\}, \\ & H_{S}'(z) = \emptyset \end{aligned}

31. delete_subject(x, z)

Исходное состояние G:

\begin{aligned} & x, z \in S, \\ & H_{S}(z) = \emptyset, \\ & \text{ существует } r \in R \cup AR: (x, r, read_{a}) \in AA, \\ & (z, own_{r}) \in PA(r) \end{aligned}

Результирующее состояние G':

\begin{aligned} & S' = S \setminus \{z\}, \\ & AA' = AA \setminus \{(z, r, \alpha_{a}): r \in R \cup AR, \alpha_{a} \in R_{a}\}, \\ & A' = A \setminus \{(z, e, \alpha_{a}): e \in E, \alpha_{a} \in R_{a}\}, \\ & \text{ для } r \in R \cup AR \text{ выполняется } PA'(r) = PA(r) \setminus \{(z, own_{r})\}, \\ & \text{ для } z' \in S \text{ такой, что } z \in H_{S}(z'), \\ & \text{ справедливо равенство } H_{S}'(z') = H_{S}(z') \setminus \{z\} \end{aligned}

При этом, если в упомянутой таблице для некоторого элемента исходного состояния используется обозначение вида X, то аналогичный элемент результирующего состояния будет иметь обозначение вида X’. Кроме того, в результирующем состоянии не указываются не изменяющиеся элементы состояний системы.

В рамках базового уровня МРОСЛ ДП-модели задано 31 де-юре правило перехода системы из состояния в состояние, условия и результаты применения которых соответствуют условиям консистентности модели. Эти правила предназначены для формального описания (спецификации) следующих основных функций механизма управления доступом защищенной ОС:

  • создание, удаление, переименование, получение или изменение параметров учетных записей пользователей, ролей, административных ролей, сущностей или «жестких» ссылок на них, субъект-сессий;
  • получение доступов субъект-сессий к сущностям, ролям или административным ролям;
  • изменение прав доступа ролей или административных ролей к сущностям, субъект-сессиям, ролям или административным ролям;
  • изменение иерархии сущностей, ролей или административных ролей.

Приведенные правила, в основном, соответствуют применяемым в ОС семейства Linux подходам к реализации механизма дискреционного управления доступом, некоторые параметры которого выражены с помощью ролей.

Де-юре правила вида create\_user(x,u) , delete\_user(x,u) и get\_user\_attr(x,u,z) позволяют субъект-сессии x создать, удалить или получить параметры учетной записи пользователя u. Во всех случаях, кроме получения параметров, требуется наличие у субъект-сессии x доступа на чтение к специальной административной роли users\_admin\_role . При этом в последующем состоянии иерархия ролей модифицируется (создаются или удаляются индивидуальная роль и индивидуальная административная роль, назначаются или удаляются административные права доступа к ним). Для создания или удаления требуется наличие у субъект-сессии x доступов на чтение, а в случае создания и на запись, к специальным административным ролям roles\_admin\_role и admin\_roles\_admin\_role , так как именно эти роли получают права доступа владения к создаваемым при применении правил индивидуальным административным ролям и индивидуальным ролям учетной записи пользователя u. В случае удаления учетной записи пользователя требуется, чтобы в этот момент времени от ее имени в системе не функционировала ни одна субъект-сессия. При получении параметров при условии, что x функционирует от имени u или обладает текущим административным доступом на чтение к роли users\_admin\_role , в сущность z (к которой субъект-сессия x должна иметь доступ на запись) записываются роли и права доступа к ним, которыми обладает индивидуальная административная роль u, и записываются субъект-сессии (в реальной защищенной ОС идентификаторы субъект-сессий), функционирующие от имени u (в этом случае полные данные об учетной записи пользователя предоставляются либо субъект-сессии, функционирующей от ее имени, либо субъект-сессии, которая может администрировать эту учетную запись).

Де-юре правила вида access\_read(x,y) и access\_write(x,y) позволяют субъект-сессии x, обладающей доступом на чтение к некоторой роли или административной роли r (текущей роли), содержащей соответствующее право доступа к сущности или административное право доступа к роли или административной роли y, получить к y соответствующий доступ. При этом требуется, чтобы доступ к y был предоставлен с учетом прав доступа субъект-сессии x к сущностям-контейнерам или ролям-контейнерам, содержащим y. Де-юре правило delete\_access(x,y,\alpha_a) позволяет субъект-сессии x, обладающей доступом \alpha_a к сущности или административным доступом к роли или административной роли y, удалить этот доступ.

Де-юре правила вида grant\_rights(x, r, \{(y, \alpha_{rj}): 1 \leq j \leq k\}) и \mathit{remove\_rights}(x, r, \{(y, \alpha_{rj}) \colon 1 \leqslant j \leqslant k\}) позволяют субъект-сессии x добавить или удалить соответственно права доступа к сущности y из множества прав доступа (за исключением права доступа владения) роли или административной роли r. Возможность с использованием правил одновременного изменения нескольких прав доступа к одной сущности соответствует возможностям типовых для реальных защищенных ОС функций администрирования прав доступа (например, функции chmod). Непосредственно изменять права доступа разрешено только к сущностям с прямой меткой. Изменение прав доступа к сущностям с косвенной меткой осуществляется одновременно с изменением прав доступа к единственной существующей по условию 8 соответствующей сущности-контейнеру. Для применения правил необходимо наличие у субъект-сессии x доступа на запись к роли r и наличие текущей роли, обладающей правом доступа владения к сущности y. При этом требуется, чтобы x могла получить доступ к сущности y с учетом прав доступа к сущностям-контейнерам, содержащим y.

Де-юре правила вида set\_entity\_owner(x, r, r', y) и set\_subject\_owner(x, r, r', y) позволяют субъект-сессии x либо изменить, либо задать единственную роль-«владелец» (имеющую право доступа владения) к сущности или субъект-сессии y соответственно с роли или административной роли r на роль или административную роль r’. Для этого субъект-сессии x необходимо иметь административные доступы на чтение и запись к r и на запись к r’ (чтобы иметь возможность менять права доступа данных ролей), а также иметь административный доступ на чтение соответственно либо к административной роли entities_admin_role, либо к subjects_admin_role. Непосредственно изменять роль-«владельца» разрешено только к сущностям с прямой меткой. Изменение роли-«владельца» к сущностям с косвенной меткой осуществляется одновременно с изменением роли-«владельца» к единственной существующей по условию 8 соответствующей сущности-контейнеру. Когда изменяется роль-«владелец» сущности y требуется, чтобы x могла получить доступ к сущности y с учетом прав доступа к сущностям-контейнерам, содержащим u.

Де-юре правила вида grant\_admin\_rights(x, ar, \{(r, \alpha_{rj}): 1 \leqslant j \leqslant k\}) и remove\_admin\_rights(x, ar, \{(r, \alpha_{rj}): 1 \leqslant j \leqslant k\}) позволяют субъект-сессии x добавить или удалить соответственно права доступа на чтение или запись к роли или административной роли r из множества прав доступа административной роли ar, к которой x должна иметь административный доступ на запись. Для изменения прав доступа к роли r требуется наличие у x текущей административной роли roles\_admin\_role , а если r является административной ролью, то к роли admin\_roles\_admin\_role . При удалении административных прав доступа не должны нарушаться требования к правам доступа индивидуальных административных ролей, индивидуальных ролей учетных записей пользователей и общей роли.

Де-юре правила вида create\_object(x,y,yd,name,z) , create\_container(x,y,yd,name,z) и delete\_entity(x,y,z) позволяют субъект-сессии x создать или удалить сущность-объект или сущность-контейнер y, входящую в состав сущности-контейнера z, к которой субъект-сессия x должна иметь доступ на запись и обладать текущей ролью или административной ролью, имеющей к z право доступа на выполнение execute_r . В соответствии со спецификой файловой системы ОССН нельзя создавать одноименные сущности в одной сущности-контейнере или удалять непустые сущности-контейнеры

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

Де-юре правила вида create\_hard\_link(x, y, name, z) и delete\_ hard\_link(x,y,name,z) позволяют субъект-сессии x создать или удалить соответственно в составе сущности-контейнера z (к которой субъект-сессия x должна иметь доступ на запись и обладать текущей ролью или административной ролью, имеющей к z право доступа на выполнение executer) «жесткую» ссылку на сущность-объект y. При создании «жесткой» ссылки на сущность y учитываются права доступа к сущностям-контейнерам, ее содержащим. Так как в ОС возможно создание в одной сущности-контейнере нескольких «жестких» ссылок (с разными именами) на одну сущность-объект, то в условиях применения правила create_hard_link не требуется отсутствие сущности-объекта y в составе сущности-контейнера z, а в правиле delete_hard_link указывается имя «жесткой» ссылки, с которым она будет удалена. Поскольку «жесткие» ссылки создаются только на объекты, то не требуется проверки на появление циклов в иерархии сущностей. При создании «жесткой» ссылки учитывается вид ее метки, в результате, если у сущности y метка прямая, то она прямая у сущности-контейнера z, а если у сущности y метка косвенная, то «жесткая» ссылка на нее может быть осуществлена только когда сущность-контейнер z подчинена в иерархии единственной удовлетворяющей условию 8 сущности-контейнеру с прямой меткой старшей в иерархии z и y. При удалении проверяется, действительно ли удаляется «жесткая» ссылка (т. е. есть еще другие ссылки на нее), и учитывается, осуществляется ли удаление «жесткой» ссылки в разделяемой сущности-контейнере z или нет. В реальных защищенных ОС удаление сущности-объекта и «жесткой» ссылки на него реализуются, как правило, одной функцией. В то же время, так как формально результаты таких удалений существенно отличаются, то для удобства в рамках модели заданы два правила.

Де-юре правила вида create\_role(x, r, name, rz) , create\_hard\_ link\_role(x, r, rz) , delete\_role(x, r, rz) и delete\_hard\_link\_role(x, r, rz) позволяют субъект-сессии x создать или удалить роль или административную роль r или «жесткую» ссылку на нее (изменить иерархию ролей), входящую в состав роли или административной роли rz, к которой субъект-сессия x должна иметь доступ на запись и не являющейся индивидуальной административной, индивидуальной ролью учетной записи пользователя или общей ролью. При этом нельзя удалять или создавать роли или административные роли, «жесткие» ссылки на них, являющиеся индивидуальными ролями и индивидуальными административными ролями учетных записей пользователей, а также общей ролью и специальными административными ролями из множества SAR. Для применения правил необходимо наличие у субъект-сессии x административных доступов на чтение и запись к административным ролям roles_admin_role или admin_roles_admin_role для действий с ролями или административными ролями соответственно. При этом доступ на запись к этим административным ролям следует требовать, так как создание, удаление ролей или «жестких» ссылок на них являются существенными преобразованиями параметров безопасности системы. При реализации правил в последующем состоянии иерархия ролей модифицируется (назначаются или удаляются административные права доступа) в соответствии с условиями консистентности. Аналогично правилам администрирования учетных записей пользователей при реализации правил создания или удаления ролей права доступа к ним могут изменяться у административных ролей без явного получения к ним субъект-сессией x административного доступа на запись. Так же, как при удалении сущностей или «жестких» ссылок на них, при удалении роли или административной роли проверяется, что ей в иерархии не подчинены другие роли, а при удалении «жесткой» ссылки на роль, что эта ссылка не последняя. Однако при создании «жесткой» ссылки на роль (так как в отличие от сущностей могут создаваться «жесткие» ссылки на роли-контейнеры, содержащие подчиненные роли) проверяется, что это не приведет к возникновению в иерархии циклов, т. е. нарушению отношения частичного порядка.

Де-юре правила вида rename\_entity(x, y, old\_name, name, z) и rename\_role(x, ry, name) позволяют субъект-сессии x переименовать сущность y, входящую в состав сущности-контейнера z, к которой субъект-сессия x должна иметь доступ на запись и обладать текущей ролью или административной ролью, имеющей к ней право доступа на выполнение execute_r , или соответственно переименовать роль или административную роль ry во всех ролях-контейнерах, в которые она входит (так как каждая роль или административная роль имеет в отличие от сущностей уникальное имя) и к которым субъект-сессия x должна иметь административные доступы на запись. Поскольку на сущность-объект может быть несколько «жестких» ссылок в одной сущности-контейнере и, следовательно, несколько имен, то в правило добавлен параметр, указывающей старое имя сущности, подлежащее замене. Для ролей такой параметр не требуется, так как роль должна иметь в системе уникальное имя. Правило переименования роли не использовалось в предыдущих ДП-моделях и включено в МРОСЛ ДП-модель с учетом реализованного в ней представления ролей как аналогов сущностей контейнеров. В связи с этим для переименования роли или административной роли требуется наличие у субъект-сессии доступа на чтение к административной роли roles_admin_role или admin_roles_ admin_role соответственно, при этом нельзя переименовывать роли, являющиеся индивидуальными ролями и индивидуальными административными ролями учетных записей пользователей, а также общей ролью и специальными административными ролями из множества SAR. При переименовании сущности учитывается, осуществляется ли оно в разделяемой сущности-контейнере z или нет.

Де-юре правило вида read\_container(x,y,z) позволяет субъект-сессии x «считать» в сущность-объект z (например, в реальной защищенной ОС в сущность-«рабочий стол»), к которой она должна иметь доступ на запись, содержимое (имена входящих в нее непосредственно сущностей или ролей) сущности-контейнера, роли или административной роли y, к которой x должен иметь права доступа на чтение и выполнение, с учетом прав доступа к сущностям-контейнерам, содержащим y.

Де-юре правила вида get\_entity\_attr(x,\ y,\ z) , get\_subject\_attr(x,\ y,\ z) и get\_role\_attr(x,\ y,\ z) позволяют субъект-сессии x «считать» в сущность-объект z (например, в реальной защищенной ОС в сущность-«рабочий стол»), к которой она должна иметь доступ на запись, атрибуты сущности, субъект-сессии, роли или административной роли y соответственно. В случае, когда y является сущностью, требуется, чтобы субъект-сессия x могла получить к ней доступ с учетом прав доступа x к сущностям-контейнерам, содержащим y. Для сущности y выдаются следующие атрибуты:

  • вид метки;
  • для сущности-контейнера является ли она разделяемой;
  • для сущности-объекта число «жестких» ссылок на нее;
  • роли или административные роли и имеющиеся у них права доступа к сущности (в случае, когда x имеет либо административный доступ на чтение к роли-«владельцу» сущности y, либо к административной роли entities\_admin\_role ).
    • Для субъект-сессии y выдаются следующие атрибуты:
  • учетная запись пользователя, от имени которой она функционирует;
  • роль-«владелец» субъект-сессии (в случае, когда x имеет либо административный доступ на чтение к роли-«владельцу» субъект-сессии y, либо к административной роли subjects\_admin\_role );
  • текущие административные доступы субъект-сессии к ролям или административным ролям (в случае, когда x имеет либо административный доступ на чтение к роли-«владельцу» субъект-сессии y, либо к административной роли subjects\_admin\_role ).

Для роли или административной роли y выдаются следующие атрибуты:

  • вид метки (всегда true);
  • является ли она разделяемой (всегда true, выдается для общности формата данных с аналогичными данными для сущностей);
  • число «жестких» ссылок на роль или административную роль (в случае, когда x имеет административный доступ на чтение к административной роли roles\_admin\_role или admin\_roles\_admin\_role соответственно);
  • административные роли и имеющиеся у них права доступа к роли или административной роли y (в случае, когда x имеет либо административный доступ на чтение к административной роли roles\_admin\_role или admin\_roles\_admin\_role соответственно).

Де-юре правило вида set\_container\_attr(x,\,y,\,t) позволяет субъект-сессии x задать сущности-контейнеру y является ли она разделяемой или нет. При этом субъект-сессия x должна иметь либо административный доступ на чтение к роли-«владельцу» контейнера y, либо к административной роли entities\_admin\_role , а также требуется, чтобы доступ к y мог быть предоставлен x с учетом ее прав доступа к сущностям-контейнерам, содержащим y.

Де-юре правило вида create\_first\_subject(x, u, y, z) позволяет субъект-сессии x с использованием сущности y и учетной записи пользователя u создать от имени u новую субъект-сессию z. Для этого требуется наличие у субъект-сессии x доступа на чтение к роли, обладающей правом доступа на выполнение к сущности y (к которой субъект-сессия x может получить доступ с учетом прав доступа к сущностям-контейнерам, содержащим сущность y). После создания субъект-сессии z она (в отличие от предшествующих ДП-моделей) получает доступы на запись и чтение к индивидуальной роли u\_c и общей роли common\_role и доступ на чтение к индивидуальной административной роли u\_admin . При этом индивидуальная роль u\_c получает право доступа владения к субъект-сессии z.

Де-юре правила вида create\_subject(x, y, z) и delete\_subject(x, z) позволяют субъект-сессии x создать или удалить соответственно субъект-сессию z. При создании требуется наличие у субъект-сессии x доступа на чтение к роли, обладающей правом доступа на выполнение к сущности y (к которой субъект-сессия x может получить доступ с учетом прав доступа к сущностям-контейнерам, содержащим сущность y). После создания субъект-сессии z она получает доступы на запись и чтение к индивидуальной роли user(x)_c и общей роли common_role и доступ на чтение к индивидуальной административной роли user(x)\_admin , соответствующим ее учетной записи пользователя (у субъект-сессий x и z общая учетная запись пользователя), и непосредственно подчиняется в иерархии субъект-сессии x. При этом индивидуальная роль user(x)_c получает право доступа владения к субъект-сессии z. При удалении субъект-сессии z требуется, чтобы ей в иерархии не подчинялись другие субъект-сессии (в противном случае удаление надо начинать с них), и требуется наличие у субъект-сессии x доступа на чтение к роли-«владельцу» (обладающей правом доступа владения) к субъект-сессии z.

Таким образом, полностью определена рассматриваемая в рамках базового уровня иерархического представления МРОСЛ ДП-модели абстрактная система (автомат), а именно заданы элементы, используемые для описания ее состояний, и правила перехода системы из состояния в состояние. При этом при задании правил так же, как для состояний, учитывалась специфика функционирования механизма управления доступом реальной ОССН.

3.3.4. Обоснование выполнения условий консистентности модели

При разработке базового уровня иерархического представления МРОСЛ ДП-модели задание состояний абстрактной системы, правил перехода между ними, несомненно, велось с целью обеспечения выполнения условий консистентности модели. То есть таким образом, чтобы при условии нахождения системы \Sigma(G^*, OP, G_0) в начальном состоянии G_0 , удовлетворяющем условиям консистентности, каждое последующее состояние, полученное при применении любого де-юре правила перехода системы, определенного в табл. 3.1, как и сам такой переход, также удовлетворяли условиям консистентности модели. Иными словами, должны удовлетворять условиям консистентности модели все состояния и все переходы любой траектории функционирования системы, полученной из ее начального состояния, удовлетворяющего условиям консистентности, путем применения конечной последовательности правил перехода системы из состояния в состояние.

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

Утверждение 3.1. Пусть G_0 — начальное состояние системы \Sigma(G^*,\ OP,\ G_0) , удовлетворяющее условиям консистентности модели. Тогда для любой траектории G_0 \vdash_{op_1} G_1 \vdash_{op_2} \ldots \vdash_{op_N} G_N , где N\geqslant 1 , в состоянии G_N выполняются условия консистентности модели, а также переход G_{N-1} \vdash_{op_N} G_N удовлетворяет условиям этого предположения.

Доказательство. Докажем утверждение индукцией по длине N траектории функционирования системы.

Пусть N=0, тогда по условию утверждения состояние G_0 удовлетворяет условиям консистентности модели.

Пусть N>0 и утверждение верно для всех траекторий длины 0\leqslant L< N . Пусть G_0 \vdash_{op_1} G_1 \vdash_{op_2} \ldots \vdash_{op_N} G_N — траектория функционирования системы длины N. По предположению индукции состояние G_{N-1} удовлетворяет условиям консистентности модели, а также каждый переход G_{i-1} \vdash_{op_i} G_i удовлетворяет этим условиям, где 1\leqslant i< N .

Рассмотрим правило перехода системы из состояния в состояние op_N . Если условия его применения не выполняются в состоянии G_{N-1} , то по определению правил справедливо равенство G_{N-1}=G_N , и по предположению индукции состояние G_N удовлетворяет условиям консистентности модели и переход G_{N-1} \vdash_{op_N} G_N удовлетворяет этим условиям. Пусть условия применения правила op_N выполняются в состоянии G_{N-1} .

Обоснуем выполнение условий консистентности модели в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N .

Роли или административные роли получают права доступа к субъект-сессиям только в случае, когда op_N является одним из правил вида set\_subject\_owner(x,r,r',y) , create\_first\_subject(x,u,y,z) и create\_subject(x,y,z) , в результате применения которых может быть дано только право доступа владения own_r , при этом отсутствуют правила, в результате применения которых субъект-сессии могли бы получать доступы к субъект-сессиям. Следовательно, с учетом предположения индукции в состоянии G_N выполнено условие 1 консистентности модели (требований к переходу G_{N-1} \vdash_{op_N} G_N в этом условии не содержится).

Новые роли или административные роли создаются в результате применения правил вида create\_user(x,u) и create\_role(x,r,name,rz) , в результатах которых все создаваемые роли или административные помечаются как «разделяемые контейнеры» и к ним всем административным ролям дается права доступа execute_r , а также созданной индивидуальной административной роли учетной записи пользователя дается это право доступа ко всем ролям и административным ролями. При этом в МРОСЛ ДП-модели отсутствуют правила, позволяющие изменить эти параметры ролей или административных ролей. Следовательно, с учетом предположения индукции в состоянии G_N выполнено условие 2 консистентности модели (требований к переходу G_{N-1} \vdash_{op_N} G_N в этом условии не содержится).

Административные права доступа к ролям или административным ролям даются только административным ролям в результате применения правил create\_user(x,u) , grant\_admin\_rights(x,ar,\{(r,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) , create\_role(x,r,name,rz) , create\_hard\_link\_role(x,r,rz) . Управление доступом к сущности может быть осуществлено субъект-сессией только при использовании правил вида grant\_rights(x,r,\{(y,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) , remove\_rights(x,r,\{(y,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) , set\_entity\_owner(x,r,r',y) и set\_container\_attr(x,y,t) при наличии у нее в состоянии G_{N-1} текущей роли или административной роли, обладающей правом доступа владения к этой сущности.

Право доступа владения к создаваемой сущности или субъект-сессии дается соответствующей индивидуальной роли учетной записи пользователя в результате применения правил вида create\_object (x,y,yd,name,z), create\_container(x,y,yd,name,z) , create\_first\_subject(x,u,y,z) и create\_subject(x,y,z) , изменение такой роли-«владельца» возможно только с применением правил вида set\_entity\_owner(x,r,r',y) , и set\_subject\_owner(x,r,r',y) при наличии у инициирующей их выполнение субъект-сессии x текущих административных ролей entities\_admin\_role или subjects\_admin\_role соответственно. Право доступа владения к ролям или административным ролям дается только административным ролям roles\_admin\_role или admin\_roles\_admin\_role в результате применения правил вида create\_user(x, x', u) и create\_role(x, r, name, rz) , и нет правил, позволяющих изменить такую роль-«владельца» роли или административной роли.

Управление доступом к роли или административной роли осуществляется в результате применения правил вида create\_user(x,u) , delete\_user(x,u) , create\_role(x,r,name,rz) , delete\_role(x,r,rz) , create\_hard\_link\_role(x,r,rz) , delete\_hard\_link\_role(x,r,rz) , grant\_admin\_rights(x,ar,\{(r,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) и remove\_admin\_rights(x,ar,\{(r,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) , в условиях применения которых также проверяется наличие у субъект-сессии x текущих административных ролей roles\_admin\_role или admin\_roles\_admin\_role соответственно.

Следовательно, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 3 консистентности модели (требований к переходу в этом условии не содержится).

Субъект-сессия может получить доступ к сущности, создать «жесткую» ссылку на нее, получить или изменить ее параметры, права доступа к ней, активизировать из нее субъект-сессию только в случае, когда op_N является одним из правил вида access\_read(x,y) , access\_write(x,y) , grant\_rights(x,r,\{(y,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) , remove\_rights(x,r,\{(y,\alpha_{rj}):\ 1\leqslant j\leqslant k\}) , set\_entity\_owner(x,r,r',y) , create\_hard\_link(x,y,name,z) , read\_container(x,y,z) , get\_entity\_attr(x,y,z) , set\_container\_attr(x,y,t) , create\_first\_subject(x,u,y,z) и create\_subject(x,y,z) , в которых проверяется выполнение равенства execute\_container_{N-1}(x,c,y)=true , где контейнер c\in C_{N-1} . Таким образом, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 4 консистентности модели.

Для создания, переименования или удаления сущности, роли или административной роли или «жесткой» ссылки на нее в сущности-контейнере, роли или административной роли субъект-сессия может использовать только правила вида create\_object(x, y, yd, name, z), create_container(x, y, yd, name, z), delete_entity(x, y, z), create_ hard\_link(x, y, name, z) , delete\_hard\_link(x, y, name, z) , create\_role(x, y, name, z) r, name, rz), delete\_role(x, r, rz), create\_hard\_link\_role(x, r, rz), delete\_ hard\_link\_role(x, r, rz) , rename\_entity(x, y, old\_name, name, z) u rena me\_role(x, ry, name) , в условиях применения которых требуется наличие у субъект-сессии в состоянии G_{N-1} доступа или административного доступа на запись к этой сущности-контейнеру, роли или административной роли соответственно и требуется наличие у x текущей роли или административной роли, обладающей к последней правом доступа на выполнение execute_r . Для случая, когда эти правила применяются для переименования, удаления сущности или «жесткой» ссылки на сущность в сущности-контейнере, помеченной как разделяемая, в условиях применения правил проверяется наличие у субъект-сессии x текущей роли или административной роли, обладающей правом доступа владения own_r к сущности y.

Сущность-контейнер может быть создана только с применением правила вида create\_container(x,y,yd,name,z) , в результатах применения которого обеспечивается равенство false для нее функции разделяемых контейнеров. Изменение метки разделяемости сущности-контейнера возможно только с использованием правила вида set\_container\_attr(x,x',t) , в условиях которого проверяется наличие у субъект-сессии x текущей роли, обладающей правом доступа владения к этой сущности-контейнеру y или доступа на чтение к административной роли entities\_admin\_role .

Для получения субъект-сессией x данных о ролях или административных ролях, обладающих правами доступа к сущности y, используется правило вида get\_entity\_attr(x,y,z) , в условиях применения которого проверяется либо наличие у субъект-сессии x доступа на чтение к административной роли entities\_admin\_role , либо роли или административной роли, обладающей правом доступа владения own_r к сущности y. Для получения субъект-сессией x данных о ролях или административных ролях, обладающих правом доступа владения к субъект-сессии y, или имеющихся у этой субъект-сессии текущих ролях или административных ролях используется правило вида get\_subject\_attr(x,y,z) , в условиях применения которого проверяется наличие у субъект-сессии x либо доступа на чтение к административной роли subjects\_admin\_role , либо к роли или административной роли, обладающей правом доступа владения own_r к субъект-сессии y.

Права доступа ролей или административных ролей могут быть изменены в результате применения правил четырех групп видов. К первой группе относятся правила вида: grant\_rights(x, r, \{(y, \alpha_{rj}): 1 \leqslant j \leqslant k ), remove_rights (x, r, \{(y, \alpha_{rj}): 1 \leqslant j \leqslant k\}) , set_entity_owner(x, r, r’, y), set\_subject\_owner(x, r, r', y) , grant\_admin\_rights(x, ar, r', y) \{(r,\alpha_{rj}): 1 \leq j \leq k\} , remove_admin_rights (x,ar,\{(r,\alpha_{rj}): 1 \leq j \leq k\}) \leq k ), create_object(x, y, yd, name, z), create_container(x, y, yd, name, z) z), в условиях применения которых проверяется наличие у субъект-сессии x административного доступа на запись к соответствующей роли или административной роли, права доступа которой изменяются при применении правил. При реализации правил второй группы видов: create\_first\_subject(x,u,y,z) и create\_subject(x,y,z) после создания субъект-сессии z ей дается административный доступ на запись к существующей по условию 9 консистентности модели индивидуальной роли ее учетной записи пользователя, после чего этой роли дается право доступа владения к субъект-сессии z. В условиях правил третьей группы видов: create\_user(x, u) , create\_role(x, r, name, v) rz), create\_hard\_link\_role(x,r,rz) проверяется (за исключением последнего правила, когда административным ролям назначаются административные права доступа read_r к ролям или административным ролям с учетом изменения их иерархии) наличие у субъект-сессии x административного доступа на запись к административным ролям roles_admin_role и admin_roles_admin_role, которым даются права доступа владения к создаваемым в результате применения правил ролям или административным ролям. Кроме того, автоматически административным ролям назначаются административные права доступа read_r или execute_r к ролям или административным ролям при изменении их иерархии в соответствии условием 2 консистентности модели и определением 2.3. При реализации правил четвертой группы видов: delete\_user(x, u) , delete\_entity(x, y, z) , delete\_role(x, r, rz) , delete\_subject(x, z) у ролей и административных ролей удаляются права доступа к соответствующим удаляемым сущностям, субъект-сессиям, ролям или административным ролям.

Создание, переименование, удаление, получение параметров роли или административной роли, «жесткой» ссылки на нее, числа «жестких» ссылок к ней, множества административных ролей, обладающих к ней правами доступа, может быть реализовано с использованием правил вида create\_role(x,r,name,rz) , delete\_role(x,r,rz) , create\_hard\_link\_role(x,r,rz) , delete\_hard\_link\_role(x,r,rz) , rename\_role(x,ry,name) , get\_role\_attr(x,y,z) , в условиям применения которых (в последнем правиле в результатах применения) проверяется наличие у субъект-сессии x текущей административной роли roles admin\_role или admin\_roles\_admin\_role соответственно.

Таким образом, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 5 консистентности модели.

Для создания или удаления учетной записи пользователя используются правила вида create\_user(x,u) и delete\_user(x,u) , в условиях применения которых проверяется наличие у субъект-сессии x текущих административных ролей users\_admin\_role , roles\_admin\_role и admin\_roles\_admin\_role , а при использовании первого правила административного доступа на запись к административным ролям roles\_admin\_role и admin\_roles\_admin\_role . Также проверяется, что множество субъект-сессий, функционирующим от имени данной учетной записи пользователя u, является пустым.

Для получения параметров учетной записи пользователя используется правило вида get\_user\_attr(x,u,z) , в условиях применения которого проверяется, что либо субъект-сессия x функционирует от имени учетной записи пользователя u, либо x имеет текущую административную роль users\_admin\_role . Таким образом, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 6 консистентности модели.

Субъект-сессия может активизировать новую субъект-сессию только с использованием правил вида create\_first\_subject(x,u,y,z) и create\_subject(x,y,z) , в которых проверяется наличие у субъект-сессии x текущей роли или административной роли, обладающей правом доступа на выполнение к сущности y. Субъект-сессия x может удалить субъект-сессию z только с использованием правила delete\_subject(x,z) , в условиях применения которого проверяется наличие у x текущей роли или административной ролью, имеющей право доступа владения к z. Таким образом, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие z консистентности модели.

В рамках базового уровня МРОСЛ ДП-модели отсутствуют правила, позволяющие изменять вид метки у сущностей. Непосредственное изменение прав доступа ролей или административных ролей к сущности может быть осуществлено только с применением правил вида grant\_rights(x,r,\{(y,\alpha_{rj})\colon 1\leqslant j\leqslant k\}),\ remove\_rights(x,r,\{(y,\alpha_{rj})\colon 1\leqslant j\leqslant k\}),\ set\_entity\_owner(x,r,r',y) , в условиях которых проверяется, что сущность обладает прямой меткой. При этом в результатах применения этих правил задано, что при изменение прав доступа к сущности-контейнеру с прямой меткой, содержащей только сущности с косвенными метками, соответственно изменяются права доступа к этим сущностям и сущностям, им подчиненным в иерархии. Новые сущности создаются только с использованием правил вида create\_object(x, y, yd, name, z) и create\_container(x, y, yd, name, z) , в результатах применения которых задается вид их метки. Кроме этих правил иерархия сущностей может быть изменена с использованием правила вида \mathit{create\_hard\_link}(x,y,name,z) . При этом в условиях всех этих правил проверяется, что если у создаваемой сущности y либо «жесткой» ссылки на нее метка прямая, то у сущности-контейнера z, в котором она создается, метка также прямая, а значит, если у некоторой сущности-контейнера метка косвенная, то у всех сущностей ниже ее в иерархии она также косвенная. Также проверяется, что все сущности внутри сущности-контейнера должны иметь метку одного вида. При создании сущности y с косвенной меткой с применением первых двух правил права доступа всех ролей и административных ролей к ней задаются равными соответствующим правам доступа ролей и административных ролей к сущности-контейнеру z, которая либо имеет прямую метку, либо по предположению индукции права доступа к ней совпадают с правами к единственной существующей по предположению индукции старшей ее в иерархии сущности-контейнера с прямой меткой. В правиле вида create\_hard\_link(x, y, name, z) проверяется, что «жесткая» ссылка на сущность с косвенной меткой создается в иерархии этой единственной сущности-контейнера. Также в рамках базового уровня МРОСЛ ДП-модели отсутствуют правила, позволяющие изменять вид метки у ролей или административных ролей. Новые роли создаются только с использованием правил вида create\_user(x,u) и create\_role(x, r, name, rz) , в результатах применения которых для всех новых ролей указывается, что их метки прямые. Таким образом, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 8 консистентности модели.

Индивидуальная административная роль и индивидуальная роль учетной записи пользователя u создаются только с использованием правила вида create\_user(x,u) , при этом административные права доступа на чтение, запись и выполнение к индивидуальной роли даются индивидуальной административной роли учетной записи пользователя u. Данные роли удаляются только при удалении учетной записи пользователя с использованием правила вида delete\_user(x,u) . Также при использовании правила вида create\_user(x,u) индивидуальной административной роли учетной записи пользователя u даются права доступа на чтение, запись и выполнение к общей роли common\_role . Кроме того, по условию 9 консистентности модели административные роли roles\_admin\_role и admin\_roles\_admin\_role с применением правила вида remove\_admin\_rights(x, ar, \{(r, \alpha_{rj}): 1 \le j \le k\}) нельзя использовать для нарушения заданной иерархии и правил назначения административных прав доступа к индивидуальным административным ролям, индивидуальным ролям учетных записей пользователей и общей роли. В соответствии с условиями применения правил вида delete\_role(x, r, rz) , create\_hard\_link\_role(x, r, rz) , delete\_hard\_link\_role(x, r, rz) и rename\_role(x, ry, name) эти роли и административные роли нельзя удалить, переименовать, создать или удалить «жесткую» ссылку на них.

Следовательно, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 9 консистентности модели.

Создание субъект-сессии может быть осуществлено с использованием правил вида create\_first\_subject(x,u,y,z) и create\_subject(x,y,z) , в результатах применения которых обеспечивается, что эта субъект-сессия получает доступ на чтение к индивидуальной административной роли, доступы на запись и чтение к индивидуальной роли ее учетной записи пользователя и общей роли. Также индивидуальная роль получает право доступа владения к этой субъект-сессии.

При удалении субъект-сессии с использованием правила вида delete\_subject(x,z) удаляются все ее административные доступы, в том числе к индивидуальной, индивидуальной административной и общей роли.

Следовательно, с учетом предположения индукции в состоянии G_N и при переходе G_{N-1} \vdash_{op_N} G_N выполнено условие 10 консистентности модели.

Шаг индукции доказан.

Утверждение доказано.

Таким образом, обосновано, что заданные в рамках базового уровня иерархического представления МРОСЛ ДП-модели правила перехода системы из состояния в состояние соответствуют условиям консистентности модели.