quarta-feira, 18 de setembro de 2024

Além do Óbvio: Utilizando o AdminSDHolder para manter acesso duradouro ao Active Directory


Introdução

Há algum tempo, escrevi sobre o AdminSDHolder e o processo SDProp.

Aos que não leram esse artigo, clique aqui.

Hoje, mostrarei como um atacante pode utilizar esse recurso para manter a persistência no ambiente.

Quando um invasor compromete o Active Directory, seu objetivo é permanecer oculto e manter seu acesso pelo maior tempo possível.

Isso dará a ele o tempo e as condições necessárias para atingir seu objetivo e invariavelmente gerar danos catastróficos aos ambientes atacados.

A persistência é alcançada por meio de técnicas que permitem que um invasor mantenha controle contínuo sobre o ambiente.

Entre as maneiras de manter a persistência no Active Directory temos:

Concessão de Permissões: O invasor pode conceder permissões elevadas  a uma conta pré-existente. Muitas vezes, a conta utilizada é uma conta acima de qualquer suspeita, o que torna a detecção mais difícil.

Criação de Contas de Administrador: O invasor pode criar uma nova conta de administrador no Active Directory, concedendo a essa conta (e, consequentemente a si mesmo) privilégios elevados.

Replicação de Objetos: Uma tática mais avançada envolve replicar um objeto inteiro do AD para um controlador de domínio falso, permitindo que o invasor controle esse objeto sem ser detectado2.

Nesse artigo, mostrarei como isso funciona na pratica, utilizando o AdminSDHolder. 

Aqui, me focarei no primeiro caso: Concessão de Permissões.

Ponto importante: Isso NÃO deve ser utilizado para NENHUM outro fim, senão estudos e a proteção dos mais diversos ambientes tecnológicos que utilizam o Active Directory.


Ambiente de testes

Para essa simulação, criei em um ambiente virtual uma foresta e domínio do Active Directory chamado "Contoso.com", executando o Windows Server 2022 Datacenter, e inseri como membro desse domínio uma estação de trabalho Windows 11 Enterprise com o RSAT instalado.

Não é objetivo desse artigo ensinar como instalar o Windows Server, Windows Client e nem orientar a criação de uma nova floresta do Active Directory.


Ainda assim, os links abaixo lhe ajudará na criação do seu ambiente de estudos:

Download da versão de avaliação do Windows Server 2022: Windows Server 2022 | Centro de Avaliação da Microsoft

Instalação do Windows Server 2022: Implantação, configuração e administração do Windows Server - Training | Microsoft Learn

Download da versão de avaliação do Windows 11: Download Windows 11 (microsoft.com)


Procedimento

Para essa simulação, estou utilizando uma conta privilegiada supostamente comprometida em fases anteriores do ataque.

Lembre-se de que o atacante, em fases anteriores pode enumerar todas as contas do domínio ou somente contas que sejam membros de grupos administrativos e, dessa forma tentar comprometer uma ou mais contas.

Publiquei um artigo bem legal sobre enumeração de contas no Active Directory e como se proteger. Se você não leu, clique aqui antes de prosseguir.

Assim, efetuei logon com uma conta de usuário privilegiada padrão, denominada "administrator" (SID 500), em um controlador de domínio Windows Server 2022 Datacenter, membro de um domínio denominado contoso.com.



1- Abra o  "Active Directory Users and Computers" (dsa.msc);


2- Clique em "View" e a seguir clique em "Advanced Features";




3- Expanda o nome do domínio, clique em "SYSTEM" e a seguir clique com o botão direito do mouse em "AdminSDHolder" e a seguir, clique em "Properties".



4- Nessa simulação, utilizarei uma conta de usuário comum denominada "andre".

Conforme abaixo, essa conta não é membro de nenhum grupo altamente privilegiado.


5- Clique na guia "Security" do objeto "AdminSDHolder" e adicione uma conta de usuário não privilegiada (ou grupo) às permissões de objeto e conceda permissão de "Full Control".


6- Execute o processo "SDProp" manualmente. Para isso:

  • No controlador de domínio que hospeda o mestre de operação (FSMO) PDC Emulator, inicie "Ldp.exe". Para isso, clique em "Start" \ "Run" \ digite "ldp.exe" e clique em OK.


Observação: Não é necessário estar conectado diretamente no PDC Emulator, pois o utilitário ldp.exe permite que se faça conexão remota para outros controladores de domínio.

  • Na caixa de diálogo Ldp, clique em "Connection" e a seguir, clique em "Connect".


  • Na caixa de diálogo "Connect", digite o nome do controlador de domínio que contém a função PDCe (PDC Emulator) e clique em OK.


Após conectado, imagem semelhante a evidenciada abaixo será exibida.


  • Clique novamente em "Connection" e a seguir clique em "Bind".



  • Na guia "Bind", digite as credenciais de uma conta de usuário que tenha permissão para modificar o objeto rootDSE.

Nesse exemplo, já estou conectado com esse usuário. Assim, basta manter selecionada a opção "Bind as currently logged on user" e clicar em OK.


Se houver êxito, aparecerá imagem semelhante a evidencia abaixo.


  • Concluída a etapa anterior, clique em "Browse" e a seguir clique em "Modify".
  • Na caixa de diálogo "Modify", deixe o campo DN em branco. No campo "Edit Entry Attribute", digite "RunProtectAdminGroupsTask" e, no campo "Values", digite 1.
  • Clique em "Enter" para preencher a lista de entradas, e depois clique em "Run".


Após isso, feche a caixa de dialogo "Modify".

Observação - 01: Por padrão, o processo SDProp é executado a cada 60 minutos no controlador de domínio que hospeda a função de PDC Emulator. Assim, a execução manual do SDProp não é mandatória. Basta ter um pouco de paciência e aguardar a execução automática.

Observação - 02: O intervalo padrão para a execução do SDProp pode ser alterado adicionando uma chave do tipo DWORD denominada "AdminSDProtectFrequency" em "HKLM\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" e definindo o novo intervalo em segundos.


7- Observe agora que a conta inserida no "AdminSDHolder" (andre) recebeu permissão de controle total não só na conta do administrator padrão, mas também na conta do KRBTGT, no grupo "Domain Admins" e nos demais os grupos protegidos pelo AdminSDHolder.

Isso significa que, embora essa conta não seja membro direto ou indireto de nenhum grupo privilegiado, a partir de agora, ela pode modificar os membros dos grupos protegidos pelo AdminSDHolder e, inclusive inserir a si própria como membro desses grupos. 

E aí, a dor de cabeça pode ser grande!!!

Vejamos abaixo a nova permissão refletida em alguns grupos protegidos pelo AdminSDHolder.


 


  


Agora, vamos para a parte que ninguém mostra!


1- Com a conta denominada "andre" (que não é membro de nenhum grupo privilegiado), me conectei a uma estação de trabalho Windows 11 Enterprise que possui as ferramentas de administração do Active Directory instalada.



2- Na estação de trabalho, abra o "Active Directory Users and Computers" (dsa.msc). Para isso, clique em "Iniciar" \ "Executar" \ digite "dsa.msc" e clique em OK.

                                  


3- No "Active Directory Users and Computers", localize o grupo "Enterprise Admins", clique com o botão direito do mouse sob o grupo e selecione a opção "Propriedades".




4- Na guia "Membros", clique em "Adicionar".


5- Adicione a conta de usuário que até agora não é membro de nenhum grupo privilegiado e que recebeu permissão de "Controle Total" no objeto "AdminSDHolder". Após isso clique em OK duas vezes seguidas.


6- Você pode estar pensando:


Não tem problema!!!

Podemos usar o comando: Add-ADGroupMember -Identity "Domain Admins" -Members andre e dessa forma, uma conta não privilegiada se adicionará ao grupo "Domain Admins".

7- E você pode estar pensando:


Não tem problema!!!

Vamos pelo mais básico: o bom e velho comando net group "Schema Admins" andre /add /domain.

E o resultado será o mesmo!!!

Terei adicionado a minha própria conta ao grupo "Schema Admins".



8- Quando uma conta é inserida a um grupo, é necessário efetuar logoff e um novo logon para que um novo ticket seja emitido e que esse ticket contenha o SID dos grupos aos quais a conta foi inserida.


9- Após o logon, utilizaremos novamente o comando "Get-ADUser andre -Property memberof" para obtermos a informação sobre associação de grupos da conta andre.

Observe que agora a conta "andre" é membro de 03 grupos altamente privilegiados.


10- Com esse método o atacante pode simplesmente resetar a senha do administrator!!!

Vejamos:

Para essa nova simulação, eu removi a conta do usuário andre dos 03 grupos altamente privilegiados, efetuei logoff e um novo logon na estação Windows 11.

Agora estou logado com uma conta comum, certo?

Errado!!!

Essa conta não é membro de nenhum grupo privilegiado, mas lembre-se de que ela recebeu permissão de controle total no AdminSDHolder!!!

E, consequentemente, isso concede a ela controle total na conta do administrator!!!

Para resetar a senha do administrator do domínio, sem ser membro de nenhum grupo privilegiado, basta executar o comando Set-ADAccountPassword -Identity administrator -Reset e alterar a senha.


E sim, essa alteração de senha pode ser efetuada por outros meios além desse comando em powershell.

Conclusão

Nesse artigo, vimos passo a passo como o AdminSDHolder pode ser utilizado para que um atacante se mantenha em um ambiente previamente comprometido.

Esse é um método simples e EXTREMAMENTE eficaz, visto que pouquíssimos administradores do Active Directory conhecem de fato o que é o AdminSDHolder, o processo SDProp e o atributo AdminCount (já mencionado em outro artigo).

Ao entender como o AdminSDHolder funciona, como ele afeta as permissões dos objetos por ele protegidos, e principalmente como um atacante age para se manter no ambiente, você torna-se melhor preparado para proteger esse ambiente adequadamente.

No próximo post falarei sobre como monitorar as ACLs do AdminSDHolder e dessa forma se tornar capaz de detectar alterações.

Lembre-se: Não podemos proteger o que desconhecemos!!!

Espero que tenham gostado e que esse conteúdo contribua de alguma forma para a disseminação do conhecimento na comunidade técnica.

Abraço

Ándré Martins