Перейти к содержимому
AD Academy
Delegation в Active Directory
Средний12 мин.Обновлено: Тема 1 из 4

Что такое Delegation

Почему серверу нужно выдавать себя за пользователя и что это значит с точки зрения безопасности.

Не прочитано

Что вы узнаете

  • Три типа
  • Как найти учётные записи с Delegation
  • Почему серверу нужно выдавать себя за пользователя и что это значит с точки зрения безопасности.

(делегирование) позволяет сервису действовать от имени пользователя, который к нему подключился. Классический пример: Web-сервер получает запрос от пользователя и должен от его имени обратиться к серверу SQL. Без Delegation Web-сервер обращается к SQL под собственной идентичностью — и права пользователя не применяются.

Три типа

  • — сервер получает полный пользователя и может выдавать себя за него перед любым сервисом. Самый старый и самый опасный тип.
  • (KCD) — сервер может выдавать себя за пользователя только перед заранее определённым списком (msDS-AllowedToDelegateTo).
  • Resource-Based () — целевой ресурс сам решает, кому разрешено выдавать себя за него (msDS-AllowedToActOnBehalfOfOtherIdentity).

שלוש שכבות מהמסוכן לבטוח: Unconstrained — השרת מקבל TGT מלא ויכול להתחזות לכל שירות בדומיין. Constrained (KCD) — ההאצלה מוגבלת לרשימת SPN במאפיין msDS-AllowedToDelegateTo. Resource-Based (RBCD) — המשאב עצמו מחליט מי רשאי להתחזות, דרך msDS-AllowedToActOnBehalfOfOtherIdentity. ככל שההיקף צר יותר, שטח התקיפה קטן יותר.

Как найти учётные записи с Delegation

# Учетные записи с неограниченным делегированием
Get-ADComputer -Filter {TrustedForDelegation -eq $true} -Properties TrustedForDelegation

# Учетные записи с ограниченным делегированием
Get-ADObject -Filter {msDS-AllowedToDelegateTo -like "*"} -Properties msDS-AllowedToDelegateTo
powershell
Архитектура и теория — Под капотом

появилась из проблемы Double Hop: веб-сервер получает Kerberos-билет пользователя, но билет действителен только для самого веб-сервиса. Чтобы получить доступ от имени пользователя к SQL на другом сервере, требуется явное разрешение на выдачу себя за другого.

  • S4U2Self — Служба запрашивает у KDC билет для себя от имени любого пользователя.
  • S4U2Proxy — Служба использует этот билет для запроса билета к целевому сервису.
  • TrustedForDelegation / TrustedToAuthForDelegation — Флаги в userAccountControl, определяющие, что разрешено.
  • msDS-AllowedToDelegateTo — Список , за которые разрешено выдавать себя ().
  • msDS-AllowedToActOnBehalfOfOtherIdentity — Обратное: цель определяет, кому разрешено ().
Практическая настройка (PowerShell / GUI)
# Отображение всех типов делегирования в домене
Get-ADObject -LDAPFilter '(|(msDS-AllowedToDelegateTo=*)(userAccountControl:1.2.840.113556.1.4.803:=524288)(msDS-AllowedToActOnBehalfOfOtherIdentity=*))' -Properties samAccountName,msDS-AllowedToDelegateTo

# Чувствительные учетные записи - полная блокировка олицетворения
Set-ADUser -Identity da_admin -AccountNotDelegated $true
Add-ADGroupMember -Identity 'Protected Users' -Members da_admin
powershell
Реальные сценарии в организации
  • IIS + SQL: внутреннее приложение, работающее под учетной записью пользователя с базой данных.
  • SharePoint и Reporting Services — классические потребители .
  • Старые принтеры и файловые серверы, настроенные как Unconstrained много лет назад и забытые — распространенная проблема безопасности.
Диагностика и устранение неполадок
  • Нет для целевого сервиса → S4U2Proxy завершается с KDC_ERR_S_PRINCIPAL_UNKNOWN.
  • Член Protected Users или помечен как Sensitive → выдача себя за другого будет намеренно заблокирована.
  • Проверка в реальном времени: klist на промежуточном сервере — отображается ли forwardable билет для цели?
klist purge; klist get MSSQLSvc/sql01.corp.com:1433
bash
Глоссарий и быстрая командная строка
  • Double Hop — пользователь → сервер A → сервер B.
  • UAC bit 524288 (0x80000) = Unconstrained.
  • UAC bit 16777216 (0x1000000) = Protocol Transition.
  • Protected Users = полная защита от выдачи себя за другого и .

Проверь себя

Какова цель Delegation в AD?

Эта страница вам помогла?