В явно указывают, для каких серверу разрешено выдавать себя за пользователя, через атрибут msDS-AllowedToDelegateTo. Это гораздо безопаснее, чем Unconstrained, но всё же не лишено рисков.
שרת Web עם KCD מבקש מה־KDC כרטיס בשם המשתמש (S4U2Self), ואז מבקש כרטיס לשירות המטרה (S4U2Proxy). ה־KDC בודק את msDS-AllowedToDelegateTo לפני שהוא מנפיק כרטיס ל־MSSQLSvc. סיכון: Service Name Substitution — רכיב השירות בכרטיס אינו נאכף, ולכן ניתן להחליף SPN לשירות אחר על אותו שרת. הגנה: הימנעות מ־Protocol Transition, שימוש ב־gMSA, ולא להאציל לחשבונות Tier 0.
Два режима
- Use only — пользователь обязан пройти аутентификацию к службе через Kerberos (только S4U2Proxy).
- Use any authentication protocol (Protocol Transition) — служба может выдать билет от имени пользователя, даже если тот не аутентифицировался через (S4U2Self). Это опасный режим.
Риск: в списке определяет службу, но компонент службы в билете реально не проверяется. Атакующий, контролирующий учётную запись с и Protocol Transition, может подменить имя службы (Service Name Substitution) и получить доступ к другим службам на том же целевом сервере.
Защита
- Избегать Protocol Transition, если нет другого выхода.
- Давать делегирование только выделенным сервисным учётным записям с длинными паролями (gMSA).
- Никогда не делегировать службам, работающим на Tier 0 (DC, ADFS, PKI).
- Периодически проверять все объекты с msDS-AllowedToDelegateTo.