
Uma ferramenta para enumerar potenciais hosts que estão abertos a abuso de GSSAPI em redes Active Directory
gssapi-abuse foi lançado como parte da minha palestra no DEF CON 31. Um artigo completo sobre o vetor de abuso pode ser encontrado aqui: Um Casamento Quebrado: Abusando de Pilhas Kerberos de Fornecedores Mistos
A ferramenta possui duas funcionalidades. A primeira é a capacidade de enumerar hosts não Windows que estão associados ao Active Directory e que oferecem autenticação GSSAPI via SSH.
A segunda funcionalidade é a capacidade de realizar atualizações dinâmicas de DNS para hosts abusáveis por GSSAPI que não possuem as entradas de DNS de pesquisa direta e/ou reversa corretas. A autenticação baseada em GSSAPI é rigorosa quanto à correspondência de principais de serviço, portanto, as entradas de DNS devem corresponder ao nome do principal de serviço tanto pelo nome do host quanto pelo endereço IP.
gssapi-abuse requer uma pilha krb5 funcional juntamente com um krb5.conf configurado corretamente.
Em hosts Windows, o software MIT Kerberos deve ser instalado além dos módulos Python listados em requirements.txt. Este pode ser obtido na Página de Distribuição do MIT Kerberos. O krb5.conf do Windows pode ser encontrado em C:\ProgramData\MIT\Kerberos5\krb5.conf
O pacote libkrb5-dev precisa ser instalado antes de instalar os requisitos Python.
Depois que os requisitos forem atendidos, você pode instalar as dependências Python através da ferramenta pip/pip3
pip install -r requirements.txt
O modo de enumeração se conectará ao Active Directory e realizará uma pesquisa LDAP por todos os computadores que não possuam a palavra Windows no atributo de Sistema Operacional.
Uma vez obtida a lista de máquinas não Windows, gssapi-abuse tentará conectar-se a cada host via SSH e determinar se a autenticação baseada em GSSAPI é permitida.
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
O modo DNS utiliza Kerberos e dnspython para realizar uma atualização DNS autenticada na porta 53 usando o protocolo DNS-TSIG. Atualmente, o modo dns depende de uma configuração krb5 funcional com um TGT válido ou um ticket de serviço DNS direcionado a um controlador de domínio específico, por exemplo, DNS/dc1.victim.local.
Adicionando um registro DNS A para o 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
Adicionando um registro reverso PTR para o host ahost.ad.ginge.com. Observe que o argumento data é terminado com um ., isso é importante, caso contrário o registro se torna um registro relativo à zona, o que não queremos. Também precisamos especificar a zona alvo para atualizar, já que os registros PTR são armazenados em zonas diferentes dos 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 da consulta DNS direta e reversa após a execução
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