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
- Expressões condicionais
- Atributos
- Operadores
- Precedência de operador
- Valores desconhecidos
- Avaliação condicional do ACE
- Exemplos
- Tópicos relacionados
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. |
exists AttributeName |
Testa se o atributo especificado existe no contexto do cliente. |
AttributeName Operator Value |
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 AttributeName Operator Value.
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.
- Existe, Member_of
- Contém, Any_of
- ==, !=, <, <=, >, >=
- !
- &&
- ||
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))