Wireshark ile Ağ Trafiği Güvenlik Analizi
Ağ trafiğini gerçek zamanlı olarak izlemek, bir güvenlik olayının ortasında kalmış bir sysadmin için hayat kurtarıcı olabilir. Yıllar içinde öğrendiğim en değerli becerilerden biri, Wireshark’ı sadece “paket yakalayan bir araç” olarak değil, ağınızın X-ray makinesi olarak kullanmak oldu. Bu yazıda, gerçek saldırı senaryolarını nasıl tespit ettiğimizi, filtrelerle nasıl anlam çıkardığımızı ve güvenlik analizini nasıl sistematik bir sürece dönüştürdüğümüzü konuşacağız.
Wireshark Kurulumu ve Temel Hazırlık
Önce temel kurulumdan başlayalım. Ubuntu/Debian tabanlı sistemlerde:
sudo apt update
sudo apt install wireshark tshark -y
# Kullanıcıyı wireshark grubuna ekle (root olmadan çalışmak için)
sudo usermod -aG wireshark $USER
# Grup değişikliğini aktif et
newgrp wireshark
Wireshark’ı grafiksel arayüz olmadan, terminal üzerinden kullanmak istiyorsanız tshark tam istediğiniz araç. Sunucularda GUI olmadığı için tshark hayat kurtarır. Sistemi yeniden başlatmadan önce oturumu kapatıp açmanız gerekebilir, bunu atlayan arkadaşlar sonradan “neden çalışmıyor” diye sormaya geliyor.
Arayüz listesini görmek için:
# Mevcut ağ arayüzlerini listele
tshark -D
# Veya ip komutuyla
ip link show
Çıktıda genellikle eth0, ens3, wlan0 gibi arayüzler görürsünüz. Sanal ortamlarda ens ile başlayanlar yaygınlaştı.
Temel Paket Yakalama Senaryoları
Basit Trafik Yakalama
# eth0 arayüzünde trafik yakala, 100 paket sonra dur
tshark -i eth0 -c 100
# Belirli bir dosyaya kaydet
tshark -i eth0 -w /tmp/capture.pcap
# Kayıtlı dosyayı oku
tshark -r /tmp/capture.pcap
Yakalamayı dosyaya kaydederken dikkat edilmesi gereken nokta, disk dolulugu. Özellikle yoğun trafikli ortamlarda /tmp veya log dizininizin kapasitesini gözleyin. Ben genellikle -b parametresiyle döngüsel dosya yazımı kullanırım:
# Her 100MB'da yeni dosya aç, toplamda 5 dosya tut (500MB döngü)
tshark -i eth0 -b filesize:102400 -b files:5 -w /var/log/captures/traffic.pcap
Bu sayede disk taşmaz ve son 500MB’lık trafiğiniz her zaman elinizin altında olur. Bir güvenlik olayı sonrasında “keşke yakalıyor olsaydım” demek yerine bu yapıyı önceden kurmak çok daha mantıklı.
Güvenlik Odaklı Filtreleme
Wireshark/tshark’ın asıl gücü filtreleme motorunda yatıyor. İki tür filtre var: yakalama sırasında kullanılan BPF (Berkeley Packet Filter) filtreleri ve Wireshark’ın kendi display filtreleri. Bunları birbirine karıştırmak yaygın bir hata.
Port Tarama Tespiti (SYN Scan)
Klasik nmap SYN taraması yakalamak için:
# Sadece TCP SYN paketlerini yakala (BPF filtresi)
tshark -i eth0 -f "tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack == 0"
# Belirli bir IP'den gelen SYN'leri say
tshark -i eth0 -f "src host 192.168.1.100 and tcp[tcpflags] & tcp-syn != 0"
-T fields -e ip.src -e tcp.dstport | sort | uniq -c | sort -rn | head -20
İkinci komut size şunu gösterir: kaynak IP başına, hangi portlara kaç SYN paketi gitmiş. Eğer tek bir IP 10 saniye içinde 50-100 farklı porta SYN gönderiyorsa, bu büyük olasılıkla bir tarama. Meşru uygulama trafiği bu şekilde davranmaz.
Brute Force Saldırısı Tespiti
SSH brute force saldırılarını tespit etmek için:
# SSH trafiğini yakala ve bağlantı sayısını izle
tshark -i eth0 -f "tcp port 22"
-T fields -e frame.time -e ip.src -e tcp.flags
| grep "0x00000002" | awk '{print $2}' | sort | uniq -c | sort -rn
# Daha detaylı: 60 saniye içinde 22 portuna bağlanan unique IP'ler
tshark -i eth0 -f "tcp dst port 22 and tcp[tcpflags] & tcp-syn != 0"
-a duration:60 -T fields -e ip.src | sort | uniq -c | sort -rn
Gerçek bir olaydan örnek vereyim: Bir müşterinin sunucusunda auth.log’da binlerce başarısız SSH denemesi görüldü. tshark çıktısı incelendiğinde, 3 farklı IP’den dakikada 200’den fazla SYN paketi geldiği anlaşıldı. Üç IP de farklı ülkelerdeydi ve klasik distributed brute force işaretiydi.
HTTP/HTTPS Trafik Analizi
Web trafiğinde güvenlik anomalileri aramak, özellikle iç ağdaki sunucularda kritik önem taşıyor.
# HTTP GET isteklerini yakala ve URL'leri göster
tshark -i eth0 -f "tcp port 80"
-Y "http.request.method == GET"
-T fields -e ip.src -e http.host -e http.request.uri
2>/dev/null | head -50
# SQL injection girişimlerini içeren istekleri ara
tshark -r /tmp/capture.pcap
-Y "http.request.uri contains "union" or http.request.uri contains "select" or http.request.uri contains "--""
-T fields -e frame.number -e ip.src -e http.request.full_uri
HTTPS trafiğini çözümlemek için sunucu tarafında SSL/TLS anahtarlarına ihtiyacınız var. Eğer uygulamanız bunu destekliyorsa, SSLKEYLOGFILE ortam değişkeniyle pre-master secret’ları dışa aktarabilirsiniz:
# Firefox/Chrome için SSL key log dosyası (test ortamında!)
export SSLKEYLOGFILE=/tmp/ssl_keys.log
firefox &
# Sonra tshark'a bu dosyayı göster
tshark -r capture.pcap -o "ssl.keylog_file:/tmp/ssl_keys.log"
-Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri
Bu yöntemi sadece test ve geliştirme ortamlarında, veya açık rızayla yapılan güvenlik denetimlerinde kullanın. Üretim ortamında böyle bir şey yapmak hem etik hem de hukuki sorunlar doğurabilir.
ARP Spoofing ve Man-in-the-Middle Tespiti
ARP spoofing, iç ağlarda hala aktif olarak kullanılan bir saldırı vektörü. Tespit etmek görece kolay, ama fark etmezseniz tüm trafiğiniz saldırganın elinden geçiyor.
# ARP paketlerini izle
tshark -i eth0 -f "arp" -T fields
-e arp.src.hw_mac -e arp.src.proto_ipv4
-e arp.dst.hw_mac -e arp.dst.proto_ipv4
-e arp.opcode
# Aynı IP için farklı MAC adreslerini tespit et (ARP spoofing işareti)
tshark -i eth0 -f "arp" -a duration:30
-T fields -e arp.src.proto_ipv4 -e arp.src.hw_mac
| sort | uniq | awk -F't' '{count[$1]++; mac[$1]=$2} count[$1]>1 {print "SUSPICIOUS: "$1" has multiple MACs"}'
Gerçek ortamda karşılaştığım bir senaryoda, bir ofis ağında gateway IP’si (192.168.1.1) için iki farklı MAC adresi görünüyordu. ARP tablolarını incelediğimizde, test amaçlı bir araştırmacının kendi laptopunu ağa bağlayıp Ettercap çalıştırdığı anlaşıldı. Neyse ki iç tehdit değildi, ama durumu fark etmeden önce 20 dakika boyunca trafik o makineden geçmişti.
DNS Trafik Analizi
DNS, güvenlik analizinde genellikle ihmal edilen ama son derece kritik bir protokol. Kötü amaçlı yazılımlar sıklıkla DNS üzerinden komuta ve kontrol (C2) iletişimi kurar veya veri sızdırır.
# Tüm DNS sorgularını yakala ve göster
tshark -i eth0 -f "udp port 53"
-T fields -e frame.time -e ip.src -e dns.qry.name -e dns.qry.type
| grep -v "in-addr.arpa"
# Uzun DNS sorgularını filtrele (DNS tünelleme işareti)
tshark -r capture.pcap -Y "dns"
-T fields -e dns.qry.name
| awk 'length($0) > 50 {print "LONG DNS QUERY: "$0}'
# Çok fazla unique subdomain sorgulayan host'ları bul (DGA tespiti)
tshark -r capture.pcap -Y "dns.flags.response == 0"
-T fields -e ip.src -e dns.qry.name
| awk '{print $1, $2}' | sort | awk '{print $1}' | uniq -c | sort -rn | head -10
DNS tünelleme genellikle şu şekilde görünür: a2FsZWVtYWJkdWxsYWg=.malicious-domain.com gibi base64 kodlu, çok uzun subdomain adları. Meşru DNS trafiğinde bu uzunlukta sorgular neredeyse hiç görülmez.
Domain Generation Algorithm (DGA) kullanan zararlı yazılımlar da benzer şekilde tespit edilebilir. Tek bir kaynak IP’den çok sayıda rastgele görünen alan adı sorgusu, güçlü bir göstergedir.
Kapsamlı Güvenlik Denetimi Scripti
Tüm bu analizleri tek bir script altında toplamak hem tekrarlanabilirlik sağlar hem de raporlama kolaylaşır:
#!/bin/bash
# network_security_audit.sh
# Kullanim: sudo ./network_security_audit.sh eth0 300
INTERFACE=${1:-eth0}
DURATION=${2:-60}
CAPTURE_FILE="/tmp/security_audit_$(date +%Y%m%d_%H%M%S).pcap"
REPORT_FILE="/tmp/security_report_$(date +%Y%m%d_%H%M%S).txt"
echo "[*] Trafik yakalanıyor: $INTERFACE, $DURATION saniye..." | tee $REPORT_FILE
tshark -i $INTERFACE -a duration:$DURATION -w $CAPTURE_FILE 2>/dev/null
echo -e "n[*] PORT TARAMA ANALİZİ" >> $REPORT_FILE
echo "Top 10 SYN gönderen IP (olası tarama):" >> $REPORT_FILE
tshark -r $CAPTURE_FILE
-Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
-T fields -e ip.src 2>/dev/null
| sort | uniq -c | sort -rn | head -10 >> $REPORT_FILE
echo -e "n[*] DNS ANALİZİ" >> $REPORT_FILE
echo "En çok DNS sorgusu yapan IP'ler:" >> $REPORT_FILE
tshark -r $CAPTURE_FILE -Y "dns.flags.response == 0"
-T fields -e ip.src 2>/dev/null
| sort | uniq -c | sort -rn | head -10 >> $REPORT_FILE
echo -e "n[*] ARP ANALİZİ" >> $REPORT_FILE
echo "Birden fazla MAC ile görülen IP'ler (ARP Spoofing şüphesi):" >> $REPORT_FILE
tshark -r $CAPTURE_FILE -Y "arp"
-T fields -e arp.src.proto_ipv4 -e arp.src.hw_mac 2>/dev/null
| sort | uniq | sort -k1 | awk 'seen[$1]++ {print "ALERT: "$1}' >> $REPORT_FILE
echo -e "n[*] BÜYÜK VERI TRANSFERLERİ" >> $REPORT_FILE
echo "En fazla veri gönderen kaynak IP'ler (veri sızdırma şüphesi):" >> $REPORT_FILE
tshark -r $CAPTURE_FILE
-T fields -e ip.src -e frame.len 2>/dev/null
| awk '{sum[$1]+=$2} END {for (ip in sum) print sum[ip], ip}'
| sort -rn | head -10 | awk '{print $2": "int($1/1024)"KB"}' >> $REPORT_FILE
echo "[*] Rapor tamamlandı: $REPORT_FILE"
cat $REPORT_FILE
Bu scripti cron’a ekleyerek haftalık otomatik raporlar üretebilirsiniz. Çıktıyı bir e-posta veya Slack bildirimine yönlendirmek de makul bir adım.
Gerçek Dünya: Ransomware Öncesi İzlerin Tespiti
Bir olayı aktarmak istiyorum. Bir üretim ortamında, sabahın erken saatlerinde sunuculardan birinde olağandışı ağ aktivitesi tespit edildi. Monitoring sistemi alarm vermişti ama ne olduğu belli değildi. tshark ile hızlıca inceleme başlattık:
# Dışarıya giden bağlantıları analiz et
tshark -i eth0 -a duration:120
-T fields -e ip.dst -e tcp.dstport -e frame.len
-Y "ip.dst != 10.0.0.0/8 and ip.dst != 192.168.0.0/16 and ip.dst != 172.16.0.0/12"
2>/dev/null | sort | uniq -c | sort -rn | head -20
Çıktıda beklenmedik 3 harici IP’ye giden trafik görüldü. Bu IP’ler daha önce hiç iletişim kurulmamış adreslerdi. Threat intelligence servisleriyle sorguladığımızda ikisi bilinen C2 altyapısına aitti. Sunucu hemen ağdan izole edildi. Sonradan anlaşıldı ki, üç gün önce yapılan bir phishing saldırısıyla sisteme yerleşen bir payload keşif aşamasındaydı ve henüz şifreleme başlamamıştı.
Wireshark olmadan bu tespiti yapabilmek için onlarca log dosyasını manuel incelememiz gerekirdi. Gerçek zamanlı paket analizi, olayın boyutunu anlamayı dramatik ölçüde hızlandırdı.
Wireshark Grafiksel Arayüzünde Güvenlik Analizine Yönelik İpuçları
Grafik arayüzü kullanıyorsanız, birkaç özellik güvenlik analizi için özellikle değerli:
Statistics > Conversations: Hangi iki uç nokta arasında ne kadar veri aktarıldığını özetler. Anormal büyüklükte transferleri anında görürsünüz.
Statistics > Protocol Hierarchy: Trafiğin protokol dağılımını gösterir. Normalde HTTPS ağırlıklı bir ağda aniden DNS veya ICMP oranının artması dikkat çekmeli.
Analyze > Expert Information: Wireshark’ın kendi tespit ettiği anomalileri listeler. Retransmission’lar, RST paketleri, checksum hataları gibi şeyler burada toplanır.
Edit > Find Packet > String: Paket içeriklerinde string arama yapar. Cleartext protokollerde kullanıcı adı, parola veya hassas veri sızıntısı aramak için kullanışlı.
Renk kurallarını güvenlik odaklı özelleştirmek de analiz hızını artırır. View menüsünden Coloring Rules’a girerek SYN flood’ları kırmızı, DNS sorguları sarı, şifreli olmayan HTTP trafiği turuncu gösterecek şekilde ayarlayabilirsiniz.
tshark ile Otomatik Alarm Sistemi
Gerçek zamanlı izleme için basit bir alarm mekanizması kurmak mümkün:
#!/bin/bash
# realtime_alert.sh - Belirli eşikleri aşan trafiği anlık raporlar
INTERFACE="eth0"
THRESHOLD_SYN=50 # 10 saniyede bu kadar SYN görülürse alarm ver
while true; do
SYN_COUNT=$(tshark -i $INTERFACE -a duration:10
-Y "tcp.flags.syn == 1 and tcp.flags.ack == 0"
-T fields -e ip.src 2>/dev/null | wc -l)
if [ "$SYN_COUNT" -gt "$THRESHOLD_SYN" ]; then
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')
MESSAGE="[ALARM] $TIMESTAMP - 10 saniyede $SYN_COUNT SYN paketi tespit edildi!"
echo $MESSAGE
# Slack webhook veya mail eklenebilir
# curl -s -X POST -H 'Content-type: application/json'
# --data "{"text":"$MESSAGE"}" YOUR_SLACK_WEBHOOK_URL
fi
done
Bu script bir systemd servisi olarak çalıştırılabilir. /etc/systemd/system/network-monitor.service dosyası oluşturup ExecStart ile scripte işaret etmeniz yeterli.
Yasal ve Etik Boyut
Bu noktayı atlamak olmaz. Ağ trafiği dinlemek, Türkiye’de 5651 sayılı Kanun ve TCK kapsamında ciddi yasal yükümlülükler doğuruyor. Kendi ağınızda, sistem yöneticisi olarak yetkiniz dahilinde analiz yapmanız meşru. Ancak şu noktalara dikkat etmek şart:
- Çalışan bilgisi: Şirket ağında çalışan trafiği izleniyorsa, bu durum genellikle iş sözleşmesinde veya kabul edilen kullanım politikasında belirtilmiş olmalı.
- Kişisel veri: Yakalanan paketler KVKK kapsamında kişisel veri içerebilir. Saklama süreleri ve erişim kontrollerine dikkat edin.
- Penetrasyon testi: Müşteri sistemlerinde test yapmadan önce yazılı izin belgesi şart. Sözlü onay hiçbir zaman yeterli değil.
Yasal çerçeve içinde kalmak hem sizi hem kurumunuzu korur.
Sonuç
Wireshark ve tshark, doğru kullanıldığında güvenlik analizini reaktif bir süreçten proaktif bir disipline dönüştürebilir. Port tarama tespitinden ARP spoofing analizine, DNS tünelleme tespitinden ransomware öncü sinyallerine kadar pek çok tehdidi erken aşamada yakalamak mümkün.
Ancak araç kadar önemli olan şey, neye baktığınızı bilmek. Binlerce paketi ekrana bakmak başlı başına bir anlam ifade etmiyor. Temel ağ protokollerini iyi anlamak, meşru trafiğin nasıl göründüğünü bilmek ve anomaliyi normalden ayırt edecek deneyimi geliştirmek, asıl yatırım yapılması gereken alan.
Eğer bu konuya yeni giriyorsanız, önce kendi ev ağınızda veya bir test ortamında pratik yapmanızı öneririm. Nmap ile kendi sisteminizi tarayın, tshark ile yakalayın ve çıktıyı analiz edin. Gerçek saldırıları simüle etmek, gerçek olayda soğukkanlı kalabilmenin en iyi yolu.
