sexta-feira, 13 de setembro de 2024

Enumeração de usuários e grupos do Active Directory

Em um ambiente corporativo, o Active Directory é o serviço de diretório mais utilizado para gerenciamento contas de usuários, grupos e permissões de rede.

Embora o Active Directory seja bastante robusto, ele possui algumas configurações padrão que normalmente são exploradas por invasores que já tenham acesso a uma conta de usuário comum, previamente comprometida.

É certo que, em algum momento o atacante buscará informações sobre contas altamente privilegiadas - como por exemplo, as pertencentes aos grupos "Domain Admins" e "Enterprise Admins" - e para isso, é necessário enumerar usuários e grupos no domínio.

Cenário

Imaginem que uma conta de usuário comum chamada "andre" tenha sido comprometida.

O invasor, agora com acesso ao sistema, tentará enumerar outras contas e grupos no Active Directory para posteriormente tentar uma escalação de privilégios.

Por padrão, qualquer usuário autenticado no domínio possui acesso de leitura ao Active Directory e consequentemente pode fazer essa enumeração.

O objetivo do invasor é encontrar contas com privilégios elevados e utilizar outros métodos para comprometer essas contas.

Por exemplo, ele pode testar a senha "Password1", que pode ser válida devido a políticas de senha fracas, por exemplo.

Este processo pode ser feito sem gerar alertas de bloqueio de contas, pois muitas vezes a enumeração de usuários é permitida por padrão para qualquer usuário autenticado.


Enumeração de Usuários e Grupos: Passo a Passo

Para esse artigo, efetuei logon com uma conta de usuário comum, denominada "andre", em uma estação de trabalho Windows 11 Enterprise, membro de um domínio denominado contoso.com.

Conforme abaixo, o comando "whoami" foi utilizado para exibir quem estava conectado, e o comando "systeminfo" foi utilizado para coletar evidencias do sistema operacional utilizado nessa simulação.



Um outra evidencia importante a apresentar, é que a conta "andre" não é membro de nenhum grupo altamente privilegiado.

Para isso, o comando "Whoami /groups | findstr -i "Builtin" pode nos ajudar.


O comando Whoami /groups lista todos os grupos dos quais o usuário faz parte, mostrando o nível de permissões de cada um.

Mas também podemos fazer essa consulta diretamente no "Active Directory Users and Computers".




Enumerando usuários e grupos do Active Directory

Logado com o usuário andre, utilizarei o comando "net user /domain" e dessa forma, obtenho uma lista de todos os usuários do domínio "contoso.com".



Mas o que interessa mesmo, é obter a lista de usuários membros de grupos privilegiados.

Para obter a lista de membros do grupo "Domain Admins", utilizo o comando "net group "domain admins" /domain".

Dessa forma, posso ver que, além da conta padrão "Administrator", os usuários "Axl" e "Paul" também são membros do grupo "Domain Admins".



Para listar os membros do grupo Enterprise Admins, utilizo o mesmo comando, trocando somente o nome do grupo. Nesse caso, será: "net group "Enterprise admins" /domain".



Como mitigar essa vulnerabilidade?

Para mitigar essa vulnerabilidade, é necessário negar a permissão de leitura no domínio. 

Podemos fazer isso de forma granular, inserindo explicitamente os usuários que terão essa permissão negada, mas a melhor forma é utilizar um grupo de segurança no Active Directory.

Para isso:

1- Criar um grupo de segurança no AD chamado "Desabilitar Enumeracao" (criatividade zero!!! ... 😂😂😂) e adicionar os usuários a esse grupo. Nesse exemplo, adicionei somente o usuário "andre" ao grupo.


2- Abra o  "Active Directory Users and Computers";

3- Na raiz do domínio, clique com o botão direito do mouse e selecione "Propriedades";



4- Na aba "Security", clique em "Add", e adicione o grupo recém criado. Após isso, negue explicitamente a permissão de "Read". Feito isso, clique em "OK".



3- Repetindo os Comandos Após a mitigação

Após a criação do grupo "Desabilitar enumeração" e a aplicação da permissão restritiva, o usuário "andre" tentará repetir os comandos de enumeração.

Para isso, é necessário efetuar logoff e logon novamente na estação de trabalho, para que um novo ticket seja emitido para o usuário "andre", contendo o SID do grupo recém criado.

Conforme evidencia abaixo, estou logado com o usuário andre (que não é membro de nenhum grupo privilegiado) e através do comando "whoami /groups", posso verificar que a conta é membro do grupo denominado "Desabilitar Enumeracao".


Agora, com o usuário andre, utilizarei novamente o comando "net user /domain" para tentar enumerar todos os usuários do domínio "contoso.com".



Observe que, o mesmo procedimento e comando que antes do bloqueio me permitiu listar todos os usuários do domínio, agora não permite mais.

Conforme abaixo, o mesmo ocorrerá ao tentar listar os membros dos grupos "Domain Admins" e "Enterprise Admins".




Ponto importante: Antes de implementar essa mitigação em larga escala, é importante saber quais são os usuários e grupos que DEVEM possuir permissão para tal enumeração e obviamente não inseri-los ao grupo criado para esse fim.

Além disso, é importante conhecer quais aplicações estão em execução no ambiente e que fazem enumerações legitimas no Active Directory, pois se as contas utilizadas por essas aplicações forem impedidas de enumerar, o funcionamento da aplicação pode ser prejudicado.


Conclusão

A enumeração de usuários e grupos no Active Directory é uma vulnerabilidade comumente explorada quando uma conta de usuário comum é comprometida.

Embora o Active Directory permita a enumeração por padrão, é possível mitigar esse risco restringindo permissões de leitura no domínio.

Medidas como criar grupos restritivos, aplicar políticas de senha robustas e monitorar o comportamento de contas de usuário são importantes para a proteção do ambiente.


Espero que tenham gostado!

Obrigado e até o próximo post.