Windows Sistemde Phishing Saldırısı Tespiti
Bir sabah işe geliyorsunuz, helpdesk kuyruğunuzda 5 farklı kullanıcıdan “şüpheli e-posta aldım” bildirimi var. Bunlardan biri de “linke tıkladım ama bir şey olmadı galiba” diyor. İşte o an gerçek anlamda phishing tespiti sürecini başlatmanız gerekiyor. Bu yazıda Windows ortamında phishing saldırısını adım adım nasıl tespit edeceğinizi, hangi araçları kullanacağınızı ve gerçek senaryolar üzerinden pratik komutlarla ele alacağız.
Phishing Saldırısının Windows Sistemdeki İzleri
Phishing saldırıları sadece e-posta kutusunda kalmaz. Kullanıcı linke tıkladığı anda veya eki açtığı anda Windows sisteminde bir dizi iz bırakmaya başlar. Bu izleri doğru okuyabilmek için önce nereye bakacağınızı bilmeniz gerekiyor.
Tipik bir phishing senaryosu şöyle işler:
- Kullanıcı sahte bir e-postadaki linke tıklar
- Tarayıcı zararlı bir URL’yi açar
- Sayfa credential harvesting formu sunar veya drive-by download tetiklenir
- Arka planda PowerShell, cmd veya wscript gibi bir süreç başlatılır
- Sistem kayıt defterine persistence mekanizması yazılır
- C2 (Command and Control) sunucusuyla iletişim kurulur
Bu adımların her biri Windows Event Log, DNS cache, process listesi ve network bağlantılarında iz bırakır.
İlk Müdahale: Sistemi İzole Etmeden Önce Veri Toplayın
Pek çok sysadmin ilk refleks olarak sistemi kapatmak ya da hemen ağdan ayırmak ister. Bu yanlış bir yaklaşım. Önce volatile (uçucu) verileri toplamanız gerekiyor çünkü sistem kapandığında RAM içeriği, aktif network bağlantıları ve çalışan süreçler kaybolacak.
Önce çalışan süreçlere bakın:
# Çalışan tüm süreçleri parent process bilgisiyle listele
Get-WmiObject Win32_Process | Select-Object ProcessId, ParentProcessId, Name, CommandLine | Format-List
Burada dikkat etmeniz gereken şey CommandLine sütunu. Meşru bir Word.exe süreci normalde "C:Program FilesMicrosoft OfficerootOffice16WINWORD.EXE" gibi görünür. Ama phishing ekinden çalıştırılan bir şey şöyle görünebilir:
winword.exe -> cmd.exe -> powershell.exe -EncodedCommand JABXAG...
Bu parent-child ilişkisi hemen gözünüze çarpmalı. Office uygulamasının altında cmd veya PowerShell çalışıyorsa bu çok ciddi bir işaret.
Network bağlantılarını kayıt altına alın:
# Aktif ağ bağlantılarını process adıyla birlikte göster
netstat -nob > C:Incidentconnections_$(Get-Date -Format "yyyyMMdd_HHmmss").txt
# PowerShell ile daha detaylı çıktı
Get-NetTCPConnection | Where-Object {$_.State -eq "Established"} | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, OwningProcess | Sort-Object RemoteAddress
Bu çıktıda yabancı IP’lere giden bağlantılara dikkat edin. Özellikle 443 dışındaki portlarda, Rusya, Çin, Ukrayna gibi coğrafyalardaki IP bloklarına bağlantı varsa alarm zilleri çalmalı.
Windows Event Log Analizi
Windows Event Log, phishing tespitinde altın maden gibidir. Ama doğru olayları filtrelemezseniz binlerce kayıt arasında kaybolursunuz.
Kritik Event ID’ler:
- 4688: Yeni süreç oluşturuldu (Process Creation)
- 4624: Başarılı oturum açma
- 4625: Başarısız oturum açma
- 4698: Zamanlanmış görev oluşturuldu
- 4720: Yeni kullanıcı hesabı oluşturuldu
- 7045: Yeni servis kuruldu
- 1102: Audit log temizlendi (çok kritik!)
Şüpheli PowerShell aktivitesini filtreleyin:
# PowerShell ile ilgili 4688 olaylarını filtrele
Get-WinEvent -LogName Security | Where-Object {
$_.Id -eq 4688 -and
$_.Message -like "*powershell*"
} | Select-Object TimeCreated, Message | Format-List
# Son 24 saatte oluşturulan zamanlanmış görevleri bul
Get-WinEvent -LogName Security -FilterXPath "*[System[(EventID=4698) and TimeCreated[timediff(@SystemTime) <= 86400000]]]" | Select-Object TimeCreated, Message
Gerçek dünya senaryosu: Bir müşterimde kullanıcı sahte DHL kargo e-postasındaki Excel dosyasını açtı. Event ID 4688 loglarına baktığımızda EXCEL.EXE altında mshta.exe başlatıldığını gördük. mshta.exe (Microsoft HTML Application Host) normalde hiçbir Office uygulaması tarafından çağrılmaması gereken bir araçtır. Bu olayın timestamp’ini alarak sonraki adımları kolayca takip edebildik.
DNS Cache ve Tarayıcı Geçmişi Analizi
Kullanıcı hangi URL’ye tıkladı? DNS cache bunu size söyler:
# DNS cache içeriğini döküp dosyaya kaydet
ipconfig /displaydns > C:Incidentdns_cache.txt
# PowerShell ile daha temiz çıktı
Get-DnsClientCache | Select-Object Entry, RecordType, Data | Sort-Object Entry | Export-Csv C:Incidentdns_cache.csv -NoTypeInformation
DNS cache’de xn-- ile başlayan IDN (Internationalized Domain Names) girişleri gördüğünüzde dikkatli olun. Bu teknik, paypal.com yerine Kiril alfabesiyle yazılmış benzer görünen domainleri kullanmak için yaygın bir phishing taktiği.
Chrome tarayıcı geçmişine PowerShell ile erişmek için:
# Chrome geçmişini kopyala (dosya kullanımda olabileceğinden önce kopyala)
$chromePath = "$env:LOCALAPPDATAGoogleChromeUser DataDefaultHistory"
Copy-Item $chromePath "C:Incidentchrome_history_backup"
# SQLite sorgusu için araç gerekir, ama basit string arama yapabilirsiniz
Select-String -Path "C:Incidentchrome_history_backup" -Pattern "http" -Encoding Byte
Edge için benzer bir yol izleyebilirsiniz:
$edgePath = "$env:LOCALAPPDATAMicrosoftEdgeUser DataDefaultHistory"
Copy-Item $edgePath "C:Incidentedge_history_backup"
Kayıt Defteri Analizi: Persistence Mekanizmalarını Bul
Phishing payload’u başarıyla çalışırsa saldırganın ilk işi genellikle persistence kurmaktır. Yani sistem yeniden başlatıldığında zararlı kod tekrar devreye girsin diye kayıt defterine veya zamanlanmış görevlere bir şeyler yazarlar.
En çok kullanılan persistence lokasyonlarını kontrol edin:
# Klasik Run key kontrolü
$runKeys = @(
"HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRun",
"HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRunOnce",
"HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun",
"HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRunOnce",
"HKLM:SOFTWAREWow6432NodeMicrosoftWindowsCurrentVersionRun"
)
foreach ($key in $runKeys) {
Write-Host "=== $key ===" -ForegroundColor Yellow
Get-ItemProperty -Path $key -ErrorAction SilentlyContinue | Format-List
}
Bu çıktıda gördüğünüz her girişi sorgulayın. C:Program Files... gibi standart dizinlerde olmayan, %TEMP%, %APPDATA% veya C:UserskullaniciAppData altında çalıştırılan şeyler şüphelidir.
Bir müşteri vakasında bu kontrolü yaptığımızda HKCU Run key altında şöyle bir giriş bulduk:
"WindowsDefenderUpdate" = "powershell.exe -WindowStyle Hidden -EncodedCommand JABXAG4AZABvAHcA..."
“WindowsDefenderUpdate” ismi meşru görünmek için seçilmiş, ama gerçekte encoded bir PowerShell komutu. Bu tür Base64 encoded komutları çözmek için:
# Base64 encoded PowerShell komutunu decode et
$encoded = "JABXAG4AZABvAHcA..."
$decoded = [System.Text.Encoding]::Unicode.GetString([System.Convert]::FromBase64String($encoded))
Write-Output $decoded
Zamanlanmış Görevleri İnceleyin
Saldırganlar zamanlanmış görevleri de persistence için kullanır. Windows Task Scheduler’ı komut satırından analiz etmek için:
# Tüm zamanlanmış görevleri XML formatında dışa aktar
schtasks /query /fo LIST /v > C:Incidentscheduled_tasks.txt
# PowerShell ile daha detaylı analiz
Get-ScheduledTask | Where-Object {$_.State -ne "Disabled"} |
ForEach-Object {
$task = $_
$action = $task.Actions | Select-Object -First 1
[PSCustomObject]@{
TaskName = $task.TaskName
TaskPath = $task.TaskPath
Execute = $action.Execute
Arguments = $action.Arguments
Author = $task.Principal.UserId
}
} | Where-Object {
$_.Execute -like "*powershell*" -or
$_.Execute -like "*cmd*" -or
$_.Execute -like "*wscript*" -or
$_.Execute -like "*mshta*"
} | Format-List
Meşru zamanlanmış görevler genellikle MicrosoftWindows altındadır. Kök dizinde veya garip isimli klasörlerde oturan görevler incelenmeli.
Prefetch ve Amcache Analizi
Windows Prefetch dosyaları, hangi uygulamaların ne zaman çalıştığını gösterir. Saldırı sırasında çalıştırılan araçların izini Prefetch’te bulabilirsiniz:
# Prefetch dosyalarını listele ve son erişim zamanlarıyla göster
Get-ChildItem C:WindowsPrefetch*.pf |
Select-Object Name, LastWriteTime |
Sort-Object LastWriteTime -Descending |
Select-Object -First 30
Şüpheli olarak arayacağınız prefetch dosyaları:
- POWERSHELL.EXE-…pf: Normal olabilir ama saldırı zamanıyla örtüşüyorsa kritik
- MSHTA.EXE-…pf: Çok nadir meşru kullanım senaryosu var
- WSCRIPT.EXE-…pf veya CSCRIPT.EXE-…pf: Script tabanlı saldırı işareti
- CERTUTIL.EXE-…pf: Saldırganlar bunu dosya indirmek için kullanır (LOLBin tekniği)
- REGSVR32.EXE-…pf: Zararlı DLL yükleme için kullanılabilir
Amcache (uygulama uyumluluk veritabanı) da benzer bilgiler içerir ve PowerShell üzerinden doğrudan okunması zordur, bu yüzden Eric Zimmerman’ın AmcacheParser aracını kullanmanızı öneririm.
Network Trafiğini Gerçek Zamanlı İzleyin
Eğer sistem hala online ve saldırı aktifse network trafiğini yakalamak çok değerli kanıt sağlar. Windows’ta yerleşik araçlarla bunu yapabilirsiniz:
# Windows yerleşik packet capture (pktmon) ile trafik yakala
pktmon start --capture --file-name C:Incidentcapture.etl
# Birkaç dakika bekledikten sonra durdur
pktmon stop
# ETL dosyasını pcap'e çevir (Wireshark'ta açmak için)
pktmon etl2pcap C:Incidentcapture.etl --out C:Incidentcapture.pcap
Wireshark yoksa Windows’ta yerleşik araçla analiz yapabilirsiniz:
# Yakalanan paketi metin formatına çevir
pktmon etl2txt C:Incidentcapture.etl --out C:Incidentcapture.txt
# İçinde HTTP trafiği ara
Select-String -Path C:Incidentcapture.txt -Pattern "POST|GET|User-Agent" | Select-Object -First 50
Şüpheli trafik işaretleri:
- DNS over non-standard ports: Normal DNS 53/UDP kullanır, farklı portlarda DNS sorgusu varsa DNS tunneling olabilir
- Large DNS TXT record queries: Veri sızdırmak için kullanılır
- Regular beacon intervals: Her X saniyede bir giden bağlantı, C2 heartbeat işareti
- Unusual user-agent strings:
python-requests,curl,Go-http-clientgibi tarayıcı olmayan user-agent’lar
Credential Harvesting Tespiti
Phishing’in en yaygın amacı kimlik bilgisi çalmak. Saldırı başarılıysa Windows’ta bırakılan izler şunlar olabilir:
LSASS process’e erişim girişimlerini loglardan kontrol edin:
# LSASS'a erişim girişimleri (Event ID 10 - Sysmon kuruluysa)
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" |
Where-Object {$_.Id -eq 10 -and $_.Message -like "*lsass*"} |
Select-Object TimeCreated, Message |
Select-Object -First 20 |
Format-List
Eğer sistemde Sysmon kurulu değilse şu an durdurun ve hemen kurun. Sysmon olmayan bir Windows sistemi üzerinde saldırı forensics’i yapmak karanlıkta el yordamıyla yürümek gibidir.
Credential Manager’da şüpheli kayıtları kontrol edin:
# Windows Credential Manager içeriğini listele
cmdkey /list
# PowerShell ile daha detaylı
$creds = [System.Security.AccessControl.CryptoKeyAccessRule]
Get-StoredCredential -AsCredentialObject 2>$null
Sysmon Kurulu Değilse Acil Kurulum
Eğer Sysmon henüz kurulu değilse ve aktif bir saldırı şüphesi varsa, sistemi kapatmadan önce en azından şu anda çalışan konfigürasyonla kurabilirsiniz:
# Sysmon'u indir ve minimal konfigürasyonla kur
# (Önce Sysinternals'dan Sysmon64.exe indirin)
Sysmon64.exe -accepteula -i sysmonconfig.xml
# Sysmon loglarını kontrol et
Get-WinEvent -LogName "Microsoft-Windows-Sysmon/Operational" -MaxEvents 100 |
Where-Object {$_.Id -in @(1,3,7,10,11,13)} |
Select-Object Id, TimeCreated, Message |
Format-List
Kritik Sysmon Event ID’leri:
- Event 1: Process creation (tam komut satırı dahil)
- Event 3: Network connection
- Event 7: Image loaded (DLL yükleme)
- Event 10: Process access (LSASS dump girişimi)
- Event 11: File creation
- Event 13: Registry value set
Otomatik Triage Script’i
Yukarıdaki adımları tek seferde çalıştırmak için basit bir triage script’i hazırlayabilirsiniz. Bu script’i her zaman elinizin altında bulundurun:
# Phishing Triage Script - Tüm kritik verileri topla
$incidentDir = "C:Incident_$(Get-Date -Format 'yyyyMMdd_HHmmss')"
New-Item -ItemType Directory -Path $incidentDir -Force | Out-Null
Write-Host "[*] Süreçler toplanıyor..." -ForegroundColor Cyan
Get-WmiObject Win32_Process | Select-Object ProcessId, ParentProcessId, Name, CommandLine |
Export-Csv "$incidentDirprocesses.csv" -NoTypeInformation
Write-Host "[*] Network bağlantıları toplanıyor..." -ForegroundColor Cyan
Get-NetTCPConnection | Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort, State, OwningProcess |
Export-Csv "$incidentDirconnections.csv" -NoTypeInformation
Write-Host "[*] DNS cache toplanıyor..." -ForegroundColor Cyan
Get-DnsClientCache | Export-Csv "$incidentDirdns_cache.csv" -NoTypeInformation
Write-Host "[*] Run key'ler toplanıyor..." -ForegroundColor Cyan
$runKeys = @(
"HKLM:SOFTWAREMicrosoftWindowsCurrentVersionRun",
"HKCU:SOFTWAREMicrosoftWindowsCurrentVersionRun"
)
foreach ($key in $runKeys) {
Get-ItemProperty -Path $key -ErrorAction SilentlyContinue |
Out-File "$incidentDirregistry_run.txt" -Append
}
Write-Host "[*] Zamanlanmış görevler toplanıyor..." -ForegroundColor Cyan
Get-ScheduledTask | Export-Csv "$incidentDirscheduled_tasks.csv" -NoTypeInformation
Write-Host "[*] Son Security logları toplanıyor..." -ForegroundColor Cyan
Get-WinEvent -LogName Security -MaxEvents 500 |
Where-Object {$_.Id -in @(4688, 4698, 4720, 7045, 1102)} |
Select-Object Id, TimeCreated, Message |
Export-Csv "$incidentDirsecurity_events.csv" -NoTypeInformation
Write-Host "[+] Triage tamamlandı: $incidentDir" -ForegroundColor Green
Kullanıcı Eğitimi ve Teknik Kontroller
Tespiti yaptıktan sonra önleme de kritik. Sysadmin olarak teknik tarafta alabileceğiniz önlemler:
- Microsoft Defender SmartScreen’i aktif tutun, Group Policy ile zorlayın
- Attack Surface Reduction (ASR) kuralları ile Office makrolarının child process başlatmasını engelleyin
- Email gateway’de SPF, DKIM, DMARC kontrollerini sıkılaştırın
- DNS filtreleme için Cloudflare Gateway veya Cisco Umbrella gibi çözümlere bakın
- LAPS ile local admin şifrelerini randomize edin, credential stuffing etkisini azaltın
- Conditional Access ile MFA’yı zorlayın, credential harvest’ın işe yaramamasını sağlayın
- Düzenli aralıklarla simulated phishing kampanyaları yapın
Sonuç
Phishing tespiti reaktif değil, proaktif bir süreç olmalı. “Link’e tıkladım ama bir şey olmadı” diyen kullanıcı aslında en kritik vakayı bildiriyor olabilir. Doğru araçlara sahip olmak ve nereye bakacağınızı bilmek her şeyi değiştirir.
Bu yazıda anlattıklarımı özetleyecek olursam: Sistemi kapatmadan önce volatile veri toplayın, Event Log ve process listesi analizi yapın, DNS cache ve kayıt defteri persistence lokasyonlarını kontrol edin, network trafiğini yakalayın. Ve lütfen Sysmon’u tüm endpoint’lerinize kurun. Bu yazıyı okuduktan sonra yapacağınız ilk iş bu olsun, pişman olmazsınız.
Incident sonrasında da aynı senaryonun tekrar yaşanmaması için alınan dersleri dokümante edin ve teknik kontrolleri güncelleyin. Her phishing vakası, savunmanızı bir adım daha ileriye taşıma fırsatıdır.
