Active Directory’yi Ele Geçirme Teknikleri Serisi – Bölüm 17: Skeleton Key

Merhaba

Önceki iki bölümde trust bypass ve SID History enjeksiyonuyla domain ve orman sınırlarını nasıl aşabileceğimizi gördük. Bu bölümde çok daha doğrudan bir teknik var: bir Domain Controller’ın kimlik doğrulama sürecinin kendisini ele geçirmek. Skeleton Key, saldırganların domain’deki her kullanıcı nesnesi için geçerli olan tek bir evrensel şifre enjekte etmesini sağlıyor gerçek şifreler etkilenmeden.

Skeleton Key’in Ele Geçirilmesi

Skeleton Key, bir Domain Controller üzerinde NTLM ve Kerberos kimlik doğrulama sürecini geçersiz kılan ve domain’deki herhangi bir kullanıcı nesnesi olarak kimlik doğrulamak için kullanılabilecek bir şifre Skeleton Key olarak adlandırılan belirleyen bir kötü niyetli yazılım (malware) türüdür. Bu, Domain Controller’daki LSASS sürecini ele geçirir ve çalıştırılması için yönetici ayrıcalıkları gerektirir. Bu kötü niyetli yazılım, saldırganlar tarafından kalıcılık sağlamak ve tespitten kaçınmak için kullanılır. Kimlik doğrulama süreci geçersiz kılındıktan ve Skeleton Key enjekte edildikten sonra, kötü niyetli kimlik doğrulamalar meşru kimlik doğrulamalardan neredeyse ayırt edilemez hale gelir, bu da kötü niyetli etkinliğin tespit edilmesini zorlaştırır.

Skeleton Key, domain’deki meşru kimlik doğrulama girişimlerini kesintiye uğratmaz.

Bunu şu şekilde başarır:

  • Bir kullanıcı nesnesi doğru ve meşru şifresiyle kimlik doğruladığında, kimlik doğrulama girişimi başarılı olur.
  • Saldırganlar Skeleton Key ile kimlik doğruladığında, kimlik doğrulama süreci önce bunun doğru ve meşru şifre olup olmadığını kontrol eder. Değilse, Skeleton Key’i Domain Controller’da bellekte saklanan değerle karşılaştırır. Eşleşirse, kimlik doğrulama başarılı olur.

Bunu başarmak için Skeleton Key kötü niyetli yazılımı, daha güçlü bir kriptografik algoritma (örneğin AES) mevcut olsa bile, Kerberos tarafından kullanılan kriptografik algoritmayı RC4’e düşürür (downgrade). Bu, korumalı hesapların veya RC4’ü desteklemeyecek şekilde yapılandırılmış diğer hesapların, enfekte olmuş bir Domain Controller’a kimlik doğrulamasında başarısız olmasına neden olabilir. Bu düşürmeyi yapmayan bir Skeleton Key sürümü de mevcuttur, ancak bu, enfekte olmuş Domain Controller’larda fark edilir performans veya bellek sorunlarına neden olabilir.

Skeleton Key, tüm kötü niyetli kimlik doğrulama girişimlerinin başarılı olmasını sağlamak için bir domain’deki her Domain Controller’da çalıştırılabilir. Tek bir Domain Controller’da da çalıştırılabilir, ancak bu durumda kötü niyetli kimlik doğrulama girişimleri, enfekte olmuş Domain Controller yerine kimlik doğrulama süreci düzgün çalışan bir Domain Controller’a gönderilirse başarısız olabilir.

Ele geçirilmiş NTLM/Kerberos kimlik doğrulama süreci ve Skeleton Key yalnızca bellekte bulunur ve enfekte olmuş Domain Controller yeniden başlatılarak kaldırılabilir. Ancak, saldırganlar Domain Controller’a yönetici ayrıcalıklarını korumaya devam ederse, domain’deki kalıcılıklarını yeniden kazanmak için Skeleton Key’i tekrar çalıştırabilirler.

LSASS Sürecini Korumalı Modda Çalıştırmak

LSASS süreci, yerel ve uzak oturum açmalar için kullanıcıları doğrulamaktan ve güvenlik politikasını uygulamaktan sorumludur. Saldırganlar tarafından bellekten kimlik bilgileri çıkarmak veya kimlik doğrulama akışını değiştirmek için kod enjekte etmek (Skeleton Key’de olduğu gibi) amacıyla sıkça hedef alınır. LSASS sürecine yönelik ele geçirmeler için yerel yönetici ayrıcalıkları gereklidir.

Korumalı modda, standart (yani korumasız) süreçler LSASS sürecinin belleğine erişemez veya onu değiştiremez, bu da bu tür ele geçirmelere karşı bir miktar koruma sağlar. Ayrıca, Local Security Authority’ye (LSA) yüklenen tüm eklentiler veya sürücüler (genellikle kimlik doğrulama uzantıları, akıllı kartlar vb. için kullanılır) Microsoft’un imzalama gereksinimlerini karşılamak zorundadır.

LSASS sürecini korumalı modda çalıştırmak (LSA korumasının bir parçası) grup ilkesi üzerinden yapılandırılabilir. Microsoft’un imzalama gereksinimlerini karşılamayan ve yüklenmesi engellenen sürücüleri günlüğe kaydetmek için denetim etkinleştirilebilir.

Bu koruma, kernel modda kötü niyetli kod çalıştırmak için savunmasız sürücülerden veya başka yollardan yararlanılarak atlatılabilir; bu tür kısıtlamaları göz ardı eder ve koruma seviyelerinin değiştirilmesine izin verir. Saldırganlar bunu, LSASS sürecinin korumasını kaldırmak veya bu kontrolü atlatacak şekilde kendi süreçlerini korumalı moda yükseltmek için kullanabilir.

Skeleton Key’i Mitigasyon Etmek

Skeleton Key’i mitigasyon etmek, saldırganların bir Domain Controller’a yönetici erişimi kazanma olasılığını azaltmayı gerektirir yönetici erişimine sahip kullanıcı nesnesi sayısını en aza indirerek, erişime ihtiyaç duyan kullanıcı nesnelerini güvence altına alarak ve Domain Controller’ları sıkılaştırarak. LSASS sürecini korumalı modda çalıştırmak, saldırganların bir Domain Controller’a yönetici erişimi kazanmaları durumunda bu süreci geçersiz kılmasını zorlaştırır. Ancak LSASS korumalı modu, kötü niyetli veya savunmasız bir kernel modu sürücüsü kullanılarak atlatılabilir. Microsoft’un savunmasız sürücü engelleme listesinin (vulnerable driver blocklist) uygulanması bunu mitigasyon etmeye yardımcı olabilir. Ayrıca, Domain Controller’larda ek hizmet, port veya uygulama çalıştırmamak, saldırı yüzeyini azaltır.

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

  • Domain Controller’lara erişimi yalnızca erişime ihtiyaç duyan ayrıcalıklı kullanıcılarla sınırlayın. Bu, saldırganların Domain Controller’lara erişim kazanma fırsatlarını azaltır.
  • Domain Controller’lara ayrıcalıklı erişim yollarını, yalnızca yönetim için gerekli port ve hizmetleri kullanan atlama sunucuları (jump server) ve güvenli yönetim iş istasyonlarıyla sınırlayın. Domain Controller’lar, Microsoft’un ‘Enterprise Access Model’inde ‘Tier 0’ varlıkları olarak sınıflandırılır.
  • LSASS sürecini korumalı modda çalıştırın. Bu, LSASS sürecini geçersiz kılmayı zorlaştırır ki bu, Skeleton Key’in başarılı olması için gereklidir.
  • Microsoft’un savunmasız sürücü engelleme listesini uygulayın. Domain Controller’larda bilinen kötü niyetli veya savunmasız sürücüleri kısıtlamak, saldırganların LSASS korumasını atlatmasını zorlaştırır.
  • Sürücü çalıştırmayı onaylanmış bir kümeyle sınırlayın. Domain Controller’larda yüklenebilecek sürücüleri onaylanmış bir kümeyle sınırlamak, LSASS korumasını atlatma girişimlerine karşı sıkılaştırma sağlar. Bu, Microsoft’un Windows Defender Application Control’ü de dahil olmak üzere uygulama kontrol çözümleri aracılığıyla gerçekleştirilebilir.
  • Domain Controller’ları yalnızca AD DS için kullanın ve güvenlikle ilgili olmayan hizmet veya uygulama yüklemeyin. Bu, Domain Controller’ın saldırı yüzeyini azaltır çünkü savunmasız olabilecek ve bir Domain Controller’ı ele geçirmek için kullanılabilecek daha az hizmet, port ve uygulama olur.
  • Domain Controller günlüklerini merkezi olarak kaydedin ve zamanında analiz edin. Domain Controller günlükleri, Domain Controller’larda ve domain’de potansiyel kötü niyetli etkinliği araştırmak için önemli olan zengin bir bilgi kaynağı sağlar.
  • Domain Controller’larda Print Spooler hizmetini devre dışı bırakın. Örneğin, saldırganlar Domain Controller’ların Print Spooler hizmetini, kontrol ettikleri bir sisteme kimlik doğrulaması yapmasını sağlayarak Domain Controller’ın bilgisayar nesnesi şifre hash’ini veya TGT’sini toplamak için hedef almıştır. Saldırganlar daha sonra bunu, zorladıkları Domain Controller’a kimlik doğrulamak ve yönetici erişimi kazanmak için kullanabilir.

Skeleton Key’i Tespit Etmek

Skeleton Key’i tespit etmek, bir Domain Controller’daki LSASS sürecinin izlenmesini gerektirir. Tipik olarak bir Skeleton Key, tüm kötü niyetli kimlik doğrulama girişimlerinin başarılı olmasını sağlamak için domain’deki her Domain Controller’da gerçekleştirilir. Ayrıca, Skeleton Key yalnızca bellekte bulunduğu için, bir Domain Controller her yeniden başlatıldığında tekrar gerçekleştirilmelidir. Bu özellikler, tespiti için fırsatlar sağlar.

Not: Aşağıdaki göstergelerin bir kısmı LSASS korumasının etkin olmasına dayanır; aksi takdirde saldırganların kernel modu sürücüleri ve diğer atlatma yöntemlerini kullanması gerekmeyebilir.

Skeleton Key’i Tespit Eden Olaylar

Olay ID Kaynak Açıklama
1102 Domain Controller’lar ‘Security’ denetim günlüğü temizlendiğinde üretilir. Saldırganlar tespitten kaçınmak için bu günlüğü temizleyebilir; bu olayın analizi, bir Domain Controller’ın ele geçirilip geçirilmediğini belirlemeye yardımcı olabilir.
3033 Domain Controller’lar Bir sürücü Microsoft’un imzalama gereksinimlerini karşılamadığı için yüklenemediğinde üretilir. Bu, genellikle LSASS.exe olan bir sürecin, Microsoft imzalama seviyesi gereksinimlerini karşılamayan bir sürücü yüklemeye çalıştığını gösterir. LSASS koruması etkinse bu sürücüler yüklenemez.
3063 Domain Controller’lar Bir sürücü, paylaşılan bölümler (shared sections) için güvenlik gereksinimlerini karşılamadığı için yüklenemediğinde üretilir. Bilinmeyen bir sürücü veya eklenti, LSASS sürecine yönelik bir müdahale girişimine işaret edebilir.
4103 Domain Controller’lar PowerShell çalıştığında ve pipeline çalıştırma detaylarını kaydettiğinde üretilir. Mimikatz gibi Skeleton Key çalıştırmak için kullanılan yaygın kötü niyetli araçlar PowerShell kullanır.
4104 Domain Controller’lar PowerShell tarafından kod çalıştırıldığında, script ve komutları yakalayarak üretilir. Invoke-Mimikatz gibi PowerShell tabanlı araçlar, Domain Controller’a herhangi bir dosya kopyalamadan Skeleton Key dağıtmak için kullanılabilir.
4663 Domain Controller’lar Bir nesneye erişim girişiminde bulunulduğunda üretilir. ‘Kernel Object Auditing’ etkinse, bu, LSASS sürecinin belleğine erişim girişimlerinin günlüğe kaydedilmesini içerir LSASS sürecine müdahalenin en doğrudan göstergesidir.

Lab Uygulaması

Bu bölümün lab uygulamasını W25DC (bakicubuk.local) üzerinde canlı olarak gerçekleştirdik ve önceki iki bölümün aksine, teknik Windows Server 2025’te ilk denemede sorunsuz çalıştı. Bu, serideki en doğrudan ve en çarpıcı sonuçlardan biri oldu.

1. Adım: Skeleton Key enjeksiyonu

W25DC‘de, Run as administrator (Yönetici olarak çalıştır) Mimikatz’da:

privilege::debug
Privilege '20' OK

misc::skeleton
[KDC] data
[KDC] struct
[KDC] keys patch OK
[RC4] functions
[RC4] init patch OK
[RC4] decrypt patch OK

Dört patch de (“keys patch OK”, “init patch OK”, “decrypt patch OK”) başarılı oldu. Bölüm 16‘daki sid::patch‘in aksine, bu teknik güncel build’de hala tam olarak çalışıyor.

2. Adım: Doğrulama – sahte şifreyle gerçek kaynağa erişim

Enjeksiyon sonrası, sıradan bir test hesabı olan nihat.cubuk‘un gerçek şifresi yerine varsayılan Skeleton Key şifresiyle (mimikatz) kimlik doğrulamayı denedik:

runas /user:bakicubuk\nihat.cubuk /netonly cmd
Enter the password for bakicubuk\nihat.cubuk: mimikatz

Açılan pencerede domain’deki gerçek bir kaynağa erişmeyi denedik:

C:\Windows\System32>dir \\w25dc.bakicubuk.local\c$
 Directory of \\w25dc.bakicubuk.local\c$
...
 9 Dir(s)  128.634.974.208 bytes free

Erişim Başarılı oldu nihat.cubuk‘un gerçek şifresi hiç kullanılmadan, yalnızca Skeleton Key şifresiyle domain kaynağına tam erişim sağlandı. Bu, Skeleton Key’in W25DC üzerinde eksiksiz çalıştığının doğrudan kanıtı.

3. Adım: LSA koruması gerçekten işe yarıyor mu?

Raporun önerdiği en güçlü mitigasyon olan LSASS korumalı modunu (RunAsPPL) etkinleştirip aynı denemeyi tekrarladık:

Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Lsa" -Name "RunAsPPL" -Value 1 -Type DWord
Restart-Computer

Yeniden başlatma sonrası, aynı komutları tekrar denedik:

privilege::debug
Privilege '20' OK

misc::skeleton
ERROR kuhl_m_misc_skeleton ; OpenProcess (0x00000005)

0x00000005 = ERROR_ACCESS_DENIED. LSA korumalı modu, mimikatz’ın normalde LSASS sürecini açmak (ve içine kod enjekte etmek) için kullandığı standart OpenProcess çağrısını doğrudan reddetti. Rapor haklı çıktı: bu tek mitigasyon, hiçbir ek yapılandırma gerekmeden Skeleton Key’i tamamen etkisiz hale getirdi.

Özet: Bu lab, Skeleton Key’in W25DC üzerinde (mitigasyonsuz durumda) tam olarak raporun anlattığı gibi çalıştığını sahte bir şifreyle gerçek şifre etkilenmeden domain kaynağına erişim sağlandığını ve LSA korumalı modunun bu saldırıyı tek başına tamamen engellediğini uçtan uca, gerçek kanıtlarla doğruladı.

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), PR.PT-3 (Asgari işlevsellik ilkesi)
CIS Controls CIS 5 (Hesap Yönetimi), CIS 8 (Denetim Günlüğü Yönetimi)

MITRE ATT&CK: T1556.001 (Modify Authentication Process: Domain Controller Authentication), T1003.001 (OS Credential Dumping: LSASS Memory)

Sonuç

Skeleton Key, saldırganların Domain Controller’a bir kez yönetici erişimi kazandığında, kimlik doğrulama sürecinin temelini nasıl silah haline getirebileceğini gösteriyor, meşru trafiği bozmadan, neredeyse görünmez bir kalıcılık mekanizması.

Serinin bir sonraki bölümünde, modern kimlik doğrulamanın (Windows Hello for Business, anahtar tabanlı kimlik doğrulama) kendine özgü bir zayıflığını istismar eden Shadow Credentials tekniğini inceleyeceğiz.

Bir yanıt yazın

Başa Dön