İçeriğe atla
0 XP 0
12 dkderinleşmeyle 13 dk55 XP6 etkinlik

pcap okumak

Bu derste
  • 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
-s 0 varsayılan uzunluğu seçer. -W verildiğinde dosya adlarına sıfırla doldurulmuş sıra numarası eklenir.

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.

0120

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
Zamanlar analiz istasyonunun saat diliminde, yani Türkiye saatinde gösterilir.

Çı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.9973
-q paket satırlarını bastırır, yalnız istatistiği yazar. Relative Start kaydın başından geçen saniyedir.

Etkinlik 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 MB

Daralt: 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
İki sütun aynı niyeti farklı dilde yazar. BPF bayt düzeyinde, görüntü süzgeci ayrıştırılmış alan düzeyinde çalışır.

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.sha256
Bir gigabaytlık kayıttan önce on üç dakikalık kesit, sonra tek adresin 2412 paketi kalır. Küçük dosya Wireshark arayüzünde rahat açılır.

Etkinlik 3 / 6

web01.pcap dosyasında yalnız 198.51.100.77 adresine ait paketleri görüntüle.

ogrenci@lab

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.

Soldan bir tane seç, sağdan eşini seç. Kullanılmış bir seçeneği yeniden seçersen yeni öğeye taşınır.

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)
===================================================================
Node 0 bağlantıyı açan istemci, Node 1 sunucudur. Sekmeyle girintili sayı ve altındaki satırlar sunucudan gelir.

Çı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	3118402
orig_bytes istemcinin, resp_bytes sunucunun gönderdiği uygulama verisidir. Başlıklar sayılmaz, bu yüzden değerler conv tablosundan küçüktür.

Her 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.

Bu derste bir hata mı gördün? Bildir