Active Directory’yi Ele Geçirme Teknikleri Serisi – Bölüm 19: Canary Objelerle Tespit ve Serinin Kapanışı

Merhaba

Bu seride 18 bölüm boyunca, CISA/NSA/ASD/Five Eyes ortaklığının yayınladığı Detecting and Mitigating Active Directory Compromises raporundaki teknikleri tek tek ele aldık: Kerberoasting’den başlayıp AS-REP Roasting, Password Spraying, MachineAccountQuota istismarı, Unconstrained Delegation, GPP şifreleri, AD CS (ESC1), Golden Certificate, DCSync, ntds.dit dökümü, Golden Ticket, Silver Ticket, Golden SAML, Microsoft Entra Connect ele geçirmesi, tek yönlü trust bypass, SID History enjeksiyonu, Skeleton Key ve son olarak Shadow Credentials’a kadar uzandı. Her bölümde teknik açıklamayı, mitigasyonu, tespit yöntemini ve kendi iki forest lab ortamımızdaki (bakicubuk.local / nihatcubuk.local) gerçek komut çıktılarını paylaştık.

Bu kapanış bölümünde iki şey yapacağız: önce raporun önerdiği, tek başına tüm bu tekniklerin büyük bir kısmını yakalayabilen canary objeler tekniğini inceleyeceğiz; ardından serinin tamamını özetleyen bir mitigasyon kontrol listesi ve bir olay ID (Event ID) master tablosu ile seriyi kapatacağız.

Canary Objelerle Active Directory Ele Geçirmelerini Tespit Etmek

Active Directory ele geçirmelerinin tespiti, olgun bir SIEM (security information and event management güvenlik bilgi ve olay yönetimi) ve SOC (Security Operations Centre) kapasitesine sahip kuruluşlar için bile zor, zaman alıcı ve kaynak yoğun bir iştir. Bunun temel nedeni, bu bölümde gördüğümüz tekniklerin çoğunun meşru Active Directory işlevselliğini istismar etmesi ve normal etkinlikle aynı olay kayıtlarını üretmesidir. Kötü niyetli etkinliği normal etkinlikten ayırt etmek genellikle farklı kaynaklardan gelen olayların ilişkilendirilmesini ve bu olayların tutarsızlıklar açısından analiz edilmesini gerektirir. Bazı tekniklerde ise tespit, bir olayın varlığına ve başka bir olayın yokluğuna dayanır. Bu karmaşıklık, Active Directory ele geçirmelerinin başarısının ve kuruluşlar arasındaki yaygınlığının en önemli nedenlerinden biridir.

Canary objeler, bu karmaşıklığı ortadan kaldıran alternatif bir yaklaşımdır. Bu teknik, olay kayıtlarının ilişkilendirilmesine dayanmaz; bunun yerine bir ele geçirmenin gerçekleştiğine dair güçlü ve doğrudan bir gösterge sağlar. Önemli bir nokta, bu tekniğin kötü niyetli aktörlerin kullandığı aracı (tooling) tespit etmeye çalışan diğer tespit yöntemlerinin aksine, doğrudan ele geçirmenin kendisini tespit etmesidir. Bu sayede ele geçirmeleri daha yüksek doğrulukla yakalama olasılığı vardır. Açık kaynaklı ve ticari araçlar (örneğin Airbus tarafından geliştirilen canary çözümleri) bu ve benzeri teknikleri kullanır.

Canary Objeler Nasıl Çalışır

Canary objeler, Everyone güvenlik grubu üzerinden tüm kullanıcı nesnelerine okuma erişimini reddedecek şekilde yapılandırılabilir. Bu, Directory Service Access denetim ilkesinin hem Success hem de Failure; için yapılandırılmasıyla birleştiğinde, herhangi biri canary objelerden birinin özniteliklerini okumaya çalıştığında bir denetim başarısızlığı olayı (Event ID 4662) üretilmesini sağlar. Bu olay, canary objelerin GUID’i (Globally Unique Identifier) ile yapılandırılmış bir SIEM’e alınabilir ve bu GUID’i içeren herhangi bir karşılık gelen olayda uyarı verecek şekilde ayarlanabilir. Bu, canary objelerden birini numaralandırma (enumeration) girişiminde bulunulduğuna dair yüksek değerli bir uyarı sağlar bu da Active Directory’ye karşı bir ele geçirmenin göstergesidir.

Active Directory’deki nesneleri numaralandıran herhangi bir ele geçirme bu teknikle tespit edilebilir. Bu önemlidir çünkü Active Directory’ye yönelik çoğu ele geçirme, SharpHound gibi bir araç kullanılarak domain’deki tüm nesnelerin numaralandırılmasıyla başlar. Kötü niyetli aktörler, ayrıcalık yükseltme (privilege escalation) ve yanal hareket (lateral movement) için istismar edilebilecek yanlış yapılandırmaları, zayıflıkları ve güvenlik açıklarını belirlemek için bu taktiği kullanır. Bu tür numaralandırma bu teknikle tespit edilir ve kuruluşlara Active Directory ele geçirmesinin devam ettiğine dair erken bir uyarı sağlayabilir.

Bu teknikle tespit edilebilen bu seride ele aldığımız teknikler şunlardır:

Tekniğin Sınırlaması

Bu tekniğin bir sınırlaması, kötü niyetli aktörlerin yalnızca tek bir veya küçük sayıda kullanıcı nesnesini hedef almayı tercih edebilmesidir. Bu durumda, canary objeleri okumaya çalışmaları olası değildir. Sonuç olarak, bu teknik istenen denetim başarısızlığı olayını üretmez ve dolayısıyla SIEM tarafından tespit edilmez. Bu nedenle canary objeler, geniş çaplı numaralandırmaya karşı güçlü bir erken uyarı katmanı olsa da, tek başına yeterli bir tespit stratejisi değildir bu serinin önceki 18 bölümünde işlediğimiz teknik bazlı tespit yöntemleriyle (Event ID tabloları, SACL’ler (System Access Control List), audit policy yapılandırmaları) birlikte kullanılmalıdır.

Lab Uygulaması

Bu bölümün lab uygulaması için W25DC (bakicubuk.local) üzerinde bir canary kullanıcı nesnesi oluşturup, raporun önerdiği tespit mekanizmasının gerçekten çalışıp çalışmadığını uçtan uca test ettik. Bu son bölüm, serinin en fazla beklenmedik bulgu çıkaran laboratuvar uygulamalarından biri oldu hem gerçek bir altyapı sorunuyla hem de tekniğin kendisinin öngördüğü bir kilitlenme senaryosuyla karşılaştık.

1. Adım – Canary Kullanıcı Nesnesi Oluşturma

Gerçek bir kullanıcıymış gibi görünen ama hiçbir meşru işlemde kullanılmayan bir hesap oluşturmaya çalıştık:

New-ADUser -Name "Canary01" -SamAccountName "canary01" -Path "OU=LAPS,DC=bakicubuk,DC=local" -Enabled $true -AccountPassword (ConvertTo-SecureString "N0tR3al!Passw0rd" -AsPlainText -Force)

Gerçek bulgu – RID (Relative Identifier) havuzu bozulması: İlk denemede komut The directory service was unable to allocate a relative identifier hatasıyla başarısız oldu. dcdiag /test:ridmanager /v çıktısı, rIDPreviousAllocationPool değerinin geçersiz olduğunu ve rIDNextRID değerinin 0 göründüğünü ortaya çıkardı. Kök nedeni araştırdığımızda, domaindeki ikinci Domain Controller olan W25ADC‘nin kapalı olduğunu ve bu yüzden RID Master W25DC ile replikasyon yapamadığını gördük. W25ADC‘yi tekrar açıp repadmin /replsummary ile replikasyonun hatasız tamamlandığını doğruladıktan sonra, dcdiag /test:ridmanager /v passed test RidManager sonucunu verdi ve New-ADUser komutu sorunsuz çalıştı. Bu, canary tekniğiyle doğrudan ilgili olmasa da, gerçek bir Active Directory ortamında ikinci bir Domain Controller’ın kapalı kalmasının RID havuzu tahsisini nasıl kilitleyebileceğini gösteren değerli bir yan bulgu oldu.

Nesnenin oluşturulduğunu ve öznitelik değerlerini doğruladık:

Buradaki ObjectGUID (22c15fca-ca1f-490b-b8d2-ae752c203a48) değeri, ilerleyen adımlarda SIEM’e alınacak ve Event ID 4662 olaylarıyla eşleştirilecek olan kritik tanımlayıcıdır.

2. Adım – Everyone Grubuna Okuma Erişimini Reddetme (Deny ACE)

Canary nesnesinin ACL’sine (Access Control List), Everyone güvenlik grubu için GenericRead iznini reddeden bir ACE (Access Control Entry) ekledik. Bunu PowerShell’de System.DirectoryServices ile, hedef nesnenin ObjectSecurity özelliğine bir ActiveDirectoryAccessRule (Deny türünde) ekleyerek yaptık:

$canaryDN = (Get-ADUser canary01).DistinguishedName
$canary = [ADSI]"LDAP://$canaryDN"
$everyoneSid = New-Object System.Security.Principal.SecurityIdentifier("S-1-1-0")
$denyRule = New-Object System.DirectoryServices.ActiveDirectoryAccessRule(
    $everyoneSid,
    [System.DirectoryServices.ActiveDirectoryRights]::GenericRead,
    [System.Security.AccessControl.AccessControlType]::Deny
)
$canary.ObjectSecurity.AddAccessRule($denyRule)
$canary.CommitChanges()

Komut hatasız tamamlandı ve ACE (Access Control Entry) güncellendi.

Gerçek bulgu kendi kendini kilitleme:

ACE (Access Control Entry) değişikliğinin ardından, ACL’yi (Access Control Entry) doğrulamak için Administrator hesabıyla canary nesnesini tekrar okumaya çalıştığımızda, Get-ADUser canary01 komutu bile Cannot find an object with identity: 'canary01' hatası verdi. Domain Admin ve nesnenin sahibi (owner) olan Administrator hesabı da dahil olmak üzere kimse artık nesneyi normal yollarla okuyamıyordu. Bunun nedeni, Administrator hesabının da Everyone grubunun bir üyesi olması ve Windows ACE (Access Control Entry) değerlendirmesinde açık (explicit) Deny kurallarının, ayrıcalık seviyesinden bağımsız olarak açık Allow kurallarından önce değerlendirilmesidir. Bu, raporun canary objeler için tarif ettiği mekanizmanın (Everyone güvenlik grubu üzerinden tüm kullanıcı nesnelerine okuma erişimini reddetme) tam olarak beklendiği gibi çalıştığının kanıtıydı sadece hedeflenen saldırganları değil, gerçekten herkesi engelliyordu:

Erişimi geri kazanmak için dsacls.exe kullandık bu araç yalnızca DACL’yi (Discretionary Access Control List) yönetir ve WRITE_DAC hakkını doğrudan kullandığı için, tam bir nesne bağlama/okuma gerektiren [ADSI]/DirectoryEntry erişiminin aksine, Deny kuralı tarafından engellenmedi:

dsacls "CN=Canary01,OU=LAPS,DC=bakicubuk,DC=local" /R "Everyone"

Bu komutla Deny kuralını kaldırdıktan sonra Get-ADUser canary01 tekrar başarılı oldu ve normal erişim geri geldi.

3. Adım – Directory Service Access Denetimini Etkinleştirme

Bu alt kategori için hem Success hem Failure denetimini açtık:

auditpol /set /subcategory:"Directory Service Access" /success:enable /failure:enable

Gerçek bulgu – denetim alt kategorisi tek başına yeterli değil:

Bu noktada sadece auditpol alt kategorisini etkinleştirmenin Event ID 4662 üretmek için yeterli olmadığını keşfettik bu, Bölüm 18‘de msDS-KeyCredentialLink ve Event 5136 için karşılaştığımız sorunla birebir aynıydı. Microsoft Learn dokümantasyonunun da doğruladığı gibi, denetim olayları yalnızca yapılandırılmış bir SACL’e (System Access Control List) sahip nesnelerde ve bu nesneler SACL (System Access Control List) ayarlarıyla eşleşen bir şekilde erişildiğinde üretilir. Yani nesne düzeyinde ayrıca bir SACL (System Access Control List) yapılandırmamız gerekiyordu.

Bunu yaparken üç ayrı teknik engelle karşılaştık: dsacls yalnızca DACL’yi (Discretionary Access Control List) yönetebiliyor, SACL’ye (System Access Control List) dokunamıyor. DirectoryEntry.ObjectSecurity özelliği varsayılan olarak yalnızca DACL’yi (Discretionary Access Control List) getiriyor; SACL’yi (System Access Control List) okuyabilmek/yazabilmek için .ObjectSecurity‘ye ilk erişimden önce Options.SecurityMasks değerine Sacl bayrağının eklenmesi gerekiyor. Son olarak, Options.SecurityMasks özelliğine doğrudan atama yapmaya çalıştığımızda (“$canary.Options.SecurityMasks = ...“) PowerShell’in COM (Component Object Model) etkileşim katmanı üzerinden dinamik bağlama nedeniyle “property not found” hatası aldık. Çözüm, Options nesnesini açıkça DirectoryEntryConfiguration türüne tür dönüştürmekten (cast) geçti:

$canaryDN = (Get-ADUser canary01).DistinguishedName
$canary = [ADSI]"LDAP://$canaryDN"
[System.DirectoryServices.DirectoryEntryConfiguration]$secOptions = $canary.get_Options()
$secOptions.SecurityMasks = [System.DirectoryServices.SecurityMasks]"Dacl, Sacl"

$everyoneSid = New-Object System.Security.Principal.SecurityIdentifier("S-1-1-0")
$auditRule = New-Object System.DirectoryServices.ActiveDirectoryAuditRule(
    $everyoneSid,
    [System.DirectoryServices.ActiveDirectoryRights]::GenericRead,
    "Success, Failure"
)
$canary.ObjectSecurity.AddAuditRule($auditRule)
$canary.CommitChanges()

Bu son kombinasyon hatasız çalıştı. Ardından Deny ACE’yi (2. Adım’daki script ile) tekrar ekleyerek canary nesnesini yeniden kilitledik – artık hem Deny kuralı hem de nesne düzeyinde SACL yerinde olduğu için tespit mekanizması tam olarak yapılandırılmıştı.

4. Adım – Canary Tetikleme ve Event ID 4662 Doğrulaması

Farklı bir kullanıcı bağlamından (nihat.cubuk ile) canary nesnesini okumaya çalıştık:

Get-ADUser canary01

Beklendiği gibi erişim reddedildi. Ardından W25DC‘nin Security Log’unu kontrol ettik:

Get-WinEvent -FilterHashtable @{LogName='Security'; Id=4662} -MaxEvents 5 | Format-List

Sonuç, raporun önerdiği tespit mekanizmasının gerçekten çalıştığının nihai kanıtı oldu: Account Name: nihat.cubuk, Object Name: %{22c15fca-ca1f-490b-b8d2-ae752c203a48} (canary01’in tam GUID’i ile eşleşiyor), Operation Type: Object Access, Accesses: Read Property, Access Mask: 0x10. Bir SIEM’e bu GUID için önceden tanımlanmış bir uyarı kuralı eklendiğinde, bu tek olay tek başına bir Active Directory numaralandırma girişimine dair yüksek güvenilirlikli, doğrudan bir uyarı üretecektir olay ilişkilendirmesi veya karmaşık korelasyon kurallarına gerek kalmadan.

Lab Uygulamasından Çıkarımlar

Bu lab uygulaması, raporun canary objeler için tarif ettiği tekniğin iki yönünü de doğruladı: hem Everyone/GenericRead üzerine kurulu Deny mekanizmasının gerçekten herkesi (Administrator dahil) engellediğini, hem de doğru yapılandırılmış bir SACL ile bu engelleme girişimlerinin Event ID 4662 olarak güvenilir şekilde yakalandığını gördük. Ayrıca, denetim alt kategorisinin tek başına yeterli olmadığı ve nesne düzeyinde ayrı bir SACL yapılandırması gerektiği – Bölüm 18’de karşılaştığımız aynı dersin bir tekrarı – bu bölümün en pratik operasyonel bulgusu oldu.

Serinin Özeti: Mitigasyon Kontrol Listesi

Aşağıdaki tablo, serinin 1-18. bölümlerinde ele alınan her tekniğin en kritik mitigasyonlarını özetliyor. Her satırdaki tam mitigasyon listesi için ilgili bölüme bakılabilir.

Bölüm Teknik Öncelikli Mitigasyonlar
1 Kerberoasting SPN’li (Service Principal Name) hesaplarda sayıyı minimize etmek, gMSA kullanmak veya 30+ karakterlik yönetilen şifre
2 AS-REP Roasting Kerberos ön kimlik doğrulamasını (pre-authentication) zorunlu kılmak, istisnalara minimum ayrıcalık vermek
3 Password Spraying Uzun/yönetilen şifreler, 5 hatalı denemede kilitleme, NTLM’i devre dışı bırakmak
4 MachineAccountQuota ms-DS-MachineAccountQuota değerini sıfırlamak, Domain Computers grubunun yazma yetkisini kısıtlamak
5 Unconstrained Delegation Bilgisayar nesnelerinde unconstrained delegation’ı kaldırmak, ayrıcalıklı hesapları Protected Users grubuna almak
6 Password in GPP Tüm GPP şifrelerini kaldırmak, KB2962486 yamasını uygulamak
7 AD CS (ESC1) ‘Enrollee Supplies Subject’ bayrağını kaldırmak, sertifika şablonu izinlerini kısıtlamak
8 Golden Certificate AD CS CA’lar için MFA (multi-factor authentication – çok faktörlü kimlik doğrulama), HSM (hardware security module – donanımsal güvenlik modülü) ile anahtar koruması, uygulama denetimi
9 DCSync DCSync izinli hesap sayısını minimize etmek, bu hesapların SPN’li (Service Principal Name) olmamasını sağlamak, NTLMv1’i devre dışı bırakmak
10 Dumping ntds.dit Domain Controller erişimini kısıtlamak, Print Spooler ve SMBv1’i devre dışı bırakmak
11 Golden Ticket KRBTGT şifresini her 6 ayda bir (veya şüpheli ele geçirmede) değiştirmek
12 Silver Ticket Bilgisayar nesnesi şifrelerini 30 günde bir değiştirmek, SPN’li (Service Principal Name) hesapları gMSA yapmak
13 Golden SAML AD FS servis hesabını gMSA yapmak, token imzalama sertifikalarını 12 ayda bir döndürmek
14 Entra Connect Hard/soft match takeover’ı devre dışı bırakmak, ayrıcalıklı hesapları senkronize etmemek
15 One-Way Trust Bypass Domain Controller erişimini kısıtlamak, günlükleri merkezi analiz etmek
16 SID History sIDHistory özniteliğinin kullanılmadığından emin olmak, haftalık kontrol, SID Filtering’i etkinleştirmek
17 Skeleton Key LSASS sürecini korumalı modda (RunAsPPL) çalıştırmak, imzasız sürücüleri engellemek
18 Shadow Credentials Key Admins/Enterprise Key Admins üyeliğini kısıtlamak, msDS-KeyCredentialLink değişikliklerini düzenli incelemek

Serinin Özeti: Olay ID (Event ID) Master Tablosu

Aşağıdaki tablo, seri boyunca kullandığımız temel Event ID’leri, hangi teknik(ler)i tespit ettiklerini ve ilgili bölümü bir arada listeliyor.

Event ID Kaynak Teknik(ler) Bölüm Açıklama
1102 Dumping ntds.dit, One-Way Trust Bypass, SID History, Skeleton Key 10, 15, 16, 17 Security denetim günlüğü temizlendi
2889 Password Spraying 3 İmzasız LDAP bind denemesi
3033 / 3063 Skeleton Key 17 İmzasız veya güvensiz sürücü yüklenemedi
4103 / 4104 Dumping ntds.dit, One-Way Trust Bypass, SID History, Skeleton Key, Golden SAML, Entra Connect 10, 13, 14, 15, 16, 17 PowerShell modül/script blok günlüğü
4624 Password Spraying, MachineAccountQuota, Unconstrained Delegation, Silver Ticket 3, 4, 5, 12 Hesap başarıyla oturum açtı
4625 AS-REP Roasting, Password Spraying 2, 3 Hesap oturum açamadı
4656 / 4663 Dumping ntds.dit, Skeleton Key 10, 17 Nesneye erişim istendi/denendi
4662 DCSync, Golden SAML, Canary Objeler 9, 13, 19 Nesne üzerinde işlem gerçekleştirildi
4674 AD CS (ESC1) 7 Ayrıcalıklı nesne üzerinde işlem denendi
4675 SID History (domain hopping) 16 SID’ler filtrelendi
4738 Kerberoasting, AS-REP Roasting, SID History 1, 2, 16 Kullanıcı hesabı değiştirildi
4768 AS-REP Roasting, AD CS, Golden Ticket, One-Way Trust Bypass 2, 7, 11, 15 Kerberos TGT (Ticket Granting Ticket) istendi
4769 Kerberoasting, Golden Ticket 1, 11 TGS (Ticket Granting Service) istendi
5136 Kerberoasting, AS-REP Roasting, Shadow Credentials 1, 2, 18 Dizin hizmeti nesnesi değiştirildi
39/40/41 AD CS 7, 8 KDC (Key Distribution Center) sertifika eşleme sorunları
4876/4886/4887/4899/4900 AD CS, Golden Certificate 7, 8 Sertifika hizmeti istekleri ve şablon değişiklikleri
70/307/510/1007/1200/1202 Golden SAML 13 AD FS federasyon yapılandırma ve token olayları
611/650/651/656/657 Microsoft Entra Connect 14 Parola senkronizasyonu (PHS) olayları

Uyumluluk ve Çerçeve Eşlemesi Tablosu

Çerçeve İlgili Kontrol/Madde
PCI DSS Gereksinim 7.1 (Erişim kısıtlaması), Gereksinim 10.2 (Denetim izleri)
HIPAA 164.312(a)(1) – Erişim Kontrolü, 164.312(b) – Denetim Kontrolleri
ISO 27001 A.9.2 (Kullanıcı Erişim Yönetimi), A.12.4 (Günlükleme ve İzleme)
KVKK Madde 12 – Veri Güvenliğine İlişkin Yükümlülükler
TCMB Bilgi Sistemleri Yönetimi Tebliğ – Erişim ve Yetkilendirme Kontrolleri
NIST CSF PR.AC-4 (Erişim izinleri ve yetkilendirmeleri yönetilir), DE.CM-1 (Ağ izlenir)
CIS Controls CIS 5 (Hesap Yönetimi), CIS 6 (Erişim Kontrol Yönetimi)

MITRE ATT&CK: T1087 (Account Discovery), T1482 (Domain Trust Discovery) canary objelerin doğrudan hedef aldığı numaralandırma (enumeration) davranışı

Sonuç

Bu seri boyunca 18 farklı Active Directory ele geçirme tekniğini kendi iki forest lab ortamımızda (bakicubuk.local / nihatcubuk.local, Windows Server 2025) canlı olarak test ettik. Bazı teknikler (Skeleton Key, Shadow Credentials, Golden Ticket, Silver Ticket) beklendiği gibi çalıştı ve mitigasyonların (LSA koruması gibi) gerçekten etkili olduğunu doğruladık. Diğerlerinde (SID History enjeksiyonu gibi) modern Windows Server 2025 ortamının eski teknikleri artık büyük ölçüde engellediğini gördük bu da raporun temel mesajını doğrulayan güçlü bir bulgu oldu.

Bu son bölümde ele aldığımız canary objeler tekniği, serinin genelinde işlediğimiz teknik bazlı, olay korelasyonuna dayalı tespit yöntemlerini tamamlayan, daha basit ve daha güvenilir bir erken uyarı katmanı sunuyor. Ancak yukarıdaki sınırlamada belirttiğimiz gibi, tek başına yeterli değil gerçek bir savunma derinliği (defense in depth) stratejisi, bu 19 bölümde işlediğimiz mitigasyonların, tespit mekanizmalarının ve canary objelerin birlikte, katmanlı şekilde uygulanmasını gerektiriyor.

Serinin tamamına ve kaynak rapora bu blogdaki ilgili yazılardan ulaşılabilir. Okuduğunuz için teşekkürler.

Bir yanıt yazın

Başa Dön