Linguagem de definição de descritor de segurança para ACEs condicionais

Uma entrada de controle de acesso condicional (ACE) permite que uma condição de acesso seja avaliada quando uma verificação de acesso é executada. A SDDL (linguagem de definição do descritor de segurança) fornece sintaxe para definir ACEs condicionais em um formato de cadeia de caracteres.

O SDDL para um ACE condicional é o mesmo de qualquer ACE, com a sintaxe da instrução condicional acrescentada ao final da cadeia de caracteres ACE. Para obter informações sobre o SDDL, consulte a Linguagem de Definição do Descritor de Segurança.

O sinal "#" é sinônimo de "0" em atributos de recurso. Por exemplo, D:AI(XA;OICI;FA;;;WD;(OctetStringType==#1#2#3##)) is equivalent to and interpreted as D:AI(XA;OICI;FA;;;WD;(OctetStringType==#01020300)).

Formato de cadeia de caracteres ACE condicional

Cada ACE em uma cadeia de caracteres de descritor de segurança está entre parênteses. Os campos do ACE estão na ordem a seguir e são separados por ponto-e-vírgula (;).

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

Os campos são conforme descrito em Cadeias de Caracteres ACE, com as seguintes exceções.

  • O campo AceType pode ser uma das cadeias de caracteres a seguir.

    Cadeia de caracteres de tipo ACE Constante em Sddl.h Valor AceType
    "XA"
    SDDL_CALLBACK_ACCESS_ALLOWED
    ACCESS_ALLOWED_CALLBACK_ACE_TYPE
    "XD"
    SDDL_CALLBACK_ACCESS_DENIED
    ACCESS_DENIED_CALLBACK_ACE_TYPE
  • A cadeia de caracteres ACE inclui uma ou mais expressões condicionais, entre parênteses no final da cadeia de caracteres.

Expressões condicionais

Uma expressão condicional pode incluir qualquer um dos elementos a seguir.

Elemento Expression Descrição
AttributeName
Testa se o atributo especificado tem um valor diferente de zero.
existsAttributeName
Testa se o atributo especificado existe no contexto do cliente.
Valor do operadorAttributeName
Retorna o resultado da operação especificada.
ConditionalExpression**||**ConditionalExpression
Testa se uma das expressões condicionais especificadas é verdadeira.
ConditionalExpression&&ConditionalExpression
Testa se ambas as expressões condicionais especificadas são verdadeiras.
!(ConditionalExpression)
O inverso de uma expressão condicional.
Member_of{SidArray}
Testa se a matriz SID_AND_ATTRIBUTES do contexto do cliente contém todos os SIDs (Identificadores de Segurança) na lista separada por vírgulas especificada por SidArray.
Para Permitir ACEs, um SID de contexto do cliente deve ter o atributo SE_GROUP_ENABLED definido para ser considerado uma correspondência.
Para NEGAR ACEs, um SID de contexto do cliente deve ter o SE_GROUP_ENABLED ou o atributo SE_GROUP_USE_FOR_DENY_ONLY definido para ser considerado uma correspondência.
A matriz SidArray pode conter cadeias de caracteres SID (por exemplo, "S-1-5-6") ou aliases SID (por exemplo, "BA"

Atributos

Um atributo representa um elemento na matriz AUTHZ_SECURITY_ATTRIBUTES_INFORMATION no contexto do cliente. Um nome de atributo pode conter caracteres alfanuméricos e qualquer um dos caracteres ":", "/", "." e "_".

Um valor de atributo pode ser qualquer um dos tipos a seguir.

Tipo de Valor Descrição
Inteiro
Um inteiro de 64 bits na notação decimal ou hexadecimal.
String
Um valor de cadeia de caracteres delimitado por aspas.
SID
SID(S-1-1-0) ou SID(BA). Tem que estar no RHS de Member_of ou Device_Member_of.
BLOB
# seguido por números hexadecimal. Se o comprimento dos números for ímpar, o # será convertido em um 0 para torná-lo uniforme. Além disso, um #que aparece em outro lugar no valor é traduzido para um 0.

Operadores

Os operadores a seguir são definidos para uso em expressões condicionais para testar os valores dos atributos. Todos eles são operadores binários e usados no formato AttributeNameOperatorValue.

Operador Descrição
==
Definição convencional.
!=
Definição convencional.
<
Definição convencional.
<=
Definição convencional.
>
Definição convencional.
>=
Definição convencional.
Contém
TRUE se o valor do atributo especificado for um superconjunto do valor especificado; caso contrário, FALSE.
Any_of
TRUE se o valor especificado for um superconjunto do valor do atributo especificado; caso contrário, FALSE.

Além disso, os operadores unários Existem, Member_of e negação (!) são definidos conforme descrito na tabela Expressões Condicionais.

O operador "Contains" deve ser precedido e seguido por espaço em branco e o operador "Any_of" deve ser precedido por espaço em branco.

Precedência de operador

Os operadores são avaliados na seguinte ordem de precedência, com operações de precedência igual sendo avaliadas da esquerda para a direita.

  1. Existe, Member_of
  2. Contém, Any_of
  3. ==, !=, <, <=, >, >=
  4. !
  5. &&
  6. ||

Além disso, qualquer parte de uma expressão condicional pode ser colocada entre parênteses. As expressões entre parênteses são avaliadas primeiro.

Valores desconhecidos

Os resultados de expressões condicionais às vezes retornam um valor desconhecido. Por exemplo, qualquer uma das operações relacionais retornará Desconhecido quando o atributo especificado não existir.

A tabela a seguir descreve os resultados de uma operação lógica AND entre duas expressões condicionais, ConditionalExpression1 e 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

A tabela a seguir descreve os resultados de uma operação lógica OR entre duas expressões condicionais, ConditionalExpression1 e 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

A negação de uma expressão condicional com um valor de UNKNOWN também é UNKNOWN.

Avaliação condicional do ACE

A tabela a seguir descreve o resultado da verificação de acesso de um ACE condicional, dependendo da avaliação final da expressão condicional.

Tipo ACE TRUE FALSE DESCONHECIDO
Allow
Allow
Ignorar ACE
Ignorar ACE
Negar
Negar
Ignorar ACE
Negar

Exemplos

Os exemplos a seguir mostram como as políticas de acesso especificadas são representadas por um ACE condicional definido usando SDDL.

Policy

Permitir Executar a Todos se ambas as seguintes condições forem atendidas:

  • Título = PM
  • Divisão = Finanças ou Divisão = Vendas

SDDL

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

Policy

Permitir a execução se qualquer um dos projetos do usuário se cruzar com os projetos do arquivo.

SDDL

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

Policy

Permitir acesso de leitura se o usuário tiver feito logon com um cartão inteligente, for um operador de backup e estiver se conectando de um computador com o Bitlocker habilitado.

SDDL

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

[MS-DTYP]: Linguagem de descrição do descritor de segurança