Partilhar via


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

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

O SDDL para uma ACE condicional é o mesmo que para qualquer ACE, com a sintaxe da instrução condicional anexada ao final da cadeia de caracteres ACE. Para obter informações sobre SDDL, consulte Security Descriptor Definition Language.

O sinal "#" é sinônimo de "0" em atributos de recurso. Por exemplo, D:AI(XA; OICI;FA;;; WD; (OctetStringType==#1#2#3##)) é equivalente e interpretado como D:AI(XA; OICI;FA;;; WD; (OctetStringType==#01020300)).

Formato de cadeia de caracteres ACE condicional

Cada ACE em um descritor de segurança cadeia de caracteres é colocado entre parênteses. Os campos da ACE estão na seguinte ordem e estão separados por ponto-e-vírgula (;).

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

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

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

    Cadeia de caracteres do 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 seguintes elementos.

Elemento de expressão Descrição
AttributeName
Testa se o atributo especificado tem um valor diferente de zero.
existeAttributeName
Testa se o atributo especificado existe no contexto do cliente.
AttributeNameOperadorValor
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 de de Identificadores de Segurança (SIDs) na lista separada por vírgulas especificada por SidArray.
Para Permitir ACEs, um SID de contexto de cliente deve ter o atributo SE_GROUP_ENABLED definido para ser considerado uma correspondência.
Para Negar ACEs, um SID de contexto de cliente deve ter o atributo 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 quaisquer caracteres alfanuméricos e qualquer um dos caracteres ":", "/", ".", e "_".

Um valor de atributo pode ser qualquer um dos seguintes tipos.

Tipo de valor Descrição
Inteiro
Um inteiro de 64 bits em 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 em RHS de Member_of ou Device_Member_of.
BLOB
# seguido de números hexadecimais. Se o comprimento dos números for ímpar, então o # é traduzido para um 0 para torná-lo par. 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 de atributos. Todos eles são operadores binários e usados na forma 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, FALSO.
Any_of
TRUE se o valor especificado for um superconjunto do valor do atributo especificado; caso contrário, FALSO.

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

O operador "Contém" 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 do operador

Os operadores são avaliados na seguinte ordem de precedência, com operações de igual precedência 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 de Desconhecido. Por exemplo, qualquer uma das operações relacionais retorna Desconhecido quando o atributo especificado não existe.

A tabela a seguir descreve os resultados de uma operação lógica E entre duas expressões condicionais, ConditionalExpression1 e ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1&&ConditionalExpression2
VERDADEIRO
VERDADEIRO
VERDADEIRO
VERDADEIRO
FALSO
FALSO
VERDADEIRO
DESCONHECIDO
DESCONHECIDO
FALSO
VERDADEIRO
FALSO
FALSO
FALSO
FALSO
FALSO
DESCONHECIDO
FALSO
DESCONHECIDO
VERDADEIRO
DESCONHECIDO
DESCONHECIDO
FALSO
FALSO
DESCONHECIDO
DESCONHECIDO
DESCONHECIDO

A tabela a seguir descreve os resultados de uma operação lógica de OU entre duas expressões condicionais, ConditionalExpression1 e ConditionalExpression2.

ConditionalExpression1 ConditionalExpression2 ConditionalExpression1||ConditionalExpression2
VERDADEIRO
VERDADEIRO
VERDADEIRO
VERDADEIRO
FALSO
VERDADEIRO
VERDADEIRO
DESCONHECIDO
VERDADEIRO
FALSO
VERDADEIRO
VERDADEIRO
FALSO
FALSO
FALSO
FALSO
DESCONHECIDO
DESCONHECIDO
DESCONHECIDO
VERDADEIRO
VERDADEIRO
DESCONHECIDO
FALSO
DESCONHECIDO
DESCONHECIDO
DESCONHECIDO
DESCONHECIDO

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

Avaliação condicional da ECA

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

Tipo ACE VERDADEIRO FALSO DESCONHECIDO
Permitir
Permitir
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 uma ACE condicional definida usando SDDL.

Política

Permitir Executar para Todos se ambas as condições a seguir 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.Divisão=="Finanças" || @User.Division ==" Vendas")))

Política

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

SDDL

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

Política

Permita acesso de leitura se o usuário tiver feito login com um cartão inteligente, for um operador de backup e estiver se conectando a partir de uma máquina 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