Langage de définition du descripteur de sécurité pour les ACE conditionnelles

Une entrée de contrôle d’accès (ACE) conditionnelle permet d’évaluer une condition d’accès lorsqu’une vérification d’accès est effectuée. Le langage de définition du descripteur de sécurité (SDDL) fournit une syntaxe permettant de définir des ACE conditionnelles dans un format de chaîne.

Le SDDL d’une ACE conditionnelle est le même que pour n’importe quelle ACE, avec la syntaxe de l’instruction conditionnelle ajoutée à la fin de la chaîne ACE. Pour plus d’informations sur SDDL, consultez langage de définition du descripteur de sécurité.

Le signe « # » est synonyme de « 0 » dans les attributs de ressource. Par exemple, D:AI(XA; OCII;FA;;;WD;(OctetStringType==#1#2#3##)) est équivalent et interprété comme D:AI(XA;OCII;FA;;;WD;(OctetStringType==#01020300)).

Format de chaîne ACE conditionnelle

Chaque ACE dans une chaîne de descripteur de sécurité est placée entre parenthèses. Les champs de l’ACE sont dans l’ordre suivant et sont séparés par des points-virgules (;).

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

Les champs sont décrits dans Chaînes ACE, avec les exceptions suivantes.

  • Le champ AceType peut être l’une des chaînes suivantes.

    Chaîne de type ACE Constante dans Sddl.h Valeur AceType
    « XA »
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    « XD »
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • La chaîne ACE inclut une ou plusieurs expressions conditionnelles, placées entre parenthèses à la fin de la chaîne.

Expressions conditionnelles

Une expression conditionnelle peut inclure l’un des éléments suivants.

Élément d'expression Description
AttributeName
Teste si l’attribut spécifié a une valeur différente de zéro.
exists AttributeName
Teste si l’attribut spécifié existe dans le contexte client.
AttributeName Operator Value
Retourne le résultat de l’opération spécifiée.
ConditionalExpression**||**ConditionalExpression
Teste si l’une des expressions conditionnelles spécifiées est vraie.
ConditionalExpression && ConditionalExpression
Teste si les deux expressions conditionnelles spécifiées sont vraies.
!(ConditionalExpression)
Inverse d’une expression conditionnelle.
Member_of{SidArray}
Teste si le tableau SID_AND_ATTRIBUTESdu contexte client contient tous les Identificateurs de sécurité (SID) dans la liste séparée par des virgules spécifiée par SidArray .
Pour autoriser les ACE, un SID de contexte client doit avoir l’attribut SE_GROUP_ENABLED défini pour être considéré comme une correspondance.
Pour refuser les ACE, un SID de contexte client doit avoir l’attribut SE_GROUP_ENABLED ou SE_GROUP_USE_FOR_DENY_ONLY défini pour être considéré comme une correspondance.
Le tableau SidArray peut contenir des chaînes SID (par exemple, « S-1-5-6 ») ou des alias SID (par exemple, « BA »

Attributs

Un attribut représente un élément dans le tableau AUTHZ_SECURITY_ATTRIBUTES_INFORMATION dans le contexte client. Un nom d’attribut peut contenir n’importe quel caractère alphanumérique et l’un des caractères « : », « / », « . » et « _ ».

Une valeur d’attribut peut être l’un des types suivants.

Type de valeur Description
Integer
Entier 64 bits en notation décimale ou hexadécimale.
Chaîne
Valeur de chaîne délimitée par des guillemets.
SID
SID(S-1-1-0) ou SID(BA). Doit être sur le RHS de Member_of ou de Device_Member_of.
BLOB
# suivi de nombres hexadécimaux. Si la longueur des nombres est impaire, le # est traduit en 0 pour le rendre pair. En outre, un # apparaissant ailleurs dans la valeur est traduit en 0.

Opérateurs

Les opérateurs suivants sont définis pour une utilisation dans les expressions conditionnelles pour tester les valeurs des attributs. Tous ces opérateurs sont binaires et sont utilisés sous la forme AttributeName Operator Value.

Opérateur Description
==
Définition conventionnelle.
!=
Définition conventionnelle.
<
Définition conventionnelle.
<=
Définition conventionnelle.
>
Définition conventionnelle.
>=
Définition conventionnelle.
Contains
TRUE si la valeur de l’attribut spécifié est un super-ensemble de la valeur spécifiée ; sinon, FALSE.
Any_of
TRUE si la valeur spécifiée est un super-ensemble de la valeur de l’attribut spécifié ; sinon, FALSE.

En outre, les opérateurs unaires Exists, Member_of et négation (!) sont définis comme décrit dans la table Expressions conditionnelles.

L’opérateur « Contains » doit être précédé et suivi d’un espace blanc, et l’opérateur « Any_of » doit être précédé d’un espace blanc.

Priorité des opérateurs

Les opérateurs sont évalués dans l’ordre de priorité suivant, avec des opérations de priorité égale évaluées de gauche à droite.

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

En outre, toute partie d’une expression conditionnelle peut être placée entre parenthèses. Les expressions entre parenthèses sont évaluées en premier.

Valeurs inconnues

Les résultats des expressions conditionnelles retournent parfois une valeur Unknown. Par exemple, l’une des opérations relationnelles retourne Unknown lorsque l’attribut spécifié n’existe pas.

Le tableau suivant décrit les résultats d’une opération AND logique entre deux expressions conditionnelles, ConditionalExpression1 et ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1 && ConditionalExpression2
VRAI
VRAI
VRAI
VRAI
FALSE
FALSE
VRAI
UNKNOWN
UNKNOWN
FALSE
VRAI
FALSE
FALSE
FALSE
FALSE
FALSE
UNKNOWN
FALSE
UNKNOWN
VRAI
UNKNOWN
UNKNOWN
FALSE
FALSE
UNKNOWN
UNKNOWN
UNKNOWN

Le tableau suivant décrit les résultats d’une opération OR logique entre deux expressions conditionnelles, ConditionalExpression1 et ConditionalExpression2.

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

La négation d’une expression conditionnelle avec une valeur UNKNOWN est également UNKNOWN.

Évaluation d’une ACE conditionnelle

Le tableau suivant décrit le résultat de la vérification d’accès d’une ACE conditionnelle en fonction de l’évaluation finale de l’expression conditionnelle.

Type ACE VRAI FALSE UNKNOWN
Autoriser
Autoriser
Ignorer ACE
Ignorer ACE
Deny
Deny
Ignorer ACE
Deny

Exemples

Les exemples suivants montrent comment les stratégies d’accès spécifiées sont représentées par une ACE conditionnelle définie à l’aide de SDDL.

Policy

Autorisez l’exécution à tout le monde si les deux conditions suivantes sont remplies :

  • Titre = PM
  • Division = Finance ou Division = Sales

SDDL

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

Policy

Autorisez l’exécution si l’un des projets de l’utilisateur intersecte les projets du fichier.

SDDL

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

Policy

Autoriser l’accès en lecture si l’utilisateur s’est connecté avec une carte à puce, est un opérateur de sauvegarde et se connecte à partir d’un ordinateur avec Bitlocker activé.

SDDL

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

[MS-DTYP] : Langage de description du descripteur de sécurité