
Ferramenta para descobrir caminhos de ataque de Delegação Restrita Baseada em Recursos em ambientes Active Directory
Ferramenta para descobrir caminhos de ataque de Delegação Restrita Baseada em Recursos em Ambientes Active Directory
Baseado quase inteiramente nos excelentes posts de blog "Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory" por Elad Shamir e "A Case Study in Wagging the Dog: Computer Takeover" por harmj0y. Leia esses dois posts se você realmente quiser entender o que está acontecendo aqui. Honestamente, eu mesmo só entendo metade disso (e isso é sendo generoso).
Não sei C# bem, então descobri como me comunicar com um domínio em C# lendo o código-fonte do SharpSploit e SharpView.
Get-RBCD-Threaded consultará todos os usuários, grupos (exceto grupos privilegiados como "Domain Admins" e "BUILTIN\Administrators") e objetos de computador no seu domínio atual e compilará uma lista de seus SIDs. Em seguida, consultará o AD por todas as DACLs nos objetos de computador do domínio. Cada ACE nas DACLs será verificado para ver se um dos SIDs de usuário/grupo/computador possui privilégios "GenericAll", "GenericWrite", "WriteOwner" ou "WriteDacl" no objeto de computador, ou se os SIDs têm permissões "WriteProp" no atributo ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity (GUID:3f78c3e5-f79a-46bd-a0b8-9d18116ddc79). Se sim, então, meu amigo, você está a caminho de um ataque de Delegação Restrita Baseada em Recursos!
Compile no Visual Studio. Isso usa Parallel.ForEach para acelerar a pesquisa através do objeto DACL, portanto .NET v4 é o mínimo necessário.
-u|-username=, Nome de usuário para autenticar
-p|-password=, Senha para o usuário
-d|-domain=, Nome de domínio totalmente qualificado para autenticar
-s|-searchforest, Descobrir domínios e florestas através de relações de confiança. Enumere todos os domínios e florestas
-pwdlastset=, Filtra computadores com base em pwdLastSet para remover objetos de computador obsoletos. Se você definir isso como 90, filtrará objetos de computador cuja data pwdLastSet seja superior a 90 dias atrás
-i|-insecure, Força conexão LDAP insegura se LDAPS estiver causando problemas de conexão.
-o|-outputfile=, Saída para um arquivo CSV. Forneça o caminho completo e o nome do arquivo.
-h|-?|-help, Mostra as opções de ajuda
Agora você pode especificar o nome de usuário, senha e domínio para autenticar. Se as opções u/p/d estiverem em branco, Get-RBCD-Threaded tentará autenticar no domínio no contexto do seu usuário atual.
-o gerará saída para um arquivo CSV. Forneça o caminho completo e o nome do arquivo para salvar a saída.
A pesquisa padrão especifica que a porta 636 seja usada para forçar LDAPS. Isso pode causar problemas. Se você receber um erro dizendo algo sobre o servidor não estar disponível ou similar, tente a flag "-i" para remover a porta 636 da string de conexão.
"pwdLastSet" foi adicionado como uma opção de filtro. Em ambientes maiores, você pode obter muitos objetos de computador obsoletos que não existem mais como o objeto "destino" na ACL, e não podem realmente ser usados para o ataque RBCD (pelo menos não que eu saiba). Defina pwdLastSet para um número de dias. Exemplo: "-pwdlastset=90" filtrará quaisquer objetos de computador de seus resultados onde a data pwdLastSet seja maior ou igual a 90 dias atrás a partir da data e hora atuais.
Testado em um ambiente com mais de 20 mil usuários, grupos e computadores (mais de 60 mil objetos no total). Get-RBCD-Threaded levou ~60 segundos para ser concluído. Em comparação, meus comandos improvisados do PowerView neste gist para realizar uma pesquisa semelhante executaram por várias horas e nunca foram concluídos.
Esta ferramenta não realizará o ataque de delegação por você. Você precisará ler os blogs de Elad Shamir e harmj0y para descobrir como fazer isso. Isso só ajudará você a encontrar possíveis alvos para o ataque RBCD.
Exemplo de uso do meu laboratório AD:

Esta ferramenta não faz nada além de consultar o Active Directory usando consultas LDAP, o que pode não ser fácil de detectar. Netflow poderia ser usado para detectar grandes números de consultas LDAP / tráfego para um sistema.
A outra maneira possível de detectar isso é através de contas honeypot. A ideia seria criar um objeto de computador para o qual algum usuário/grupo tenha privilégios de escrita. O ataque RBCD depende da modificação de um objeto de computador e depois da delegação de tickets Kerberos para ele. Os possíveis pontos de detecção para o objeto de computador honeypot poderiam ser:
Criei esta ferramenta para me ajudar em testes de penetração. No entanto, defensores / equipes azuis / administradores de sistemas podem facilmente usá-la para ajudar a encontrar fraquezas em seus ambientes e (espero) tomar medidas para corrigi-las.