
Una herramienta para enumerar hosts potenciales que están abiertos al abuso de GSSAPI dentro de redes de Active Directory
gssapi-abuse fue lanzado como parte de mi charla en DEF CON 31. Un artículo completo sobre el vector de abuso se puede encontrar aquí: A Broken Marriage: Abusing Mixed Vendor Kerberos Stacks
La herramienta tiene dos funciones. La primera es la capacidad de enumerar hosts que no son Windows y que están unidos a Active Directory y que ofrecen autenticación GSSAPI a través de SSH.
La segunda función es la capacidad de realizar actualizaciones dinámicas de DNS para hosts abusables por GSSAPI que no tienen las entradas DNS de búsqueda directa y/o inversa correctas. La autenticación basada en GSSAPI es estricta en cuanto a la coincidencia de los principales de servicio, por lo tanto, las entradas DNS deben coincidir con el nombre del principal de servicio tanto por nombre de host como por dirección IP.
gssapi-abuse requiere una pila krb5 funcional junto con un krb5.conf correctamente configurado.
En hosts Windows, el software MIT Kerberos debe estar instalado además de los módulos de Python listados en requirements.txt, esto se puede obtener en la Página de distribución de MIT Kerberos. El krb5.conf de Windows se encuentra en C:\ProgramData\MIT\Kerberos5\krb5.conf
El paquete libkrb5-dev debe instalarse antes de instalar los requisitos de Python
Una vez que se hayan cumplido los requisitos, puede instalar las dependencias de Python mediante la herramienta pip/pip3
pip install -r requirements.txt
El modo de enumeración se conectará a Active Directory y realizará una búsqueda LDAP de todas las computadoras que no tengan la palabra Windows dentro del atributo del sistema operativo.
Una vez que se haya obtenido la lista de máquinas que no son Windows, gssapi-abuse intentará conectarse a cada host a través de SSH y determinar si se permite la autenticación basada en GSSAPI.
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
El modo DNS utiliza Kerberos y dnspython para realizar una actualización de DNS autenticada a través del puerto 53 utilizando el protocolo DNS-TSIG. Actualmente, el modo dns depende de una configuración krb5 funcional con un TGT válido o un ticket de servicio DNS dirigido a un controlador de dominio específico, por ejemplo, DNS/dc1.victim.local.
Agregando un registro A de DNS para el 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
Agregando un registro PTR inverso para el host ahost.ad.ginge.com. Tenga en cuenta que el argumento data termina con un ., esto es importante, de lo contrario el registro se convierte en un registro relativo a la zona, lo cual no queremos. También debemos especificar la zona de destino para actualizar, ya que los registros PTR se almacenan en zonas diferentes a los registros 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
Resultados de la búsqueda DNS directa e inversa después de la ejecución
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