DNS Tünelleme’den daha önce bahsetmiştik. Şimdi de ICMP protokolünden faydalanarak tünelleme nasıl yaparızı göreceğiz.
İç ağınızdan dış ağdaki birine ping atmayı başarabiliyorsanız bilinki icmp dışarıya açık ve siz iç ağınızdan dış ağa icmp üzerinden data taşıyabilirsiniz.
# ICMP ile Data Transferi
Normalde bir ping attığımızda aşağıda da göreceğiniz üzere icmp request göndeririz. Gelen cevap ise icmp reply’dır.
Ve bir icmp paketi aşağıdaki gibidir. Özellikle data kısmına dikkat edin. “abcd….vwabc…” şeklinde bir data gönderilmiş.
Data alanına istediğimizi yazabiliriz. Örneğin hping aracı ile gokhan kesici gönderelim icmp ile karşı tarafa.
hping3 -1 192.155.91.32 -e "gokhan kesici"
# Proof of Concept Çalışma – ICMP Tünelleme
ICMP üzerinden data transferi yapılabildiğini gördük. Şimdi de echo request ve echo reply üzerinden tünel oluşturmayı sağlayan bir araç ile proof of concept bir tünel oluşturalım.
Öncelikle github’dan icmptunnel aracı tünelin iki ucuna da (istemci ve sunucu) indirilir ve derlenir.
git clone https://github.com/DhavalKapil/icmptunnel /opt/icmptunnel cd /opt/icmptunnel/ make
Sunucu ucunda ilgili derlenen yazılım da tun0 arayüzünün ip’si -s parametresi ile tanımlanarak çalıştırılır.
/opt/icmptunnel/icmptunnel -s 10.0.1.1
İstemci tarafında yazılım çalıştırılmadan önce routing işlemleri için server, gateway bilgileri doldurulur. Server bilgisi olarak yukarıda da belirttiğimiz 10.0.1.1 ‘i kullandık. Gateway için ise bilgisayarınızda varsayılan gatewayiniz.
Şimdi de bağlanılacak sunucu ip si belirtilerek istemci tarafında tun0 oluşacak şekilde ilgili yazılım çalıştırılır. client.sh içerisinde istemciye verilecek ip (10.0.1.2) de belirtilmiştir.
/opt/icmptunnel/icmptunnel -c 192.155.91.32
Artık yavaşta olsa bir tünel kuruldu. Sunucu tarafına paketler gidiyor olacaktır. Eğer gidemiyorsanız firewall vs. çeşitli kontrolleri gerçekleştirmelisiniz.
# Önlem: