% Лекция 6 (27.10.23) Третий шаг алгоритма всегда будет иметь конечную сложность. Так как множество объектов не изменяется, то необходимо перебрать все последовательности различных команд, а их конечное число. Наибольшую трудоёмкость в общем случае представляет разработка алгоритма построения <<развёрнутого>> состояния. Однако для АМТМД или АКФМТМД такой алгоритм существует. Пусть $\alpha$ и $\beta$ --- две различные команды системы МТМД, содержащие примитивные операторы <<создать>>, \dots. Будем считать, что $\alpha < \beta \iff$ для некоторого дочернего типа команды $\alpha$ в графе создания найдётся путь в некоторый родительский тип команды $\beta$. В системе АМТМД отношение <<$<$>> на множестве команд, содержащих примитивные операторы <<создать>>, \dots, является отношением строгого порядка %% TODO \textbf{Алгоритм 2.2} \emph{Алгоритм построения <<развёрнутого>> состояния для системы АКФМТМД.} \begin{enumerate} \item Упорядочить в списке все команды, содержащие примитивные операторы вида <<создать>>, \dots (команда $\alpha$ следует в списке перед командой $\beta \iff \alpha < \beta \; \lor$ $\alpha$ и $\beta$ не сравнимы). \item Начиная с начального состояния, применять команды в соответствии с созданным на шаге 1 списком, при этом каждая команда применяется со всеми возможными для неё наборами родительских объектов. \end{enumerate} %% NOTE: 2.4 \begin{theorem} Существует алгоритм проверки безопасности систем АМТМД. \end{theorem} %% NOTE: 2.2 \begin{corollary} Алгоритм проверки безопасности систем АМТМД имеет экспоненциальную сложность. \end{corollary} Для АМТМД, в которых каждая команда имеет не более трёх параметров, доказано, что алгоритм проверки их безопасности имеет полиномиальную сложность. %% NOTE: 2.3 \subsection{Модель распространения прав доступа Take-Grant} \subsubsection{} Классическая модель Take-Grant ориентирована на анализ путей распространения прав доступа в системе дискреционного управления доступом. Основными элементами модели Take-Grant являются: \begin{itemize} \item $O$ --- множество объектов; \item $S \subseteq O$ --- множество субъектов; \item $R = \set{r_1, r_2, \dots, r_m} \cup \set{t, g}$ --- множество видов прав доступа, где $t$ (take) --- право брать права доступа, $g$ (grant) --- право давать права доступа; \item $G = (S, O, E)$ --- конечный помеченный ориентированный без петель граф доступов, описывающий состояние системы. \end{itemize} Элементы множеств $S$ и $O$ являются вершинами графа, которые обозначаются $\otimes$ --- объекты (элементы множества $O - S$) и $\cdot$ --- субъекты соответственно. Элементы множества $E \subseteq O \times O \times R$ являются дугами графа. Каждая дуга помечена непустым подмножеством множества видов прав доступа $R$. Состояние системы описывается соответствующим ему графом доступов. В отличие от подели ХРУ в модели Take-Grant возможно наличие прав доступов не только у субъектов к объектам, но и у объектов к объектам. Основная цель классической модели Take-Grant --- определение и обоснование алгоритмически проверяемых условий проверки возможности утечки права доступа по исходному графу доступов, соответствующего некоторому состоянию системы. Порядок перехода системы модели Take-Grant из состояния в состояние определяется правилами преобразования графа доступов, которые в классической модели носят название де-юре правил. Преобразование графа $G$ в граф $G'$ в результате выполнения правила $op$ обозначается через $G \vdash_{op} G'$. В классической модели Take-Grant рассматриваются следующие четыре де-юре правила преобразования графа, выполнение каждого из которых может быть инициировано только субъектом, являющимся активной компонентой системы: \begin{enumerate} \item $take$ --- брать права доступа (см. рис 2.1): субъект $x$ берёт у объекта $y$ права $\alpha$ на объект $z$; %% TODO: рис. 1 \item $grant$ --- давать права доступа (см. рис. 2.2): субъект $x$ даёт объекту $y$ права $\alpha$ на объект $z$; %% TODO: рис. 2 \item $create$ --- создать новый объект или субъект, при этом субъект создатель может взять на созданный субъект любые права доступа (по умолчанию предполагается, что создаётся объект, создание субъекта оговаривается особо) (см. рис. 2.3); %% TODO: рис. 3 \item $remove$ --- удалять права доступа (см. рис. 4): субъект $x$ удаляет из своих прав доступа на объект $y$ набор прав $\alpha$. %% TODO: рис. 4 \end{enumerate} %% TODO: нумерация В таблице 2.3 приведены условия применения де-юре правил в исходном состоянии $G = (S, O, E)$ и результаты их применения в результирующем состоянии $G' = (S', O', E')$. %% TODO: таблица 2.3 --- Де-юре правила классической модели Take-Grant Правила | Исходное состояние $G = (S, O, E)$ | Результирующее состояние $G' = (S', O', E')$ $take(\alpha, x, y, z)$ | $x \in S, \; y, z \in O, \; (x, y, \set{t}) \subset E, \; (y, z, \beta) \subset E, \; x \neq z, \; \alpha \subseteq \beta$ | $S' = S, O' = O, E'= E \cup \set{(x, z, \alpha)}$ \begin{itemize} \item $grant(\alpha, x, y, z)$ \item $x \in S, \; y, z \in O, \; (x, y, \set{g}) \subset E, \; (x, z, \beta) \subset E, \; y \neq z, \; \alpha \subseteq \beta$ \item $S' = S, O' = O, E'= E \cup \set{(y, z, \alpha)}$ \end{itemize} \begin{itemize} \item $create(\beta, x, y)$ \item $x \in S, \; y \not\in O, \beta \neq \varnothing$ \item $O' = O \cup \set{y}$, если $y$ субъект, то $S' = S \cup \set{y}$, иначе $S' = S, \; E' = E \cup \set{(x, y, \beta)}$ \end{itemize} \begin{itemize} \item $remove(\alpha, x, y)$ \item $x \in S, \; y \in O, \; (x, y, \beta) \subset E, \; \alpha \subseteq \beta$ \item $S' = S, \; O' = O, \; E' = E - \set{(x, y, \alpha)}$ \end{itemize} Рассмотрим условия, при которых в системе возможно распространение прав доступа. Пусть дан граф доступов $G_0 = (S_0, O_0, E_0), \; x, y \in O_0, \; x \neq y, \; \alpha \subseteq R$. Определим предикат $\fn{can_share}(\alpha, x, y, G_0)$, который будет истинным $\iff \exists G_1 = (S_1, O_1, E_1), \dots, G_N = (S_N, O_N, E_N)$ и правила $op_1, \dots, op_N, \; N \geq 0 : G_0 \vdash_{op_1} G_1 \vdash_{op_2} \dots \vdash_{op_N} G_N \land (x, y, \alpha \subset E_N$. Определение истинности предиката $\fn{can_share}(\alpha, x, y, G_0)$ непосредственно по определению является в общем случае алгоритмически неразрешимой задачей, так как требует проверки всех траекторий функционирования системы. По этой причине для проверки истинности предиката $\fn{can_share}(\alpha, x, y, G_0)$ следует определить необходимые и достаточные условия, проверка которых возможна. Решение этой задачи будет выполнено в два этапа: \begin{enumerate} \item %% TODO: дописать \item Определены и обоснованы условия истинности предиката для произвольных графов. \end{enumerate} Пусть $G = (S, S, E)$ --- граф доступов, все вершины которого являются субъектами. Говорят, что вершины графа доступов являются $tg$-связными или что они соединены $tg$-путём, когда, без учёта направления рёбер, в графе между ними существует путь такой, что каждое ребро этого пути помечено $t$ или $g$. \begin{theorem} Пусть $G_0 = (S_0, O_0, E_0)$ --- граф доступов, содержащий только вершины субъекты, $x, y \in S_0, \; x \neq y$. Тогда предикат $\fn{can_share}(\alpha, x, y, G_0)$ истинен $\iff$ выполняются следующие два условия: \begin{enumerate} \item существуют субъекты $s_1, \dots, s_m \subset S_0 : (s_i, y, \gamma_i) \subset E_0$, где $i = 1, \dots, m$ и $\alpha = \gamma_1 \cup \dots \cup \gamma_m$; \end{enumerate} \end{theorem} %% TODO: дописать