Domain Trust Temelleri

Tunahan TEKEOGLU
7 min readMay 24, 2024

--

Senaryo:

Birçok büyük kuruluş, zamanla yeni şirketler satın alarak bunları kendi bünyesine katar. Bunu kolaylaştırmak için yeni bir domain ile trust ilişkisi kurmak etkili bir yoldur. Bu şekilde, tüm mevcut nesneleri taşımak zorunda kalmadan entegrasyonu daha hızlı hale getirebilirsiniz. Ancak, bu trust ilişkisi dikkatli olunmazsa müşterinin ortamına zayıflıklar ve çeşitli zafiyetleri de beraberinde getirebilir. İstismar edilebilir bir kusur veya güvenlik açığı olan bir child domain, hedef domain’e hızlı bir giriş yolu sağlayabilir. Şirketler ayrıca diğer şirketlerle (örneğin bir MSP), bir müşteriyle veya aynı şirketin diğer iş birimleriyle (örneğin başka bir coğrafi bölgede bulunan bir bölümle) trust ilişkileri kurabilir. Şimdi, domain trust’larını ve değerlendirmelerimiz sırasında yerleşik işlevselliği nasıl kötüye kullanabileceğimizi daha detaylı inceleyelim.

Domain Trusts Genel Bakış

Domain Trust, forest-forest veya domain-domain (intra-domain) kimlik doğrulaması kurmak için kullanılır. Bu, kullanıcıların hesaplarının bulunduğu ana domain dışındaki başka bir domain’deki kaynaklara erişmesini (veya yönetim görevlerini gerçekleştirmesini) sağlar. Trust, iki domain’in kimlik doğrulama sistemleri arasında bir bağlantı oluşturur ve tek yönlü veya çift yönlü (bidirectional) iletişime izin verebilir. Bir kuruluş çeşitli türde trust’lar oluşturabilir:

  • Parent-child: Aynı forest içindeki iki veya daha fazla domain. Child domain, parent domain ile iki yönlü transitive trust’a sahiptir, yani child domain’deki kullanıcılar corp.tun4hunt.local, parent domain tun4hunt.local’a authenticate edebilir ve tersi de geçerlidir.
  • Çapraz Baglantı (Cross-link): Authentication’ı hızlandırmak için child domainler arasında bir trust.
  • External: Ayrı forest’larda bulunan iki ayrı domain arasında non-transitive bir trust. Bu tür bir trust, SID filtering kullanır veya trusted domain’den gelmeyen authentication isteklerini filtreler.
  • Tree-root: Bir forest root domain ile yeni bir tree root domain arasında iki yönlü transitive bir trust. Bir forest içinde yeni bir tree root domain kurduğunuzda tasarım gereği oluşturulurlar.
  • Forest (Orman)İki forest root domain arasında transitive bir trust.
  • ESAE: Active Directory’yi yönetmek için kullanılan bir bastion forest.

Bir trust kurarken, iş durumuna bağlı olarak bazı öğeler değiştirilebilir.

Trust’lar transitive veya non-transitive olabilir.

Transitive trust, child domain’in güvendiği nesnelere güvenin genişletildiği anlamına gelir. Örneğin, üç domain’imiz olduğunu varsayalım. Transitive bir ilişkide, Domain A’nın Domain B ile bir trust’ı varsa ve Domain B’nin transitive bir trust’ı varsa, Domain A otomatik olarak Domain C’ye güvenecektir.

Non-transitive bir trust’ta ise sadece child domain güvendiğinizdir.

Görsel Temsili Olarak İnternetten Alınmıştır

Güven Tablosu Yan Yana

Not: Tablodaki “1” ifadesi, bir “Transitive” trust’ın birden fazla domain’e yayılabileceğini belirtir. Yani, bir domain’in bir trust ilişkisi varsa, bu güven ilişkisi diğer domain’lere de genişletilebilir. Bu, güvenin birden fazla domain’e yayılabildiği anlamına gelir (Paylaşılan, 1'den birçok kişiye).

Bu durumu, evinize paket teslimatı ile kolayca karşılaştırabilirsiniz. Transitive bir trust için, paketi sizin adınıza kabul etmesi için evinizdeki (forest) herhangi bir kişiye izin vermiş olursunuz. Non-transitive bir trust için ise, paketle ilgili olarak yalnızca teslimat hizmetinin paketi size getirebileceğini ve sadece sizin paketi teslim alıp imzalayabileceğinizi kesin bir şekilde belirtmiş olursunuz.

Trust’lar iki yönde kurulabilir: tek yönlü (one-way trust) veya çift yönlü (bidirectional trust).

  • Tek yönlü (One-way trust) Güven:”Güvenilen” bir domain’deki kullanıcılar, güvenen bir domain’deki kaynaklara erişebilir, tersi geçerli değildir.
  • Çift yönlü (Bidirectional trust) Güven: Her iki güvenen domain’deki kullanıcılar, diğer domain’deki kaynaklara erişebilir. Örneğin, TUN4HUNT.LOCAL ile CYBERFORCE.LOCAL arasında çift yönlü bir trust ilişkisinde, TUN4HUNT.LOCAL’deki kullanıcılar CYBERFORCE.LOCAL’deki kaynaklara erişebilir ve terside geçerlidir.

Domain trust genellikle yanlış kurulur ve bize kritik istenmeyen saldırı yolları sağlayabilir. Ayrıca, kullanım kolaylığı için kurulan trust ilişkileri, güvenlik ilişkiyi kurmadan önce düşünülmemişse, potansiyel güvenlik sonuçları için sonradan gözden geçirilmeyebilir. İki şirket arasındaki bir Birleşme ve Satın Alma (M&A), edinilen şirketlerle çift yönlü trust ilişkileriyle sonuçlanabilir ve satın alınan şirketin güvenlik durumu bilinmiyor ve test edilmediyse, edinilen şirketin ortamına risk getirebilir. Biri şirketinizi hedef almak istiyorsa, dolaylı olarak şirketinize girmek için satın aldığınız diğer şirketi daha yumuşak bir hedef olarak da inceleyebilir. Ana domain’de bir başlangıç noktası bulamadığım birçok penetrasyon testi yaptım, ancak güvenilen bir domain’de bir hata bulabildim ve bu da bana ana domain’de bir başlangıç noktası veya hatta tam yönetici hakları sağladı. Bu tür bir “komplike” saldırı, herhangi bir türde domain trust ilişkisi kurmadan önce güvenliğin en önemli öncelik olduğunu düşünmekle önlenebilir. Trust ilişkilerini incelerken, bu düşünceleri raporlama için aklınızda bulundurun. Çoğu zaman, büyük kuruluşların bir veya daha fazla domain ile bir trust ilişkisi olduğunun farkında olmadığını göreceğiz.

Enumerating Trust Relationships

Get-ADTrust cmdlet’ini kullanarak domain trust ilişkilerini belirleyebiliriz. Bu, yalnızca yerleşik araçları kullanmakla sınırlı olduğumuz durumlarda özellikle faydalıdır.

Get-ADTrust Kullanımı

PS C:\tun4hunt> Import-Module activedirectory
PS C:\tun4hunt> Get-ADTrust -Filter *

Direction : BiDirectional
DisallowTransivity : False
DistinguishedName : CN=LOGISTICS.TUN4HUNT.LOCAL,CN=System,DC=TUN4HUNT,DC=LOCAL
ForestTransitive : False
IntraForest : True
IsTreeParent : False
IsTreeRoot : False
Name : LOGISTICS.TUN4HUNT.LOCAL
ObjectClass : trustedDomain
ObjectGUID : f48a1169-2e58-42c1-ba32-a6ccb10057ec
SelectiveAuthentication : False
SIDFilteringForestAware : False
SIDFilteringQuarantined : False
Source : DC=TUN4HUNT,DC=LOCAL
Target : LOGISTICS.TUN4HUNT.LOCAL
TGTDelegation : False
TrustAttributes : 32
TrustedPolicy :
TrustingPolicy :
TrustType : Uplevel
UplevelOnly : False
UsesAESKeys : False
UsesRC4Encryption : False

Direction : BiDirectional
DisallowTransivity : False
DistinguishedName : CN=CYBERFORCE.LOCAL,CN=System,DC=TUN4HUNT,DC=LOCAL
ForestTransitive : True
IntraForest : False
IsTreeParent : False
IsTreeRoot : False
Name : CYBERFORCE.LOCAL
ObjectClass : trustedDomain
ObjectGUID : 1597717f-89b7-49b8-9cd9-0801d52475ca
SelectiveAuthentication : False
SIDFilteringForestAware : False
SIDFilteringQuarantined : False
Source : DC=TUN4HUNT,DC=LOCAL
Target : CYBERFORCE.LOCAL
TGTDelegation : False
TrustAttributes : 8
TrustedPolicy :
TrustingPolicy :
TrustType : Uplevel
UplevelOnly : False
UsesAESKeys : False
UsesRC4Encryption : False

Yukarıdaki çıktı, mevcut domain’imiz olan TUN4HUNT.LOCAL’in iki domain trust’ına sahip olduğunu göstermektedir. İlki LOGISTICS.TUN4HUNT.LOCAL ile olup, IntraForest özelliği bu domain’in bir child domain olduğunu ve şu anda forest’ın root domain’inde bulunduğumuzu gösterir. İkinci trust ilişkisi ise CYBERFORCE.LOCAL domain’i ile olup, ForestTransitive özelliği True olarak ayarlanmıştır, bu da bunun bir forest trust veya external bir trust olduğunu gösterir. Her iki trust ilişkisi de çift yönlü olacak şekilde ayarlanmıştır, bu da kullanıcıların her iki trust ilişkisi üzerinden ileri geri kimlik doğrulaması yapabileceği anlamına gelir. Bu, bir değerlendirme sırasında not edilmesi gereken önemli bir noktadır. Bir trust ilişkisi üzerinden kimlik doğrulaması yapamazsak, bu trust ilişkisi üzerinden herhangi bir enumeration veya saldırı gerçekleştiremeyiz.

Yerleşik AD araçlarını kullanmanın yanı sıra, PowerView ve BloodHound da trust ilişkilerini belirlemek, oluşturulan trust türünü ve kimlik doğrulama akışını belirlemek için kullanılabilir. PowerView’i içe aktardıktan sonra, mevcut trust ilişkilerini belirlemek için Get-DomainTrust işlevini kullanabiliriz.

Mevcut Trust İlişkilerini Get-DomainTrust Kullanarak Kontrol Etme:

powershell
PS C:\tun4hunt> Get-DomainTrust
SourceName : TUN4HUNT.LOCAL
TargetName : LOGISTICS.TUN4HUNT.LOCAL
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST
TrustDirection : Bidirectional
WhenCreated : 11/1/2021 6:20:22 PM
WhenChanged : 2/26/2022 11:55:55 PM
SourceName : TUN4HUNT.LOCAL
TargetName : CYBERFORCE.LOCAL
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection : Bidirectional
WhenCreated : 11/1/2021 8:07:09 PM
WhenChanged : 2/27/2022 12:02:39 AM

PowerView, bir domain trust haritası oluşturarak trust türü (parent/child, external, forest) ve trust yönü (one-way veya bidirectional) gibi bilgileri sağlar. Bu bilgiler, bir foothold elde edildikten sonra ortamı daha da ele geçirmeyi planladığımızda faydalıdır.

Get-DomainTrustMapping Kullanmımı


PS C:\tun4hunt> Get-DomainTrustMapping
SourceName : TUN4HUNT.LOCAL
TargetName : LOGISTICS.TUN4HUNT.LOCAL
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST
TrustDirection : Bidirectional
WhenCreated : 11/1/2021 6:20:22 PM
WhenChanged : 2/26/2022 11:55:55 PM
SourceName : TUN4HUNT.LOCAL
TargetName : CYBERFORCE.LOCAL
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection : Bidirectional
WhenCreated : 11/1/2021 8:07:09 PM
WhenChanged : 2/27/2022 12:02:39 AM
SourceName : CYBERFORCE.LOCAL
TargetName : TUN4HUNT.LOCAL
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : FOREST_TRANSITIVE
TrustDirection : Bidirectional
WhenCreated : 11/1/2021 8:07:08 PM
WhenChanged : 2/27/2022 12:02:41 AM
SourceName : LOGISTICS.TUN4HUNT.LOCAL
TargetName : TUN4HUNT.LOCAL
TrustType : WINDOWS_ACTIVE_DIRECTORY
TrustAttributes : WITHIN_FOREST
TrustDirection : Bidirectional
WhenCreated : 11/1/2021 6:20:22 PM
WhenChanged : 2/26/2022 11:55:55 PM

Buradan, trust ilişkileri üzerinden enumeration yapmaya başlayabiliriz. Örneğin, child domain’deki tüm kullanıcıları kontrol edebiliriz:

Get-DomainUser Kullanarak Çocuk Etki Alanındaki Kullanıcıları Kontrol Etme

PS C:\tun4hunt> Get-DomainUser -Domain LOGISTICS.TUN4HUNT.LOCAL | select SamAccountName
samaccountname
- - - - - - -
htb-student_adm
Administrator
Guest
lab_adm
krbtgt

Domain trust almak için kullanabileceğimiz bir diğer araç ise netdom’dur. Netdom komut satırı aracının netdom query alt komutu, domain hakkında bilgi almak için kullanılabilir, bu da iş istasyonları, sunucular ve domain trust’larının bir listesini içerir.

Netdom Kullanarak Domain Trust Sorgulama


C:\tun4hunt> netdom query /domain:tun4hunt.local trust
Direction Trusted\Trusting domain Trust type
========= ======================= ==========
<-> LOGISTICS.TUN4HUNT.LOCAL
Direct
Not found

<-> CYBERFORCE.LOCAL
Direct
Not found

The command completed successfully.

Netdom Kullanarak Domain Denetleyicilerini Sorgulama


C:\tun4hunt> netdom query /domain:tun4hunt.local dc

List of domain controllers with accounts in the domain:


ACADEMY-EA-DC01
The command completed successfully.

Netdom Kullanarak İş İstasyonlarını ve Sunucuları Sorgulama

C:\htb> netdom query /domain:tun4hunt.local workstation
List of workstations with accounts in the domain:

ACADEMY-EA-MS01
ACADEMY-EA-MX01 ( Workstation or Server )

SQL01 ( Workstation or Server )
ILF-XRG ( Workstation or Server )
MAINLON ( Workstation or Server )
CISERVER ( Workstation or Server )
INDEX-DEV-LON ( Workstation or Server )
…SNIP…

Bu trust ilişkilerini görselleştirmek için BloodHound’u kullanarak Map Domain Trusts pre-built sorgusunu kullanabiliriz. Burada iki bidirectional trust’un mevcut olduğunu kolayca görebiliriz.

BloodHound’da Güven İlişkilerini Görselleştirme

Görsel Temsili Olarak İnternetten Alınmıştır

Sonraki Yazılarımızda..

Sonraki birkaç bölümde, child → parent domain trust ilişkilerine ve bidirectional forest trust’ları boyunca gerçekleştirebileceğimiz yaygın saldırıları ele alacağız.

Özel Not: Bu tür saldırılar göz ardı edilmemelidir, ancak enumeration sırasında keşfettiğimiz herhangi bir trust ilişkisinin test kapsamı dahilinde olup olmadığını ve Etkileşim Kuralları’nın dışına çıkmadığımızı kontrol etmek için her zaman müşterimizle iletişim halinde kalmaya devam etmeliyiz.

--

--

Tunahan TEKEOGLU
Tunahan TEKEOGLU

Written by Tunahan TEKEOGLU

Forensic Engineering Graduate, Senior Cyber Security Consultant. on all social media /tunahantekeoglu

No responses yet