ping ve traceroute nasıl çalışır?

Bu flood’da ping ve traceroute’un çalışmasını sağlayan ICMP protokolünü ve traceroute’ta kullanılan muhteşem sistem hack’ini anlatacağım.

ICMP (Internet Control Message Protocol), ağ cihazları tarafından kullanılan ve bu cihazların işlevlerini yerine getirirken karşılaştıkları hataları ve operasyonel bilgileri birbirleri ile paylaşabilmelerine yarayan IP katmanının üstünde yer alan bir protokoldür.

ping olarak bildiğimiz ve uzak sunucuya fiziksel olarak erişimimizi kontrol ettiğimiz komut aslında ICMP protokolünü kullanmaktadır. İstemciden sunucuya atılan istek Echo Request, ICMP Type 8 kontrol mesajı olarak bilinir. Sunucunun Echo Request'e verdiği cevap ise Echo Reply, ICMP Type 0 olarak tanımlanmıştır. ICMP IP bazlı olduğu için TCP ve UDP'deki port bilgisinden habersizdir. Yani ping ile uzak bir sunucuda bir web sunucunun çalışıp çalışmadığını kontrol edemeyiz, sadece sunucunun ağa bağlı olup olmadığını anlayabiliriz.

Günümüzde ping komutuna (Echo Request) güvenlik gerekçesi ile (atak planlayan kişiye ağdaki bilgisayarlar hakkında bilgi vermemek için) birçok sistemde cevap verilmemektedir. Bu anlamda ping şirket ve ev içi ağlarda oldukça işe yarasa da internet'te genellikle anlamını yitirmektedir. İlerleyen flood'larda ping fonksiyonunu internette TCP ve UDP portlarını da dahil ederek yapabilen araçlara değineceğiz.

traceroute (Windows'ta tracert) komutu bir sunucuya ulaşırken gönderdiğimiz paketlerin geçtiği ağ elemanlarını ve her bir ağ elemanında ne kadar süre harcadığını görmemizi sağlar. traceroute'un çalışma prensibi ise aslında birazdan göreceğimiz bir sistem hack'ine dayanır :)

Aşağıda traceroute'un www․bbc․co․uk adresine ulaşırken geçtiği ağ elemanlarını gösteren çıktıya yer verilmiştir.

Paketlerin internet içinde dağıtımını sağlayan ve Router adı verilen ağ cihazları, paketi bir sonraki ağ elemanına iletirken paket içinde bulunan TTL (time-to-live) değerini bir eksiltirler. Bu sayede varsa ağ içindeki döngülerde (A -> B, B -> C, C -> A, A -> B) paketlerin sonsuza kadar yönlendirilmesi önlenmiş olur. TTL süresi için istemciler tarafından genellikle yüksek bir değer (64) atanır. Paket ulaşacağı yere kadar toplam 64 adet ağ elemanı değiştirmezse sağ salim varacağı yere ulaşır. Ağda gerçekten de 64 elemandan fazla eleman olduğu durumda ise TTL değeri 1 olan paketi alan Router paketi çöpe attığını paketin asıl göndericisine bildirmek için Time Exceeded olarak adlandırılan ICMP Type 11 mesajını gönderir, böylece paketi ağa çıkaran istemci durumdan haberdar olur.

Aşağıda ağ elemanlarından geçen paketin TTL değerindeki eksilme gösterilmiştir.

traceroute aslında yukarıda anlatılan mekanizmayı zarif bir şekilde hack'lemektedir. Paketin geçtiği yollarda karşılaştığı ağ elemanlarını öğrenmek için TTL değerini 1 verdiği paketi gönderir. İlk ağ elemanı bu paketi alır almaz ICMP Type 11 mesajını gönderecektir. traceroute bu mesajdan ilgili ağ elemanını tespit eder. Daha sonra TTL'i 2 vererek paketi tekrar gönderir. Bu kez paket ilk elemanı aşarak ikinci elemandan ICMP Time Exceeded alır ve bunu da kaydeder. Bu şekilde hedef sunucuya kadar bütün ağ elemanları tespit edilmiş olur :-)

Time Exceeded mesajları da iç ağlar hakkında dış dünyaya bilgi vermemek üzere güvenlik gerekçesi ile devre dışı bırakılabilir.

Paket yapısı sade olan ICMP protokolünü kullanarak bir ping veya traceroute istemciyi basit bir haftasonu projesi olarak yapabilirsiniz.