
Strumento per scoprire percorsi di attacco di delega vincolata basata sulle risorse in ambienti Active Directory
Strumento per scoprire percorsi di attacco di Resource-Based Constrained Delegation in ambienti Active Directory
Basato quasi interamente sui meravigliosi articoli "Wagging the Dog: Abusing Resource-Based Constrained Delegation to Attack Active Directory" di Elad Shamir e "A Case Study in Wagging the Dog: Computer Takeover" di harmj0y. Leggete questi due articoli se volete davvero capire cosa sta succedendo. Io stesso ne capisco solo la metà (ed è già tanto).
Non so scrivere bene in C#, quindi ho capito come comunicare con un dominio in C# leggendo il codice sorgente di SharpSploit e SharpView.
Get-RBCD-Threaded interroga tutti gli utenti, i gruppi (esclusi i gruppi privilegiati come "Domain Admins" e "BUILTIN\Administrators") e gli oggetti computer di Active Directory nel dominio corrente e compila un elenco dei loro SID. Get-RBCD-Threaded interroga poi AD per tutti i DACL sugli oggetti computer del dominio. Ogni ACE nei DACL viene controllato per vedere se uno dei SID di utente/gruppo/computer ha privilegi "GenericAll", "GenericWrite", "WriteOwner" o "WriteDacl" sull'oggetto computer, oppure se i SID hanno permessi "WriteProp" sull'attributo ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity (GUID:3f78c3e5-f79a-46bd-a0b8-9d18116ddc79). Se è così, allora, amico mio, sei sulla buona strada per un attacco Resource-Based Constrained Delegation!
Compilare in Visual Studio. Questo utilizza Parallel.ForEach per velocizzare la ricerca attraverso l'oggetto DACL, quindi è richiesto almeno .NET v4.
-u|-username=, Nome utente per l'autenticazione
-p|-password=, Password per l'utente
-d|-domain=, Nome di dominio completo (FQDN) a cui autenticarsi
-s|-searchforest, Scoprire domini e foreste tramite relazioni di trust. Enumera tutti i domini e le foreste
-pwdlastset=, Filtrare i computer in base a pwdLastSet per rimuovere oggetti computer obsoleti. Se impostato a 90, verranno filtrati gli oggetti computer la cui data pwdLastSet è superiore a 90 giorni fa
-i|-insecure, Forzare una connessione LDAP non sicura se LDAPS causa problemi di connessione.
-o|-outputfile=, Output in un file CSV. Fornire il percorso completo del file e il nome del file.
-h|-?|-help, Mostrare le opzioni di aiuto
Ora è possibile specificare nome utente, password e dominio per l'autenticazione. Se le opzioni u/p/d sono vuote, Get-RBCD-Threaded tenterà di autenticarsi al dominio nel contesto dell'utente corrente.
-o restituisce l'output in un file CSV. Fornire il percorso completo del file e il nome del file per salvare l'output.
La ricerca predefinita specifica l'uso della porta 636 per forzare LDAPS. Questo potrebbe causare problemi. Se si riceve un errore che dice qualcosa come "server non disponibile" o simile, provare il flag "-i" per rimuovere la porta 636 dalla stringa di connessione.
"pwdLastSet" è stato aggiunto come opzione di filtro. In ambienti più grandi si possono ottenere molti oggetti computer obsoleti che non esistono più come oggetti "destinazione" nell'ACL e che non possono essere realmente utilizzati per l'attacco RBCD (almeno per quanto ne so). Impostare pwdLastSet a un numero di giorni. Esempio: "-pwdlastset=90" filtrerà tutti gli oggetti computer dai risultati la cui data pwdLastSet è maggiore o uguale a 90 giorni fa dalla data e ora corrente.
Testato in un ambiente con oltre 20.000 utenti, gruppi e computer (oltre 60.000 oggetti totali). Get-RBCD-Threaded ha impiegato circa 60 secondi per completare. A confronto, i miei comandi PowerView arrangiati in questo gist per eseguire una ricerca simile hanno impiegato diverse ore senza mai terminare.
Questo strumento non eseguirà l'attacco di delega per voi. Dovrete leggere i blog di Elad Shamir e harmj0y per capire come farlo. Questo vi aiuterà solo a trovare possibili bersagli per l'attacco RBCD.
Esempio di utilizzo dal mio laboratorio AD:

Questo strumento non fa altro che interrogare Active Directory utilizzando query LDAP, che potrebbero non essere facili da rilevare. Il flusso di rete potrebbe essere utilizzato per rilevare un gran numero di query LDAP / traffico verso un sistema.
Un altro possibile modo per rilevarlo è attraverso account esca. L'idea sarebbe quella di creare un oggetto computer a cui un utente/gruppo ha privilegi di scrittura. L'attacco RBCD si basa sulla modifica di un oggetto computer e quindi sulla delega di ticket Kerberos ad esso. I possibili punti di rilevamento per l'oggetto computer esca potrebbero essere:
Ho creato questo strumento per aiutarmi nei penetration test. Tuttavia, difensori / blue team / sysadmins possono facilmente usarlo per trovare vulnerabilità nei loro ambienti e (si spera) intervenire per correggerle.