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.