Wireshark

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.

Screen Shot 2018 08 12 at 22.07.48 - Wireshark

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

Snip20180818 2 - Wireshark

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

Snip20180818 3 - Wireshark

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

Snip20180818 10 - Wireshark

# Arayüz

Trafiği dinlemeye başladığınızda varsayılan olarak aşağıdaki gibi bir ekranla karşılaşırsınız.

Snip20180818 12 - Wireshark

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.

Snip20180818 13 - Wireshark

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.

Snip20180818 15 - Wireshark

  • İlk bölümde yakalama işlemi için başlatma/durdurma/yeniden başlatma/ayarlar yapabilirsiniz.
  • İkinci bölümde capture dosyasını açma/kaydetme/kapatma yapabilirsiniz.
  • Üçüncü bölümde packet list bölümünde gördüğünüz paketlere hızlı erişim için gerekli araçları görebilirsiniz. Özellikle analiz işleminde bu kısım çok faydalı. Örneğin 18 nolu pakete git diyebilirsiniz. En son pakete ya da ilk pakete git diyebilirsiniz. Ya da capture aktifken her zaman son capture edilen dosyada bulun diyebilirsiniz.
  • Dördüncü bölümde renklendirmeyi açıp/kapama seçeneği size sunulmuştur.
  • Beşinci bölümde packet list bölümündeki text ifadeleri zoom’lama ilgili şeyleri görebilirsiniz. Çokta sık kullanılan bir şey olduğunu söylemek mümkün değildir.

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

Snip20180818 17 - Wireshark

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

Snip20180818 18 - Wireshark

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.

Snip20180818 19 - Wireshark

Bir diğer durum ise alanın sarı olmasıdır. Eğer != ifadesini kullanıyorsanız Wireshark sizi uyarır.

Snip20180818 22 - Wireshark

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

Snip20180818 23 - Wireshark

Wireshark’da da AND/OR koşul ifadeleri, gruplamalar yapılarak daha gelişmiş filtreler yazılabilir.

Snip20180818 24 - Wireshark

Paket içerisinde bir keyword aramak istiyorsanız contains ifadesini kullanabilirsiniz.

Snip20180818 45 - Wireshark

Wireshark ile PCRE formatında regex ifadeleri de kullanabilirsiniz. matches ifadesiyle regex’lerinizi yazabilirsiniz.

Snip20180818 47 - Wireshark

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

Snip20180818 25 - Wireshark

Herhangi bir kolonda görülen bir değeri filtre kısmına sağ tıklayarak kolayca ekleyebilirsiniz.

Snip20180818 26 - Wireshark

Snip20180818 27 - Wireshark

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.

Snip20180818 28 - Wireshark

Snip20180818 29 - Wireshark

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.

Snip20180818 31 - Wireshark

18 nolu pakete tıkladığımızda ise 17 nolu paketin kabul edildiğine dair (ACKNOWLEDGE) bir ifade yer alır.

Snip20180818 32 - Wireshark

Aşağıdaki şekilde tüm gösterimlerle ilgili bilgi yer almaktadır.

Snip20180818 33 - Wireshark

# 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ı.

Snip20180818 34 - Wireshark

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.

Snip20180818 36 - Wireshark

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.

Snip20180818 38 - Wireshark

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.

Snip20180818 39 - Wireshark[

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.

Snip20180818 42 - Wireshark

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.

Snip20180818 40 - Wireshark.

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

Snip20180819 50 - Wireshark

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.

Snip20180819 53 - Wireshark

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

Snip20180819 54 - Wireshark

Hangi seviyede uyarı görmek istediğinizi dilerseniz belirleyebilirsiniz.

Snip20180819 56 - Wireshark

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

Snip20180819 96 - Wireshark

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.

Snip20180819 97 - Wireshark

Bulamazsa dissector uygulanmaz. Data olarak belirtilir. Örneğin aşağıda standart olmayan bir port heuristic olarakta bulunamadı ve Data şeklinde alan oluşturuldu.

Snip20180819 100 - Wireshark

Diyelim ki siz ftp trafiği olduğunu biliyorsunuz. Data kısmına sağ tıklayarak Decode as diyerek FTP olduğunu belirtebilirsiniz.

Snip20180819 101 - Wireshark

Sonuç olarak manual olarak dissector’ü çalıştırabildik.

Snip20180819 102 - Wireshark

# 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ı.

Snip20180819 57 - Wireshark

Bunu düzeltmek için gelişmiş ayarlardan aşağıdaki yapılandırmayı bulup relative görünümü kapatınız.

Snip20180819 59 - Wireshark

Böylece sorunda çözülmüş olacaktır.

Snip20180819 60 - Wireshark

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

Snip20180819 62 - Wireshark

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.

Snip20180819 64 - Wireshark

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

Snip20180819 103 - Wireshark

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.

Snip20180819 105 - Wireshark

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

Snip20180819 68 - Wireshark

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

Snip20180819 71 - Wireshark

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

Snip20180819 72 - Wireshark

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.

Snip20180819 75 - Wireshark

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

Snip20180819 77 - Wireshark

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

Snip20180819 78 - Wireshark

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

Snip20180819 80 - Wireshark

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

Snip20180819 83 - Wireshark

Snip20180819 84 - Wireshark

Diğer bir seçenek ise packet filter sağ tıklayarak geçicici renk vermek olabilir.

Snip20180819 86 - Wireshark

Snip20180819 87 - Wireshark

Geçici renkleri aşağıdaki gibi kaldırabiliriz.

Snip20180819 88 - Wireshark

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

Snip20180819 89 - Wireshark

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

Snip20180819 91 - Wireshark

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

Snip20180819 92 - Wireshark

# Capinfos

Kaydedilmiş capture dosyası hakkında genel bilgi edinmek için capinfos komutu kullanılabilir.

Snip20180819 93 - Wireshark

# Örnek Pcap’lerle Çalışma