Реализация протокола Kerberos в Windows использует имена участников службы (SPN) для определения того, какую учетную запись задействовать для шифрования билета службы. В Active Directory существует два варианта SPN: SPN на основе хоста и произвольные SPN. Первый вариант SPN связан с учетной записью компьютера домена, а второй обычно (но не всегда) — с учеткой пользователя домена.
Еще по теме:
- Уклонение от Honeytoken при атаке Active Directory
- Как обойти PowerShell AMSI при атаке на Active Directory
- Как обойти AppLocker при атаке на Active Directory
В документации Microsoft написано буквально следующее: «Когда в Active Directory создается новая учетная запись компьютера, для встроенных служб автоматически создаются имена участников-служб. В действительности имена участников-служб создаются только для службы HOST, а все встроенные службы используют имя участника-службы HOST». Но так как пароль учетной записи компьютера по умолчанию рандомный и меняется каждые 30 дней, оператор в контексте данной атаки, как правило, не обращает внимания на имена SPN на основе хоста.
Произвольные имена участников-служб также могут быть зарегистрированы для учетных записей пользователей домена. Наример, учетная запись службы, которая управляет несколькими экземплярами MSSQL. Таким образом, учетная запись пользователя по умолчанию будет иметь SPN <MSSQLSvc/HOST:PORT> для каждого экземпляра MSSQL, для которого она зарегистрирована. Эта учетная запись хранится в атрибуте ServicePrincipalName профиля пользователя.
Как следует из специфики работы Kerberos, любой пользователь может запросить TGS для любой службы, имеющей зарегистрированное SPN для учетной записи пользователя или компьютера в Active Directory. Таким образом, зная учетные данные любого пользователя домена и SPN учетных записей из домена, оператор может запросить TGS от имени пользователя для данных экземпляров SPN. А взломав TGS, узнать пароли от этих учетных записей.
Выполнить атаку можно как удаленно, так и при наличии непосредственного доступа к системе. Но для начала нужно получить все SPN из системы. Если есть доступ, следует использовать встроенное решение setspn.
1 |
setspn -T [домен] -Q */* |
Указанным способом мы получаем SPN пользователя SQL admin, а это означает, что он уязвим к такой атаке. Локально получить билет можно с помощью Rubeus.
Для удаленного получения SPN и билета необходимы учетные данные любого пользователя домена.
1 |
GetUserSPNs.py -request -dc-ip [адрес] [домен]/[пользователь] |
Для взлома используется hashcat.
1 |
hashcat -a 0 -m 13100 krb5.hashes dict.txt |
Kerberoasting можно также выполнить, перехватив сетевой трафик и захватив билеты Kerberos TGS в случае MITM.
Еще по теме:
- Защита от обнаружения при атаке на Active Directory
- Захват Active Directory на виртуальной машине с HackTheBox