pcap okumak
- Ağ kaydının nereden alındığını okur, pcap dosyasını capinfos ile tanır, tshark ve Zeek ile olay penceresine daraltıp akışları çözersin.
- Bu derste Altay Kargo'nun web01.pcap kaydından saldırgan akışını tshark ile süzeceksin.
- Paket paket bakmak yerine akış düzeyinde okumayı öğreneceksin.
Puan bütün etkinlikleri cevaplayınca hesaba yazılır. Bu dersi tamamlayınca +55 XP alacaksın. Giriş yapmadan ilerlersen puan yalnız bu tarayıcıda durur.
Disk ve bellek, bir makinenin içinde olanı anlatır. Ağ kaydı ise makineler arasında olanı gösterir. Saldırgan diskteki dosyayı silebilir, günlüğü temizleyebilir, ama hattan geçmiş paketi geri çağıramaz. Bu derste Altay Kargo olayının ağ kaydını açacaksın.
Kaydın adı web01.pcap ve çekirdek anahtara bağlı bir yakalayıcıdan alındı. Adı web01 olsa da içinde fin-pc12'nin dışarı giden trafiği de var.
Önce kaydın nereden ve nasıl alındığını göreceksin. Sonra dosyayı tanıyacak, olay penceresine daraltacak ve saldırganın isteğini akış olarak okuyacaksın. En sonda aynı kaydı Zeek ile birkaç günlüğe özetleyeceksin.
Kayıt nereden ve nasıl alınır
Ağ delilinin iki ana biçimi vardır. Tam paket kaydı hattan geçen her baytı tutar ve pcap dosyasına yazılır. Akış kaydı ise yalnız özeti tutar: adresler, portlar, protokol, başlangıç zamanı, süre, paket ve bayt sayısı.
Yönlendiriciler bu özeti NetFlow v9 ya da onu temel alan IETF standardı IPFIX ile gönderir. Tam kayıt ayrıntılıdır ama pahalıdır. Yoğun bir hatta günlerce tutmak terabaytlar ister.
Akış kaydı hafiftir ve aylarca saklanır. Bu yüzden kurumlar çoğu kez ikisini birlikte kullanır. Akış kaydı uzun geçmişi, tam kayıt son birkaç günü taşır.
Kaydı nereden aldığın, ne göreceğini belirler. Anahtardaki SPAN portu, yani port aynalama, seçilen portların trafiğini bir izleme portuna kopyalar. Kurulumu kolaydır, ama yük altında paket düşürebilir ve hatalı çerçeveleri kopyalamaz. TAP ise hatta araya giren pasif bir donanımdır ve her çerçeveyi kopyalar.
Uç nokta yakalamasında kaydı makinenin kendisinde tcpdump gibi bir araçla alırsın. Altay Kargo'da yakalayıcı çekirdek anahtardaki bir TAP'a bağlı. Bu yüzden hem web01'e gelen istekleri hem de kullanıcı ağından dışarı çıkan bağlantıları görüyor.
Yakalama komutundaki iki ayar sonradan geri alınamaz. Birincisi paket kırpma uzunluğudur, yani snaplen. tcpdump varsayılan olarak paket başına 262144 bayta kadar alır, bu da pratikte paketin tamamıdır.
-s 96 gibi küçük bir değer yalnız başlıkları tutar. Disk alanı kazandırır, ama içerik okuma ve dosya çıkarma imkânını yok eder.
İkincisi halka tampondur. -C dosyayı belirli boyutta keser, -W en çok kaç dosya tutulacağını söyler. Sınıra gelince en eski dosyanın üstüne yazılır. Olay anında ilk işin bu dönüşü durdurmak ve dosyaları kopyalamaktır.
# TAP'a bağlı yakalayıcı: 1000 milyon baytlık 100 dosyalık halka tampon $ sudo tcpdump -i ens4 -n -s 0 -C 1000 -W 100 -w /kayit/cekirdek.pcap tcpdump: listening on ens4, link-type EN10MB (Ethernet), snapshot length 262144 bytes $ ls /kayit | head -3 cekirdek.pcap00 cekirdek.pcap01 cekirdek.pcap02
Etkinlik 1 / 6
100 Mbit/sn ortalama doluluktaki bir hatta bir saatlik tam paket kaydı yaklaşık kaç GB yer kaplar?
Tahminini kaydır, sonra gönder.
Dosyayı tanı
Analize başlamadan önce elindeki dosyayı tanırsın. İlk iş, özgün dosyanın SHA-256 özetini almak ve bir kopya üzerinde çalışmaktır. İkinci iş capinfos komutudur. capinfos dosyanın biçimini, paket sayısını, ilk ve son paket zamanını ve özetini tek ekranda verir.
-M seçeneği sayıları kısaltmadan yazar. Zamanlara dikkat et. Dosyada her paket UTC tabanlı Unix zamanıyla durur.
capinfos ve tshark bu zamanı analiz makinesinin saat dilimine çevirerek gösterir. Bu istasyon Türkiye saatinde, yani UTC+3'te çalışıyor. Başka saat dilimindeki bir ekip arkadaşın aynı dosyada farklı saatler görür.
$ capinfos -M web01.pcap File name: web01.pcap File type: pcap File encapsulation: ether File timestamp precision: microseconds (6) Packet size limit: file hdr: 262144 bytes Number of packets: 1184212 File size: 1012348120 bytes Data size: 993400704 bytes Capture duration: 3599.986121 seconds Earliest packet time: 2026-09-14 03:02:08.412114 Latest packet time: 2026-09-14 04:02:08.398235 Data byte rate: 275945.70 bytes/sec Data bit rate: 2207565.63 bits/sec Average packet size: 838.87 bytes Average packet rate: 328.95 packets/sec SHA256: 5e0c7a1f93b24d68e1a0c5f7b39d2e84c16f0a7b58d3e9c21f47a60b8d5e3c19 Strict time order: True
Çıktıyı satır satır oku. File type satırı dosyanın pcapng değil, klasik pcap biçiminde olduğunu söyler. Packet size limit 262144 bayt, yani paketler kırpılmadan alınmış ve içerik okunabilir.
Earliest ve Latest satırları kaydın 03:02:08 ile 04:02:08 arasını kapsadığını gösterir. web01 erişim günlüğündeki ilk şüpheli istek 03:02:11'de, yani kaydın başlamasından yalnız üç saniye sonra. Daha önceki keşif trafiği bir önceki halka dosyasında kalmış olabilir, o dosyayı da istersin.
İki parçayı mergecap -w birlesik.pcapng cekirdek.pcap41 cekirdek.pcap42 ile birleştirirsin. mergecap paketleri zaman damgalarına göre dizer ve varsayılan olarak pcapng yazar. -a seçeneği ise dosyaları verdiğin sırayla uç uca ekler, yanlış sırada zaman çizelgesi bozulur.
Birleşik dosya yeni bir türevdir, onun da özetini alırsın. Strict time order: True, paketlerin zaman sırasıyla yazıldığını söyler. SHA256 değerini de delil formundakiyle karşılaştırırsın.
Derinleş:pcap ve pcapng biçimleri
pcap, tcpdump ile birlikte doğmuş sade bir biçimdir. Dosya 24 baytlık bir başlıkla açılır, ardından her paket için 16 baytlık bir kayıt başlığı gelir. Başlıktaki sihirli sayı zaman çözünürlüğünü de söyler: a1b2c3d4 mikrosaniye, a1b23c4d nanosaniye demektir.
Bir dosyada tek bir bağlantı katmanı türü bulunur, yani iki farklı arayüz türünün kaydını aynı dosyada tutamazsın. pcapng ise bloklardan kurulur. Bölüm başlığı bloğu dosyayı açar.
Arayüz tanım bloğu her arayüzü ve onun zaman çözünürlüğünü tanıtır. Gelişmiş paket bloğu paketin kendisini taşır. Paketlere yorum ekleyebilir, ad çözümleme kayıtlarını dosyada saklayabilirsin. Şifre çözme sırları bloğu ise TLS oturum anahtarlarını dosyanın içine gömer.
editcap --inject-secrets bu bloğu ekler. Böyle bir dosyayı paylaşırsan anahtarları da paylaşmış olursun. Biçim dönüşümü için editcap -F pcapng ya da -F pcap kullanılır. pcapng'den pcap'e geçerken yorumlar ve arayüz ayrıntıları kaybolur.
Sonra kaydın içine kuşbakışı bakarsın. tshark -z io,phs protokol hiyerarşisini, yani hangi protokolün kaç paket ve kaç bayt tuttuğunu yazar. Beklenmedik bir protokolün kabarması tek başına inceleme sebebidir. -z conv,tcp ise TCP konuşmalarını tabloya döker.
Her satır bir adres ve port çiftidir. -> sütunu soldaki uçtan sağdakine, <- sütunu sağdakinden soldakine giden çerçeve ve baytı gösterir. tshark tabloyu toplam çerçeve sayısına göre dizer, bayta göre değil.
Az sayıda büyük paketle veri taşıyan bir oturum bu yüzden alt sıralarda kalabilir. Bayt sütunlarını ayrıca okursun. Wireshark arayüzünde aynı tablolar Statistics menüsündeki Protocol Hierarchy ve Conversations pencerelerindedir.
$ tshark -r web01.pcap -q -z io,phs
frame frames:1184212 bytes:993400704
eth frames:1184212 bytes:993400704
ip frames:1179904 bytes:992861102
tcp frames:1062117 bytes:958224310
tls frames:412806 bytes:402118221
http frames:3921 bytes:2210345
udp frames:117787 bytes:34636792
dns frames:24612 bytes:3118004
$ tshark -r web01.pcap -q -z conv,tcp | head -7
================================================================================
TCP Conversations
Filter:<No Filter>
| <- | | -> | | Total | Relative | Duration |
| Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |
10.20.30.44:50210 <-> 10.20.30.10:445 71208 13 MB 111198 47 MB 182406 60 MB 0.301877000 3512.4410
10.20.30.61:49871 <-> 203.0.113.19:443 8911 3599 kB 152806 222 MB 161717 225 MB 413.702114000 1204.9973Etkinlik 2 / 6
conv,tcp tablosuna göre 10.20.30.61 bu oturumda dış adrese ne kadar veri gönderdi?
Önce kodu oku, sonra çıktıyı seç.
| <- | | -> | | Total |
| Frames Bytes | | Frames Bytes | | Frames Bytes |
10.20.30.44:50210 <-> 10.20.30.10:445 71208 13 MB 111198 47 MB 182406 60 MB
10.20.30.61:49871 <-> 203.0.113.19:443 8911 3599 kB 152806 222 MB 161717 225 MBDaralt: süzgeç ve zaman penceresi
İki tip süzgeç vardır ve karıştırılmaları en sık hatadır. Yakalama süzgeci kayıt alınırken çalışır ve BPF sözdizimini kullanır.
Paketi diske yazmadan önce eler, elenen paket bir daha geri gelmez. Görüntü süzgeci ise var olan kaydı okurken çalışır ve Wireshark sözdizimini kullanır. Dosyadan hiçbir şey silmez, yalnız gösterilecek paketleri seçer.
BPF paketin baytlarına ve portlarına bakar, uygulama protokolünü tanımaz. Görüntü süzgeci ise ayrıştırılmış alanlara bakar. port 53, 53 numaralı porttaki her paketi alır. dns ise yalnız Wireshark'ın DNS olarak çözdüğü paketleri seçer.
Amaç Yakalama süzgeci (-f, BPF) Görüntü süzgeci (-Y) Tek adres host 198.51.100.77 ip.addr == 198.51.100.77 DNS port 53 dns SYN taşıyan paketler tcp[tcpflags] & tcp-syn != 0 tcp.flags.syn == 1 HTTP istekleri karşılığı yok http.request
Büyük bir kayıtta her sorgu dakikalar sürebilir. Bu yüzden önce olay penceresini ayrı bir dosyaya çıkarırsın. editcap -A başlangıç, -B bitiş zamanını alır.
Burada bir tuzak var. Zamanı saat dilimi eki olmadan yazarsan editcap onu analiz makinesinin yerel saati sayar. Aynı komut UTC'de çalışan bir sunucuda başka bir pencere keser.
Eki açıkça yazarsan, Türkiye için +03:00, UTC için Z, komut her makinede aynı sonucu verir. Sonra tshark -Y ile süzer, -w ile yeni dosyaya yazarsın. Özgün dosyaya dokunmaz, her türev dosyanın özetini ayrıca alırsın.
$ editcap -A '2026-09-14 03:00:00+03:00' -B '2026-09-14 03:15:00+03:00' \
web01.pcap pencere.pcap
$ tshark -r pencere.pcap -Y 'ip.addr == 198.51.100.77' -w 198.pcap
$ capinfos -c pencere.pcap 198.pcap
File name: pencere.pcap
Number of packets: 254103
File name: 198.pcap
Number of packets: 2412
$ sha256sum pencere.pcap 198.pcap >> turevler.sha256Etkinlik 3 / 6
web01.pcap dosyasında yalnız 198.51.100.77 adresine ait paketleri görüntüle.
Süzgeçleri && ve || ile birleştirir, ! ile tersine çevirirsin. Yalnız kaynağı ya da yalnız hedefi seçmek istersen ip.src ve ip.dst kullanırsın. Birleştirme bazen gizli bir kanalı da açığa çıkarır.
udp.port == 53 && !dns süzgeci, 53 numaralı portta akan ama DNS olarak çözülemeyen trafiği gösterir. DNS gibi görünüp başka bir şey taşıyan tünel çoğu kez böyle yakalanır. Karmaşık bir süzgeci önce küçük dosyada dener, sonra büyük dosyaya uygularsın.
Etkinlik 4 / 6
tshark bayrağını işleviyle eşleştir.
Akışı oku, Zeek ile özetle
Paketleri tek tek okumak yerine konuşmayı bütün hâlinde okursun. tshark her TCP bağlantısına bir akış numarası verir ve bu numarayı tcp.stream alanında tutar. Önce ilgilendiğin isteğin akış numarasını bulursun. Sonra -z follow seçeneğiyle o akışın paketlerini birleştirir, konuşmayı düz metin olarak basarsın.
Şifresiz protokollerde istek ve yanıt olduğu gibi önüne gelir. Aşağıda saldırganın web01'deki ayar.php dosyasına gönderdiği POST isteğini böyle okuyorsun.
$ tshark -r pencere.pcap -Y 'http.request.method == "POST"' -T fields \
-e frame.time -e tcp.stream -e http.request.uri
2026-09-14T03:04:55.420220000+0300 1874 /uploads/ayar.php
$ tshark -r pencere.pcap -q -z follow,tcp,ascii,1874
===================================================================
Follow: tcp,ascii
Filter: tcp.stream eq 1874
Node 0: 198.51.100.77:51560
Node 1: 10.20.30.15:80
244
POST /uploads/ayar.php HTTP/1.1
Host: web01.altaykargo.example
User-Agent: python-requests/2.32.3
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 4
Content-Type: application/x-www-form-urlencoded
c=id
202
HTTP/1.1 200 OK
Date: Mon, 14 Sep 2026 00:04:55 GMT
Server: Apache/2.4.58 (Ubuntu)
Content-Length: 54
Content-Type: text/html; charset=UTF-8
uid=33(www-data) gid=33(www-data) groups=33(www-data)
===================================================================Çıktıyı satır satır oku. İlk komut POST isteklerini süzer ve akış numarasını verir: 1874.
İkinci komut o akışı birleştirir. Node 0 saldırganın adresi, Node 1 web01'in 80 portudur. 244, istemcinin bu parçada gönderdiği bayt sayısıdır. Gövdedeki c=id, ayar.php'ye id komutunu çalıştırmasını söyleyen parametredir.
Girintili 202 ile başlayan kısım sunucunun yanıtıdır. Son satır id komutunun çıktısıdır ve komutun www-data kullanıcısıyla çalıştığını gösterir. Bu tek akış, web01'de uzaktan komut çalıştırıldığını kanıtlar.
Yükleme klasöründe PHP çalışmasını kapatmak bu adımı keser. Aynı isteği erişim günlüğünde de ararsın. Tek akış ayrıntı verir, bütün kaydın özetini ise Zeek çıkarır. zeek -r kaydı okur ve bulunduğun klasöre protokol protokol günlükler yazar.
$ zeek -C -r web01.pcap
$ ls *.log
conn.log dns.log files.log http.log packet_filter.log ssl.log weird.log x509.log
$ zeek-cut id.orig_h id.resp_h service duration orig_bytes resp_bytes < conn.log \
| sort -k5 -n | tail -3
10.20.30.52 10.20.30.10 smb 2210.118402 18820331 2210498
10.20.30.44 10.20.30.10 smb 3512.441012 41220874 9412077
10.20.30.61 203.0.113.19 ssl 1204.997301 214097651 3118402Her bağlantı conn.log'da tek satırdır ve bir uid değeri taşır. Aynı uid dns.log, http.log ve files.log'da da geçer, böylece bir sorguyu ya da dosyayı bağlantısına bağlarsın. -C seçeneği sağlama toplamı hatalarını yok saydırır. Bu seçenek olmadan Zeek hatalı toplamlı paketleri incelemez ve günlükler eksik çıkar.
zeek-cut istediğin sütunları seçer. Sıralama beşinci sütuna, yani istemcinin gönderdiği bayta göre yapıldı. Son satır asıl bulgudur.
fin-pc12, yirmi dakikalık bir TLS oturumunda dış adrese 214 milyon bayt gönderip yalnız 3 milyon bayt almış. Bu yön dengesizliği veri kaçırmanın klasik imzasıdır. conn.log bir akış kaydına benzer ama ondan zengindir. NetFlow ve IPFIX adres, port, zaman ve sayaçları taşır.
conn.log bunlara uygulama protokolünü ve bağlantının nasıl kapandığını ekler. Yine de ikisi de içerik taşımaz. Oturumun varlığını ve hacmini kanıtlarsın, ne taşındığını kanıtlayamazsın.
Etkinlik 5 / 6
Bir saldırı sırasında yalnız akış kaydın varsa hangi soruyu yanıtlayamazsın?
Sık hatalar ve hukuki çerçeve
Ağ kaydında üç hata sık tekrarlanır. Birincisi -f ile -Y'yi karıştırmaktır. tshark bir dosyayı okurken -f alırsa yalnız okuma süzgeci verilebileceğini söyler ve hiçbir şey okumadan çıkar.
İkincisi bad checksum uyarısını saldırı sanmaktır. Kaydı gönderen makinenin kendisinde aldıysan, ağ kartı sağlama toplamını paket yakalandıktan sonra hesaplar.
Giden paketler bu yüzden kayıtta hatalı toplamla görünür. Buna sağlama toplamı boşaltması denir ve saldırı değildir. Üçüncüsü saat kaymasını ölçmemektir. Aynı isteği hem kayıtta hem erişim günlüğünde bulur, iki zaman arasındaki farkı ölçer ve raporda yazarsın.
Ağ kaydı teknik olduğu kadar hukuki bir iştir. Türk Ceza Kanunu'nun 243. maddesine 2016'da eklenen dördüncü fıkra, bir bilişim sisteminin içindeki ya da sistemler arasındaki veri nakillerini sisteme girmeden teknik araçlarla hukuka aykırı izlemeyi suç sayar. Cezası bir yıldan üç yıla kadar hapistir.
Kurum içi yakalama bu yüzden yazılı bir politikaya, belirli bir kapsama ve çalışanlara yapılmış bir bildirime dayanır. Paketler kişisel veri taşır. Kayda erişimi sınırlar, saklama süresini belirler, süre dolunca kaydı yok edersin. Yakalamayı yalnız kendi lab ortamında ya da yazılı iznin olan ağda yap.
Etkinlik 6 / 6
Doğru mu, yanlış mı?
tshark komutunda -f bayrağı, elindeki pcap dosyasını okurken süzmek için kullanılır.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.