Язык определения дескриптора безопасности для условных aces

Запись управления условным доступом (ACE) позволяет оценить условие доступа при выполнении проверка доступа. Язык определения дескриптора безопасности (SDDL) предоставляет синтаксис для определения условных ACEs в строковом формате.

SDDL для условного ACE совпадает с синтаксисом для условного оператора, добавленного в конец строки ACE. Сведения о SDDL см. в разделе "Язык определения дескриптора безопасности".

Знак "#" является синонимом "0" в атрибутах ресурсов. Например, D:AI(XA; OICI;FA;; WD; (OctetStringType==#1#2#3#)) эквивалентен и интерпретируется как D:AI(XA; OICI;FA;; WD; (OctetStringType==#01020300)).

Формат строки условного ACE

Каждый ACE в строке дескриптора безопасности заключен в скобки. Поля ACE находятся в следующем порядке и разделены точкой с запятой (;)).

AceType**;AceFlags;Права;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**

Поля описаны в строках ACE со следующими исключениями.

  • Поле AceType может быть одной из следующих строк.

    Строка типа ACE Константная в Sddl.h Значение AceType
    "XA"
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    XD
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • Строка ACE содержит одно или несколько условных выражений, заключенных в скобки в конце строки.

Условные выражения

Условное выражение может включать любой из следующих элементов.

Элемент выражения Description
AttributeName
Проверяет, имеет ли указанный атрибут ненулевое значение.
существуетAttributeName
Проверяет, существует ли указанный атрибут в контексте клиента.
Значение оператораAttributeName
Возвращает результат указанной операции.
ConditionalExpression ConditionalExpression**||**
Проверяет, является ли любой из указанных условных выражений истинным.
ConditionalExpression&&&ConditionalExpression
Проверяет, являются ли оба указанных условных выражения истинными.
! (Условное выражение)
Обратное условное выражение.
Member_of{SidArray}
Проверяет, содержит ли массив SID_AND_ATTRIBUTES контекста клиента все идентификаторы безопасности (SID) в списке с разделителем запятых , указанный SidArray.
Для allow ACEs идентификатор безопасности контекста клиента должен иметь набор атрибутов SE_GROUP_ENABLED , которые должны считаться совпадением.
Для запрета acEs идентификатор безопасности контекста клиента должен иметь либо SE_GROUP_ENABLED, либо атрибут SE_GROUP_USE_FOR_DENY_ONLY, который должен считаться совпадением.
Массив SidArray может содержать строки SID (например, "S-1-5-6") или псевдонимы sid (например, BA)

Атрибуты

Атрибут представляет элемент в массиве AUTHZ_SECURITY_ATTRIBUTES_INFORMATION в контексте клиента. Имя атрибута может содержать любые буквенно-цифровые символы и любой из символов ":", "/", "." и "_".

Значение атрибута может быть любым из следующих типов.

Тип значения Description
Целое
64-разрядное целое число в десятичном или шестнадцатеричном нотации.
Строка
Строковое значение, разделенное кавычками.
SID
SID(S-1-1-0) или SID(BA). Необходимо быть на RHS Member_of или Device_Member_of.
BLOB-объект
#, за которым следует шестнадцатеричные числа. Если длина чисел нечетна, то # преобразуется в 0, чтобы сделать его даже. Кроме того, значение #, отображаемое в другом месте значения, преобразуется в значение 0.

Операторы

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

Operator Description
==
Обычное определение.
!=
Обычное определение.
<
Обычное определение.
<=
Обычное определение.
>
Обычное определение.
>=
Обычное определение.
Содержит
ЗНАЧЕНИЕ TRUE , если значение указанного атрибута является супермножеством указанного значения; в противном случае — ЗНАЧЕНИЕ FALSE.
Any_of
ЗНАЧЕНИЕ TRUE , если указанное значение является супермножеством значения указанного атрибута; в противном случае — ЗНАЧЕНИЕ FALSE.

Кроме того, унарные операторы Существуют, Member_of и отрицание (!), как описано в таблице условных выражений.

Оператор "Contains" должен предшествовать пробелу и следовать за ним, а оператор "Any_of" должен предшествовать пробелам.

Приоритет операторов

Операторы оцениваются в следующем порядке приоритета, при этом операции с равным приоритетом оцениваются слева направо.

  1. Существует, Member_of
  2. Содержит, Any_of
  3. ==, !=, =, <<=, = >>
  4. !
  5. &&
  6. ||

Кроме того, любая часть условного выражения может быть заключена в скобки. Сначала вычисляются выражения в скобках.

Неизвестные значения

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

В следующей таблице описываются результаты логической операции AND между двумя условными выражениями, ConditionalExpression1 и ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1&&&ConditionalExpression2
TRUE
TRUE
TRUE
TRUE
FALSE
FALSE
TRUE
UNKNOWN
UNKNOWN
FALSE
TRUE
FALSE
FALSE
FALSE
FALSE
FALSE
UNKNOWN
FALSE
UNKNOWN
TRUE
UNKNOWN
UNKNOWN
FALSE
FALSE
UNKNOWN
UNKNOWN
UNKNOWN

В следующей таблице описываются результаты логической операции OR между двумя условными выражениями, ConditionalExpression1 и ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1||ConditionalExpression2
TRUE
TRUE
TRUE
TRUE
FALSE
TRUE
TRUE
UNKNOWN
TRUE
FALSE
TRUE
TRUE
FALSE
FALSE
FALSE
FALSE
UNKNOWN
UNKNOWN
UNKNOWN
TRUE
TRUE
UNKNOWN
FALSE
UNKNOWN
UNKNOWN
UNKNOWN
UNKNOWN

Отрицание условного выражения со значением UNKNOWN также неизвестно.

Условное вычисление ACE

В следующей таблице описывается проверка результата условного ACE в зависимости от окончательной оценки условного выражения.

Тип ACE TRUE FALSE НЕИЗВЕСТНО
Разрешить
Разрешить
Игнорировать ACE
Игнорировать ACE
Запрет
Запрет
Игнорировать ACE
Запрет

Примеры

В следующих примерах показано, как указанные политики доступа представлены условным ACE, определенным с помощью SDDL.

Политика

Разрешить выполнение всем, если выполняются оба следующих условия:

  • Title = PM
  • Division = Finance or Division = Sales

SDDL

D:(XA; ; FX;;; S-1-1-0; (@User.Title="PM" && (@User.Division="Finance" || @User.Division ==" Sales"))

Политика

Разрешить выполнение, если любой из проектов пользователя пересекается с проектами файлов.

SDDL

D:(XA; ; FX;;; S-1-1-0; (@User.Project Any_of @Resource.Project))

Политика

Разрешить доступ на чтение, если пользователь выполнил вход с помощью смарт-карта, является оператором резервного копирования и подключается с компьютера с включенным Bitlocker.

SDDL

D:(XA; ;FR;; S-1-1-0; (Member_of {SID(Smart карта_SID), SID(BO)} >@Device.Bitlocker))

[MS-DTYP]: язык описания дескриптора безопасности