УДК 004.94
О ДОСТАТОЧНЫХ УСЛОВИЯХ ПОХИЩЕНИЯ ПРАВ ДОСТУПА
В СУБД ДП-МОДЕЛИ
В. Ю. Смольянинов
Для обеспечения возможности теоретического анализа безопасности СУБД на основе РОСЛ ДП-модели [1] построена формальная модель (кратко, СУБД ДП-модель), а также сформулированы достаточные условия похищения прав доступа.
По сравнению с РОСЛ ДП-моделью, в модель внесены следущие изменения.
Множество объектов делится на множество сущностей-данных Od, соответствующих записям таблиц, множество сущностей-процедур Op и множество сущностей-триг-герров Ot, активизирующихся при выполнении операций над связанными с ними таблицами. Сущности-триггеры и сущности-процедуры содержат SQL-код, выполнение которого субъект-сессиями приводит к реализации преобразований системы, задаваемыми де-юре правилами модели.
На множестве сущностей-контейнеров C, соответствующих схемам и таблицам СУБД, задается функция иерархии сущностей H. В множество таблиц T включаются те сущности-контейнеры, которые могут содержать только записи таблиц и сущности-триггеры.
В отличие от РОСЛ ДП-модели, элементы множества субъект-сессий S не считаются сущностями. При этом считается, что субъект-сущности соответствуют сессиям пользователей с СУБД. С помощью функции user задается соответствие между субъект-сессиями и элементами множества учётных записей пользователей U. Следует отметить, что при переходе системы из состояния в состояние допустимо изменение функции user. Это связано с особенностями выполнения кода хранимых процедур и триггеров в реальных СУБД, где код может выполняться с правами, отличными от прав активизировавшего их пользователя.
В модели считается, что множество функционально-ассоциированных с субъектом-сессией s сущностей [s] в каждый момент содержит ровно одну сущность-триггер или сущность-процедуру, т. е. [s] £ Op U Ot.
Для учёта специфики реальных СУБД в модель введены следующие элементы:
owner: E ^ U — функция, задающая для каждой сущности учётную запись её владельца и удовлетворяющая условию Vt £ T Vo £ H(t) (owner (o) = owner(t));
execute_as: Op U Ot ^ {as_caller,as_owner} — функция, задающая режим выполнения кода сущности-процедуры или сущности-триггера o субъект-сессией s; если execute_as(o) = as_caller, то код сущности o выполняется от имени учётной записи user(s), иначе код сущности o выполняется субъект-сессией s от имени owner(o);
Rr = {read, write, append, delete, alter, execute, create} —множество видов прав доступа к сущностям-контейнерам и сущностям-процедурам, где alter соответствует праву доступа, позволяющему задавать SQL-код сущностей-процедур и сущностей-триггеров, а create — праву, позволяющему создавать дочерние контейнеры;
R С U х (C U Op) х Rr —множество прав учётных записей пользователей на контейнеры и сущности-процедуры, при этом де-юре правила модели обеспечивают выполнение следующего ограничения: если пользователь обладает правом на контейнер, то он обладает соответствующим правом доступа и на любой его дочерний элемент;
Gr С U х (C U Op) х Rr —множество, задающее учётные записи пользователей, а также права на контейнеры и сущности-процедуры, которые они могут предоставить на них другим учётным записям пользователей, при этом Gr С R, т. е. права
доступа могут быть предоставлены только в случае обладания ими учётной записью пользователя — инициатора предоставления прав;
triggers: T х {write, append, delete} ^ 2Ot —функция, задающая для таблицы множество сущностей-триггеров, активизирующихся при реализации к ней права доступа соответствующего вида;
OP — множество де-юре правил преобразования состояний, включающее правила: создания новой субъект-сессии create _session(u,s); предоставления права доступа grant_right(s,u,e,ar); изменения и создания сущностей-процедур и сущностей-триггеров alter_procedure и alter_trigger; выполнения указанной процедуры execute_procedure(s,op), а также для вставки access_insert(s, t, odi, od2), обновления access_update(s,t,Odi,Od2) и удаления записей access _delete(s,t,od);
operations: Op U Ot ^ OP * — функция, задающая для каждой сущности-процедуры и сущности-триггера реализуемые ими последовательности де-юре правил преобразования состояний.
Определение 1. Пусть G0 — состояние системы Tj(G*,OP), u Є U, e Є C U Op, ar Є Rr, U' = {u' Є U0 : (u',e,ar) Є Gr0}. Определим предикат can_steal_right(u,e, ar,G0), истинный тогда и только тогда, когда существуют состояния Gi, ..., Gn и де-юре правила преобразования состояний opi,..., opN, такие, что G0 hopi Gi hop2 ... ^~oPN Gn, где N ^ 0; (u, e, ar) Є Rn; opi для всех i = 1,... , N не является правилом вида grant_right(s, u, e, ar), alter_procedure(s,...), alter_trigger(s,...), где user0(s) = = owner0([s}0) Є U'.
Справедливо следующее утверждение о достаточных условиях истинности предиката can_steal_right(u, e, ar, G0).
Утверждение 1. Пусть G0 — состояние системы Tj(G*,OP), u Є U, e Є C U Op, ar Є Rr. Если существует u' Є U0, такой, что (u',e,ar) Є Gr0 и выполняется одно из условий 1-2, то предикат can_steal_right(u,e,ar,G0) истинен.
Условие 1. 3u'' Є U0 3op Є Op0 (operations0(op) = (opi,..., opN) и 3i Є {1,..., N} 3s Є S0 (opi = grant_right(s,u,e,ar) и или owner0(op) = u', (u'',op, execute) Є R0, execute_as0(op) = as_owner, или (u',op, execute) Є R0, execute_as0(op) = as_caller)).
Условие 2. 3u'' Є U0 3t Є T 3a'r Є {append, write, delete} 3ot Є triggers(t,a’r) (operations0(ot) = (opi,..., opN) и 3i Є {1,..., N} 3s Є S0 (opi = grant_right(s, u, e, ar) и или (u",ot,a'r) Є R0, execute_as0(ot) = as_owner, или (u',ot,a'r) Є R0, execute _as0(ot) = as _caller)).
Следствие 1. Пусть G0 — состояние системы Tj(G*,OP), u Є U, e Є C U Op, ar Є Rr. Если существуют c' Є C, u' Є {u'' Є U0 : (u'',e,ar) Є Gr0}, такие, что (u', c', alter) Є R, то предикат can_steal_right(u,e, ar ,G0) истинен.
В дальнейшем планируется развитие СУБД ДП-модели по следующим направлениям: расширение модели набором де-факто правил и определение необходимых и достаточных условий реализации информационных потоков в случаях наличия или отсутствия кооперации субъект-сессий.
ЛИТЕРАТУРА
1. Девянин П. Н. Ролевая ДП-модель управления доступом и информационными потоками
в операционных системах семейства Linux // Прикладная дискретная математика. 2012.
№1(15). С. 69-90.