Zaman neden önemlidir? W32Time ve kimlik doğrulama bağımlılığı.
Kerberos preauthentication’da şifreli zaman damgasının key ile doğrulanması ile saat farkının tolerans içinde olması ayrı koşullardır. Varsayılan tolerans 5 dakikadır; fark bunu aşarsa KRB_AP_ERR_SKEW (0x25) dönebilir. W32Time hiyerarşisini, saat farkı ölçümünü ve düzeltmeden sonraki yeni denemeyi birlikte inceleyeceğiz.
1. Core Mechanism / Temel mekanizma
Domain üyesi istemcideki Windows Time service (W32Time), forest'ın zaman hiyerarşisi, kimlik doğrulayan DC'nin KDC bileşeni ve Kerberos preauthentication'daki zaman damgası. Bu ders 'zaman kaynağı nereden gelir ve saat farkı authentication'ı nasıl etkiler' sorusunu ele alır; Kerberos AS/TGS mesaj alanlarının tam yapısını 06 bölümüne, W32Time'ın NTP algoritma ayrıntısını ise ilgili ağ dersine bırakır.
Arabirimler ve belirtimler
- W32Time (Windows Time service): domain üyesinin saatini hiyerarşiye göre hizalayan servis; üyeler varsayılan olarak time client rolündedir.
- NT5DS (domain hierarchy) time source: domain üyesinin, kimlik doğrulayan bir DC'den saat aldığı varsayılan senkron modu.
- PDC emulator (forest kök domain): zaman hiyerarşisinin tepesindeki, varsayılan yetkili saat kaynağı; alt domainlerin PDC'leri ondan senkronlanır.
- stratum: referans saate hiyerarşik uzaklık göstergesi. Düşük değer genellikle daha yakın bir kaynağı gösterir; gerçek offset veya doğruluk ölçümü değildir. Source, sync durumu ve ölçülen farkla birlikte yorumlanır.
- Kerberos Policy / MaxClockSkew ('Maximum tolerance for computer clock synchronization'): istemci ile DC arasında Kerberos'un tolere ettiği en büyük saat farkı; varsayılan 5 dakika.
- PA-ENC-TIMESTAMP (PreAuthType 2): istemcinin parolasından türetilen anahtarla şifreleyip gönderdiği zaman damgalı preauth verisi.
- KRB_AP_ERR_SKEW (0x25): istenen zaman ile KDC zamanı farkı izin verilen skew'i aştığında dönen Kerberos hatası; 4771'de Status alanında görünür.
Saat kontrolü neyi doğrular?
Parola tabanlı bu AS örneğinde istemci PA-ENC-TIMESTAMP gönderir. Bu preauth verisi, istemcinin secret key’iyle şifrelenmiş zaman damgasını taşır; yalnız açık bir saat bilgisi değildir.
KDC, key ile doğrulama/decryption işleminden sonra zamanı kendi saatiyle karşılaştırır. Tolerans içinde olmak yalnız freshness koşulunu karşılar. Yanlış key’i, geçersiz hesabı veya diğer KDC kontrollerini geçerli hale getirmez.
Servise sunulan AP authenticator’ın tekrar kullanılması ayrı bir kontrol konusudur. RFC 4120 §3.2.3, tolerans içindeki tekrarların replay cache veya uygulamanın uygun başka korumasıyla ayırt edilmesini ister. AS preauth saat kontrolünü, servis tarafındaki bu kontrolle aynı adım sayma.
Tolerans sonlu ve yapılandırılabilir: varsayılan 5 dakika
İzin verilen fark, Kerberos Policy içindeki 'Maximum tolerance for computer clock synchronization' ayarıyla belirlenir. Konumu: Computer Configuration\Windows Settings\Security Settings\Account Policies\Kerberos Policy. Varsayılan değer 5 dakikadır ve DC üzerinde yapılandırılır.
Bu derste diğer KDC kontrollerinin geçtiğini varsayıyoruz. Saat farkı tolerans içindeyse akış devam edebilir; sınırı aşıyorsa KDC KRB_AP_ERR_SKEW (0x25) döner. “Saatler yakın” gözlemi tek başına authentication başarısı değildir.
Bu değeri gereksiz büyütmek replay penceresini açar; aşırı küçültmek ise normal saat kaymalarında kırılganlık yaratır. Bu yüzden çözüm toleransı gevşetmek değil, saatleri gerçekten hizalı tutmaktır.
W32Time saati bir hiyerarşiden alır
Bir AD DS forest'ının önceden belirlenmiş bir zaman senkronizasyon hiyerarşisi vardır; en doğru referans saatler tepededir. Domain üyeleri varsayılan olarak time client'tır ve NT5DS moduyla saatlerini kimlik doğrulayan bir DC'den alır. Böylece her makinenin kendi rastgele NTP kaynağını seçmesi gerekmez.
Hiyerarşinin tepesinde, forest kök domain'in PDC emulator'ı bulunur ve varsayılan yetkili saat kaynağıdır. Alt domainlerin PDC'leri üst hiyerarşiden, üye makineler ise DC'lerinden senkronlanır. Bu zincir, tüm domain'in ortak ve tutarlı bir zamana yakınsamasını sağlar.
Bu ders boyunca tek bir istemciyi izleyelim: WS-034'ün saati bir güç kesintisi sonrası 12 dakika ileri kayar → W32Time henüz düzeltmeden kullanıcı oturum açmayı dener → DC skew'i 5 dakikayı aşmış görür → preauth 0x25 ile reddedilir. Değişen state, istemci saatinin DC saatine olan farkıdır.
Durum ve veri akışı
- Domain üyesi W32Time, NT5DS moduyla kimlik doğrulayan bir DC'den (dolaylı olarak PDC emulator hiyerarşisinden) saat alır.
- Kullanıcı/makine kimlik doğrulaması başlar; istemci PA-ENC-TIMESTAMP içinde zaman damgalı preauth gönderir.
- DC zaman damgasını çözer ve kendi saatiyle karşılaştırır.
- Saat farkı MaxClockSkew içindeyse freshness kontrolü geçer; authentication diğer KDC kontrollerine bağlı olarak devam eder.
- Saat farkı sınırı aşıyorsa KDC 0x25 ile reddeder; Failure audit açıksa DC’de 4771 / Status=0x25 görülebilir.
- W32Time saat farkını tolerans içine getirir; yeni bir authentication denemesinde saat kontrolü tekrar yapılır. Diğer kontrollerin geçmesi ayrıca gerekir.
2. Exploitation / İstismar
Broken trust assumption
Kırılan varsayım, saatin yalnız 'insan tarafından okunan zaman' olduğu ve saat farkının en fazla log zaman damgalarını bozacağıdır. Gerçekte zaman, Kerberos'un replay korumasının temelidir; saat verisine ve tolerans ayarına yapılan müdahale doğrudan authentication sonucunu etkiler.
Technical prerequisites
- Bir cihazın saatini veya güvendiği zaman kaynağını etkileyebilme (ör. yerel saat değişikliği, sahte/kayan NTP kaynağı, hiyerarşi dışı zaman ayarı).
- Ya da savunma tarafında yanlış yapılandırma: aşırı büyük MaxClockSkew veya bozulmuş W32Time hiyerarşisi.
- Etkinin ötesine geçmek için hedeflenen tekniğin (ör. replay penceresini genişletme, DoS ile authentication kesme) diğer önkoşullarının da sağlanması.
Exploitation mechanism / İstismar mekanizması
Saat kayması, yeni Kerberos denemelerinde freshness kontrolünün reddine ve hizmet kesintisine yol açabilir. MaxClockSkew’i büyütmek ise daha geniş bir zaman aralığını kabul eder; senkronizasyon sorununu çözmez. Bu, replay cache’i kaldırmaz veya tek başına kimlik taklidi sağlamaz. Etkiyi saat kontrolü, secret key doğrulaması ve servis tarafındaki replay kontrolü olarak ayrı değerlendir.
Saat kayması bir DoS vektörüdür
Bir grup makinenin saatini skew sınırının ötesine kaydırmak, o makinelerin Kerberos preauth'unu topluca kırar. Bu bir gizlilik ihlali değil, hedefli bir hizmet kesintisidir; incelemede aynı anda birçok hosttan 0x25 kümesi olarak görünür.
Bu yüzden zaman altyapısı (W32Time hiyerarşisi, PDC emulator, NTP kaynakları) sadece 'IT hijyeni' değil, kimlik doğrulamanın erişilebilirlik bağımlılığıdır.
Toleransı gevşetmek yanlış çözümdür
0x25 hatasını azaltmak için toleransı büyütmek, daha eski zaman damgalarının freshness kontrolünden geçmesine izin verir. Replay cache veya uygulamanın ayrı replay kontrolü yine gerekir. Saat hiyerarşisini düzeltmeden eşiği değiştirmek yalnız semptomu gizleyebilir.
Doğru yaklaşım, toleransı makul (varsayılan 5 dk) tutup saatleri gerçekten hizalamaktır. Bu, saldırı yüzeyini genişletmeden kararlılığı sağlar.
3. Defense & Detection / Savunma ve tespit
Telemetry scope
- Kerberos authentication olayları yalnız domain controller'larda ve Audit Kerberos Authentication Service alt kategorisi açıkken üretilir.
- 4771 (Kerberos pre-authentication failed) TGT verilemediğinde üretilir; Failure Code (olay XML'inde Status alanı) başarısızlık nedenini taşır.
- Saat farkı için ayırt edici sinyal Status = 0x25 (KRB_AP_ERR_SKEW): istenen zaman ile KDC zamanı farkı izin verilen skew'i aşmıştır. Bu, yanlış parola (0x18) veya süresi dolmuş parola (0x17) gibi diğer 4771 nedenlerinden ayrılmalıdır.
- w32tm /query /status ile source, son başarılı sync ve servis durumunu incele. Belgelenmiş /query /status /verbose örneğinde Phase Offset de bulunur; çıktı OS sürümüne bağlıdır. Belirli bir DC ile farkı ölçmek için /stripchart /computer:<DC> kullanılır. Bu ölçümleri W32Time olayları ve 4771 zamanı ile birlikte değerlendir; tek çıktı bütün hiyerarşinin kök nedenini kanıtlamaz.
Events and relevant fields
- 4771 / Status = 0x25: KRB_AP_ERR_SKEW; saat farkı toleransı aştığında preauth reddi. Diğer değerlerden (0x17 KEY_EXPIRED, 0x18 PREAUTH_FAILED) ayrı yorumlanmalıdır.
- 4771 / TargetUserName, TargetSid: TGT istenen principal (kullanıcı veya '$' ile biten makine hesabı).
- 4771 / ServiceName: tipik olarak krbtgt/<REALM>; AS aşamasındaki TGT isteğini gösterir.
- 4771 / PreAuthType: preauth türü; parola tabanlı akışta PA-ENC-TIMESTAMP (2) beklenir.
- 4771 / IpAddress, IpPort: isteğin geldiği istemci ağ bağlamı; aynı skew'in hangi hostlardan geldiğini kümelemek için kullanılır.
- 4771 Version 0'dır ve yalnız DC'de üretilir; Status kodları RFC 4120 §7.5.9 hata kümesine dayanır.
0x25'i diğer 4771 nedenlerinden ayır
4771 tek bir hata değil, bir başarısızlık ailesidir. Status alanı asıl nedeni söyler: 0x25 saat farkı, 0x18 yanlış parola, 0x17 süresi dolmuş parola. Aynı olay ID'sini görüp hepsini 'kaba kuvvet' saymak yanlış kök nedene götürür.
Zaman sorununun imzası, farklı kullanıcı/host'larda eşzamanlı 0x25 kümesidir; parola tahmini ise genelde tek hedefe yoğun 0x18 üretir. Kümelenme deseni ve zaman penceresi ayrımı belirler.
Authentication kanıtı ile zaman kanıtını birleştir
4771 Status=0x25 'authentication skew nedeniyle reddedildi' der ama saatin neden kaydığını söylemez. Bunu W32Time/Time-Service olayları ve 'w32tm /query /status' gibi zaman tarafı kanıtıyla birleştirmek gerekir.
w32tm /query /status ile source, son başarılı sync ve servis durumunu incele. Belgelenmiş /query /status /verbose örneğinde Phase Offset de bulunur; çıktı OS sürümüne bağlıdır. Belirli bir DC ile farkı ölçmek için /stripchart /computer:<DC> kullanılır. Bu ölçümleri W32Time olayları ve 4771 zamanı ile birlikte değerlendir; tek çıktı bütün hiyerarşinin kök nedenini kanıtlamaz.
Detection logic · XPath
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4771)] and EventData[Data[@Name='Status']='0x25']]</Select>
</Query>
</QueryList>Query assumptions
- Bu selector tek bir DC’nin yerel Security logundaki event düğümlerini seçer; çok-host korelasyonu yapmaz.
- Status, örnekte 0x25 metnidir. Collector bu alanı normalize ediyorsa gerçek mapping’i doğrula.
- 4771 için DC’de ilgili Failure audit gerekir. Sorgu gerçek Windows Event Log üzerinde çalıştırılmadı.
False positives
- Uzun süreli çevrimdışı kalmış veya güç kesintisi yaşamış cihazların W32Time düzeltmeden önceki geçici skew hataları.
- Sanal makine snapshot'tan dönüş veya donanim saat pili arızası kaynaklı tek seferlik skew.
- Yeni kurulan/lab cihazlarının hiyerarşiye ilk senkron öncesi ürettiği 0x25 olayları.
Hardening
- W32Time hiyerarşisini doğru kur: üyeler NT5DS ile DC'lerinden, PDC emulator (forest kök) güvenilir bir dış zaman kaynağından senkronlansın; her makinenin ad-hoc dış NTP seçmesini engelle.
- 'Maximum tolerance for computer clock synchronization' değerini makul (varsayılan 5 dk) tut; skew hatalarını gizlemek için toleransı büyütme — bu replay penceresini açar.
- PDC emulator'ın zaman kaynağı sağlığını ve stratum'unu izle; zaman altyapısını kritik bir bağımlılık olarak envanterle ve izleme kapsamına al.
- Değişiklikleri (dış NTP kaynağı, tolerans, hiyerarşi) pilot ortamda doğrula, kademeli uygula ve geri dönüş planı hazırla; sanal DC'lerde host-time senkron çakışmalarını denetle.
Örnekler üzerinde oku / Read the examples
ÖRNEĞİ BİRLİKTE OKUYALIM
EĞİTİM İÇİN HAZIRLANDIBu alanlar hangi kararı gösteriyor?
4771 · KRB_AP_ERR_SKEW / Status 0x25 (Event XML, Version 0)
DC01.outreason.exampleBu host, preauth isteğini değerlendiren DC’dir; istemci adresi ayrı alandadır.
0x250x25, clock skew too great. Bu kod NTP kaynağının bozuk olduğunu veya saldırı yapıldığını tek başına kanıtlamaz.
22, PA-ENC-TIMESTAMP. Şifreli timestamp/key kontrolü ile saat farkı kontrolünü birbirinden ayır.
::ffff:192.0.2.34Bu denemenin kaynak adresi. W32Time ölçümünü hangi cihazla ilişkilendireceğini belirlemek için kullan.
Preauth saat kontrolü reddedilmiş. Source/offset/sync ve yeni deneme kanıtı olmadan kök nedeni veya düzelmeyi varsayma.
Burada bir örnek kaydı okuyoruz. Windows’a bağlanmıyoruz; olayın gerçekten yaşandığını veya saldırı olduğunu doğrulamıyoruz.
Bu örneğin kapsamı
Sentetik örnektir; gerçek Windows veya lab kaydı değildir. Alan adları ve şema Microsoft'un 4771 belgesindeki Version 0 örneğine dayanır. Status=0x25, RFC 4120 §7.5.9'daki KRB_AP_ERR_SKEW (clock skew too great) koduna karşılık gelir ve bu dersin mekanizmasını (saat farkı → preauth reddi) doğrudan gösterir. PreAuthType 2, parola tabanlı PA-ENC-TIMESTAMP akışını temsil eder. IP TEST-NET-1 (192.0.2.0/24) aralığındandır. Parser namespace, Provider, EventID (4771), Version ve EventData alanlarını doğrulamak için kullanılmalı; olay saatin neden kaydığını değil, yalnız skew nedeniyle reddedildiğini kanıtlar — kök neden için W32Time kanıtı gerekir.
Ham kaydı aç · EVENT-XML
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-Security-Auditing" Guid="{54849625-5478-4994-A5BA-3E3B0328C30D}" />
<EventID>4771</EventID>
<Version>0</Version>
<Channel>Security</Channel>
<Computer>DC01.outreason.example</Computer>
</System>
<EventData>
<Data Name="TargetUserName">birkan</Data>
<Data Name="TargetSid">S-1-5-21-1533101619-2072831041-1560920683-1442</Data>
<Data Name="ServiceName">krbtgt/OUTREASON.EXAMPLE</Data>
<Data Name="TicketOptions">0x40810010</Data>
<Data Name="Status">0x25</Data>
<Data Name="PreAuthType">2</Data>
<Data Name="IpAddress">::ffff:192.0.2.34</Data>
<Data Name="IpPort">51544</Data>
<Data Name="CertIssuerName" />
<Data Name="CertSerialNumber" />
<Data Name="CertThumbprint" />
</EventData>
</Event>İki yanlış kanı / Two reality checks
- Sanılan: Saat farkı en fazla log zaman damgalarını bozar; kimlik doğrulamayı etkilemez.
- Gerçekte: Kerberos preauth zaman damgası, DC saatiyle 'Maximum tolerance for computer clock synchronization' (varsayılan 5 dk) içinde olmalıdır. Aşılırsa preauth reddedilir ve KRB_AP_ERR_SKEW (0x25) döner; yani zaman sert bir authentication bağımlılığıdır.
- Sanılan: En doğrusu her makinenin saatini doğrudan güvenilir bir internet NTP'sine bağlamaktır.
- Gerçekte: Domain'de doğru model hiyerarşidir: üyeler NT5DS ile DC'lerinden senkronlanır ve forest kök PDC emulator varsayılan yetkili kaynaktır. Her üyenin ad-hoc dış NTP seçmesi hiyerarşiyi bozar; dış kaynak yalnız tepede (PDC emulator) yapılandırılır.
SIRA SENDE
Bu hikâyeyi sen çöz.
Bilgiyi hatırlamaktan bir adım ileri: koşulu değiştir, kanıtı oku, kararın nedenini anlat.
1 / 3 · SONUCU TAHMİN ET
Clock skew tolerans içinde ise authentication başarısı kesin mi?
Bir ipucu
Freshness yalnız bir önkoşuldur.
Cevabın gerekçesini oku
Hayır; yalnız zaman koşulu geçmiştir.
Doğru. Zaman düzeltmesi doğru key veya policy sonucu yerine geçmez.
2 / 3 · KANITI OKU
Bu sentetik 4771’i hangi bağlamda okumalısın?
- EventID
- 4771
- Computer
- DC01.iyelabs.example
- TargetUserName
- tunahan
- Status
- 0x25
- PreAuthType
- 2
Bir ipucu
Üretici DC01; AP-only bir failure varsayma.
Cevabın gerekçesini oku
KDC’de parola tabanlı pre-authentication zaman reddi bağlamında.
Doğru. Bu kayıt FS01 reports READ reddi değildir.
3 / 3 · KENDİN ANLAT
Saat düzeltmesinden sonra neden yeni denemenin sonucunu görmek gerekir?
Bir ipucu
Eski ret kaydı değişir mi; diğer koşullar yeniden değerlendirildi mi?
Cevabın gerekçesini oku
Saat düzeltmesi geçmiş 4771 kaydını değiştirmez. Yeni authentication denemesi timestamp’ı yeniden değerlendirir; zaman koşulu geçse bile key, account ve policy koşulları ayrıca başarılı olmalıdır.
- Eski event’in geçmiş denemeyi anlattığını belirttim.
- Yeni denemede diğer kontrollerin de geçmesi gerektiğini anlattım.
Açıklaman otomatik puanlanmaz. Kontrol noktalarını kendi cevabınla karşılaştır.
Bu pratikler öğrenme amaçlıdır; sertifika sınavının puanını etkilemez.
Kaynaklar / Sources
- Microsoft · Maximum tolerance for computer clock synchronization
Kerberos V5 tolerates max time difference between client and DC clocks; replay attacks; default 5 minutes; Kerberos Policy location - Microsoft · How the Windows Time Service Works
AD DS forest predetermined time synchronization hierarchy; stratum; members act as time client by default; clock discipline - Microsoft · 4771(F) Kerberos pre-authentication failed
Event XML (Version 0); Status/Failure Code field; RFC 4120 §7.5.9 codes; generated only on DCs; Audit Kerberos Authentication Service - IETF · RFC 4120 (Kerberos V5)
§7.5.9 error codes (KRB_AP_ERR_SKEW = 37 / 0x25); timestamp/preauthentication use against replay