Fortigate üzerinde paket takibi (packet sniffing) nasıl yapılır?

Tüm fortigate ürünleri kendi içersinde güçlü bir packet sniffer barındırmaktadır. Bu yazımda anlatacaklarım FortiOS v2.80-MR5 ve sonrası firmware ile çalışan fortigate cihazları içindir.

Sniffer Temelleri:

Fortigate üzerinde yer alan sniffer, arabirimler üzerinde gerçekleşen haberleşmeleri takip etmek amacı ile kullanılmakta olup 3 ayrı katmandan oluşur. Bu katmanları incelersek

  1. paket başlıklarını içerir
  2. paketlerin başlık ve verilerini IP bazlı olarak verir
  3. paketlerin başlık ve verilerini ETHERNET bazlı olarak verir

Şimdi bu katmanlarla ilgili olarak bir takım örnekler verelim;

Tüm paket izleme komutlarının yazım şekli şu şekildedir:

# diag sniffer packet <arabirim> <‘filtre’> <katman> <adet>

açıklarsak;

<arabirim> belirli bir arabirim ya da ‘any’ dersek tüm arabirimlerle alakalı haberleşmeler

<katman> alınacak olan verilerin detay bilgisine bağlı olarak katman bilgisi (1-2-3)

<adet> paket izleme ile alınacak veri adedi

<‘filtre’> daha fazla detay alabilmek için kullanılabilecek filtre cümlesi

Örnek 1: Basit İzleme

Tüm haberleşmeye ait 3 paket veriyi 1. katman detaylarına göre izle

# diag sniffer packet internal none 1 3
192.168.0.1.22 -> 192.168.0.30.1144: psh 2859918764 ack 1949135261
192.168.0.1.22 -> 192.168.0.30.1144: psh 2859918816 ack 1949135261
192.168.0.30.1144 -> 192.168.0.1.22: ack 2859918884

göreceğiniz gibi haberleşmemizin arasına girerek haberleşmeden  küçük bir kesit veriyi aldık. Raporda görüleceği gibi 192.168.0.1 Ip adresi 22. portunu kullanarak ve 192.168.0.30 Ip adresine 1144 portu üzerinden bağlantı kuruyor. Sniffer sorgu cümlesinde belirtmiş olduğumuz ‘none’ ifadesi filtre kullanmadan sorgula manasına gelir. “1” ise 1. katmanı kullan ve “3” manası da 3 tane paket yakala ve dur demektir.

Örnek 2: Basit İzleme

# diag sniffer packet internal none 1 3
192.168.0.30.1156 -> 192.168.0.1.80: syn 2164883624
192.168.0.1.80 -> 192.168.0.30.1156: syn 3792179542 ack 2164883625
192.168.0.30.1156 -> 192.168.0.1.80: ack 3792179543

görüldüğü gibi bir takım verileri yakaladık, 192.168.0.30 numaralı IP adresi 80 portundan 192.168.0.1 adresine bağlanmayı SYN  ile bağlantı deniyor ve karşılık olarak da SYN ACK alıyor. Sonunda da 3 yönlü haberleşmeden sonra bağlantı kuruldu.

Bilgi katmanını 1. seviyeye aldığımızda kaynak ve hedef IP adresleri ile ilgili port bilgilerini görebiliriz.

Eğer <adet> bilgisini girmezseniz sistem haberleşme bilgilerini siz CTRL+C basana kadar almaya devam edecektir.

İPUCU: Bu bilgileri alırken bir dosyaya da LOG kaydı olarak kaydetmek en güzelidir. Bunun için de PUTTY (Freeware,Windows) SSH Client yazılımı ile log alabilirsiniz. Daha sonra bu bilgileri istediğiniz gibi arama ve sıralamada kullanabilirsiniz.

Katman 2 ve Katman 3 :

2. Katman daha fazla bilgi içerir

Katman 1: IP başlıklarını içerir ki bunu yukarıda görmüştük

Katman 2: IP paket içeriklerini gösterir

2. Katmana bir örnek verirsek

# diag sniffer packet internal none 2 1
192.168.0.1.22 -> 192.168.0.30.1144: psh 2867817048 ack 1951061933

0x0000   4510 005c 8eb1 4000 4006 2a6b c0a8 0001        E..\..@.@.*k….
0x0010   c0a8 001e 0016 0478 aaef 6a58 744a d7ad       …….x..jXtJ..
0x0020   5018 0b5c 8ab9 0000 9819 880b f465 62a8      P..\………eb.
0x0030   3eaf 3804 3fee 2555 8deb 24da dd0d c684      >.8.?.%U..$…..
0x0040   08a9 7907 202d 5898 a85c facb 8c0a f9e5       ..y..-X..\……
0x0050   bd9c b649 5318 7fc5 c415 5a59                  …IS…..ZY

3. Katman da ise ETHERNET (ETHER FRAME) bilgileri de yer alır. Bu formattaki bilgiler teknik destek ve bir sorunun çözümünde kullanılır.

Bu işlem için Fortigate to Ethereal scriptini kullanabilirsiniz. Bu dosya 3. Katmandan alınacak olan verileri ETHEREAL programı tarafından okunabilecek hale getirir.

FİLTRE KULLANIMI

Şu ana kadar bahettiğimiz gibi yapılan sorgulamalarda filtre kullanımı sorgunun gücünü ve amacını daha da ortaya koyacaktır. Filtre anahtarları aşağıda yer aldığı gibidir.

<filter>    filtre
Yazım: ‘[[src|dst] host<host_name_or_IP1>] [[src|dst] host<host_name_or_IP2>] [[arp|ip|gre|esp|udp|tcp] [port_no]] [[arp|ip|gre|esp|udp|tcp] [port_no]]’

Şayet ikinci bir host tanımlıysa, sadece 2 host arası trafiği izlemek için aşağıdaki filtreyi kullanabilirsiniz.

<filtre>    esnek mantıksal filtreler
Örnek: forti1 ve forti2 yada forti3 cihazları arasındaki UDP port 1812 haberleşmesini görebilmek için
udp and port 1812 and host forti1 and \( forti2 or forti3 \)‘ filtresi kullanılabilir.

bir pc ile diğer bir pc arasındaki trafiği filtresiz olarak izlemeye kalkarsanız, sniffer tüm paketleri görüntüleyeceği için takibi zor bir durum ortaya çıkabilir. Bu yüzden filtre kullanılır.

Örnek 3 : Filtrelerle İzleme

İki bilgisayar arasında yada fortigate ile pc arasındaki trafiği izlemek için kullanılır.

Not: Filtrelerinizde tek (‘ ‘ ) tırnak kullanımını unutmayın.

# diag sniffer packet internal ‘src host 192.168.0.130 and dst host 192.168.0.1’ 1

192.168.0.130.3426 -> 192.168.0.1.80: syn 1325244087
192.168.0.1.80 -> 192.168.0.130.3426: syn 3483111189 ack 1325244088
192.168.0.130.3426 -> 192.168.0.1.80: ack 3483111190
192.168.0.130.3426 -> 192.168.0.1.80: psh 1325244088 ack 3483111190
192.168.0.1.80 -> 192.168.0.130.3426: ack 1325244686
192.168.0.130.1035 -> 192.168.0.1.53: udp 26
192.168.0.130.1035 -> 192.168.0.1.53: udp 42
192.168.0.130.1035 -> 192.168.0.1.53: udp 42
192.168.0.130 -> 192.168.0.1: icmp: echo request
192.168.0.130.3426 -> 192.168.0.1.80: psh 1325244686 ack 3483111190
192.168.0.1.80 -> 192.168.0.130.3426: ack 1325244735
192.168.0.130 -> 192.168.0.1: icmp: echo request

Bu trafik log yapısında göründüğü gibi çok fazla trafik bu hat üzerinde gerçekleşmektedir, bu filtre komutu sadece 192.168.0.130 kaynağından 192.168.0.1 hedefine doğru olan trafikleri gösterir ama 192.168.0.130 a doğru olanları göstermez (örn: ICMP yanıtları). Bunun sebebi de filtrede yazdığımız

‘src host 192.168.0.130 and dst host 192.168.0.1’ komutudur.

Bir bilgisayardan daha önce yakaladığımız diğer ICMP ve DNS sorgularında görebileceğiniz gibi, eğer trafiğin sadece özel bir tipi ile ilgileniyorsanız (örn: TCP trafik sadece) filtre cümlemizi aşağıdaki gibi değiştirmemiz gerekebilir.

# diag sniffer packet internal ‘src host 192.168.0.130 and dst host 192.168.0.1 and tcp’ 1

192.168.0.130.3569 -> 192.168.0.1.23: syn 1802541497
192.168.0.1.23 -> 192.168.0.130.3569: syn 4238146022 ack 1802541498
192.168.0.130.3569 -> 192.168.0.1.23: ack 4238146023

Gerçi ICMP (Ping) de çalışıyordu, izleme sadece TCP haberleşmeyi gösterir. Görebileceğiniz gibi Hedef: 192.168.0.1.23 (yani 192.168.0.1 in 23. portu) bize 192.168.0.1 ile telnet(23. port) haberleşmesi olduğunu gösterir.

Aynı durumu şöyle de görebiliriz.

# diag sniffer packet internal ‘host 192.168.0.130 and icmp’ 1

192.168.0.130 -> 192.168.0.1: icmp: echo request
192.168.0.1 -> 192.168.0.130: icmp: echo reply

Bu örnekte sadece 192.168.0.130 IP adresli pc ye gelen ve giden ICMP paketlerini yakalıyoruz.

Değişik kombinasyonlar ile bu paket yakalama örneğini geliştirebiliriz. Örnek vermek gerekirse; 192.168.0.130 IP adresli pc ye gelen ve giden ICMP ve TCP haberleşmesini izlemek için aşağıdaki komutu kullanabiliriz.

# diag sniffer packet internal ‘host 192.168.0.130 and (icmp or tcp)’ 1

Bu izleme yöntemi 192.168.0.130 IP adresli cihaza gelen ve giden tüm ICMP  ve TCP paketlerini KATMAN 1 standartlarına göre gösterecektir.

Şimdi paket izleme işlemini biraz daha sınırlandıralım:

Örneğin, 2 cihaz arasındaki trafiğe ait TCP 80 portundan yapılan haberleşmeleri izlemek istediğimizde ise;

# diag sniffer packet internal ‘host 192.168.0.130 or host 192.168.0.1 and tcp port 80’ 1

192.168.0.130.3625 -> 192.168.0.1.80: syn 2057246590
192.168.0.1.80 -> 192.168.0.130.3625: syn 3291168205 ack 2057246591
192.168.0.130.3625 -> 192.168.0.1.80: ack 3291168206
192.168.0.130.3625 -> 192.168.0.1.80: psh 2057246591 ack 3291168206
192.168.0.1.80 -> 192.168.0.130.3625: ack 2057247265

Eğer iki cihaz arasında telnet ya da ssh trafiği yürütülüyorsa göremeyiz çünkü sadece TCP 80 portunu görmek istedik.

Bir sonraki yazımda ise tcp bayraklarının paket izleme ile nasıl takip edileceğinden bahsedeceğim.

Dosyalar:

Fortigate ile yakalanan katman 3 göre olan paketlerin ethereal yazılımının anlayacağı şekile dönüştüren Perl Converter için TIKLAYIN

Loading