Ağınızda bir şeyler olup olmadığını anlamak için mutlaka pahalı bir SIEM çözümüne ya da enterprise güvenlik ekibine ihtiyacınız yok. Doğru araçları ve biraz sabırlı gözlem yeteneğini bir araya getirince, şüpheli trafiği oldukça erken aşamada yakalayabilirsiniz. Bu yazıda hem Linux hem Windows ortamlarında ağ trafiği analizi yaparak saldırı tespitine odaklanacağız. Gerçek dünya senaryolarıyla desteklenmiş, uygulanabilir yöntemler üzerinden gideceğiz.
Neden Ağ Trafiği İzleme Bu Kadar Kritik?
Bir saldırgan sisteminize sızdığında genellikle iz bırakır. Disk üzerindeki logları temizleyebilir, process geçmişini silebilir; ama ağ üzerinden akan veriyi geçmişe dönük olarak değiştiremez. Bu yüzden ağ trafiği, adli analizde ve gerçek zamanlı tehdit tespitinde birincil kaynaktır.
Lateral movement, data exfiltration, C2 (Command and Control) iletişimi ve port scanning gibi saldırı aktiviteleri hepsinin ortak noktası ağ katmanında iz bırakmaktır. Siz bu izleri ne kadar hızlı fark ederseniz, olayın patlamasını o kadar erken önlersiniz.
Pratik bir örnek verelim: 2023 yılında bir üretim firmasının IT ekibi, gece 02:00 ile 04:00 arasında iç ağdaki bir Windows sunucusunun beklenmedik şekilde 445 portu üzerinden onlarca farklı IP adresine bağlantı denemesi yaptığını fark etti. Bu EternalBlue tabanlı bir worm aktivitesiydi ve erken tespitle sadece iki sunucu etkilendi. Eğer sabaha kadar beklenseydi, tüm AD altyapısı tehlikedeydi.
Temel Araç Seti: Ne Kullanmalıyız?
Ağ trafiği analizinde kullanabileceğiniz araçları iki kategoride düşünebilirsiniz: pasif izleme araçları ve aktif analiz araçları.
Pasif izleme için:
- tcpdump: Hızlı, lightweight, script entegrasyonuna ideal
- Wireshark / tshark: Derin paket analizi
- ntopng: Gerçek zamanlı trafik görselleştirme
- Zeek (eski adı Bro): Ağ davranışı loglama ve analiz
Aktif analiz için:
- nmap: Port tarama tespiti
- Suricata / Snort: IDS/IPS
- netstat / ss: Anlık bağlantı durumu
- iftop / nethogs: Anlık trafik kullanımı
Hepsini bir arada kullanmak zorunda değilsiniz. Küçük ortamlar için tcpdump + Suricata kombinasyonu bile oldukça güçlü bir temel oluşturur.
tcpdump ile Şüpheli Trafik Yakalamak
tcpdump, her Linux sisteminde neredeyse varsayılan olarak gelen ve son derece güçlü bir araçtır. Basit ama etkili kullanım senaryolarına bakalım.
Belirli Portlara Yönelik Tarama Tespiti
Birisi ağınızı tarayıp taramadığını anlamak için kısa sürede çok sayıda farklı porta giden ya da gelen bağlantıları izleyebilirsiniz.
# Dışarıdan gelen ve 10 saniye içinde birden fazla porta yapılan bağlantıları izle
tcpdump -i eth0 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) = 0'
-n -l | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn | head -20
Bu komut, SYN flag’i set edilmiş ama ACK olmayan paketleri (yani bağlantı başlatma denemelerini) filtreler ve kaynak IP başına sayar. Eğer bir IP’den kısa sürede onlarca farklı hedef görüyorsanız, port scan söz konusu olabilir.
DNS Sorgularını İzlemek
C2 altyapısı ve data exfiltration için DNS tünelleme sıkça kullanılan bir yöntemdir. Anormal DNS trafiğini yakalamak için:
# DNS sorgularını gerçek zamanlı logla
tcpdump -i eth0 -n 'udp port 53' -l | while read line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') $line" >> /var/log/dns_monitor.log
done
# DNS query başına byte miktarını kontrol et (DNS tünelleme tespiti)
tcpdump -i eth0 -n 'udp port 53' -l -e 2>/dev/null |
awk '{print $NF, $10}' | sort | uniq -c | sort -rn | head -30
DNS tünellemede sorgular olağandışı şekilde uzun olur ve genellikle rastgele görünen subdomain adları içerir. Örneğin a3f9b2c1d4e5.kötüsite.com gibi encoded veri taşıyan sorgular tipik bir işarettir.
ICMP Flood ve Unusual ICMP Tespiti
# ICMP trafiğini kaynak IP'ye göre say, flood tespiti için
tcpdump -i eth0 -n 'icmp' -l |
awk '{print $3}' | cut -d'>' -f1 |
sort | uniq -c | sort -rn |
awk '$1 > 50 {print "UYARI: "$2" kaynaklı yoğun ICMP - "$1" paket"}'
Zeek ile Davranış Tabanlı Analiz
Zeek, ham paket yakalamaktan çok ağ davranışını anlamlandırmak için tasarlanmıştır. Bağlantı logları, HTTP istekleri, DNS sorguları gibi veriler yapılandırılmış şekilde üretilir ve sonradan analiz edilebilir.
Zeek kurduktan sonra /usr/local/zeek/logs/current/ altında zengin log dosyaları oluşmaya başlar. Bunların içinde en kritik olanlar şunlardır:
- conn.log: Tüm TCP/UDP bağlantıları
- dns.log: DNS sorguları ve cevapları
- http.log: HTTP istekleri
- ssl.log: TLS/SSL bağlantı metadata’sı
- notice.log: Zeek’in anomali olarak işaretlediği olaylar
# Son 1 saatte en çok bağlantı kuran iç IP'leri bul
cat /usr/local/zeek/logs/current/conn.log |
zeek-cut id.orig_h id.resp_h id.resp_p proto |
awk '$3 != 53' |
sort | uniq -c | sort -rn | head -20
# Unusual portlara giden bağlantıları tespit et (standart dışı portlar)
cat /usr/local/zeek/logs/current/conn.log |
zeek-cut id.orig_h id.resp_h id.resp_p service |
awk '$3 > 1024 && $3 != 8080 && $3 != 8443 && $4 == "-"' |
sort | uniq -c | sort -rn | head -30
Uzun Süreli “Beaconing” Bağlantıları Tespit Etmek
C2 yazılımları genellikle belirli aralıklarla (heartbeat/beacon) komuta sunucusuna bağlanır. Bu bağlantılar saat başı, her 5 dakikada bir gibi düzenli aralıklarla tekrar eder. Zeek conn.log üzerinde bu davranışı arayabilirsiniz:
# Aynı IP çiftine düzenli aralıklarla giden bağlantıları bul
cat /usr/local/zeek/logs/current/conn.log |
zeek-cut ts id.orig_h id.resp_h id.resp_p |
awk '{print $2, $3, $4}' |
sort | uniq -c |
awk '$1 > 20' | sort -rn | head -20
20’den fazla tekrar eden aynı IP-port kombinasyonları genellikle ya meşru monitoring trafiği ya da beaconing’dir. Meşru olanları elediğinizde geri kalanlar incelemeye değer.
Suricata ile Gerçek Zamanlı IDS
Suricata, açık kaynaklı en güçlü IDS/IPS çözümlerinden biridir. Kural tabanlı çalışır ve PCAP analizi yapabildiği gibi inline modda trafiği engelleyebilir de.
Suricata kurulumu (Ubuntu/Debian):
sudo apt-get install suricata -y
sudo suricata-update # Kuralları güncelle
# Suricata'yı belirli interface üzerinde başlat
sudo suricata -c /etc/suricata/suricata.yaml -i eth0 -D
# Alertleri gerçek zamanlı izle
sudo tail -f /var/log/suricata/fast.log
Suricata, Emerging Threats ve diğer kural setleriyle port scan, exploit denemeleri, C2 iletişimi gibi yüzlerce tehdit kategorisini otomatik algılar. Özellikle Mirai botnet trafiği, EternalBlue denemeleri ve Cobalt Strike beacon aktiviteleri için hazır imzaları mevcuttur.
Özel kural yazmak da mümkündür. Örneğin belirli bir user-agent’ı kullanan şüpheli HTTP trafiğini yakalamak için:
# /etc/suricata/rules/local.rules dosyasına ekle
cat >> /etc/suricata/rules/local.rules << 'EOF'
alert http any any -> $HOME_NET any (msg:"Suspicious User-Agent - Possible Malware";
flow:established,to_server;
content:"User-Agent|3a 20|python-requests/2.";
nocase;
threshold:type limit, track by_src, count 10, seconds 60;
sid:9000001; rev:1;)
EOF
Windows Ortamında Ağ İzleme
Windows tarafında da etkili araçlar mevcut. Özellikle kurumsal ortamlarda PowerShell ile anlık bağlantı analizi yapabilirsiniz.
PowerShell ile Aktif Bağlantıları İzlemek
# Her 5 saniyede bir bağlantıları logla, yeni bağlantıları tespit et
$previousConnections = @()
while ($true) {
$currentConnections = Get-NetTCPConnection -State Established |
Select-Object LocalAddress, LocalPort, RemoteAddress, RemotePort,
OwningProcess, State
$newConnections = $currentConnections | Where-Object {
$conn = $_
-not ($previousConnections | Where-Object {
$_.RemoteAddress -eq $conn.RemoteAddress -and
$_.RemotePort -eq $conn.RemotePort
})
}
if ($newConnections) {
foreach ($conn in $newConnections) {
$process = Get-Process -Id $conn.OwningProcess -ErrorAction SilentlyContinue
$timestamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
Write-Output "$timestamp | YENİ BAĞLANTI: $($conn.RemoteAddress):$($conn.RemotePort) | Process: $($process.Name) (PID: $($conn.OwningProcess))"
}
}
$previousConnections = $currentConnections
Start-Sleep -Seconds 5
}
Bu script, yeni kurulan her bağlantıyı process adıyla birlikte ekrana basar. Beklenmedik bir process’in dışarıya bağlantı kurduğunu görmek, hemen inceleme başlatmanız için yeterli sebeptir.
netstat ile Hızlı Tarama
# Dış IP'lere bağlanan tüm process'leri göster
netstat -b -n | Select-String -Pattern "ESTABLISHED" | ForEach-Object {
$parts = $_ -split 's+'
if ($parts[3] -notmatch '^(10.|172.(1[6-9]|2[0-9]|3[01]).|192.168.)') {
Write-Output $_
}
}
Pratik Senaryo: Lateral Movement Tespiti
Gerçek dünya senaryosu: İç ağınızda bir makine ele geçirilmiş ve saldırgan lateral movement yapıyor. Bu durumda şu belirtileri görürsünüz:
- Aynı kaynak IP’den kısa sürede çok sayıda hedef‘e SMB (445), RDP (3389) veya WMI bağlantı denemeleri
- Başarılı giriş sonrası yeni process’lerin hemen dışarıya bağlantı kurması
- Olağandışı saatlerde iç ağ aktivitesi
Bu tespiti otomatize etmek için basit bir bash scripti:
#!/bin/bash
# lateral_move_detect.sh - SMB/RDP tabanlı lateral movement tespiti
THRESHOLD=10 # 60 saniyede bu kadar farklı hedeften fazlası alert
LOG_FILE="/var/log/lateral_detect.log"
INTERFACE="eth0"
echo "Lateral movement izleme başlatıldı - $(date)" | tee -a "$LOG_FILE"
tcpdump -i "$INTERFACE" -n 'tcp and (dst port 445 or dst port 3389 or dst port 5985)'
-l 2>/dev/null |
awk '{
split($3, src, ".")
src_ip = src[1]"."src[2]"."src[3]"."src[4]
split($5, dst, ".")
dst_ip = dst[1]"."dst[2]"."dst[3]"."dst[4]
count[src_ip][dst_ip]++
# Her 60 saniyede bir rapor
if (NR % 1000 == 0) {
for (s in count) {
n = 0
for (d in count[s]) n++
if (n > '"$THRESHOLD"') {
print strftime("%Y-%m-%d %H:%M:%S"), "ALERT: Lateral movement şüphesi -", s, "->", n, "farklı hedef"
}
}
delete count
}
}' | tee -a "$LOG_FILE"
Log Analizi ile Anomali Tespiti
Araçların yanında, mevcut sistem loglarını analiz etmek de kritik önemdedir. Linux’ta /var/log/auth.log veya /var/log/secure ve Windows’ta Security Event Log’u düzenli olarak taramak gerekir.
# Son 24 saatte başarısız SSH deneme sayısını IP başına say
grep "Failed password" /var/log/auth.log |
grep "$(date -d '24 hours ago' '+%b %d')|$(date '+%b %d')" |
awk '{print $11}' |
sort | uniq -c | sort -rn |
awk '$1 > 5 {print "BRUTE FORCE ŞÜPHESİ: "$2" - "$1" deneme"}'
# Başarılı login olan ama daha önce hiç giriş yapmamış IP'leri bul
KNOWN_IPS="/etc/security/known_ips.txt"
grep "Accepted password|Accepted publickey" /var/log/auth.log |
awk '{print $11}' | sort -u |
while read ip; do
if ! grep -q "^$ip$" "$KNOWN_IPS" 2>/dev/null; then
echo "YENİ/BİLİNMEYEN IP'DEN GİRİŞ: $ip"
fi
done
Proaktif Yaklaşım: Baseline Oluşturmak
Şüpheli davranışı tanımak için önce normal davranışın nasıl göründüğünü bilmeniz gerekir. Bu yüzden baseline oluşturmak savunmanın temelidir.
Bir hafta boyunca şu değerleri kaydedin:
- Saatlik ortalama trafik miktarı (inbound/outbound)
- En çok bağlantı kurulan dış IP adresleri ve portlar
- Her sunucunun normal process-network bağlantı haritası
- DNS sorgu sıklığı ve sorgulanan domain’ler
Bu baseline’dan sapma olduğunda alarm üretecek basit bir script:
#!/bin/bash
# baseline_check.sh
BASELINE_CONN=500 # Normal saatlik bağlantı sayısı
CURRENT_CONN=$(ss -tan state established | wc -l)
ALERT_THRESHOLD=2 # Baseline'ın kaç katı olursa alert
if [ "$CURRENT_CONN" -gt $((BASELINE_CONN * ALERT_THRESHOLD)) ]; then
MESSAGE="UYARI: Anlık bağlantı sayısı ($CURRENT_CONN) baseline'ın (${BASELINE_CONN}) ${ALERT_THRESHOLD} katını aştı!"
echo "$(date): $MESSAGE" >> /var/log/network_anomaly.log
# Mail veya Slack notification eklenebilir
echo "$MESSAGE" | mail -s "Network Anomaly Alert" [email protected]
fi
Trafik Analizi Sırasında Dikkat Edilmesi Gereken İşaretler
Şüpheli davranış göstergeleri konusunda pratik bir liste:
- Olağandışı saatlerde trafik: Mesai saatleri dışında yoğun aktivite, özellikle büyük veri transferleri
- Çok sayıda port’a SYN paketi: Port scanning aktivitesi
- Kısa aralıklı, küçük boyutlu dış bağlantılar: Beaconing
- DNS sorgularında uzun ve rastgele subdomain’ler: DNS tünelleme
- Şifreli trafikte sertifika anomalileri: Self-signed sertifika kullanan şüpheli HTTPS bağlantıları
- İç ağda broadcast fırtınaları: ARP poisoning veya misconfiguration
- Yeni process’lerin hemen ağa çıkması: Malware aktivitesi
- Geleneksel olmayan portlarda HTTP/HTTPS trafiği: Firewall bypass denemeleri
Tespit Sonrası Yapılacaklar
Şüpheli bir aktivite tespit ettikten sonra paniklemeden sistematik hareket etmek gerekir.
Önce kanıtları koruyun: PCAP dosyasını hemen kaydedin, ilgili log dosyalarını backup’a alın. Disk üzerindeki iz silinebilir, ağ kayıtları silinmez.
Ardından kapsamı belirleyin: Sadece bir makine mi etkilenmiş, yoksa lateral movement olmuş mu? Zeek’in conn.log’unu analiz edin.
İzolasyon: Etkilenen sistemi ağdan izole edin ama kapatmayın. Kapatmak RAM’deki kanıtları yok eder. Firewall seviyesinde izolasyon tercih edin.
Zaman çizelgesi oluşturun: İlk şüpheli aktivitenin ne zaman başladığını belirleyin. Bu, saldırının diğer aşamalarını anlamlandırmanızı sağlar.
Sonuç
Ağ trafiği izleme, reaktif değil proaktif bir güvenlik yaklaşımının temelidir. Pahalı araçlara sahip olmadan da tcpdump, Zeek ve Suricata kombinasyonuyla ciddi bir görünürlük elde edebilirsiniz. Önemli olan araçları kurmak değil, doğru sorular sormayı öğrenmektir: Bu bağlantı neden var? Bu port neden açık? Bu saat neden bu kadar trafik var?
Baseline oluşturmadan başlamayın. Normal’i bilmeden anormal’i tespit edemezsiniz. Küçük ortamlarda bile haftada bir PCAP analizi yapmayı, Suricata alertlerini düzenli gözden geçirmeyi alışkanlık haline getirin.
Son olarak şunu söylemek isterim: En gelişmiş saldırılar bile ağ katmanında iz bırakır. Siz o izi ne kadar erken fark ederseniz, hasarın boyutu o kadar küçük kalır. Sessiz kalmak savunuculukta hiçbir zaman bir erdem değildir.