Akışı izlemek: follow stream ve konuşmalar
- Conversations ile şüpheli konuşmayı bulmayı, Follow Stream ile TCP akışını okumayı ve aktarılan dosyayı kayıttan çıkarmayı adım adım öğren.
- Follow Stream bir bağlantının bütün paketlerini tek bir okunabilir metne birleştirir; Conversations binlerce paketi ikili ilişkilere indirger.
- Bu derste özet tablodan akışa, akıştan dosyaya inen bir inceleme yapacak ve şifreli akışta neyin görünür kaldığını öğ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.
Wireshark'ta tek tek paket okumak yorucudur. Bir HTTP isteği bile birkaç TCP segmentine bölünür, cevabı da başka paketlerde gelir. Soruşturmada asıl soru paket değil konuşmadır: kim kiminle konuştu, ne kadar veri taşındı, içerikte ne vardı. Bu derste üç aracı birlikte kullanacaksın.
Conversations penceresi binlerce paketi ikili ilişkilere indirir ve incelemeye değer satırı gösterir. Follow Stream o satırın bütün paketlerini tek bir okunabilir metne birleştirir. Export Objects akışta taşınan dosyayı diske çıkarır. Sonunda şifreli bir akışta neyin görünür kaldığını da öğreneceksin.
Follow Stream: paketlerden konuşmaya
Follow Stream aynı bağlantıya ait bütün paketleri sıraya dizer ve tek metin olarak gösterir. Bağlantıyı dört değer tanımlar: kaynak IP, kaynak port, hedef IP ve hedef port. Bir paketin üstüne sağ tıklayıp Follow, ardından TCP Stream seçersin.
İstemcinin gönderdiği bayt kırmızı, sunucunun gönderdiği bayt mavi görünür. Aynı menüde UDP, TLS, HTTP ve QUIC akışları da durur. Şifresiz protokollerde (HTTP, FTP, Telnet) akış düz metin olarak okunur; isteğin başlıkları, gövdesi ve sunucunun cevabı tek pencerede sırayla görünür. Şifreli protokollerde (HTTPS, SSH) akış yine birleşir, ama içerik anlamsız bir bayt yığını olarak kalır.
Follow Stream arka planda TCP yeniden birleştirmesi (reassembly) yapar. Her segmentin sıra numarası, verinin akıştaki yerini söyler ve Wireshark segmentleri bu numaraya göre dizer. Aynı veriyi taşıyan yeniden iletilmiş (retransmission) segment metne ikinci kez eklenmez.
Sıra dışı (out-of-order) gelen segment de doğru yerine oturur. Asıl sorun kayıpta çıkar. Yakalama sırasında düşmüş bir segment varsa Wireshark boşluğu dolduramaz.
Akış metni o noktada kesilir ya da eksik kalır, paket listesinde "TCP Previous segment not captured" uyarısı görünür. Eksik görünen bir akışta önce tcp.analysis.lost_segment filtresiyle kaybı ara. Kayıp varsa, metinde göremediğin içeriğin hiç gönderilmediğini varsayma.
Follow Stream penceresini açtığında Wireshark görüntüleme filtresini kendisi değiştirir ve kutuya tcp.stream eq 4 gibi bir ifade yazar. tcp.stream alanı her bağlantıya yakalamanın başından itibaren sırayla bir numara verir. Numara sabit kalır, bu yüzden aynı bağlantıyı tekrar bulmak için de kullanılır. Sık yapılan hata, pencereyi kapattıktan sonra filtrenin hâlâ yerinde olduğunu fark etmemektir.
Listede tek bağlantı kalır ve analist öbür paketlerin kaybolduğunu sanır. Pencerenin Back düğmesi önceki filtreyi geri getirir. Filter Out This Stream düğmesi ise incelediğin akışı listeden çıkarır ve kalan trafiğe bakmanı kolaylaştırır.
Etkinlik 1 / 7
Her TCP bağlantısına sırayla kimlik veren ve tcp.stream==4 gibi filtrelenen alanın adı nedir? Yalnız alan adını yaz.
Conversations ve Endpoints: kim kiminle konuştu
Follow Stream tek bir konuşmayı derinlemesine gösterir. Hangi konuşmanın incelemeye değer olduğunu bulmak ise ayrı bir iştir. Statistics menüsündeki Conversations penceresi bu işi görür. Pencere Ethernet, IPv4, IPv6, TCP ve UDP gibi sekmelere ayrılır.
Her satır iki uç arasındaki bütün trafiği özetler: paket ve bayt sayısı, başlangıç zamanı, süre ve iki yöndeki hız. A'dan B'ye ve B'den A'ya giden bayt ayrı sütunlarda durur. Sütun başlığına tıklayıp en çok veri taşıyan satırı en üste getirirsin. Veri sızdırmada gönderen taraf iç makinedir; bu yüzden iç adresten dışarı giden yöndeki büyük sayıya bakarsın.
Sekmeleri karıştırmak sık bir hatadır. IPv4 sekmesi iki adres arasındaki bütün trafiği tek satırda toplar. TCP sekmesi ise her bağlantıyı ayrı satırda gösterir. İki makine arasında aynı anda onlarca TCP bağlantısı olabilir; IPv4 sekmesindeki 5 megabaytlık tek satır, TCP sekmesinde yüzlerce küçük satıra dağılabilir.
Tek büyük aktarımı arıyorsan TCP sekmesine, bir makinenin toplam davranışını arıyorsan IPv4 sekmesine bak. Endpoints penceresi ise ikili ilişki yerine her adresin toplam trafiğini listeler ve en çok konuşan adresi hemen gösterir. MaxMind veritabanı tanımlıysa ülke ve AS sütunları da eklenir; bu sütunlar bağlam verir, tek başına kanıt değildir.
Conversations penceresinde iki örüntü göze çarpar. Birincisi süresi kısa ama bayt sayısı yüksek satırdır; hızlı bir veri aktarımını, kimi zaman veri sızdırmayı gösterir. İkincisi aynı kaynağın çok sayıda farklı hedefle kısa ve küçük konuşmalar yapmasıdır; bu tarama ya da yayılma davranışına benzer.
Normal kullanıcı trafiği az sayıda hedefle daha uzun süre konuşur. Bir sunucunun yüzlerce istemciyle konuşması ise olağandır; satırı yorumlarken makinenin rolünü ve trafiğin yönünü birlikte düşün.
Etkinlik 2 / 7
Follow Stream ile Conversations penceresi arasındaki temel fark nedir?
Etkinlik 3 / 7
Conversations penceresinden alınan satırlardan şüpheli hacim gösterenleri seç.
Şüpheli satırlara tıkla. Birden fazla olabilir.
Komut satırında özet tablolar
tshark aynı özetleri komut satırından üretir. -z conv,tcp bayrağı dosyadaki bütün TCP konuşmalarını bir tabloya döker. -q paket paket çıktıyı bastırır ve yalnız istatistiği bırakır.
conv,tcp yerine conv,ip yazarsan IPv4 sekmesinin, conv,udp yazarsan UDP sekmesinin karşılığını alırsın. -z endpoints,ip ise Endpoints penceresinin tablosunu verir. Bu tablolarla Wireshark'ı açmadan, bir sunucuda hızlı ön tarama yaparsın. Aşağıdaki kayıtta bir iş istasyonunun (192.168.1.20) ve bir yönetim makinesinin konuşmaları görünüyor.
$ tshark -r olay.pcap -q -z conv,tcp
================================================================================
TCP Conversations
Filter:<No Filter>
| <- | | -> | | Total | Relative | Duration |
| Frames Bytes | | Frames Bytes | | Frames Bytes | Start | |
192.168.1.20:51888 <-> 198.51.100.44:9001 4 256 bytes 47 62 kB 51 62 kB 3.000000000 0.1560
192.168.1.20:51600 <-> 203.0.113.21:21 9 565 bytes 11 632 bytes 20 1197 bytes 1.000000000 0.3200
192.168.1.35:50222 <-> 203.0.113.10:23 7 397 bytes 9 506 bytes 16 903 bytes 5.000000000 0.2550
192.168.1.20:51620 <-> 203.0.113.10:80 6 3442 bytes 6 431 bytes 12 3873 bytes 2.000000000 0.1750
192.168.1.20:51514 <-> 203.0.113.10:80 4 332 bytes 6 468 bytes 10 800 bytes 0.000000000 0.1650
================================================================================Tabloyu okurken yön oklarına dikkat et. Her satırın solundaki uç A, sağındaki uç B'dir. -> sütunu A'dan B'ye, <- sütunu B'den A'ya giden çerçeve ve baytı sayar.
İlk satırda 192.168.1.20, 198.51.100.44 adresinin 9001 portuna 47 çerçevede 62 kilobayt göndermiş, karşılığında yalnız 256 bayt almış. Bağlantı 0,156 saniye sürmüş. Tek yönlü, kısa ve standart dışı porta giden bu aktarım ilk incelenecek satırdır.
Dördüncü satırda durum tersine döner: sunucu 80 portundan istemciye 3442 bayt göndermiş, yani istemci bir şey indirmiş. 23 numaralı porttaki satır ise şifresiz bir Telnet oturumunu ele verir.
Etkinlik 4 / 7
kayit.pcap dosyasındaki TCP konuşmalarının özet tablosunu, paket paket çıktı basmadan çıkar.
Uçtan uca inceleme: özetten dosyaya
Şimdi üç aracı bir soruşturma sırasıyla kullan. Altay Kargo'nun güvenlik ekibi bir iş istasyonundan mesai dışı veri çıkışı ihbarı aldı ve kısa bir yakalama yaptı. Birinci adımda Conversations penceresini TCP sekmesinde açar, gönderilen bayta göre sıralarsın. En üstte 9001 portuna giden aktarım durur.
İkinci adımda satırı seçip Follow Stream ile akışı açarsın. Aynı kayıttaki öbür akışlara da bakarsın, çünkü saldırgan çoğu zaman önce kimlik bilgisi toplar. tshark'ta aynı işi -z follow bayrağı yapar; protokol, gösterim biçimi ve akış numarası virgülle yazılır.
$ tshark -r olay.pcap -q -z follow,tcp,ascii,0 =================================================================== Follow: tcp,ascii Filter: tcp.stream eq 0 Node 0: 192.168.1.20:51514 Node 1: 203.0.113.10:80 144 GET /giris HTTP/1.1 Host: portal.altaykargo.example User-Agent: curl/8.5.0 Authorization: Basic bWVydC5rYXlhOkthcmdvMjAyNg== Accept: */* 116 HTTP/1.1 200 OK Server: nginx Content-Type: text/html Content-Length: 37 <html><body>Hos geldin</body></html> =================================================================== $ tshark -r olay.pcap -q -z credentials =================================================================== Packet Protocol Username Info ------ -------- -------- -------- 4 HTTP basic auth mert.kaya 20 FTP mert.kaya Username in packet: 16 ===================================================================
Çıktının başı akışı tanıtır. Filter satırı uygulanan tcp.stream eq 0 filtresidir, Node 0 istemci, Node 1 sunucudur. 144, istemcinin gönderdiği parçanın bayt uzunluğudur.
Sunucunun parçaları sekmeyle girintili başlar ve 116 onun uzunluğudur. Asıl bulgu Authorization satırındadır. HTTP Basic kimlik doğrulaması kullanıcı adıyla parolayı iki nokta üst üste ile birleştirir ve Base64 ile kodlar.
Base64 bir kodlamadır, şifreleme değildir; anahtar gerekmez, herkes geri çevirir. -z credentials aynı işi toplu yapar ve açık metin kimlik bilgilerini paket numarasıyla listeler. FTP satırı kullanıcı adının 16 numaralı pakette geçtiğini söyler.
Üçüncü adımda aktarılan dosyayı çıkarırsın. File > Export Objects > HTTP penceresi, HTTP ile taşınan her nesneyi paket numarası, sunucu adı, içerik türü, boyut ve dosya adıyla listeler. Aynı menü SMB, TFTP, FTP-DATA ve IMF (e-posta) için de vardır.
Komut satırında --export-objects bayrağı aynı işi yapar. Aşağıdaki örnekte al adlı nesne, 9001 portuna POST ile gönderilen 60000 baytlık gövdedir. Böylece sızan verinin kendisini de kayıttan geri alırsın.
Çıkan dosyayı açma ve çalıştırma. Önce sha256sum ile özetini al, özeti tehdit istihbaratı kaynaklarında ara ve olay kaydına ekle. Dosyanın kendisini yalıtılmış bir analiz makinesinde incele.
$ tshark -r olay.pcap -q --export-objects http,./cikti $ ls -l cikti/ -rw-r--r-- 1 analist analist 60000 Sep 13 10:20 al -rw-r--r-- 1 analist analist 2 Sep 13 10:20 al(1) -rw-r--r-- 1 analist analist 3031 Sep 13 10:20 fatura.pdf -rw-r--r-- 1 analist analist 37 Sep 13 10:20 giris $ sha256sum cikti/al bab66c78f72b74df9fd1e7d1575cc8979ed51ad4c25b111ac57cad09bf16261c cikti/al
Etkinlik 5 / 7
Conversations penceresinde şüpheli bir satır buldun ve içeriğini görmek istiyorsun. Sıradaki adım hangisidir?
Etkinlik 6 / 7
Aynı kayıttaki başka bir akışta şu satırı buldun: Authorization: Basic ZGVwby5zb3J1bWx1c3U6WWF6MjAyNg== Değeri çöz. Kullanıcı adı ve parola nedir?
Araçları sırayla dene. Yanlış araç bozuk çıktı verir.
Savunma ve şifreli akışın sınırı
İncelemenin savunma karşılığı açıktır. FTP, Telnet ve HTTP Basic gibi açık metin taşıyan her servis aynı riski taşır. Önce envanteri çıkar; Conversations ve Protocol Hierarchy bu protokolleri konuşan makineleri gösterir. Sonra servisleri şifreli karşılıklarına taşı: FTP yerine SFTP, Telnet yerine SSH, HTTP Basic yerine TLS üzerinden oturum.
Sızan parolayı hemen değiştir ve bulguyu akış numarası, paket numarası ve dosya özetiyle olay kaydına yaz. NIST SP 800-61 Rev. 3, olay müdahalesini NIST CSF 2.0 işlevleriyle ilişkilendirir. Kanıtı böyle belgelemek hem müdahaleyi hem sonraki iyileştirmeyi besler.
Şifreleme analisti de kör eder, ama el sıkışmada bazı alanlar açık gider. İstemcinin ilk mesajı ClientHello'dur. İçindeki SNI (Server Name Indication) uzantısı, istemcinin bağlanmak istediği sunucunun adını açık metin taşır; filtrede tls.handshake.extensions_server_name alanıyla okursun. ALPN uzantısı istemcinin konuşmak istediği uygulama protokolünü, örneğin h2'yi söyler.
TLS 1.2'de sunucu sertifikası da açık gider, içindeki alan adını ve yayıncıyı okursun. TLS 1.3'te ise ServerHello'dan sonraki bütün el sıkışma mesajları, sertifika dahil, şifrelenir. İstek yolu, başlıklar ve gövde iki sürümde de görünmez; IP adresleri, portlar, zamanlama ve bayt miktarı ise her zaman görünür.
ClientHello'daki şifre takımı ve uzantı listesi istemci yazılımına göre değişir. Bu listeden üretilen özet bir parmak izidir. JA3 bu alanları birleştirip MD5 özetini alır.
Yeni nesil JA4 uzantıları sıralayarak özetler, bu yüzden tarayıcıların uzantı sırasını rastgele karıştırmasından etkilenmez. Aynı zararlı ailesi farklı sunuculara bağlansa da parmak izi çoğu zaman aynı kalır. Görünürlük azalmaya da devam ediyor: ECH (Encrypted Client Hello, RFC 9849) SNI'yi de şifreler.
QUIC, HTTP/3'ü UDP 443 üzerinden taşır ve TCP akışı hiç oluşmaz. Bu yüzden şifreli trafikte içerik yerine meta veriye bakarsın: kim, ne zaman, hangi ada, hangi parmak iziyle bağlandı.
Kendi makinende ürettiğin trafiği çözmenin yasal ve temiz bir yolu vardır. Firefox, Chrome ve curl, SSLKEYLOGFILE ortam değişkeni tanımlıysa oturum sırlarını bir anahtar kayıt dosyasına yazar. Wireshark'ta Preferences > Protocols > TLS altındaki (Pre)-Master-Secret log filename alanına bu dosyayı verdiğinde akış çözülür ve Follow Stream düz metni gösterir. Bu yöntem yalnız sırlarını senin tuttuğun oturumlarda çalışır ve başkasının trafiğini çözmez.
TLS 1.3'te sunucunun özel anahtarı da trafiği çözmeye yetmez. Kurumlar bunun yerine TLS inceleme vekili kullanır; bu vekiller gizlilik dengesi nedeniyle ayrı politika ve hukuki değerlendirme ister.
Derinleş:JA4 parmak izini okumak
JA3, 2017'de üç araştırmacının geliştirdiği bir yöntemdir. ClientHello'daki TLS sürümünü, şifre takımlarını, uzantıları, eliptik eğrileri ve nokta biçimlerini virgülle birleştirir ve MD5 özetini alır. 2023'te Chromium tabanlı tarayıcılar uzantı sırasını her bağlantıda karıştırmaya başladı. Aynı tarayıcı her seferinde farklı bir JA3 üretir oldu.
JA4 bu sorunu listeleri sıralayarak çözer ve okunabilir bir biçim kullanır. Örnek: t13d1516h2_8daaf6152771_e5627efa2ab1. İlk parçadaki t, TCP üzerinde TLS demektir; QUIC için q yazılır. 13, TLS 1.3'ü gösterir.
d, ClientHello'da SNI olarak bir alan adı bulunduğunu söyler; SNI yoksa i yazılır. 15 şifre takımı, 16 uzantı sayısıdır. h2, ilk ALPN değerinin ilk ve son karakteridir. İkinci parça sıralanmış şifre takımlarının 12 karakterlik SHA256 özetidir.
Üçüncü parça sıralanmış uzantılarla imza algoritmalarının özetidir. Parçalar ayrı ayrı aranabilir; yalnız ilk ve üçüncü parçayı eşleştirip aynı istemci ailesini farklı şifre ayarlarında bile yakalarsın. Wireshark güncel sürümlerde tls.handshake.ja4 alanını hesaplar.
Etkinlik 7 / 7
TLS 1.3 kullanan, ECH içermeyen bir HTTPS akışını pasif olarak izliyorsun. Her öğeyi doğru gruba yerleştir.
Önce bir seçeneğe, sonra aşağıdaki uygun kutuya bas. İstersen seçeneği kutuya sürükleyip bırak. Yerini değiştirmek için aynı işlemi tekrarla.
0/6 seçenek yerleşti.
Okumayı istediğin sırayla sürdürebilirsin. Ders, bütün etkinlikleri cevapladığında tamamlanır.
- Etkinlik 1· Follow Stream: paketlerden konuşmaya
- Etkinlik 2· Conversations ve Endpoints: kim kiminle konuştu
- Etkinlik 3· Conversations ve Endpoints: kim kiminle konuştu
- Etkinlik 4· Komut satırında özet tablolar
- Etkinlik 5· Uçtan uca inceleme: özetten dosyaya
- Etkinlik 6· Uçtan uca inceleme: özetten dosyaya
- Etkinlik 7· Savunma ve şifreli akışın sınırı