Başarısız login denemeleri, saldırılarının en yaygın başlangıç sinyalidir. Ransomware çetelerinden sızma test ekiplerine kadar neredeyse tüm saldırganlar, Windows sistemlere ilk erişim için credential guessing dener. İyi haber: Windows, bu denemeleri Security Log'a yazar. Kötü haber: bu log'ları kimse okumuyor.
Bu rehberde Windows Event ID 4625'i derinlemesine ele alacağız: hangi alanlar kritik, LogonType'lar ne anlama geliyor, SubStatus kodlarını nasıl okuyacaksınız ve en önemlisi — gerçek zamanlı brute force tespiti için SIEM kuralları nasıl yazılır.
Event ID 4625 Nedir?
Event ID 4625, Windows Security Log'da "An account failed to log on" anlamına gelir. Bu event, bir hesap başarısız bir şekilde login olmaya çalıştığında oluşturulur — yanlış şifre, var olmayan kullanıcı, disabled hesap, vs.
Security Log'daki bu event, Audit Logon politikasının aktif olması durumunda oluşur. Modern Windows Server sürümlerinde (2016+) varsayılan olarak açıktır.
TargetUserName, IpAddress, LogonType, SubStatus, WorkstationName. Bir brute force tespitinin kalitesi, bu 5 alanı doğru yorumlamanıza bağlıdır.
Bir 4625 event'inin yapısı
Tipik bir XML çıktısı şöyle görünür (sadeleştirildi):
<EventData>
<Data Name="SubjectUserSid">S-1-5-18</Data>
<Data Name="SubjectUserName">DC01$</Data>
<Data Name="TargetUserName">administrator</Data>
<Data Name="TargetDomainName">COMPANY</Data>
<Data Name="Status">0xC000006D</Data>
<Data Name="SubStatus">0xC000006A</Data>
<Data Name="LogonType">3</Data>
<Data Name="AuthenticationPackageName">NTLM</Data>
<Data Name="WorkstationName">ATTACKER-PC</Data>
<Data Name="IpAddress">203.0.113.45</Data>
<Data Name="IpPort">49832</Data>
</EventData>
Bu event bize şunları söylüyor:
TargetUserName=administrator— administrator hesabıyla giriş deneniyorIpAddress=203.0.113.45— kaynak bu dış IPLogonType=3— network logon (SMB, uzaktan kaynak erişimi)SubStatus=0xC000006A— yanlış şifre (en net brute force sinyali)WorkstationName=ATTACKER-PC— saldırganın makine adı (sahte olabilir ama ipucu)
LogonType'ları Anlamak
LogonType, login işleminin nasıl yapıldığını gösterir. Her birinin tespit önceliği farklıdır.
| Tip | Adı | Anlamı | Brute Force Riski |
|---|---|---|---|
| 2 | Interactive | Konsol/klavye (fiziksel oturum) | Orta |
| 3 | Network | SMB, network share, RPC | Yüksek |
| 4 | Batch | Scheduled task | Düşük |
| 5 | Service | Windows service başlatma | Düşük |
| 7 | Unlock | Screen unlock | Düşük (ama stalker senaryosu var) |
| 8 | NetworkCleartext | Clear text network auth | Yüksek (genelde yanlış yapılandırma) |
| 10 | RemoteInteractive | RDP oturumu | Çok Yüksek |
| 11 | CachedInteractive | Cache'li kimlik bilgisi | Düşük |
En kritik üç tip: Type 3 (Network), Type 10 (RDP) ve Type 8 (Cleartext). Brute force alarmları öncelikle bu üçünde tetiklenmelidir.
LogonType 10 — RDP Brute Force
RDP (Remote Desktop Protocol) brute force, 2023-2024'te ransomware çetelerinin en sevdiği giriş vektörlerinden biri. Tek bir RDP port'u internete açıksa, Shodan'da görünür hale gelmeniz 48 saatten kısa sürer.
SubStatus Kodlarını Okumak
SubStatus alanı, bir login denemesinin neden başarısız olduğunu söyler. Bu kod, brute force tespit kalitenizi direkt etkiler.
| SubStatus | Anlamı | Saldırı Göstergesi |
|---|---|---|
0xC0000064 |
User not found | User enumeration (kullanıcı tarama) |
0xC000006A |
Yanlış şifre | Brute force |
0xC0000234 |
Hesap kilitlendi | Başarılı lockout (saldırgan limiti aştı) |
0xC0000072 |
Hesap disabled | Eski hesap deneniyor (olması gereken) |
0xC0000193 |
Hesap expired | Eski hesap |
0xC0000070 |
Workstation restriction | Bilinmeyen lokasyondan deneme |
0xC0000071 |
Password expired | Düşük öncelik |
0xC0000133 |
Time difference | Saat senkronu sorunu |
Tespit için en kritik iki kod: 0xC0000064 (kullanıcı sayımı) ve 0xC000006A (brute force). İkisini birleştirirseniz, saldırının iki aşamasını da yakalarsınız.
Gerçek Zamanlı Alarm Kuralları
Teori yeterli. Şimdi pratik. SIEM'inizde yazmanız gereken 4 temel kural:
Kural 1: Klasik Brute Force
Aynı IP'den 10 dakikada 10+ başarısız login.
SELECT
src_ip,
COUNT(*) AS fail_count,
ARRAY_AGG(DISTINCT username) AS targeted_users,
MIN(ts) AS first_attempt,
MAX(ts) AS last_attempt
FROM logs
WHERE event_type = 'auth'
AND action = 'login_fail'
AND event_id = 4625
AND (extra->>'sub_status') = '0xC000006A'
AND ts > NOW() - INTERVAL '10 minutes'
AND src_ip IS NOT NULL
AND src_ip != ''
GROUP BY src_ip
HAVING COUNT(*) >= 10;
Kural 2: Credential Stuffing
Aynı IP'den farklı kullanıcılarla 5+ başarısız login — bu klasik brute force değil, çalınmış credential listesi denemesi.
SELECT
src_ip,
COUNT(*) AS fail_count,
COUNT(DISTINCT username) AS unique_users,
ARRAY_AGG(DISTINCT username ORDER BY username) AS users
FROM logs
WHERE event_id = 4625
AND ts > NOW() - INTERVAL '15 minutes'
AND src_ip IS NOT NULL
GROUP BY src_ip
HAVING COUNT(DISTINCT username) >= 5
AND COUNT(*) >= 8;
Kural 3: RDP Saldırısı
Özellikle LogonType=10 için agresif threshold.
SELECT
src_ip,
username,
COUNT(*) AS attempts
FROM logs
WHERE event_id = 4625
AND (extra->>'logon_type')::int = 10 -- RDP
AND ts > NOW() - INTERVAL '5 minutes'
GROUP BY src_ip, username
HAVING COUNT(*) >= 3;
RDP için threshold daha düşük (5 dakikada 3) çünkü RDP brute force'un başarı şansı yüksektir ve hemen müdahale lazım.
Kural 4: User Enumeration
Bir saldırgan önce geçerli kullanıcıları bulmaya çalışır (0xC0000064), sonra şifre tahmin eder. Bu ilk fazı yakalarsanız, saldırganı henüz masum olduğu anda engelleyebilirsiniz.
SELECT
src_ip,
COUNT(*) AS enum_attempts,
COUNT(DISTINCT username) AS unique_targets
FROM logs
WHERE event_id = 4625
AND (extra->>'sub_status') = '0xC0000064' -- user not found
AND ts > NOW() - INTERVAL '30 minutes'
GROUP BY src_ip
HAVING COUNT(*) >= 15;
Yanlış Pozitiflerle Nasıl Başa Çıkılır?
Brute force kuralları yanlış pozitif üretmeye eğilimlidir. En yaygın sebepler:
- Kayıtlı cihaz parolası değişti — Aynı user'ın şifresi değişti ama bir backup servisi hâlâ eski şifreyi deniyor.
- Scheduled task parolası unutuldu — Yıllardır çalışan bir task, AD'de değişen parolayla çarpışıyor.
- Yavaş laptop — Kullanıcı şifreyi girmeden ekran kilitlendi, sonra beceriksiz giriş denemeleri.
- Cep telefonu Wi-Fi — Eski Wi-Fi parolasıyla bağlanmaya çalışan cihazlar.
Gerçek brute force'u yanlış pozitiften ayırmak için şu işaretlere bakın:
- ✅ Dış (public) IP'den geliyor
- ✅ Hedef kullanıcı
administrator,admin, servis hesapları gibi yüksek-değerli - ✅ Çoklu kullanıcı (credential stuffing)
- ✅ Saldırı dışı saatlerde (gece, hafta sonu)
- ✅ WorkstationName şüpheli (boş, Cyrillic, rastgele)
NXLog ile Log Toplama
Windows Event Log'u bir SIEM'e göndermek için NXLog Community Edition en pratik yol. Ücretsiz, 15+ yıllık, stabil.
Basit bir konfigürasyon:
<Input eventlog>
Module im_msvistalog
Query <QueryList>\
<Query Id="0">\
<Select Path="Security">\
*[System[(EventID=4624 or EventID=4625 or EventID=4740)]]\
</Select>\
</Query>\
</QueryList>
Exec $Message = to_json();
</Input>
<Output oxisec>
Module om_udp
Host siem.example.com
Port 5515
Exec to_syslog_ietf();
</Output>
<Route windows_auth>
Path eventlog => oxisec
</Route>
Bu konfigürasyon sadece auth ile ilgili 3 event'i (login success, login fail, account lockout) toplar. Tüm Security Log'u göndermek yerine seçici olmak, hem bandwidth hem storage hem de SIEM performansı için kritik.
Community planı ile ücretsiz başlayın →
Sonraki Adımlar
Bu rehberde brute force tespit temelleri kapsayıcı biçimde ele alındı. Daha ileri gitmek isteyen okuyucular için:
- GeoIP entegrasyonu: Saldırgan IP'sinin hangi ülkeden geldiği — "Impossible Travel" tespiti
- Threat Intelligence: IP'nin AbuseIPDB skoru, Tor exit node mu, botnet listesinde mi
- UEBA: Kullanıcının normal davranışını öğrenip sapmaları tespit etme
- Otomatik müdahale: Auto-mode ile firewall'a otomatik IP ban
Bu konulardaki yazılar yakında gelecek.
Özet
- Event ID 4625, Windows başarısız login'lerin standart sinyalidir
- LogonType saldırı tipini ayırt eder: Type 3 (Network), 10 (RDP), 8 (Cleartext) kritik
- SubStatus başarısızlık nedenini verir:
0xC000006Abrute force,0xC0000064enumerasyon - Dört temel kural: klasik brute force, credential stuffing, RDP saldırısı, user enumeration
- Yanlış pozitiflerle başa çıkmak için IP kaynağı + kullanıcı + saat bağlamını kullanın
- NXLog ile toplama ücretsiz ve 5 dakikada kurulur