NTLM'nin emekliye ayrılması, siber güvenlik dünyasında "nihayet" dedirten o büyük dönüm noktalarından biri. 30 yıl bir teknoloji için sadece uzun bir süre değil, dijital bir ömür demek. Özellikle NTLM'nin kriptografik zayıflıkları ve relay (yansıtma) saldırılarına karşı savunmasızlığı düşünüldüğünde, bu geçiş bir tercihten ziyade modern altyapılar için bir zorunluluk.
Bu geçiş, özellikle sistem yönetimi ve güvenlik mimarisi açısından Windows ortamınızda köklü bir değişim yaratacaktır. NTLM'nin devre dışı bırakılması, sisteminizin artık sadece "güvenli olduğunu varsaydığınız" değil, protokol seviyesinde korunduğu bir yapıya dönüşmesi demektir.
İşte bu değişimin ortamınıza yansıyacak temel etkileri:
1. Saldırı Yüzeyinin Daralması (En Büyük Kazanım)
NTLM'nin ortadan kalkmasıyla birlikte, ağınızda yıllardır süregelen en yaygın saldırı vektörleri etkisiz hale gelecektir:
-
Relay Saldırıları: Saldırganların ağ trafiğini yakalayıp başka bir sunucuya "yansıtarak" oturum çalma devri kapanacaktır.
-
Pass-the-Hash: NTLM hash'lerinin çalınarak yanal ilerleme (lateral movement) yapılması Kerberos'un biletleme (ticket) sistemi sayesinde imkansızlaşacaktır.
2. "Double-Hop" Sorunları ve Çözüm Gereksinimi
NTLM bazen delegasyon gerektirmeyen durumlarda bir "kurtarıcı" gibi çalışıyordu. Kerberos'a geçişle birlikte:
-
Bir sunucudan diğerine kullanıcı kimliği aktarılması gereken senaryolarda (örneğin IIS -> SQL), Kerberos Constrained Delegation yapılandırması zorunlu hale gelecektir.
-
SPN (Service Principal Name) kayıtlarındaki en ufak bir hata, uygulamanın erişilemez olmasına neden olacaktır.
3. Eski Donanım ve Yazılımlarda Kopmalar
Ortamınızdaki "legacy" (eski nesil) sistemler en büyük risk grubudur:
-
Eski Ağ Yazıcıları/Tarayıcıları: SMB üzerinden tarama yapan eski cihazlar Kerberos desteklemiyorsa çalışmayı durduracaktır.
-
Eski NAS Cihazları: Sadece NTLM destekleyen eski depolama birimlerine erişim kesilecektir.
-
Hard-coded Scriptler: İçinde IP adresi barındıran ve NTLM kullanan eski PowerShell veya VBScript'ler hata verecektir (Kerberos IP yerine isim/FQDN odaklı çalışır).
4. DNS ve Zaman Senkronizasyonu Kritikliği
Kerberos, NTLM'den farklı olarak iki şeye aşırı duyarlıdır:
-
DNS: Eğer DNS kayıtlarınız güncel değilse veya ters DNS (PTR) kayıtları eksikse Kerberos biletleri oluşturulamaz.
-
Zaman (Time Sync): İstemci ve Domain Controller arasındaki zaman farkı 5 dakikadan fazlaysa kimlik doğrulama tamamen çöker.
5. Yeni Özelliklerin Getirdiği Kolaylık (IAKerb & Local KDC)
Microsoft'un 2026 sonunda sunacağı özellikler, geçişi daha az sancılı hale getirecek:
-
Local KDC sayesinde, yerel kullanıcı hesapları (local accounts) bile artık NTLM yerine Kerberos benzeri bir güvenlikle doğrulanacak.
-
IAKerb sayesinde, Domain Controller'ı doğrudan görmeyen uzak ofis bilgisayarları, sunucu üzerinden güvenli bir şekilde doğrulanabilecek.
Ne Yapmalısınız?
Bu geçişin ortamınızı olumsuz etkilememesi için şimdiden Denetim (Auditing) modunu açarak hangi cihazların NTLM "fısıldadığını" bulmalısınız. Özellikle ondernet.local gibi yerel alan adlarınızdaki servis hesaplarını gMSA (Group Managed Service Accounts) yapısına geçirmeniz, bu modernizasyon sürecinde işinizi çok kolaylaştıracaktır.
Bu süreci daha net anlamak adına, Kerberos'un neden daha güvenli olduğunu ve Microsoft'un bu yeni çözümlerle neyi hedeflediğini biraz daha yakından inceleyelim:
Kerberos vs. NTLM: Neden Değişiyor?
NTLM, "Challenge-Response" (Meydan Okuma-Yanıt) mekanizmasına dayanır. Bu süreçte hash değerleri ağ üzerinden iletildiği için saldırganlar bu trafiği yakalayıp başka bir sunucuya "yansıtabilir" (Relay Attack). Kerberos ise çok daha sofistike bir biletleme sistemi kullanır.
Microsoft'un Yeni Silahları: IAKerb ve Local KDC
BT yöneticilerinin en büyük korkusu, NTLM'yi kapattıkları gün "Local Admin" hesaplarının kilitlenmesi veya uzak ofislerdeki bağlantıların kopmasıdır. Microsoft bunu aşmak için iki kritik köprü kuruyor:
-
IAKerb (Initial Authentication Kerberos): Kerberos'un çalışması için normalde istemcinin Domain Controller (DC) ile doğrudan konuşabilmesi gerekir. IAKerb, istemci ve sunucu arasındaki mevcut bağlantıyı kullanarak Kerberos paketlerini DC'ye iletir (proxy görevi görür). Yani "DC'yi göremiyorum" bahanesi ortadan kalkar.
-
Local KDC (Key Distribution Center): Yerel hesaplar için Kerberos biletlerini yerel olarak yöneten bir yapı sunar. Bu, NTLM'ye olan bağımlılığı yerel oturum açma seviyesinde bile bitirmeyi hedefler.
Geçiş Takvimi ve Stratejik Önem
| Aşama | Zamanlama | Temel Odak |
| Denetim (Audit) | Şu an (Win 11 / Server 2025) | NTLM trafiğinin haritalanması ve "Sertleşme" (Hardening) hazırlığı. |
| Genişletme | 2026 Sonu | IAKerb ve Local KDC ile NTLM bağımlılığının teknik olarak bitirilmesi. |
| Varsayılan Engel | Gelecek Faz | NTLM'nin tamamen devre dışı bırakılması (Sadece istisnalar için manuel izin). |
Bu değişim, ağınızdaki "görünmez kapıları" kapatmak adına devasa bir adım. Özellikle Pass-the-Hash saldırılarının önünü kesmek, fidye yazılımı (ransomware) gruplarının lateral movement (yanal ilerleme) kabiliyetini ciddi oranda kısıtlayacaktır.
Kuruluşunuzdaki eski uygulamaların NTLM bağımlılığını tespit etmek için özel bir denetim (audit) stratejisi veya PowerShell scripti ile kontrol yapalım
NTLM'yi kapatmadan önce atılacak en kritik adım, ağınızda kimin, nereden ve hangi uygulamayla hala NTLM kullandığını sessizce izlemektir. Eğer bunu yapmadan protokolü devre dışı bırakırsanız, eski bir veritabanı bağlantısı veya bir ağ yazıcısı nedeniyle iş akışlarınız durabilir.
Aşağıdaki PowerShell scripti, Windows Olay Görüntüleyicisi (Event Viewer) üzerindeki NTLM Denetim (Auditing) kayıtlarını tarar ve size anlamlı bir özet sunar.
1. Adım: Denetimi Etkinleştirme (GPO üzerinden)
Scripti çalıştırmadan önce, sisteminizin bu verileri kaydetmesi gerekir. Grup İlkesi Düzenleyicisi'nde (gpedit.msc) şu yolu izleyin:
-
Bilgisayar Yapılandırması > Windows Ayarları > Güvenlik Ayarları > Yerel İlkeler > Güvenlik Seçenekleri
-
Ağ güvenliği: NTLM'yi kısıtla: Bu etki alanındaki NTLM denetimi -> Tümünü Etkinleştir olarak ayarlayın.
2. Adım: NTLM Analiz Scripti
Bu script, NTLM Audit loglarını (Event ID 8001, 8002, 8003 ve 8004) tarayarak hangi kullanıcıların ve hangi sunucuların hala bu eski protokolü kullandığını listeler.
# NTLM Kullanımını Raporlama Scripti
# Bu script 'Microsoft-Windows-NTLM/Operational' günlüğünü analiz eder.
$Events = Get-WinEvent -LogName "Microsoft-Windows-NTLM/Operational" -ErrorAction SilentlyContinue
if ($null -eq $Events) {
Write-Host "[-] NTLM Log kaydı bulunamadı. Denetim modunun açık olduğundan emin olun." -ForegroundColor Red
return
}
$NTLMReport = foreach ($Event in $Events) {
[xml]$XmlEvent = $Event.ToXml()
# XML verisinden detayları ayıklama
$TargetName = $XmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq "TargetName" } | Select-Object -ExpandProperty "#text"
$UserName = $XmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq "UserName" } | Select-Object -ExpandProperty "#text"
$Process = $XmlEvent.Event.EventData.Data | Where-Object { $_.Name -eq "ProcessName" }| Select-Object -ExpandProperty "#text"
[PSCustomObject]@{
TimeCreated = $Event.TimeCreated
EventID = $Event.Id
User = $UserName
Target = $TargetName
Process = $Process
Message = $Event.Message
}
}
# Sonuçları Tablo Olarak Göster
$NTLMReport | Out-GridView -Title "NTLM Kullanım Analizi"
# İsteğe bağlı: CSV olarak dışa aktar
# $NTLMReport | Export-Csv -Path "C:\Temp\NTLM_Audit_Report.csv" -NoTypeInformation
-
TargetName: Hangi sunucuya bağlanılmaya çalışıldığını gösterir.
-
ProcessName: NTLM çağrısını yapan uygulamanın adını verir (Örn:
sqlservr.exeveya bir eski muhasebe yazılımı). -
Event ID 8004: En kritik olanıdır; "Eğer NTLM'yi engelleseydik, bu bağlantı kopacaktı" anlamına gelir.
Sonraki Adımlar
Bu raporu aldıktan sonra, listedeki uygulamaların konfigürasyonlarını inceleyip "Authentication Method" kısmını Kerberos veya Negotiate olarak güncellemeniz gerekecek.
Kerberos SPN (Service Principal Name) yapılandırması
Kerberos dünyasında SPN (Service Principal Name), bir servisin kimliğini etki alanı (Active Directory) içerisinde benzersiz kılan bir "etiket" gibidir. Kerberos biletleme sisteminin çalışması için istemcinin hangi servis ile konuştuğunu tam olarak bilmesi gerekir.
SPN doğru yapılandırılmadığında Kerberos başarısız olur ve sistem otomatik olarak (ve güvensiz olan) NTLM'e geri döner. NTLM'i emekliye ayırırken SPN hatalarını çözmek bu yüzden hayatidir.
1. SPN Sözdizimi (Syntax)
Bir SPN kaydı genellikle şu formatta olur: ServisSınıfı / AnaBilgisayarAdı : Port / ServisAdı
-
ServisSınıfı: HTTP, MSSQLSvc, HOST, NFS gibi servis türü.
-
AnaBilgisayarAdı: Servisin çalıştığı sunucunun FQDN (Tam Etki Alanı Adı) veya NetBIOS adı.
-
Port: Standart dışı bir port kullanılıyorsa belirtilir.
2. Kritik Komutlar (Setspn Kullanımı)
SPN yönetimi için en temel araç setspn.exe komut satırı aracıdır. Bu komutları Domain Admin yetkisiyle çalıştırmalısınız.
A. Mevcut SPN'leri Listeleme
Bir kullanıcı veya bilgisayar hesabına atanmış SPN'leri kontrol etmek için:
setspn -L <HesapAdi>
# Örnek: setspn -L SQLServiceAccount
B. Yeni Bir SPN Kaydı Ekleme
Örneğin, bir web sunucusu (IIS) için uygulama havuzu kullanıcısına SPN atamak:
setspn -S HTTP/web01.sirket.local SQLServiceAccount
setspn -S HTTP/web01 SQLServiceAccount
Not:
-Sparametresi (Add Unique), aynı SPN'in başka bir hesapta olup olmadığını kontrol eder. Bu, çakışmaları önlemek için-Ayerine tercih edilmelidir.
C. Yinelenen (Duplicate) SPN'leri Bulma
Kerberos'un en büyük düşmanı aynı SPN'in iki farklı hesapta tanımlı olmasıdır. Bunu bulmak için:
setspn -X
3. Yaygın Hata: "Kayıp SPN" Senaryosu
Bir kullanıcı http://app01 adresine gitmeye çalıştığında, Windows önce bu isim için bir Kerberos bileti ister. Eğer AD içerisinde HTTP/app01 şeklinde bir SPN kaydı yoksa, Kerberos "Ben bu servisi tanımıyorum" der ve NTLM kullanmaya başlar.
Çözüm Akışı:
-
Servisin hangi hesap (LocalSystem, NetworkService veya bir Domain User) altında çalıştığını bulun.
-
İstemcilerin servise hangi isimle (FQDN veya kısa isim) eriştiğini netleştirin.
-
Eksik olan kombinasyonları
setspn -Sile ilgili hesaba tanımlayın.
4. PowerShell ile Otomatik Kontrol
Eğer elinizde uzun bir sunucu listesi varsa, SPN kayıtlarının durumunu şu script ile hızlıca görebilirsiniz:
# Belirli bir servis için SPN kontrolü
$SearchName = "web01"
Get-ADObject -Filter "ServicePrincipalName -like '*$SearchName*'" -Properties ServicePrincipalName |
Select-Object Name, DistinguishedName, ServicePrincipalName |
Format-List
MSSQL ve IIS, kurumsal ortamlarda NTLM'den Kerberos'a geçişte en çok "SPN hatası" veren iki servistir. Bu servisleri Kerberos ile modernize etmek, sadece güvenliği artırmakla kalmaz, aynı zamanda "double-hop" (çift sıçrama) sorunlarını çözmek için de gereklidir.
İşte bu iki servis için Best Practice (En İyi Uygulama) adımları:
1. MSSQL Server İçin Kerberos Yapılandırması
SQL Server genellikle MSSQLSvc sınıfını kullanır. Kerberos'un çalışması için SQL servisinin çalıştığı Service Account (Servis Hesabı) üzerine kayıt yapılması gerekir.
Best Practice Adımları:
-
Servis Hesabı Seçimi: SQL servislerini mümkünse bir Managed Service Account (gMSA) altında çalıştırın. Bu, şifre yönetimini otomatikleştirir ve Kerberos sürekliliğini sağlar.
-
FQDN ve Port Kullanımı: Hem sunucu adı hem de port (varsayılan 1433) için SPN kaydı yapın.
Gerekli Komutlar:
# FQDN için kayıt
setspn -S MSSQLSvc/sql01.ondernet.local:1433 ondernet\sql_service_account
# NetBIOS (Kısa ad) için kayıt
setspn -S MSSQLSvc/sql01:1433 ondernet\sql_service_account
Önemli İpucu: SQL Server başladığında kendi SPN'ini kaydetmeye çalışır. Eğer servis hesabına AD üzerinde "Write servicePrincipalName" yetkisi verirseniz, bu işlem otomatik gerçekleşir ve manuel kayıtla uğraşmazsınız.
2. IIS (Web Server) İçin Kerberos Yapılandırması
IIS tarafında işler biraz daha karışıktır çünkü işin içine "Application Pool" (Uygulama Havuzu) kimlikleri girer.
Best Practice Adımları:
-
Kernel Mode Authentication: Eğer IIS 7.0 veya üzerini kullanıyorsanız ve özel bir servis hesabı tanımladıysanız, "Kernel Mode Authentication" özelliğini kapatmanız veya
useAppPoolCredentialsayarınıTrueyapmanız gerekebilir. -
Alias (CNAME) Kullanımı: Eğer web sitenize
https://portal.ondernet.netgibi bir takma adla erişiliyorsa, SPN kaydı sunucu adına değil, bu alias adına yapılmalıdır.
Gerekli Komutlar:
# Web sitesi adresi için SPN kaydı
setspn -S HTTP/portal.ondernet.net ondernet\web_app_pool_user
setspn -S HTTP/portal ondernet\web_app_pool_user
3. "Double-Hop" Sorunu ve Delegation (Delegasyon)
Eğer bir kullanıcı IIS'e bağlanıyor ve IIS de arka planda kullanıcı adına SQL Server'dan veri çekiyorsa, bu "Double-Hop" senaryosudur. NTLM burada havlu atar, çözüm Kerberos Delegasyonudur.
Yapılandırma:
-
Active Directory Users and Computers'ı açın.
-
IIS servis hesabını bulun ve Delegation sekmesine gidin.
-
"Trust this user for delegation to specified services only" (Sadece belirtilen servislere delegasyon için bu kullanıcıya güven) seçeneğini (Constrained Delegation) seçin.
-
Listeye SQL Server'ın SPN'ini ekleyin.
Özet Kontrol Listesi
| Kontrol Noktası | MSSQL | IIS |
| Hesap Türü | gMSA veya Domain User tercih edilmeli. | AppPool Identity (Domain User/gMSA) |
| SPN Sınıfı | MSSQLSvc |
HTTP |
| Port Belirtilmeli mi? | Evet (Genelde 1433). | Hayır (Protokol bazlıdır). |
| Delegasyon | Genelde gerekmez (Son duraktır). | SQL'e erişecekse "Constrained" şart. |
Kaynak: https://cybernews.com/security/microsoft-windows-to-disable-ntlm-protocol/
Yazıyı okuduğunuz için teşekkürler, güvenli sistemleriniz olsun.