ICMP O KADAR DA MASUM DEĞİL!

ICMP O KADAR DA MASUM DEĞİL!

Herkese merhaba. Bu yazımda sizlere ICMP Protokolünden söz edip, firewall’u aşarak ping yolu ile dosya transferini anlatacağım. Uygulamalı olarak anlatacağım bu konuda, Wireshark, Kali Linux ve hping3 toolunu kullanacağım.

ICMP NEDİR, NERELERDE KULLANILIR?

ICMP protokolü, genel olarak işletim sistemleri tarafından ağda bulunan cihazların durumunu tespit amaçlı kullanılan protokoldür. IP protokolü ile birlikte OSI katmanlarından 3.katmanda yer alır. ICMP, hem TCP hem de UDP üzerinde çalışabilmektedir.

Ağ hakkında bilgi toplamak için kullanılır. Örneğin siz 10.10.61.32 IP adresine sahip bir sistemin ayakta olup olmadığını sorgulamak için bu adrese ping gönderirsiniz. İşte buradaki ping içerisinde ICMP paketleri de bulunmaktadır. ICMP protokolünde, belirli headerlar bulundurmaktadır. Ayrıca belirli mesaj tipleri de bulunmaktadır. Bu mesaj tipleri;

  • Type 0: Echo yanıt- ping yanıtı (Echo Reply)
  • Type 3: Destination Unreachable (Hedefe Ulaşılamadı)
  • Type 8: Echo yanıt-ping isteği(Echo Request)

şeklindedir. Tabi ki bu mesaj tipleri daha fazladır. Bu mesaj tiplerini daha net görebilmek için Wireshark aracılığı ile attığımız ping’i izleyelim.

Kali makinemizden ana makineye ping gönderdiğimiz zaman görüldüğü gibi icmp paketlerininde gönderildiği görülmektedir. “seq” ifadesinin açılımı sequence’dir ve bu ifade paketlerin eşsiz olduğunu göstermektedir. Şimdi ping isteğimizi Wireshark da, hem source hem de kaynak tarafında inceleyelim.

Sol taraftaki görselde kaynak adresin trafiğini görmekteyiz. Burada Wireshark için şunu söyleyebilirim. Frame, Ethernet, Internet gibi yukarıdan aşağıya doğru sıralanan kavramlar aslında OSI katmanlarındaki yerlerini temsil etmektedir. ICMP Protokolünün 3.katmanda IP ile birlikte çalıştığını söylemiştik. O katmana geldiğimiz zaman, “Type 8: Echo (ping request)” olduğu bilgisiyle karşılaşmaktayız. Aynı şekilde sağ görseli incelediğimizde ping request isteğinin destination tarafından karşılık verildiğini “Type 0: ping reply” bilgisinden anlayabilmekteyiz. Bir sistemin canlı olup olmadığını “Echo ping request” ve “Echo ping reply” mesajlarından anlaşılabilir.

Neden Kullanılır?

ICMP, ağ hakkında bazı bilgileri toplamak için kullanılır. Bu paketler geri besleme sağlayarak, bildirim mekanizması oluştururlar. “Traceroute” komutu ICMP için kullanılan bir komuttur. ICMP ayrıca şu amaçlar için de kullanılır;

  • TTL süresi dolduğu zaman paketin sahibine bildirim yapmak,
  • Herhangi bir durumda yok edilen paket hakkında geri bildirim sağlamak,
  • Hata oluşumlarında geri bildirim sağlamak,
  • Paket başka bir yoldan gideceği zaman geri bildirim sağlamak.

ICMP Nasıl Kötüye Kullanılır?

Teorik olarak ICMP’yi ele aldığımızda, oldukça masum görünen bir protokoldür. Hatta kurumlarda Firewall üzerinde kurallar yazılırken ICMP ile ilgili kurallar neredeyse yazılmaz. Yazılmamasının bir diğer nedeni de herhangi bir port bilgisi ile çalışmamasıdır. Firewall kurallarında odaklanılan noktalar, öncelikle port ve diğer protokollerdir. İşte bu durumda da ortaya ICMP ile gizli dosya transferi ve veri kaçırılması ortaya çıkmaktadır. Masum gibi görünen ICMP protokolünü de amacı dışında kullanmak mümkündür. Bu protokolü kullanarak dosya transferini “hping” toolu ile gerçekleştirebiliriz. Hping, istenilen türde TCP/IP paketleri oluşturmak için kullanılan bir araçtır. Bu işlem için hem dosya transferi yapılacak olan sunucu hem de kaynak üzerinde hping3 toolu olmak zorundadır.

Burada konudan bağımsız olarak, bir sistemden diğerine ping gönderdiğimiz zaman burada MTU değerleri bulunmaktadır. Bu MTU değeri max 1500 byte olarak bilinmektedir. Örneğin 2700 bytelık ping paketi göndermek istiyoruz. Bu durumda bu paketin 1500 byte ve 1200 byte olarak 2’ye ayrılır ve fragmentation işlemine uğrayarak daha sonra birleştirilir. Firewall da ilk paketi inceledikten sonra diğer paketi incelemeden birleştirme işlemini gerçekleştirir. Bu olaya da IP Fragmentation denir.

Her iki tarafa da “hping3” toolunu kurmak için “apt-get install hping3” komutunu kullanabilirsiniz.

Uygulamaya Geçelim

Senaryoyu şu şekilde düşünelim. “sibertehdit.com” şirketi içerisindeki x şahsı, site adminin şifre ve kullanıcı adı bilgilerini flag.txt dosyası içerisine yazıp, icmp paketleri ile başka bir ağda kendisini bekleyen birine göndermek istemektedir. Bu senaryoyu gerçekleştirebilmek için öncelikle dosyanın alınacağı destination da dinleme başlatılması gerekmektedir.

Yukarıdaki komut satırını kullanarak dinlemeye başlanabilir. Burada –listen dan sonra kullanılan IP adresi bilgisi kaynağın IP adresidir. –sign ise kaynak tarafında az sonra oluşturacağımız icmp imzasının adıdır. “alınacakdosya.txt” ise hedef tarafında kaynaktan gelen dosyanın nereye yazılacağı belirlenmektedir. Bu şekilde hedef tarafında dinleme başlatılır.

Dosyanın gönderileceği kaynakta ise yukarıdaki komut satırı girilir. Burada kullanılan parametreler;

  • –icmp: Gönderilen protokolün ismidir.
  • -d: Paketin başlık bilgisi dışındaki boyutudur. Örneğin paket 61 byte ise 4 byte header boyutu eklenip -d bilgisine yazılmalıdır.
  • –sign: Tetikleyici kelime, imza.
  • –file: Gönderilecek dosyanın ismi.
  • -c: Paket sayısını ifade eder. Birden fazla pakette gönderilir.
  • -I: Bağdaştırıcıdır.

Burada kullanılan IP adresi bilgisi hedef cihazın IP adresidir.

Dosya transfer işlemi görselde görüldüğü gibi “1 packets received” bilgisi ile anlayabiliriz. Hedef tarafında “flag.txt” dosyasının gidip gitmediğini inceleyelim.

Hedef tarafında “alınacakdosya.txt” belgesini “cat” komutu ile görüntülediğimiz de kaynak tarafından gönderilen admin bilgilerinin hedefe ulaştığını görmekteyiz. ICMP ile dosya transferi başarılı bir şekilde gerçekleşmiştir. Bu dosya transferini bir de Wireshark ile inceleyelim.

Wireshark ile kaynak IP adresini dinlediğimiz vakit bir paketi görüntülemekteyiz. Bu paketin 192.168.3.239 adresine ICMP protokolü kullanarak ulaştığı bilgisi bulunmaktadır. 3.katmanı incelediğimiz zaman data boyutun 65 byte olduğunu, alt bölümde de dosya içerisindeki gönderilen bilgileri clear text olarak görebiliriz. Bu yaptığımız işlem aynı zamanda bir ICMP Tunneling işlemidir.

Bir önceki bölümde IP Fragmentation’dan bahsetmiştik. Kaynaktaki dosya boyutunu 2.5 kb’a çıkarıp dosyayı tekrar göndermeyi deneyelim.

Öncelikle dosyanın boyutuna baktığımız zaman 2542 byte olarak değiştiğini bunun da 2,5 kb’a denk geldiğini söyleyebiliriz. Şimdi hping3 toolunu yeniden çalıştırıp dosyayı karşı tarafa transfer edelim.

Paket sayısını 2 ye çıkartıp, dosya boyutunu da -d parametresinin hemen yanına 2560 olarak değiştirdim. Toolu çalıştırdıktan sonra byte değerlerine len satırından baktığımızda 1500 değerini görmekteyiz. MTU değerinin 1500 olduğunu ve 1500 byte ı aşan boyutları paketi 1500’den sonra böldüğünü uygulamalı olarak anlamış olduk.

Sonuç Olarak

ICMP protokolünün göründüğü gibi masum olmadığını gözlemledik. Kurumların, kurallar tanımlanırken önemli olarak görülmeyen istisna paketleri de göz ardı etmemesi gerektiğini gösteren önemli örneklerden biri ICMP protokolüdür.

Kontrol amaçlı olarak geliştirilmiş olsa da bu protokol kötü amaçlar içinde kullanılabilir. Birçok tünelleme yöntemi firewall aşmada önemli bir araç olarak kullanılmaktadır. Hiçbir porta ihtiyaç duymayan ICMP portu da bu amaçla kullanılabilecek en önemli tünellemedir. Ağlarda fragmentation vb. işler için ICMP kullanıldığından, bu protokolü tamamen engellemek sıkıntılara yol açabilmektedir. Bunun yerine uygulamada da bahsedilen Type 0 ve Type 8 engellenebilir. Firewall kural örneği de şu şekilde olabilir;

Bu yazımda ICMP protokolünün ne olduğundan, nerelerde kullanıldığından ve nasıl kötüye kullanıldığından söz etmeye çalıştım. Bir sonraki yazımda görüşmek üzere.

Kaynakça

https://www.pwc.com.tr/tr/assets/pdf/ping-ile-port-suz-dosya-transferi-yaparak-firewall-asmak.pdf

https://packetpushers.net/ip-fragmentation-in-detail/

https://www.linkedin.com/in/samet-%C3%A7ulha/

Related Posts

Facebook Comments