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
- Expressions conditionnelles
- Attributs
- Opérateurs
- Priorité des opérateurs
- Valeurs inconnues
- Évaluation d’une ACE conditionnelle
- Exemples
- Rubriques connexes
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.
- Exists, Member_of
- Contains, Any_of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
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))