Unconstrained delegation
all objects that have an SPN can be configured for delegation
Delegation process

Разбор по шагам:
Подразумевается, что учетная запись User не является чувствительной к делегированию и не состоит в группе защищенных пользователей (флаг NOT_DELEGATED не активен).
Сначала User, как уже было рассмотрено ранее, получает TGT в результате обмена KRB AS REQ и KRB AS REP сообщениями.
Далее User запрашивает TGS-билет для доступа к Сервису А (KRB TGS REQ).
KDC видит, что у Сервиса А установлен флаг “TRUSTED_FOR_DELEGATION”, разрешающий неограниченную делегацию, и поэтому в ответ User KDC отправляет TGS-билет с флагом ok-as-delegate.
Получив TGS-билет, User обнаруживает флаг ok-as-delegate и понимает, что ему необходимо передать свои учетные данные Сервису А. Для этого User снова обращается к KDC c просьбой выдать ему перенаправляемый (forwarded) TGT.
KDC выполняет необходимые проверки и отправляет User TGT с правом передачи.
User обращается к Сервису А с немного расширенным KRB AP REQ сообщением. Теперь в аутентификаторе содержится не только метка времени и принципал клиента, но и перенаправляемый (forwarded) TGT вместе с сессионным ключом для общения с KDC.
Сервис А извлекает сессионный ключ для общения с User из TGS-билета, расшифровывает аутентификатор, выполняет проверки и сохраняет Forwarded TGT для User вместе с соответствующим указанному билету сессионным ключом.
С использованием полученных аутентификационных данных Сервис А получает TGS-билет к Сервису Б от имени User.
У учетной записи пользователя может быть установлен флаг NOT_DELEGATED в атрибуте UserAccountControl, запрещающий олицетворение указанного пользователя.
По умолчанию флаг NOT_DELEGATED отключен и устанавливается либо при активации опции “Account is sensitive and cannot be delegated”, либо при добавлении пользователя в группу “Protected Users”.
Примечание: среди прочего члены группы “Protected Users” также не могут аутентифицироваться по NTLM, использовать DES или RC4 шифрование в Kerberos, обновлять TGT по истечении 4 часов и кэшировать учетные данные для входа в домен.
Чтобы учетная запись получила право на неограниченное делегирование в атрибуте UserAccountControl указанной учетной записи необходимо установить флаг TRUSTED_FOR_DELEGATION, которому соответствует целочисленное значение 524288. По умолчанию указанный флаг активен только у машинных учетных записей контроллеров домена.
Для изменения значения флага необходимо наличие привилегии SeEnableDelegationPrivilege, которой изначально обладают только учетные записи с правами уровня администратора домена.
Abuse

Search accounts with unconstrained delegation
Вариант 1 - с помощью PowerShell модуля ADSI для работы с Active Directory
Поиск среди всех учетных записей
Вариант 2 - с помощью FindDelegation.py, входящего в Impacket
Поиск среди всех учетных записей
Вариант 3 - PowerView
Поиск среди учетных записей класса компьютер
Поиск среди пользовательских учетных записей
Примечание: существует py-аналог PowerView для Linux
Вариант 4 - Bloodhound
Поиск среди учетных записей класса компьютер:
Поиск среди пользовательских учетных записей:
Вариант 5 - Ldapdomaindump после Relay
Все приведенные выше способы требовали наличия прав пользователя, но также можно провести Relay атаку по протоколу LDAP на контроллер домена с последующим использованием Ldapdomaindump:
Получив административный доступ к серверу с сервисом, обладающим неограниченным делегированием, атакующий может извлечь TGT учетных записей, проходивших аутентификацию к указанному сервису, из памяти процесса lsass.exe сервера.
Осуществить выгрузку можно с помощью Rubeus:
Или при помощи Mimikatz:
Полученные TGT можно использовать для проведения атаки Pass-the-Ticket.
Last updated