Um Guia para Atributos Vinculados do Active Directory
Feb 20, 2017
O atributo vinculado do Active Directory é um tipo especial de atributo do Active Directory que é utilizado para descrever relações entre objetos. Este post explica o que são atributos vinculados e como eles funcionam.
Conteúdo relacionado selecionado:
O que faz com que um atributo seja um atributo vinculado?
Cada atributo no Active Directory é definido por um objeto AttributeSchema na partição do esquema do Active Directory. Os objetos AttributeSchema que definem atributos vinculados são os únicos objetos de esquema que possuem um atributo LinkID preenchido. Assim, identificar todos os atributos vinculados em um domínio é tão fácil quanto usar o PowerShell para procurar no esquema objetos com um LinkID preenchido, assim:
Get-ADObject -SearchBase (Get-ADRootDSE).SchemaNamingContext -LDAPFilter "(LinkID=*)"
Atributos vinculados geralmente existem em pares, um link direto e um link reverso, que é definido pelo valor do atributo LinkID:
- Forward link — O valor de LinkID é sempre um número inteiro positivo.
- Link de retorno — O valor de LinkID é sempre um ímpar inteiro positivo; de fato, é o valor do LinkID do link direto associado mais um.
Os atributos com os menores valores de LinkID são o atributo Member e o atributo MemberOf, que são usados para rastrear a associação a grupos no Active Directory. Então, vamos modificar nosso script PowerShell para limitar a saída a apenas esses dois atributos:
A saída nos informa vários fatos importantes sobre esses dois atributos:
- O valor de LinkID do atributo Member é 2, que é um número inteiro par. Isso significa que o atributo Member é um link direto.
- O valor LinkID do atributo MemberOf é 3, que é um número inteiro ímpar. Isso significa que o atributo MemberOf é um link reverso.
- O valor de LinkID do link reverso MemberOf é o valor de LinkID do link direto do atributo Member mais um (3 = 2 + 1). Isso significa que o atributo Member e o atributo MemberOf são atributos associados e vinculados.
Um script do PowerShell ligeiramente diferente pode ser usado para recuperar diretamente o nome do link associado de um atributo vinculado ou do link reverso, embora não informe explicitamente se o atributo é um link associado ou um link reverso. Você precisaria olhar para o valor do LinkID e determinar isso por conta própria.
Como funcionam os atributos vinculados ao Active Directory?
Agora que estabelecemos o que são atributos vinculados e como identificá-los, é hora de explorar o comportamento deles.
Os atributos vinculados armazenam informações sobre um relacionamento entre dois objetos, em contraste com os atributos convencionais do Active Directory, que armazenam informações sobre um objeto. Essa diferença funcional é refletida no fato de que o Active Directory armazena os valores dos atributos vinculados de maneira diferente de como armazena os valores de outros atributos.
Como os Atributos Vinculados são Armazenados
Os dados do Active Directory são armazenados no arquivo de banco de dados ntds.dit. Os valores dos atributos convencionais são armazenados em uma tabela chamada datatable. Atributos vinculados possuem sua própria tabela dedicada, apropriadamente chamada de link_table. Se dermos uma olhada dentro de um snapshot do arquivo de banco de dados ntds.dit do meu laboratório, podemos ver como o Active Directory armazena os valores dos atributos vinculados:
As referências de objeto na link_table utilizam a tag de nome distinto do objeto (DNT), que é na verdade a chave primária interna dos registros na datatable ntds.dit. Isso impede que alterações no nome distinto de um objeto exijam uma atualização em quaisquer entradas associadas à link_table.
A captura de tela destaca três campos importantes na link_table:
- link_DNT — Uma referência para um objeto de link direcional.
- backlink_DN — Uma referência ao objeto de back link associado.
- link_base — Uma referência ao LinkID do atributo de link direto. Este campo utiliza o valor do LinkID do link direto para identificar a relação que está sendo rastreada entre os dois objetos (embora, como você pode ver na captura de tela, os valores na tabela são na verdade o valor do LinkID dividido por 2).
Consequências Práticas desta Abordagem para Armazenar Atributos Vinculados
Embora essa abordagem de armazenamento possa parecer um pouco estranha, é um design realmente brilhante que resulta em algumas consequências práticas importantes:
- Os valores de link direto são armazenados; os valores de link inverso são construídos. Este é facilmente o conceito mais importante a ser absorvido desta discussão: Links inversos na verdade não armazenam informações. Uma vez que uma associação entre dois objetos é uma entidade única, o Active Directory não precisa armazenar mais de uma cópia de uma associação. Quando um link direto é consultado, o Active Directory pode simplesmente retornar as entradas de link_table onde o DNT do objeto consultado corresponde ao valor no campo link_DNT e o LinkID do link direto corresponde ao valor no campo link_base. Quando um link inverso é consultado, o Active Directory pode calcular seus valores retornando as entradas de link_table onde o DNT do objeto consultado corresponde ao valor no campo backlink_DNT e o LinkID do link direto associado (calculado subtraindo 1 do LinkID do link inverso) corresponde ao valor no campo link_base.
- Os valores de links diretos são graváveis; os valores de links inversos são somente leitura. Uma vez que você sabe que o Active Directory armazena apenas os valores dos links diretos, isso provavelmente parece óbvio. No entanto, tem uma consequência importante: Quando um atributo vinculado é modificado, o Active Directory atualiza o link direto, o que modifica o objeto que possui esse link. O link inverso, possuindo um valor construído somente leitura, nunca pode ser modificado, então o objeto possuindo o link inverso também não é modificado.
Para ilustrar por que isso é importante, vamos considerar adicionar um usuário a um grupo. Essa atualização modifica apenas o atributo Membro do grupo; o atributo MemberOf do usuário não é modificado. Como o objeto do grupo teve uma mudança material, os campos de metadados que refletem essa mudança (por exemplo, os atributos “ModifyTimeStamp” e “WhenChanged”) são atualizados. Esses mesmos campos de metadados são não atualizados no objeto do usuário porque, embora seu atributo MemberOf agora retorne um valor diferente, o atributo MemberOf em si não foi modificado. - Links para a frente são obrigatórios; links para trás são opcionais. Alguns artigos sobre atributos vinculados afirmam que atributos vinculados sempre têm tanto um link para a frente quanto um link para trás. Embora isso seja frequentemente verdade, a presença de um link para trás não é estritamente necessária. Na verdade, se usarmos o PowerShell para recuperar pares de atributos vinculados, podemos ver que nem todo link para a frente no meu laboratório tem um link para trás associado:
Benefícios desta Abordagem para Armazenar Atributos Vinculados
Lembra-se de como mencionei que a forma como os atributos vinculados são armazenados é meio genial? A abordagem do Active Directory para armazenar valores de atributos vinculados na verdade traz dois benefícios realmente significativos.
Primeiro, armazenar apenas os valores de links diretos e usá-los para calcular os valores associados de links inversos reduz o tamanho do banco de dados do Active Directory.
O outro benefício chave, que é um pouco menos óbvio, decorre do fato de que o Active Directory armazena cada associação individualmente. Uma vez que cada uma das associações de um link direto tem sua própria entrada na link_table, cada entrada pode manter seu próprio Número de Sequência de Atualização (USN). Esse comportamento é chamado de Linked Value Replication (LVR) e permite que o Active Directory replique cada associação individual independentemente. Por exemplo, se você adicionar um usuário a um grupo com 100 membros existentes, apenas a entrada do usuário recém-adicionado é replicada. Isso pode reduzir significativamente o volume de replicação necessário para propagar alterações aos atributos vinculados.
Fato Bônus
Before I tie a bow on all of this, there’s one other behavior that is worth mentioning: Linked attribute values are removed from deleted objects unless the AD Recycle Bin is enabled. When an object that has a linked attribute is deleted, even though Active Directory maintains the object itself for a time as a tombstone, the object’s associated link_table entries are also deleted. Enabling the Active Directory Recycle Bin changes this behavior and retains the associated link_table entries for the duration of the deleted object’s tombstone period.
Conclusão
Porque os atributos vinculados ao Active Directory são armazenados de forma diferente dos outros atributos do Active Directory, eles se comportam de maneira diferente. Isso é especialmente verdadeiro para atributos de link reverso. Se você deve absorver apenas uma coisa deste artigo, precisa ser o fato de que os links reversos são atributos construídos — seus valores não são armazenados diretamente e, como resultado, eles realmente não se comportam como outros atributos, especialmente no que diz respeito a atualizações. O Active Directory geralmente faz um trabalho muito bom ao ocultar seus comportamentos de back-end em prol de uma experiência de usuário consistente, mas entender essas diferenças subjacentes sobre atributos e suas consequências pode prevenir problemas.
Como a Netwrix pode ajudar
Proteja seu Active Directory de ponta a ponta com a solução de segurança Netwrix Active Directory security solution. Isso permitirá que você:
- Descubra riscos de segurança no Active Directory e priorize seus esforços de mitigação.
- Reforce as configurações de segurança em toda a sua infraestrutura de TI.
- Detecte e contenha rapidamente ameaças avançadas, como ataques de DCSync e Golden Ticket.
- Responda a ameaças conhecidas instantaneamente com opções de resposta automatizadas.
Minimize as interrupções nos negócios com uma rápida recuperação do Active Directory.
Compartilhar em
Saiba Mais
Sobre o autor
Joe Dibley
Pesquisador de Segurança
Pesquisador de Segurança na Netwrix e membro da Equipe de Pesquisa de Segurança da Netwrix. Joe é um especialista em Active Directory, Windows e uma ampla variedade de plataformas de software empresarial e tecnologias, Joe pesquisa novos riscos de segurança, técnicas de ataque complexas e as respectivas mitigações e detecções.
Saiba mais sobre este assunto
Leis de Privacidade de Dados por Estado: Abordagens Diferentes para a Proteção da Privacidade
Exemplo de Análise de Risco: Como Avaliar Riscos
O Triângulo da CIA e Sua Aplicação no Mundo Real
O que é Gerenciamento de Registros Eletrônicos?
Análise de Risco Quantitativa: Expectativa de Perda Anual