Ağ Trafiğinde Anomali Tespiti: Wireshark Filtreleri

Ağ trafiğini izlemek, bir sistem yöneticisinin en kritik görevlerinden biridir. Günlük operasyonlarda yüzlerce makine, binlerce bağlantı ve megabaytlarca veri akarken, içinde saklanan anormal bir paket dizisi fark edilmeden geçip gidebilir. Wireshark, bu trafiği görünür kılmanın en güçlü araçlarından biridir; ama sadece trafiği yakalamak yetmez. Asıl mesele, o trafiğin içinde neyin normal, neyin şüpheli olduğunu ayırt edebilmektir. Bu yazıda Wireshark filtrelerini kullanarak ağ anomalilerini nasıl tespit edeceğimizi, gerçek senaryolar üzerinden ele alacağız.

Wireshark Filtre Mantığını Anlamak

Wireshark’ta iki farklı filtre türü vardır: Capture Filter ve Display Filter. Bu ikisini karıştırmak, sysadminlerin en sık yaptığı hatalardan biridir.

Capture Filter: Trafik yakalanırken devreye girer. BPF (Berkeley Packet Filter) sözdizimini kullanır. Yakalamayı başlatmadan önce tanımlanır ve sadece belirtilen kriterlere uyan paketler diske yazılır. Düşük kaynak tüketimi gerektiren ortamlarda ya da uzun süreli izlemelerde tercih edilir.

Display Filter: Yakalanan trafik üzerinde çalışır. Wireshark’ın kendi sözdizimini kullanır, çok daha zengin ifade imkanı sunar. Zaten yakalanmış bir pcap dosyasını analiz ederken ya da canlı trafiği gerçek zamanlı süzerken kullanılır.

Anomali tespitinde genellikle ikisini birlikte kullanırsınız: Önce geniş bir capture filter ile trafiği yakalarsınız, sonra display filter’larla içine dalarsiniz.

Temel Display Filter Sözdizimi

Filtrelere geçmeden önce sözdizimini netleştirelim:

  • ip.addr == 192.168.1.1: Belirli bir IP’ye ait trafik
  • tcp.port == 443: Belirli bir porta ait trafik
  • &&: VE operatörü (and da çalışır)
  • ||: VEYA operatörü (or da çalışır)
  • !: DEĞİL operatörü (not da çalışır)
  • contains: Belirli bir string içeren paketler
  • matches: Regex ile eşleşen paketler

Şimdi gerçek anomali senaryolarına geçelim.

Senaryo 1: Port Tarama Tespiti

Bir sabah NOC ekibinden mesaj geldi: “Sunuculardan biri yavaşladı, kontrol eder misin?” Wireshark’ı açtığınızda ilk yapmanız gereken şey port tarama belirtilerini aramak.

Port taramalar genellikle kısa sürede çok sayıda SYN paketi gönderir. Yanıt almadan bağlantıyı keser ya da RST alır. Bu pattern’i yakalamak için:

# Display Filter: SYN paketlerini göster, ACK içermeyenleri
tcp.flags.syn == 1 && tcp.flags.ack == 0

Bu filtre, SYN-ACK olmayan, yani tamamlanmamış bağlantı denemelerini getirir. Eğer kısa sürede aynı kaynak IP’den yüzlerce farklı hedefe veya porta SYN görüyorsanız, büyük ihtimalle Nmap veya benzeri bir tarayıcıyla karşı karşıyasınız.

Daha spesifik olarak, tek bir IP’den gelen taramaları izole etmek için:

# Belirli bir IP'nin başlattığı SYN paketleri
ip.src == 10.0.0.55 && tcp.flags.syn == 1 && tcp.flags.ack == 0

Wireshark’ın Statistics > Conversations menüsünden TCP konuşmalarını sıraladığınızda, anormal derecede fazla bağlantı denemesi yapan IP’ler hemen öne çıkar. Bu görsel analizi filtrelerle desteklediğinizde çok güçlü bir tespit mekanizması elde edersiniz.

Senaryo 2: ARP Zehirlenmesi (ARP Poisoning)

ARP poisoning, man-in-the-middle saldırılarının temel yöntemlerinden biridir. Saldırgan, ağdaki makinelere sahte ARP yanıtları göndererek trafiği kendisi üzerinden geçirir. Belirtisi şudur: Aynı MAC adresi birden fazla IP için duyuruluyor ya da bir IP’nin MAC’i sürekli değişiyor.

# Tüm ARP trafiğini gör
arp

# Sadece ARP yanıtlarını filtrele (reply)
arp.opcode == 2

ARP zehirlenmesini tespit etmek için daha güçlü bir yaklaşım:

# Aynı MAC'i farklı IP'ler için duyuran paketler
# (Bu senaryoda önce arp.opcode == 2 ile yanıtları alın,
# sonra Statistics > Endpoints ile MAC-IP eşleşmelerini karşılaştırın)
arp.opcode == 2 && arp.src.hw_mac == ff:ff:ff:ff:ff:ff

Pratik bir ipucu: Edit > Find Packet ile arp.duplicate-address-detected veya arp.duplicate-address-frame arayabilirsiniz. Wireshark bu durumu otomatik olarak expert info olarak işaretler. Analyze > Expert Information menüsü, anomali tespitinde gözden kaçırılmaması gereken altın bir kaynaktır.

Senaryo 3: DNS Tünel Tespiti

DNS tünel, DNS sorgularını veri kanalı olarak kullanan gizli bir iletişim yöntemidir. Güvenlik duvarını atlatmak, veri sızdırmak ya da C2 (Command & Control) iletişimi kurmak için kullanılır. Belirtileri şunlardır: Anormal uzunlukta DNS sorguları, yüksek frekanslı DNS trafiği ve alışılmadık DNS kayıt türleri.

# Tüm DNS trafiğini göster
dns

# Uzun DNS sorgularını tespit et (tünel için genellikle uzun subdomain'ler kullanılır)
dns && frame.len > 100

DNS tünelinde, veriler subdomain’lerin içine kodlanır. Örneğin aGVsbG8gd29ybGQ.malicious.com gibi base64 görünümlü sorgular şüphelidir.

# TXT kayıt sorgularını filtrele (veri taşımak için sık kullanılır)
dns.qry.type == 16

# NULL kayıt sorgularını filtrele
dns.qry.type == 10

DNS tünel araçları genellikle yüksek frekanslı sorgu gönderir. Statistics > DNS menüsünden toplam sorgu sayısını ve süreyi inceleyerek, saniyede onlarca sorgu yapan bir istemciyi hızla tespit edebilirsiniz.

Senaryo 4: Brute Force Saldırısı Tespiti

SSH veya web uygulamasına yönelik brute force saldırıları, kısa sürede aynı hedefe çok sayıda bağlantı denemesi şeklinde kendini gösterir.

# SSH trafiğini izole et
tcp.port == 22

# Belirli bir hedefe giden SSH bağlantılarını say
ip.dst == 192.168.1.100 && tcp.port == 22 && tcp.flags.syn == 1

Web uygulaması brute force’unda ise HTTP yanıt kodları kritik ipuçları verir:

# HTTP 401 (Unauthorized) yanıtlarını filtrele
http.response.code == 401

# HTTP 403 (Forbidden) yanıtlarını filtrele
http.response.code == 403

# Hem 401 hem 403'ü bir arada görmek için
http.response.code == 401 || http.response.code == 403

Belirli bir kaynaktan gelen yoğun POST istekleri de brute force belirtisi olabilir:

# Belirli bir IP'den gelen POST istekleri
http.request.method == "POST" && ip.src == 10.0.0.77

Senaryo 5: Veri Sızıntısı (Data Exfiltration) Tespiti

Bir saldırgan sisteme girdikten sonra veriyi dışarı taşımaya çalışır. Bu genellikle büyük boyutlu, alışılmadık hedeflere giden trafik şeklinde görünür.

# Büyük paketleri filtrele (olağandışı büyük veri transferi)
frame.len > 1400

# Dışarıya giden büyük paketleri izole et (DMZ veya iç ağdan internete)
ip.src == 192.168.0.0/16 && frame.len > 1200

HTTPS üzerinden veri sızıntısı doğrudan içerik analiziyle yakalanamaz, ama trafik hacmi ve hedef IP analiziyle tespit edilebilir. Capture almaya başlamadan önce şu capture filter’ı kullanabilirsiniz:

# Capture Filter: Belirli bir subnet dışına giden trafik
not net 192.168.0.0/16 and not net 10.0.0.0/8

Wireshark’ın Statistics > Endpoints ve Statistics > Conversations bölümlerinde byte sayısına göre sıralama yaptığınızda, alışılmadık miktarda veri aktaran uç noktalar hemen dikkat çeker.

Senaryo 6: ICMP Flood ve Smurf Saldırısı

ICMP flood, hedef sistemi büyük miktarda ping paketiyle bunaltmak için kullanılır. Smurf saldırısında ise broadcast adreslere sahte kaynak IP’li ICMP paketleri gönderilerek hedef IP trafik altında ezilir.

# Tüm ICMP trafiğini göster
icmp

# ICMP Echo Request (ping) paketlerini filtrele
icmp.type == 8

# ICMP Echo Reply paketlerini filtrele
icmp.type == 0

# Broadcast adresine giden ICMP (Smurf göstergesi)
icmp && ip.dst == 255.255.255.255

Belirli bir IP’ye yönelik ICMP flood tespiti:

# Hedefe gelen ICMP trafiğini izole et
icmp.type == 8 && ip.dst == 192.168.1.100

Wireshark’ta Statistics > IO Graph kullanarak ICMP paket frekansını grafiksel olarak izleyebilirsiniz. Normal ortamda ICMP trafiği oldukça düşük ve düzenlidir; aniden yükselen bir spike, hemen araştırılmalıdır.

Senaryo 7: Şüpheli HTTP User-Agent Tespiti

Zararlı yazılımlar ve exploit framework’leri genellikle alışılmadık ya da sabit bir User-Agent stringi kullanır. Metasploit, Cobalt Strike ve benzeri araçların imzaları bu alanda oldukça belirgindir.

# Alışılmadık User-Agent içeren HTTP istekleri
http.user_agent contains "python-requests"

# Metasploit'in varsayılan User-Agent'ı
http.user_agent contains "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"

# Boş User-Agent (bazı zararlılar User-Agent göndermez)
http.request && !http.user_agent

Regex ile daha kapsamlı bir arama yapmak için:

# Şüpheli User-Agent pattern'leri (curl, wget, sqlmap vb.)
http.user_agent matches "(curl|wget|sqlmap|nikto|masscan)"

Bu filtreler, güvenlik duvarı loglarıyla birlikte kullanıldığında web uygulamasına yönelik otomatik tarama ve saldırı araçlarını tespit etmenizi sağlar.

Şüpheli Trafik İçin Kapsamlı Bir Analiz Yaklaşımı

Gerçek bir olayda tek bir filtre yetmez. Sistematik bir yaklaşım izlemek gerekir. Aşağıda bir anomali inceleme iş akışı için kullanabileceğiniz filtreler ve adımlar yer alıyor.

Adım 1: Genel durumu anlayın

# Capture başlatırken tüm IP trafiğini al, loopback'i dışarıda tut
not loopback

# Sadece belirli bir host'un trafiğini yakala (Capture Filter)
host 192.168.1.50

Adım 2: Protokol dağılımını inceleyin

Wireshark’ta Statistics > Protocol Hierarchy açın. Beklenmedik protokollerin (örneğin ofis ağında IRC veya Tor trafiği) orada görünmesi, araştırılması gereken bir uyarı işaretidir.

Adım 3: Expert Information’ı kontrol edin

# Expert Info uyarılarını içeren paketleri göster
_ws.expert

Adım 4: Zaman bazlı anomalileri arayın

# Belirli bir zaman aralığında gerçekleşen trafiği filtrele
frame.time >= "2024-01-15 02:00:00" && frame.time <= "2024-01-15 04:00:00"

Gece 02:00-04:00 gibi mesai saatleri dışında yoğun trafik, özellikle dahili sunuculardan kaynaklanıyorsa, ciddi bir red flag’dir.

tshark ile Komut Satırından Anomali Tespiti

Wireshark’ın GUI olmadan çalışan kardeşi tshark, otomatik izleme ve log analizi için çok daha pratiktir. Büyük pcap dosyalarını analiz etmek ya da script’e entegre etmek için mükemmeldir.

# En çok bağlantı kuran kaynak IP'leri listele
tshark -r capture.pcap -q -z conv,tcp | sort -k5 -rn | head -20

# DNS sorgularını metin olarak çıkar
tshark -r capture.pcap -Y "dns.qry.type == 1" -T fields 
  -e frame.time -e ip.src -e dns.qry.name

# HTTP User-Agent'larını filtrele ve say
tshark -r capture.pcap -Y "http.user_agent" -T fields 
  -e ip.src -e http.user_agent | sort | uniq -c | sort -rn

# SYN flood analizi: Kaç tane tamamlanmamış SYN var?
tshark -r capture.pcap -Y "tcp.flags.syn==1 && tcp.flags.ack==0" 
  -T fields -e ip.src | sort | uniq -c | sort -rn

Bu tshark komutlarını cron job’a bağlayarak periyodik anomali raporları oluşturabilirsiniz. Çıktıyı bir log dosyasına yönlendirip SIEM sisteminize beslemek de oldukça yaygın bir kullanım senaryosudur.

Filtre Kitaplığı Oluşturmak

Wireshark’ta sık kullandığınız filtreleri kaydedebilirsiniz. Analyze > Display Filters menüsünden yeni bir filtre ekleyip isim verebilirsiniz. Ekibinizle paylaşmak için filtreleri dışa aktarmak da mümkündür.

Anomali tespiti için önerilen bir filtre kitaplığı şu şekilde oluşturulabilir:

  • Port Scan: tcp.flags.syn == 1 && tcp.flags.ack == 0
  • Brute Force SSH: tcp.port == 22 && tcp.flags.syn == 1
  • DNS Tünel: dns && frame.len > 100
  • ARP Poisoning: arp.opcode == 2
  • HTTP Hata Kodları: http.response.code >= 400
  • Şüpheli ICMP: icmp && frame.len > 100
  • Gece Trafiği: frame.time_delta > 0

Bu filtreleri ~/.config/wireshark/dfilters dosyasına da manuel olarak ekleyebilirsiniz. Dosya formatı oldukça basittir:

# Wireshark dfilters dosyasına filtre ekleme örneği
echo '"Port Scan" "tcp.flags.syn == 1 && tcp.flags.ack == 0"' 
  >> ~/.config/wireshark/dfilters

Performans ve Pratik İpuçları

Büyük ağlarda uzun süreli paket yakalama, disk ve bellek açısından zorlu olabilir. Birkaç önemli noktayı paylaşayım:

Ring buffer kullanımı: Wireshark’ı komut satırından başlatırken dosya boyutunu sınırlayın.

# 100MB'lık ring buffer ile yakalama, toplam 10 dosya
dumpcap -i eth0 -b filesize:102400 -b files:10 -w /tmp/capture.pcap

Capture filter ile ön eleme yapın: Her paketi yakalamak yerine sadece şüpheli protokolleri hedefleyin.

# Sadece TCP SYN ve DNS trafiğini yakala
tcpdump -i eth0 "tcp[tcpflags] & tcp-syn != 0 or port 53" -w suspicious.pcap

Zaman damgasına dikkat edin: Pcap dosyalarını analiz ederken sistem saatinin doğru olduğundan emin olun. NTP senkronizasyon sorunu, zaman bazlı analizlerinizi yanıltabilir.

Gerçek Bir Olay: Fidye Yazılımı Lateral Movement Tespiti

Bir müşteri ortamında yaşanan olayı anonimleştirerek paylaşayım. Sabah erken saatlerde bir iş istasyonundan diğer makinelere yönelik anormal SMB trafiği başladı. Wireshark analizi şu filtrelerin kombinasyonuyla durumu ortaya koydu:

# SMB trafiğini izole et
smb || smb2

# Admin share erişim denemelerini filtrele
smb2.filename contains "ADMIN$" || smb2.filename contains "C$" || smb2.filename contains "IPC$"

# NTLM kimlik doğrulama trafiği (lateral movement göstergesi)
ntlmssp

Bu üç filtre aynı anda kullanıldığında, bir iş istasyonunun gece 03:17’de 47 farklı sunucuya SMB admin share bağlantısı denediği görüldü. Makinenin internete bağlantısı kesildi, adli analiz başlatıldı ve aynı fidye yazılımının başka makinelere yayılması engellendi.

Sonuç

Wireshark filtreleri, ağ anomali tespitinde ham bir güç barındırır; ama bu gücü ancak doğru kullanırsanız işe yarar. Sadece trafiği izlemek değil, normalin neye benzediğini bilmek ve bu normalden sapmaları tanıyabilmek kritik öneme sahiptir.

Başlangıç için birkaç pratik öneri: Önce ortamınızın normal trafik profilini çıkarın. Mesai saatleri, gece ve hafta sonu trafiğini karşılaştırın. Hangi protokoller ne kadarlık bir yer tutuyor, bunu bilin. Ardından bu yazıdaki filtre örneklerini kendi altyapınıza adapte edin ve filtre kitaplığınızı oluşturun.

tshark ile bu süreçleri otomatize edip periyodik raporlar oluşturmak, özellikle büyük ortamlarda insan gözünün yetemeyeceği noktaları kapatmanın en etkili yoludur. Wireshark tek başına bir güvenlik çözümü değil; ama doğru kullanıldığında sahip olduğunuz en değerli analiz araçlarından biri olabilir.

Yorum yapın