Definitionssprache der Sicherheitsbeschreibung für bedingte ACEs

Ein bedingter Zugriffssteuerungseintrag (Access Control Entry, ACE) ermöglicht die Auswertung einer Zugriffsbedingung, wenn eine Zugriffsüberprüfung durchgeführt wird. Die Definitionssprache der Sicherheitsbeschreibung (Security Descriptor Definition Language, SDDL) stellt eine Syntax zum Definieren bedingter ACEs in einem Zeichenfolgenformat bereit.

Die SDDL für einen bedingte Zugriffssteuerungseintrag ist dieselbe wie für jede andere, wobei die Syntax für die bedingte Anweisung an das Ende der ACE-Zeichenfolge angefügt wird. Weitere Informationen über die SDDL finden Sie unter Definitionssprache der Sicherheitsbeschreibung.

Das „#“-Zeichen ist synonym mit „0“ in Ressourcenattributen. Beispiel: D:AI(XA;OICI;FA;;;WD;(OctetStringType==#1#2#3##)) entspricht und wird interpretiert als D:AI(XA;OICI;FA;;;WD;(OctetStringType==#01020300)).

Bedingtes ACE-Zeichenfolgenformat

Jeder ACE in einer Sicherheitsbeschreibungszeichenfolge wird in Klammern gesetzt. Die Felder des Zugriffssteuerungseintrag haben folgende Reihenfolge und werden durch Semikolons (;) getrennt.

AceType**;AceFlags;Rechte;ObjectGuid;InheritObjectGuid;AccountSid;(ConditionalExpression)**

Die Felder werden in ACE-Zeichenfolgen mit den folgenden Ausnahmen beschrieben.

  • Das AceType-Feld kann eine der folgenden Zeichenfolgen sein.

    ACE-Typzeichenfolge Konstant in Sddl.h ACE-Typwert
    "XA"
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    "XD"
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • Die ACE-Zeichenfolge enthält einen oder mehrere bedingte Ausdrücke, die am Ende der Zeichenfolge in Klammern gesetzt sind.

Bedingte Ausdrücke

Ein bedingter Ausdruck kann eines der folgenden Elemente enthalten.

Ausdruckselement Beschreibung
AttributeName
Überprüft, ob das angegebene Attribut einen Wert ungleich Null aufweist.
existsAttributeName
Testet, ob das angegebene Attribut im Clientkontext vorhanden ist.
AttributeNameOperatorWert
Gibt das Ergebnis des angegebenen Vorgangs zurück.
ConditionalExpression**||**ConditionalExpression
Testet, ob einer der angegebenen bedingten Ausdrücke wahr ist.
ConditionalExpression&&ConditionalExpression
Testet, beide angegebenen bedingten Ausdrücke wahr sind.
!(ConditionalExpression)
Die Umkehrung eines bedingten Ausdrucks.
Member_of{SidArray}
Überprüft, ob das SID_AND_ATTRIBUTES-Array des Clientkontexts alle Sicherheits-IDs (SIDs) in der durch SidArray angegebenen und durch Trennzeichen getrennten Liste enthält.
Für „Allow-ACEs“ muss für eine Clientkontext-SID das Attribut SE_GROUP_ENABLED als übereinstimmend festgelegt sein.
Für „Deny-ACEs“ muss für eine Clientkontext-SID entweder das SE_GROUP_ENABLED- oder das SE_GROUP_USE_FOR_DENY_ONLY-Attribut als übereinstimmend festgelegt sein.
Das SidArray-Array kann entweder SID-Zeichenfolgen (z. B. „S-1-5-6“) oder SID-Aliase (z. B. „BA“) enthalten.

Attribute

Ein Attribut stellt ein Element im AUTHZ_SECURITY_ATTRIBUTES_INFORMATION-Array im Clientkontext dar. Ein Attributname kann alle alphanumerischen Zeichen sowie die Zeichen „:“, „/“, „.“ und „_“ enthalten.

Ein Attributwert kann einer der folgenden Typen sein.

Werttyp Beschreibung
Integer
Eine 64-Bit-Ganzzahl in dezimaler oder hexadezimaler Schreibweise.
String
Ein durch Anführungszeichen getrennter Zeichenfolgenwert.
SID
SID(S-1-1-0) oder SID(BA). Muss im Ressourcenhosting-Subsystem (RHS) von Member_of oder Device_Member_of sein.
BLOB
# gefolgt von hexadezimalen Zahlen. Wenn die Länge der Zahlen ungerade ist, wird „#“ in Null übersetzt, um sie gerade zu machen. Außerdem wird ein „#“, das an anderer Stelle im Wert auftaucht, in Null übersetzt.

Operatoren

Die folgenden Operatoren werden für die Verwendung in bedingten Ausdrücken definiert, um die Werte von Attributen zu testen. All diese Operatoren sind binäre Operatoren und werden im Formular AttributNameOperatorWert verwendet.

Operator Beschreibung
==
Konventionelle Definition.
!=
Konventionelle Definition.
<
Konventionelle Definition.
<=
Konventionelle Definition.
>
Konventionelle Definition.
>=
Konventionelle Definition.
Enthält
Nimmt den Wert TRUE an, wenn der Wert des angegebenen Attributs eine Obermenge des angegebenen Werts ist (andernfalls FALSE).
Any_of
Nimmt den Wert TRUE an, wenn der angegebene Wert eine Obermenge des Werts des angegebenen Attributs ist (andernfalls FALSE).

Darüber hinaus sind die unären Operatoren „Exists“, „Member_of“ und „Negation (!)“ wie in der Tabelle mit bedingten Ausdrücken beschrieben definiert.

Der Operator „Contains“ muss vorangestellt und von Leerzeichen gefolgt sein, und dem Operator „Any_of“ müssen Leerzeichen vorangestellt werden.

Operatorrangfolge

Die Operatoren werden in der folgenden Reihenfolge der Rangfolge ausgewertet, wobei Vorgänge gleicher Rangfolge von links nach rechts ausgewertet werden.

  1. Exists, Member_of
  2. Contains, Any_of
  3. ==, !=, <, <=, >, >=
  4. !
  5. &&
  6. ||

Darüber hinaus kann jeder Teil eines bedingten Ausdrucks in Klammern gesetzt werden. Ausdrücke innerhalb von Klammern werden zuerst ausgewertet.

Unbekannte Werte

Die Ergebnisse bedingter Ausdrücke geben manchmal den Wert Unknown (Unbekannt) zurück. Eine der relationalen Vorgänge gibt beispielsweise Unknown zurück, wenn das angegebene Attribut nicht vorhanden ist.

In der folgenden Tabelle werden die Ergebnisse für einen logischen AND-Vorgang zwischen zwei bedingten Ausdrücken beschrieben (ConditionalExpression1 und ConditionalExpression2).

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

In der folgenden Tabelle werden die Ergebnisse für einen logischen OR-Vorgang zwischen zwei bedingten Ausdrücken beschrieben (ConditionalExpression1 und ConditionalExpression2).

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

Die Negation eines bedingten Ausdrucks mit dem Wert UNKNOWN ist ebenfalls UNKNOWN.

Bedingte ACE-Auswertung

In der folgenden Tabelle wird das Ergebnis einer Zugriffsüberprüfung eines bedingten ACE abhängig von der endgültigen Auswertung des bedingten Ausdrucks beschrieben.

ACE-Typ TRUE FALSE UNKNOWN
Zulassen
Zulassen
ACE ignorieren
ACE ignorieren
Verweigern
Verweigern
ACE ignorieren
Verweigern

Beispiele

Die folgenden Beispiele zeigen, wie die angegebenen Zugriffsrichtlinien durch einen bedingten ACE dargestellt wird, der mithilfe der SDDL definiert wird.

Richtlinie

„Ausführen für alle zulassen“, wenn beide der folgenden Bedingungen erfüllt sind:

  • Titel = PM
  • Division = Finance or Division = Sales

SDDL

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

Richtlinie

Ausführung zulassen, wenn sich eines der Projekte des Benutzers mit den Projekten der Datei überschneidet.

SDDL

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

Richtlinie

Lesezugriff zulassen, wenn sich der Benutzer mit einer Smartcard angemeldet hat, ein Sicherungsoperator ist und eine Verbindung von einem Computer mit aktiviertem Bitlocker herstellt.

SDDL

D:(XA; ;FR;;;S-1-1-0; (Member_of {SID(Smartcard_SID), SID(BO)} &&@Device.Bitlocker))

[MS-DTYP]: Beschreibungssprache für Sicherheitsdeskriptor