AuthZ api и условные ace
AuthZ API, впервые введенный в Windows XP, реализует ту же модель защиты, что и Security Reference Monitor (монитор состояния защиты), но исключительно для пользовательского режима; все функции AuthZ API находятся в библиотеке \Windows\System32\Authz.Dll. Это позволяет приложениям, нуждающимся в защите своих закрытых объектов (вроде таблиц базы данных), задействовать Windows-модель защиты без издержек, связанных с переходами из пользовательского режима в режим ядра, которые были бы неизбежны при использовании Security Reference Monitor.
AuthZ API оперирует стандартными структурами дескриптора защиты, SID и привилегиями. Вместо применения маркеров для представления клиентов, AuthZ использует AUTHZ_CLIENT_CONTEXT. AuthZ включает эквиваленты всех функций проверки прав доступа и защиты Windows; например AuthzAccessCheck — это AuthZ-версия Windows-функции AccessCheck, которая вызывает функцию SeAccessCheck, принадлежащую Security Reference Monitor.
Еще одно преимущество AuthZ заключается в том, что приложения могут указывать AuthZ кэшировать результаты проверок прав доступа для ускорения последующих проверок, где используются те же контекст клиента и дескриптор защиты.
Формат строк языка определения дескрипторов безопасности – SDDL (Security Description Definition Language) был расширен для поддержки ACE-элементов с условными выражениями. Новый формат строки SDDL имеет следующий вид: AceType; AceFlags; Rights; ObjectGuid; InheritObjectGuid; AccountSid; (ConditionalExpression).
Типом ACE (AceType) для условного ACE является либо XA (для разрешающего SDDL_CALLBACK_ACCESS_ALLOWED), либо XD (для запрещающего SDDL_CALLBACK_ACCESS_DENIED). Следует заметить, что АСЕ-элементы с условными выражениями используются для авторизации по заявке (конкретно функциями AuthZ API и AppLocker) и не распознаются диспетчером объектов или файловыми системами.
Условное выражение может включать любые элементы, указанные в таблице:
Элемент выражения |
Описание |
Имя_атрибута |
Проверяет у конкретного атрибута наличие ненулевого значения |
exists Имя_атрибута |
Проверяет существование указанного атрибута в контексте клиента |
Имя_атрибута оператор значение |
Возвращает результат указанной операции. Для тестирования значений атрибутов для использования в условных выражениях используются следующие бинарные операторы, имеющие форму Имя_атрибута оператор значение: Contains_any_of, ==, !=, <, <=, >, >= |
Усл_выражение || Усл_выражение |
Проверяет, не имеет ли любое из указанных условных выражений значение true |
Усл_выражение && Усл_выражение |
Проверяет, не имеют ли оба указанных условных выражения значение true |
!(Усл_выражение) |
Превращает условное выражение в его противоположность |
Member_of{SidArray} |
Проверяет, содержит ли массив SID_AND_ATTRIBUTES, относящийся к контексту клиента, все идентификаторы безопасности (SID) в списке с запятыми в качестве разделителей, определенным с помощью SidArray |
Условный АСЕ-элемент может содержать любое количество условий, и он либо игнорируется, если в результате вычисления условия будет получено значение false, либо применяется, если результат значения равен true. Условный АСЕ может быть добавлен к объекту с использованием API-функции AuthzAccessCheck.
Условный АСЕ может указать, какой доступ к конкретным записям данных внутри программы должен быть предоставлен только тому пользователю, который отвечает следующим критериям:
- у него имеется атрибут Role со значением Architect (создатель), Program Manager (Диспетчер программ) или Development Lead (ведущий разработчик) и атрибут Division (подразделение) со значением Windows;
- его атрибут ManagmentChain (цепочка управления) содержит значение John Smith;
- его атрибут ComissionType (тип полномочий) имеет значение Officer (служащий), а значение его атрибута PayGrade (разряд заработной платы) выше 6 (то есть соответствует званию генерала - General Officer в вооруженных силах США).
В составе Windows нет средств для просмотра и редактирования условных АСЕ-элементов.
