Olá!
Recentemente, escrevi sobre como um atacante pode utilizar o AdminSDHolder para manter persistência em um domínio do Active Directory.
Quem não leu esse artigo, clique aqui.
Assim, auditar e monitorar alterações no AdminSDHolder é uma tarefa importante em ambientes Active Directory, especialmente para garantir a segurança e a integridade dos grupos e contas privilegiadas.
Recapitulando: O que é o AdminSDHolder?
- O AdminSDHolder é um contêiner no Active Directory localizado em "CN=AdminSDHolder,CN=System,DC=<domínio>,DC=<com";
- A cada 60 minutos (por padrão), o processo SDProp (Security Descriptor Propagator) sincroniza as permissões do AdminSDHolder com os objetos protegidos.
1- Como auditar e monitorar alterações no AdminSDHolder?
Para auditar alterações no AdminSDHolder, é necessário habilitar a auditoria no Active Directory.
Para isso:
1. Abra o Group Policy Management Console (GPMC);
2. Localize e edite a Default Domain Controllers Policy;
3. Navegue até "Computer Configuration > Policies > Windows Settings > Security Settings > Advanced Audit Policy Configuration > Audit Policies > DS Access";
4. Habilite as seguintes políticas de auditoria:
- Audit Directory Service Changes (para registrar alterações nos objetos do AD).
- Audit Directory Service Access (para registrar tentativas de acesso aos objetos do AD).
2- Habilite auditoria no Objeto AdminSDHolder
1- Abra o Active Directory Users and Computers;
2- Clique em View > Advanced Features;
3- Navegue até o objeto AdminSDHolder (CN=AdminSDHolder,CN=System,DC=domain,DC=com);
4- Clique com o botão direito do mouse no objeto AdminSDHolder e selecione Properties;
5- Clique na guia "Security" e clique em "Advanced";
6- Clique na guia "Auditing", selecione "Add" e adicione uma nova entrada de auditoria:
Principal: Everyone (ou um grupo / usuário específico).
Type: All (ou apenas Success / Failure, dependendo do que você deseja auditar).
Permissions: Marque Full Control ou Write permissions.
7- Clique em OK para aplicar as alterações.
Isso garantirá que todas as alterações nas permissões do AdminSDHolder sejam registradas com mais detalhes.
3- Como visualizar as permissões atuais do AdminSDHolder?
1- Abra o PowerShell com privilégios administrativos.
2- Execute o seguinte script para visualizar as permissões atuais do AdminSDHolder:
*******
$AdminSDHolder = Get-ADObject -Identity "CN=AdminSDHolder,CN=System,DC=contoso,DC=com" -Properties nTSecurityDescriptor
$AdminSDHolder.nTSecurityDescriptor.Access
*******
Nota: Substitua "DC=contoso,DC=com" pelo distinguished name do seu domínio.
3- Analise as permissões listadas para garantir que apenas usuários e grupos adequados possuam acesso.
4- Buscando alterações no AdminSDHolder
Para consultar e monitorar alterações, consultamos o Event Viewer. Podemos ainda configurar alertas ou encaminharmos os logs para uma ferramenta de SIEM (como por exemplo, o Microsoft Sentinel).
4.1 - Abra o Event Viewer;
4.2 - Filtre os eventos com o ID 5136, que indica alterações em objetos do Active Directory. Para isso, navegue até Windows Logs > Security.
A seguir, clique com o botão direito do mouse em "Security" e selecione a opção "Filter Current Log".
4.3 - Conforme abaixo, filtre pelo event ID 5136. Isso nos trará diversos eventos não necessariamente relacionados ao AdminSDHolder.
4.4 - Para sermos mais assertivos na busca por eventos exclusivamente relacionados ao AdminSDHolder, clique em "XML" e marque a opção "Edit query manually", e insira a query abaixo:
*******
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">
*[System[(EventID=5136)]]
and
*[EventData[Data[@Name='ObjectDN'] and Data='CN=AdminSDHolder,CN=System,DC=Contoso,DC=com']]
</Select>
</Query>
</QueryList>
*******
Nota: Ajuste o Distinguished Name do AdminsSDHolder conforme sua realidade.
4.5 - Clique em OK. Isso fará com que somente eventos 5136 que contenham o distinguished name do AdminSDHolder sejam exibidos.
4.6 - Ao clicar no evento, veremos informações conforme abaixo.
Nesse exemplo, o log informa que houve uma alteração relacionada a adição de permissão ao AdminSDHolder, mas não informa explicitamente quem foi adicionado.
Essa é realmente a parte ruim desse processo.
Uma alternativa é listarmos as permissões padrão do nosso AdminSDHolder e armazena-las em local seguro.
Quando um evento de alteração for gerado, comparamos as permissões presentes no arquivo previamente criado com as permissões vigentes no AdminSDHolder.
Com scripts em powershell, podemos chegar a algo semelhante a imagem abaixo.
Observem ainda que o log 5136 nos traz alguns SIDs, como por exemplo, S-1-5-21-2352761055-477936422-3757590054-519, S-1-5-21-2352761055-477936422-3757590054-1124, S-1-5-21-2352761055-477936422-3757590054-1129 e S-1-5-21-2352761055-477936422-3757590054-1156.
Esses SIDs representam usuários ou grupos do domínio que possuem permissão no AdminSDHolder.
4.7 - Podemos usar o script abaixo para buscar o ultimo evento 5136 gerado, ler o conteúdo do logs e automaticamente converter os SIDs em nomes amigáveis:
***************
# Importar o módulo Active Directory
Import-Module ActiveDirectory
# Definir o texto a ser filtrado no log
$FilterText = "CN=AdminSDHolder,CN=System,DC=Contoso,DC=com"
# Buscar o último evento 5136 que contém o texto especificado
$Event = Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=5136)]] and *[EventData[Data and Data='$FilterText']]" -MaxEvents 1
# Verificar se o evento foi encontrado
if (-not $Event) {
Write-Host "Nenhum evento 5136 encontrado com o texto: $FilterText"
exit
}
# Converter o evento para XML para facilitar a leitura
$EventXML = [xml]$Event.ToXml()
# Extrair o campo "AttributeValue" do evento
$AttributeValue = $EventXML.Event.EventData.Data | Where-Object { $_.Name -eq "AttributeValue" } | Select-Object -ExpandProperty "#text"
# Expressão regular para encontrar SIDs no formato "S-1-5-..."
$SIDPattern = "S-1-5-\d+(-\d+)+"
# Encontrar todos os SIDs no campo "AttributeValue"
$SIDs = [regex]::Matches($AttributeValue, $SIDPattern) | ForEach-Object { $_.Value }
# Array para armazenar os resultados
$Results = @()
# Converter cada SID para um nome amigável
foreach ($SID in $SIDs) {
try {
# Converter o SID para um nome amigável
$Obj = Get-ADObject -Filter { objectSid -eq $SID } -Properties Name
if ($Obj) {
$Results += [PSCustomObject]@{
SID = $SID
Name = $Obj.Name
}
} else {
$Results += [PSCustomObject]@{
SID = $SID
Name = "N/A (SID não encontrado)"
}
}
} catch {
$Results += [PSCustomObject]@{
SID = $SID
Name = "N/A (Erro ao buscar SID)"
}
}
}
# Exibir os resultados
$Results | Format-Table -AutoSize
***************
A saída do script será algo semelhante a isso:
Dessa forma, sabendo quais são as permissões padrão do AdminSDHolder, podemos facilmente identificar anomalias.
5.2 - Clique com o botão direito do mouse em "ADSI Edit" e clique em "Connect to ...";
5.4 - Expanda a arvore até chegar no conteiner "AdminSDHolder". Clique com o botão direito do mouse sob ele e a seguir, clique em "Properties".
6- Monitorando alterações
7- Conclusão
A auditoria e monitoração do AdminSDHolder são práticas essenciais para garantir a segurança e a integridade do Active Directory (AD) em ambientes corporativos.
O AdminSDHolder, como um objeto crítico que define as permissões padrão para contas e grupos privilegiados, é um alvo comum de atacantes para manutenção da persistência.
Portanto, a implementação de processos robustos de auditoria e monitoração não só ajuda a identificar alterações não autorizadas, mas também permite uma resposta rápida a possíveis ameaças.
Neste artigo, exploramos técnicas para auditar e monitorar alterações no AdminSDHolder, incluindo a configuração de políticas de auditoria no AD e o uso de scripts PowerShell para extrair e analisar permissões.
Além disso, destacamos a importância de converter SIDs em nomes amigáveis para facilitar a interpretação dos logs e a identificação de usuários ou grupos afetados.
A combinação de ferramentas nativas do Windows, como o Event Viewer e o PowerShell, com práticas de segurança proativas, como a revisão regular de permissões e a configuração de alertas automatizados, proporciona uma camada adicional de proteção contra ameaças.
A integração dessas práticas com soluções de SIEM (Security Information and Event Management) pode ainda ampliar a visibilidade e a capacidade de resposta em ambientes complexos.
Abraço
Ándré Martins





