Lenguaje de definición de descriptor de seguridad para ACE condicionales

Una entrada de control de acceso (ACE) condicional permite evaluar una condición de acceso cuando se realiza una comprobación de acceso. El lenguaje de definición de descriptores de seguridad (SDDL) proporciona sintaxis para definir ACE condicionales en un formato de cadena.

El SDDL para una ACE condicional es el mismo que para cualquier ACE, con la sintaxis de la instrucción condicional anexada al final de la cadena de la ACE. Para más información, vea Lenguaje de definición de descriptores de seguridad.

El signo "#" es sinónimo de "0" en los atributos de recursos. Por ejemplo, D:AI(XA;OICI;FA;;;WD;(OctetStringType==#1#2#3##)) es equivalente y se interpreta como D:AI(XA;OICI;FA;;;WD;(OctetStringType==#01020300)).

Formato de cadena de ACE condicional

Cada ACE de una cadena de descriptor de seguridad se incluye entre paréntesis. Los campos de la ACE están en el orden siguiente y se separan mediante punto y coma (;).

TipoDeACE**;MarcasDeACE;Derechos;GUIDDeObjeto;GUIDDeObjetoHeredado;SIDDeCuenta;(ExpresiónCondicional)**

Los campos son como se describe en Cadenas de ACE, con las siguientes excepciones.

  • El campo TipoDeACE puede ser una de las cadenas siguientes.

    Tipo de cadena de ACE Constante en Sddl.h Valor de TipoDeACE
    "XA"
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    "XD"
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • La cadena ACE incluye una o varias expresiones condicionales entre paréntesis al final de la cadena.

Expresiones condicionales

Una expresión condicional puede incluir cualquiera de los elementos siguientes.

Elemento de expresión Descripción
AttributeName
Comprueba si el atributo especificado tiene un valor distinto de cero.
existsNombreDeAtributo
Comprueba si el atributo especificado existe en el contexto del cliente.
NombreDeAtributoOperadorValor
Devuelve el estado de la operación especificada.
ExpresiónCondicional**||**ExpresiónCondicional
Comprueba si cualquiera de las expresiones condicionales especificadas es true.
ExpresiónCondicional&&ExpresiónCondicional
Comprueba si las dos expresiones condicionales especificadas son true.
!(ExpresiónCondicional)
Lo contrario de una expresión condicional.
Member_of{MatrizDeSID}
Comprueba si la matrizSID_AND_ATTRIBUTES del contexto de cliente contiene todos los identificadores de seguridad (SID) de la lista separada por comas especificada por SidArray.
Para las ACE Permitir, un SID de contexto de cliente debe tener establecido el atributo SE_GROUP_ENABLED para que se considere una coincidencia.
El caso de las ACE de denegación, un SID de contexto de cliente debe tener el atributo SE_GROUP_ENABLED o SE_GROUP_USE_FOR_DENY_ONLY establecido para que se considere una coincidencia.
La matriz matrizDeSID puede contener cadenas de SID (por ejemplo, "S-1-5-6") o alias de SID (por ejemplo, "BA"

Atributos

Un atributo representa un elemento de la matriz AUTHZ_SECURITY_ATTRIBUTES_INFORMATION en el contexto del cliente. Un nombre de atributo puede contener cualquier carácter alfanumérico y cualquiera de los caracteres ":", "/", "." y "_".

Un valor de atributo puede ser cualquiera de los tipos siguientes.

Tipo de valor Descripción
Entero
Entero de 64 bits en notación decimal o hexadecimal.
Cadena
Valor de cadena delimitado por comillas.
SID
SID(S-1-1-0) o SID(BA). Tiene que estar en el RHS de Member_of o Device_Member_of.
BLOB
# seguido de números hexadecimales. Si la longitud de los números es impar, el número se traduce a 0 para que sea par. También se traduce a 0 cualquier # que aparezca en otro lugar del valor.

Operadores

Los operadores siguientes se definen para su uso en expresiones condicionales a fin de probar los valores de los atributos. Todos son operadores binarios y se usan con el formato NombreDeAtributoOperadorValor.

Operador Descripción
==
Definición convencional.
!=
Definición convencional.
<
Definición convencional.
<=
Definición convencional.
>
Definición convencional.
>=
Definición convencional.
Contiene
TRUE si el valor del atributo especificado es un superconjunto del valor especificado; de lo contrario, FALSE.
Any_of
TRUE si el valor especificado es un superconjunto del valor del atributo especificado; de lo contrario, FALSE.

Además, los operadores unarios Exists, Member_of y de negación (!) se definen como se describe en la tabla Expresiones condicionales.

El operador "Contains" debe ir precedido y seguido de espacios en blanco, y el operador "Any_of" debe ir precedido por espacios en blanco.

Prioridad de los operadores

Los operadores se evalúan en el siguiente orden de prioridad, y las operaciones de igualdad de prioridad se evalúan de izquierda a derecha.

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

Además, cualquier parte de una expresión condicional se puede incluir entre paréntesis. Las expresiones entre paréntesis se evalúan primero.

Valores desconocidos

Los resultados de las expresiones condicionales a veces devuelven un valor de Unknown. Por ejemplo, cualquiera de las operaciones relacionales devuelve Unknown cuando el atributo especificado no existe.

En la tabla siguiente se describen los resultados de una operación AND lógica entre dos expresiones condicionales, ExpresiónCondicional1y ExpresiónCondicional2.

ExpresiónCondicional1 ExpresiónCondicional2 ExpresiónCondicional1&&ExpresiónCondicional2
VERDADERO
VERDADERO
VERDADERO
VERDADERO
FALSO
FALSE
VERDADERO
UNKNOWN
DESCONOCIDO
FALSO
VERDADERO
FALSO
FALSO
FALSO
FALSO
FALSO
DESCONOCIDO
FALSO
DESCONOCIDO
VERDADERO
UNKNOWN
DESCONOCIDO
FALSE
FALSO
UNKNOWN
DESCONOCIDO
DESCONOCIDO

En la tabla siguiente se describen los resultados de una operación OR lógica entre dos expresiones condicionales, ExpresiónCondicional1y ExpresiónCondicional2.

ExpresiónCondicional1 ExpresiónCondicional2 ExpresiónCondicional1||ExpresiónCondicional2
VERDADERO
VERDADERO
VERDADERO
VERDADERO
FALSE
VERDADERO
VERDADERO
DESCONOCIDO
VERDADERO
FALSE
VERDADERO
VERDADERO
FALSO
FALSO
FALSO
FALSO
UNKNOWN
DESCONOCIDO
UNKNOWN
TRUE
VERDADERO
DESCONOCIDO
FALSO
UNKNOWN
DESCONOCIDO
DESCONOCIDO
DESCONOCIDO

La negación de una expresión condicional con un valor UNKNOWN también es UNKNOWN.

Evaluación de ACE condicionales

En la tabla siguiente se describe el resultado de la comprobación de acceso de una ACE condicional en función de la evaluación final de la expresión condicional.

Tipo de ACE VERDADERO FALSE DESCONOCIDO
Permitir
Permitir
Ignore ACE
Ignore ACE
Denegar
Denegar
Ignore ACE
Denegar

Ejemplos

En los ejemplos siguientes se muestra cómo se representan las directivas de acceso especificadas con una ACE condicional definida mediante SDDL.

Directiva

Permitir ejecutar a todos si se cumplen las dos condiciones siguientes:

  • Puesto = PM
  • División = Finanzas o División = Ventas

SDDL

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

Directiva

Permitir la ejecución si alguno de los proyectos del usuario forma intersección con los proyectos del archivo.

SDDL

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

Directiva

Permitir el acceso de lectura si el usuario ha iniciado sesión con una tarjeta inteligente, es un operador de copia de seguridad y se conecta desde una máquina con Bitlocker habilitado.

SDDL

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

[MS-DTYP]: Lenguaje de descripción de descriptor de seguridad