Konuyu Okuyanlar: 1 Ziyaretçi

tcpdump ile Sahada En Çok Kullandığım Filtreler: BPF Mantığı ve Örnekler

tcpdump ile Sahada En Çok Kullandığım Filtreler: BPF Mantığı ve Örnekler
[Resim: attachment.php?aid=259]

Merhaba,

Wireshark güzel ama sahada çoğu zaman elinizde grafik arayüzü olmayan bir sunucu, bir SSH oturumu ve kısıtlı süre olur. O anlarda en hızlı dostum tcpdump. Yıllar içinde biriken not defterimdeki filtreleri, neden öyle yazıldıklarıyla birlikte paylaşmak istedim. Ezber listesinden çok "nasıl düşünülür" kısmına odaklandım.

Önce temel bayraklar
Her komutta neredeyse refleks olarak kullandığım seçenekler:
Kod:
sudo tcpdump -nn -i eth0 -c 50
  • -n: isim çözümlemesi yapma (DNS sorgusu üretmesin, çıktı hızlı gelsin)
  • -nn: hem host hem port isimlerini çözme
  • -i: arayüz seçimi; emin değilseniz -i any veya ip link ile bakın
  • -c: paket sayısı sınırı; unutunca terminali kilitleyen klasik hata
  • -w dosya.pcap: diske yaz; sonra Wireshark ile açarsınız
  • -r dosya.pcap: kayıtlı dosyayı oku
  • -A / -X: ASCII / hex+ASCII; HTTP gibi protokoller için
Yetki notu: ham paket yakalamak genelde CAP_NET_RAW ister. sudo veya setcap kullanın; üretimde setcap'i bilinçli verin.

BPF mantığı: filtre nasıl kurulur?
tcpdump'ın kalbi Berkeley Packet Filter ifadesidir. Mantık şudur: önce hangi trafiği istiyorsunuz (host, port, protokol), sonra bayrak ve içerik kısıtları. Operatörler: and, or, not. Parantez kullanın; öncelik karışıklığı klasik hata.

Host ve port:
Kod:
sudo tcpdump -nn -i eth0 host 10.0.0.5 sudo tcpdump -nn -i eth0 src host 10.0.0.5 sudo tcpdump -nn -i eth0 dst port 443 sudo tcpdump -nn -i eth0 'host 10.0.0.5 and port 22'

Sahada en çok işime yarayan filtreler

1) SYN taraması / yeni bağlantı avı
Kod:
sudo tcpdump -nn -i eth0 'tcp[tcpflags] & (tcp-syn) != 0 and tcp[tcpflags] & (tcp-ack) == 0'
Sadece SYN (ACK yok) paketlerini gösterir. Ani SYN yağmuru port taraması veya flood belirtisi olabilir. Daha kısa yazım:
Kod:
sudo tcpdump -nn -i eth0 'tcp[13] & 2 != 0 and tcp[13] & 16 == 0'
13. bayt TCP bayrak alanı; 2=SYN, 16=ACK.

Labda örnek çıktı:
[Resim: attachment.php?aid=260]

2) DNS sorguları
Kod:
sudo tcpdump -nn -i eth0 port 53
Olay müdahalesinde C2 alan adlarını yakalamak için ilk bakacağım yerlerden biri. UDP 53 dışında DoH (443) varsa bu filtre yetmez; o zaman DNS loguna geçersiniz.

3) Belirli bir HTTP host başlığı (şifresiz trafik)
Kod:
sudo tcpdump -nn -i eth0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Karmaşık görünüyor ama anlamı "HTTP payload taşıyan paketler". Daha pratik alternatif: -A ile port 80'i yakalayıp greplemek veya hemen -w yazıp Wireshark'ta http.host filtresi kullanmak.

4) ARP ve yerel ağ gariplikleri
Kod:
sudo tcpdump -nn -i eth0 arp sudo tcpdump -nn -i eth0 'arp and arp[6:2] == 2'
İkinci satır ARP reply'leri gösterir. Aynı IP için farklı MAC'ler görürseniz spoofing şüphesi.

5) Belirli bir konuşmayı (conversation) yakalamak
Kod:
sudo tcpdump -nn -i eth0 -w oturum.pcap 'host 10.0.0.5 and host 10.0.0.9'
İki uç arasındaki tüm trafiği kaydedip sonra Wireshark'ta Follow TCP Stream yaparsınız.

6) ICMP (ping, unreachable)
Kod:
sudo tcpdump -nn -i eth0 icmp
Path sorunlarında ve bazı tarama türlerinde işe yarar.

7) IPv6
Kod:
sudo tcpdump -nn -i eth0 ip6 sudo tcpdump -nn -i eth0 'ip6 and tcp port 22'
Birçok ortamda IPv6 unutuluyor; saldırganlar bunu seviyor.

Ring buffer ile uzun süre dinlemek
Disk doldurmadan saatlerce dinlemek için:
Kod:
sudo tcpdump -nn -i eth0 -W 10 -C 100 -w /var/tmp/capture.pcap 'not port 22'
-C 100: her dosya ~100 MB, -W 10: 10 dosyalık döngü. SSH oturumunuzu kendi yakalamanızdan boğmamak için not port 22 sık kurtarıcı olur.

Sorun giderme alışkanlıklarım
  1. Önce arayüz doğru mu? ip -br a
  2. Filtre çok mu dar? Geçici olarak filtreyi kaldırıp paket geliyor mu bakın.
  3. Offload / checksum gariplikleri: Wireshark'ta "incorrect checksum" görürseniz çoğu zaman NIC offload kaynaklıdır; panik yapmayın.
  4. Kapsüller (VLAN, GRE, VXLAN): basit host filtresi yetmeyebilir; vlan, proto gre gibi ekler gerekir.
  5. Üretimde -w ile yazın, canlı ekranı izlemeyin; paket kaybı azalır.

tcpdump mu, tshark mı, Wireshark mı?
Hızlı doğrulama ve sunucu üstü yakalama: tcpdump. Aynı BPF'yi dosyada çalıştırıp alan çıkarmak: tshark. Derin protokol analizi ve Follow Stream: Wireshark. Üçü de aynı BPF dilini konuşur; öğrendiğiniz filtreler boşa gitmez.

Kaynaklar
  • tcpdump man sayfası ve pcap-filter (man 7 pcap-filter)
  • Wireshark Display Filter Reference (display filter BPF'den farklıdır; karıştırmayın)
  • Julia Evans'ın tcpdump cheatsheet notları (öğrenme için faydalı)

Sizin "olmazsa olmaz" filtreniz hangisi? Özellikle VLAN veya cloud mirror senaryolarında takılan varsa yazın, birlikte bakalım.

VLAN ve tünel paketlerinde BPF
Saha ağında mirror port VLAN tag taşıyorsa basit host filtresi yetmeyebilir:
Kod:
sudo tcpdump -nn -i eth0 'vlan and host 10.0.0.5' sudo tcpdump -nn -e -i eth0 'vlan 120'
-e Ethernet başlığını gösterir; hangi VLAN'dan geldiğini anında görürsünüz. GRE/VXLAN için önce dış başlığı, sonra içeriği düşünün. Şüphede önce -w ile ham yakalayıp Wireshark'ta decode edin; canlı karmaşık BPF yazmak vakit kaybı olabilir.

Paket kaybı ve buffer
Yoğun trafikte tcpdump "dropped by kernel" uyarısı verebilir. -B ile buffer büyütün veya daha dar filtre uygulayın. Üretim olayında "her şeyi yakala" refleksi çoğu zaman boş dosya veya dolu disk ile biter; önce hipotez, sonra filtre.


Sık sorulanlar
tcpdump çıktısını sürekli diske yazarken rotasyon unutulursa disk dolar ve üretim servisi düşer. -C/-W kullanın. Konteyner içinde tcpdump için NET_RAW capability gerekir. Host ağındaki pod trafiğini görmek ayrı hikâye; CNI bridge üzerinde dinlemeniz gerekebilir. Şüpheli C2 avında önce DNS ve outbound 443 netflow'a bakın; kör tam paket yakalama son çaredir.

Yasal uyarı: Bu içerik eğitim amaçlıdır. Anlatılanları yalnızca kendi sistemlerinizde veya yazılı izin aldığınız sistemlerde uygulayın. Yetkisiz erişim ve sistemlere müdahale 5237 sayılı TCK'nın 243, 244 ve 245. maddeleri kapsamında suçtur.


Ek DosyalarEkran Görüntüleri
       
Cevapla



Hızlı Menü: