Bu yazımızda TCP/IP’nin çalışma mantığını anlamak, trafik analizi gerçekleştirmek, troubleshooting vs. için kullanılan en popüler araçların başında gelen Wireshark’dan bahsediyor olacağız.
# Wireshark Altyapısı
Wireshark network kartından trafiği dumpcamp ile yakalar. Daha sonra frame’leri core engine’e gönderir. Wireshark’ı wireshark yapan dissector’ler bizler için frame’leri parse ederek okunabilir hale getirir ve GUI’de sunar.
# Tipik Kullanım
Genellike Wireshark yazılımını açtıktan sonra ilk yaptığımız şey trafiğini izleyeceğimiz interface’i seçip başlatmaktadır.
# Capture Filter
Normalde hiç bir filtre verilmeden capture işlemi başlatılırsa interface’e gelen her şey kaydedilir. Hedefe yönelik capture işlemi için filtre girmekte fayda bulunuyor. Örneğin sadece tcp paketlerini yakalamak için baştan aşağıdaki filtre girilebilirdi.
# Promiscuous Mode
Wireshark’ta normalde tüm interface’ler promiscuous modda aktif olarak geliyor. Ancak yine de kontrol etmekte fayda var diye düşünüyorum. Normalde network kartı işletim sistemine kendisiyle alakalı olmayan paketleri iletmez. Aslında arka planda bir filtreleme gerçekleştirir. Gerçekten o interface’e düşen tüm paketleri görmek için bu modun aktif olması önemlidir.
Örneğin capture ayarlarından (Capture/options) tüm aktif interface’lerde bunu aktif edebilirsiniz.
# Arayüz
Trafiği dinlemeye başladığınızda varsayılan olarak aşağıdaki gibi bir ekranla karşılaşırsınız.
Yukarıdaki görünümden istediğiniz alanı bölümü toolbar kısmından sağ tıklayarak veya View kısmından ayarlayabilirsiniz.
Bu görünümden bir bölüm kaldırmak yerine ek bölümler eklemek daha mantıklı olacaktır.
# Toolbar
Toolbar ‘da sıklıkla kullanacağınız kısayollarlar bulunuyor.
# Display Filter
Analiz işleminde en sıklıkla kullanılacak bölüm burasıdır. Bu kısmı capture filter ile karıştırmamak gerekir. Display filter yakalanmış tüm paket içerisinden görüntüleyeceğiniz kısmı size yansıtır. Buraya girilen filtreler packet list’e yansır. Benzer şekilde status bar kısmında da tüm paket içerisinden filtrelenmiş paket sayısını hızlıca görebilirsiniz.
Örneğin girilen filtre sonucunda status bar kısmında da 768 paketten 603 tanesi getirilmiştir.
En son girdiğiniz filtreleri ise aşağıdaki gibi görüntüleyebilirsiniz.
Filtre yazmak Wireshark kullanmanın en can alıcı noktası. Çünkü akan trafikten istediğinizi bulmanızın yöntemi filtre girmektir. Konunun başında Wireshark’ın asıl gücünü dissector’lerden aldığımızı söylemiştim. Dissector’ler trafiği yorumlayıp parse edip çeşitli alanlara bölüyordu.
Örneğin TCP/IP bildiğinizi düşünürsek bir tcp paketi içerisinde hangi alanların olduğunu da biliyorsunuzdur. Örneklerde girdiğimiz tcp.port == 443 filtresi tcp paketleri içerisinde port bilgisi 443 olan paketleri getirir.
Eğer girdiğiniz filtre doğru bir filtre ise Wireshark filtre alanını yeşillendirir. Eğer girdiğiniz filtrede bir yanlışlık varsa Wireshark sebebini status bar kısmında belirtir ve filtre alanını kırmızıya boyar.
Bir diğer durum ise alanın sarı olmasıdır. Eğer != ifadesini kullanıyorsanız Wireshark sizi uyarır.
Örneğin siz 443 portu olmayan paketleri görüntülemek isterseniz yukarıdaki filtre doğru sonucu vermeyecektir. Bu sebeple sizi uyarıyor. Bizim istediğimiz sonuç için !tcp.port==443 girilmeliydi.
Wireshark’da da AND/OR koşul ifadeleri, gruplamalar yapılarak daha gelişmiş filtreler yazılabilir.
Paket içerisinde bir keyword aramak istiyorsanız contains ifadesini kullanabilirsiniz.
Wireshark ile PCRE formatında regex ifadeleri de kullanabilirsiniz. matches ifadesiyle regex’lerinizi yazabilirsiniz.
# Packet List
Capture işlemi başladıktan sonra 1 numaralı paket düşer. Daha sonra düşen tüm paketler sırasıyla numaralandırılarak bu listede gösterilir. Yine varsayılanda ilk paket referans alınarak zaman bilgisi düşülür. Source kısmında ip paketi varsa source ip, destination kısmında ip paketi varsa destination ip bilgisi gösterilir. Protokol kısmında ise dissector’un bulduğu high level protokol gösterilir. Length kısmında frame’in boyutu, Info kısmında ise paket ile ilgili bilgi yer alır.
Eğer ip paketi bulunmuyorsa MAC adres source/destination olarak gösterilir.
Herhangi bir kolonda görülen bir değeri filtre kısmına sağ tıklayarak kolayca ekleyebilirsiniz.
Bir diğer güzel özellik yine sağ tıklayarak stream’i takip edebilmenizdir. Bunu yaptığınızda otomatik olarak ilgili stream için filtre alanı düzenlenir. Wireshark 0’dan başlamak üzere her akışa bir numara vermektedir.
Packet List alanı bazı özel ipuçları sunar. Örneğin en solda kesikli/kesiksiz bazı çizgiler bulunur. Bunların hepsi bir anlam ifade eder.
Örneğin 14 nolu paketi tıkladığınızda 21 nolu pakete kadar aynı stream’de oldukları görülebilir. 22 – 26 arasında ise kesikli çizgilerde ise o paketlerin stream ile alakası bulunmadığını gösterir.
18 nolu pakete tıkladığımızda ise 17 nolu paketin kabul edildiğine dair (ACKNOWLEDGE) bir ifade yer alır.
Aşağıdaki şekilde tüm gösterimlerle ilgili bilgi yer almaktadır.
# Packet Detail
Pakete tıkladığınızda paketin detayları bu bölümde görülür. Dissector ‘ler hemen parçalara ayrılmış şekilde karşımıza çıkarır alanları.
Wireshark yakaladığı frame hakkında özet bilgiyi Frame kısmında sunar. Bu alan paket içerisinde bulunmaz. Paket içeriği Ethernet yazan bölümle ile birlikte başlar.
Frame kısmında Wireshark’ın keşfettiği protokol, packet listdeki renklendirme kuralı, zamansal bilgiler, boyut hakkında bilgi görülebilir. Belirttiğim gibi bu alanlar bir nevi Wireshark’ın paket ile ilgili çıkardığı özet bilgidir.
Buranında güzel tarafı tıkladığınız bir alanın filtrelerde nasıl girebileceğinizi status bar da göstermesidir. Örneğin source ip’yi tıkladık. Hemen ip.src olarak filtreye girebileceğimizi anladık.
Eğer paket içeriğinde [ ] alanları varsa bilin ki bu gerçek paket tarafından değil Wireshark tarafından gösterilen bir şeydir.
[
Packet List’de sağ tıklayarak alanı filtrelere ekleyebiliyorduk. Burada da bu konfor sağlanmış. Filtrelere ekleyebiliyoruz.
Yine güzel bir özellik ise burada gördüğümüz bir alanı packet filter de kolon olarak ekleyebiliriz. Örneğin stream alanını kolon olarak eklemek isteyelim.
Wireshark çok sayıda protokol destekleniyor. Gördüğünüz bir protokolü tanımıyor veya bilmiyor olabilirsiniz. Hızlıca bu protokol hakkında bilgi almak için protokol üzerindeyken sağ tıklayarak Wireshark’ın wiki sayfasına gidebilirsiniz. Buradan Wireshark’ın protokol tamamiyle destekleyip desteklemediğini, örnek capture dosyası varsa indirmenizi , çeşitli filtreleme örneklerini görebilirsiniz.
.
# Packet Byte
Bir frame geldiğinde aslında packet byte daki gibidir. Packet detail deki alanlarda gezinirken bir alana gidildiğinde packet byte da da bu alan işaretlendiğini fark edebilirsiniz.
Sol tarafta gördüğünüz 0000, 0010, 0020 ifadeleri aslında paketin offseti. 0010 demek 10 sayı sisteminde 16 demektir. Yani 16 numaralı byte’ın başladığı noktadır. Ofsetler paketin başlangıçtan itibaren kaçıncı konumda olduğunu gösterir. Offset kullanmanız gereken bir yer olabilir. Örneğin ip.src ifadesini frame[14:1] şekinde de filtrede ifade edebilirsiniz. 14. paketten itibaren 1 byte ‘ı seçer. Paketimiz varsayılanda Wireshark’ta hexadeciamal gösterilir. Dilerseniz bit formatında da görüntüleyebilirsiniz. Hexadecimal ifadenin ASCII formatı da bir sağ blokta gösterilir.
# Status Bar
Yukarıda Status Bar’ın filtrelerde, paket detaylarında, hatalarda bakılacak bir yer olduğunu belirtmiştik. Tüm bunların yanı sıra bir önemli nokta daha bulunuyor.
Özellikle sarı ile belirtili Expert Information kısmı size önemli bilgiler verebilir. Bu kısımda özellikle warning (sarı) ve error (kırmızı) ‘lara önem vermek gerekiyor. Warning’e örnek olarak şunu verebiliriz. RST dönenler önemli olabileceğinden Wireshark sizi uyarı olarak bildirir.
Hangi seviyede uyarı görmek istediğinizi dilerseniz belirleyebilirsiniz.
# Dissector Çalışma Mantığı
Dissector’ler aracılığıyla byte’ları decode ederek okunabilir formatlara dönüşür. Wireshark bir çok protokolü ve uygulamayı rahatlıkla anlayabilmektedir. Ayarlar kısmından desteklenen protokoller ve onlarla ilgili yapılandırmaları görebilirsiniz.
Wireshark ilk olarak static olarak port numarasına bakar. Eğer port standart bir port değilse heuristic motoru belirli patternleri sırasıyla arar.
Bulamazsa dissector uygulanmaz. Data olarak belirtilir. Örneğin aşağıda standart olmayan bir port heuristic olarakta bulunamadı ve Data şeklinde alan oluşturuldu.
Diyelim ki siz ftp trafiği olduğunu biliyorsunuz. Data kısmına sağ tıklayarak Decode as diyerek FTP olduğunu belirtebilirsiniz.
Sonuç olarak manual olarak dissector’ü çalıştırabildik.
# Relative SEQ’i Düzeltme
Wireshark’ta benim algım noktasında beni zorlayan bazı şeylerde bulunmuyor değil. Wireshark bazı şeyleri göreceli olarak gösteriyor. Yani paketteki şey daha farklı.
Bunu düzeltmek için gelişmiş ayarlardan aşağıdaki yapılandırmayı bulup relative görünümü kapatınız.
Böylece sorunda çözülmüş olacaktır.
# Name Resolution
Wireshark’ta analiz aşamasında işinizi kolaylaştıracak işlerden biri de ip’lerle, mac ile çalışmak istemeyebilirsiniz. Ayarlar kısmından bu kısmı kendinize göre yapılandırabilirsiniz. Geçici yapılandırmak için ise View/Name Resolution ‘ı kullanabilirsiniz.
MAC adreslerinin ilk 24 biti vendor’ü işaret ettiğinden bu kısmı çözebilir. HTTP servisi istisna yoksa 80 portundan çalışır. Resolve transport name derseniz transport seviyesindeki port bilgileri yerine bu servis adlarını çözer.
IP’den hostname’i çözebilirsiniz. 2 nolu seçenek mevcut paketler içerisinden hiç dns sorgusu yapmadan çözdürmek isteyebilirsiniz. 3 seçenekte ise Wireshark dns sunucusuna PTR sorgusu yaparak ismi çözmeye çalışabilir. 4 nolu kısımda dns sunucuya dos yapmamak için aynı anda kaç sorgu yapabileceğinizi belirleyebilirsiniz. 5 nolu kısımda ise dilerseniz sadece host dosyasından da çözdürebilirsiniz.
# Gecikme Zamanları
Packet List alanındaki Time kolonu varsayılanda ilk kaydedilen 1 nolu frame e göre (Seconds Since Beginning of Capture Packet) delta zamanı gösterir.
Seconds Since Previous Display Packet ise packet list’de görebileceğiniz bir önceki pakete göre gecikmeyi görebilirsiniz. Bu seçenek iki ip arasındaki bir konuşma ise doğru gerçek gecikmeyi vermesi açısından doğrudur. Ancak birden conversation varsa bu seçenek pekte doğru olmayacaktır.
Gerçekten stream’deki gecikmeleri görmek ise amacımız stream’deki alanı kolon olarak ekleyip görmek daha doğru olacaktır. Örneğin aşağıda TCP stream deki gecikmeleri görüp dilerseniz sağ tıklayıp kolon olarak ekleyebilirsiniz. Gecikme zamanları için bir renklendirme kuralı yazmakta mantıklı seçeneklerden biri.
# Ring Buffer
Wireshark’ta şu kadar boyutta veya şu kadar süre geçtikten sonra yeni bir Wireshark dosyası oluştur diyebilirsiniz. Dilerseniz sürekli yeni dosya oluşturarak diski doldurmanın önüne de geçebilirsiniz. Bunun için ring buffer özelliğini kullanabilirsiniz. Capture işlemi başlamadan önce Capture / Output ayarlarından bunu gerçekleştirebilirsiniz.
Örneğin aşağıdaki gibi bir yapılandırma 2 tane 100 KB’lık dosya oluşturur. Ve her 100 KB dolduğunda sırasıyla o iki dosyayı yenisiyle günceleyecektir.
# Capture işlemini otomatik durdurma
Capture options kısmından dilerseniz belirli koşullar altında otomatik olarak capture işleminin durmasını sağlayabilirsiniz
Örneğin aşağıdaki yapılandırma 10 paket olduğunda veya 100 KB olduğunda capturing otomatik olarak duracaktır.
# Statics / Conversations
Analizlerde çok işe yarayacak şeylerden biri de istatistiki bilgilere yoğunlaşmaktır. Wireshark bu konuda da güzel araçlara sahip.
Conversation kısmında capture edilen trafikte kim kime ne kadar paket yollamış , boyutu ne kadar rahatlıkla görebilirsiniz. Örneğin aşağıda en çok paket alışverişi kimler tarafından yapılmış rahatlık görebiliyoruz.
Diyelim ki bu en çok paket yapan alışverişi packet list de hızlıca görüntülemek istersek sağ tıklayıp iletişim yönünü seçeriz.
# Statics / Endpoints
Aralardaki iletişimi değilde hangi uç nokta da ne kadar paket ne kadar byte toplamda çıkmış hızlıca istatistiki olarak öğrenebiliriz. Benzer şekilde buradan da sağ tıklayarak filtreleme kısmına bunları hızlıca aktarabiliyoruz.
# Statics / Protocol Hierarchy
Protokol bazlı paket istatistiklerini rahatlıkla görebiliyoruz. Bu kısımda dikkatinizi çeken protokoller çıkabilir. Bunları hızlıca görmek çok faydalı bir özellik.
# Statics / IO Graphics
Zaman bazlı paketleri veya filtreli grafik alanlarını görmek güzel olabilir. Örneği 4-5. saniyeler üzerinde capture edilen paket sayısı peak yapmıştır. Bu arada bu trafikte tcp error alanlar ise en çok 7. saniyede olmuştur.
# Renklendirme
Wireshark’ta renklendirme iki çeşit oluyor. Biri kalıcı , diğer ise geçici. Kalıcı renklendirmeler View / Coloring Rules altında gerçekleştirilir. Mevcut renklendirme kuralların yanı sıra yeni kural ekleyebilirsiniz.
Diğer bir seçenek ise packet filter sağ tıklayarak geçicici renk vermek olabilir.
Geçici renkleri aşağıdaki gibi kaldırabiliriz.
# Spesifik Paket Kaydetme Seçenekleri
Capture ettiğiniz paketlerden sadece istediğinizi almak için File / Export Specified Packets kısmından yararlanabilirsiniz..
Örneğin display filter sonucu ortaya çıkan paketlerden 1-30 arasındaki paketlerden seçtiğimizde sadece 4 tane yeni paketi çıkaracaktır.
# Mergecap ile paket birleştirme
Elinizde iki pcap dosyası olduğunu düşünelim ve bunları birleştirmek istiyorsunuz. Bunun için Wireshark ile birlikte kurulan mergecap aracınını kullanabilirsiniz.
mergecap -w test.pcapng test1.pcapng test2.pcapng
# Editcap ile paket bölme
Editcap yetenellikli bir Wireshark aracı. Editcap ile paketleri parçalara rahatlıkla bölebiliriz. Örneğin 100 pakette bir paket oluşturacak şekilde paketleri böldüm.
#Tshark
Wireshark’ın GUI olmayan hali tshark ile de komut satırı üzerinden Wireshark’tan yararlanabilirsiniz. Genel kullanım için tshark’ın help’ini inceleyebilirsiniz.
Örneğin aşağıda eth0 interface’i dinleyip bir dosyaya kaydettik. Bu paket wireshark ile de rahatlıkla açılabilmektedir.
# Capinfos
Kaydedilmiş capture dosyası hakkında genel bilgi edinmek için capinfos komutu kullanılabilir.
# Örnek Pcap’lerle Çalışma