DNS Tünelleme Kullanarak Firewall/IPS/CF Atlatma Çalışması

BGA Security Wiki sitesinden
Şuraya atla: kullan, ara

Amaç:

İstemci tabanlı alınan güvenlik önlemlerinin DNS tünel kullanılarak aşılması.

Yerel ağdan internete giden tüm port ve protokoller Firewall tarafından engellenmiştir. Web erişimi için hizmet veren proxy ise yalnızca yetkili kullanıcılara internet erişimi sağlamaktadır. Bu sistemlere takılmadan sınırsız ve kayıt altına alınamaz internet trafiği nasıl elde edilebilir?

Lab Senaryosu:

Bir protokol içerisinde başka bir protokole ait veri taşıma işlemine protokol tünelleme denir. DNS paketleri içersinden herhangi bir TCP/UDP paketini (örneğin; HTTP, FTP, SSH vb.) taşıma işlemi de DNS Tünelleme olarak isimlendirilir.

Dosya:Dns.png


DNS sunucu kendisinden sorgulanan bir DNS isteğine önce önbelleğini kontrol ederek yanıt vermek ister eğer alan adı DNS önbelleğinde yoksa, sorgulanan alan adından sorumlu DNS sunucuyu bulur ve ona sorar. Sorgulanan alan adından yetkili DNS sunucu ilgili DNS kaydı için yanıt verir ve DNS sunucu bu yanıtı istemciye iletir.

Örnek:

Kullanıcı, tunnel.bga.com.tr alan adını sorgulamak istediğinde yerel ağındaki DNS sunucu bu kayıt önbelleğinde yoksa bu isteğe doğrudan yanıt veremez. tunnel.bga.com.tr alan adından sorumlu DNS sunucuyu bulur dns.bga.com.tr ve ona tunnel A kaydını sorar aldığı yanıtı istemciye iletir.

Tcp-Over-Dns Çalışma Prensibi

Tcp-Over-Dns client, DNS verisini encode ederek ISP'nin DNS sunucusuna iletir. ISP'nin DNS sunucuyu bu isteğe yanıt veremez ve DNS isteğini Tcp-Over-Dns sunucuya iletir. Tcp-Over-Dns sunucu gelen isteği decode eder ve ilgili isteğe yanıtı istemciye geri gönderir. DNS isteklerinin, DNS sunucu tarafından önbelleğe alınma ihtimaline karşı her DNS sorgusunda rastgele bir subdomain kullanılır.

Ön Gereksinimler:

1. DNS isteklerinize yanıt alabildiğinizi doğrulamalısınız. Örneğin; nslookup google.com.tr komutu ile google IP adreslerini öğrenebiliyorsanız. DNS isteklerinize yanıt veriliyordur.

2. İnternet dünyasında sizin kontrolünüzde olan bir sunucu. Administrator veya root yetkilerine sahip olmalısınız. UDP 53 portu farklı bir uygulama tarafından kullanılmıyor olmalı ve erişim problemi yaşanmamalıdır.

3. Kullandığınız işletim sistemine göre Tcp-Over-Dns yazılımı. Mutlaka java kurulu olmalıdır.

4. http://analogbit.com/software/tcp-over-dns

Tcp-Over-Dns Server Yapılandırması

Bu işlem için bir alan adına ve bu alan adından sorumlu DNS sunucuya ihtiyaç vardır. Bu örnekte aşağıdaki DNS kayıtları oluşturup, kullanılmıştır.

NS = dns.bga.com.tr
A   = tunnel.bga.com.tr

tcpoverdns, multi platform çalışmaktadır. (Windows,Linux,*BSD) Bu örnekte DNS sunucu FreeBSD, istemci ise Windows 7 işletim sisteminde kurulmuştur.

Dosya:Dns3.png


Not: Tcp-Over-Dns server, gelen trafiği port 443 (SSH servisine) yönlendirecektir.

Tcp-Over-Dns Client Yapılandırması

İstemci bilgisayarda client-example.bat dosyası düzenlenerek DOMAIN değeri bu iş için oluşturulan alan adı ile değiştirilir.

Dosya:Dns4.png


client-example.bat dosyası çalıştırıldığında tünel için 127.0.0.1:8080 portu dinleme alınacaktır.

Dosya:Dns5.png


Tcp-Over-Dns Client, yerel bilgisayarda 8080 portunu dinleme açtı ve bu porta yapılan bağlantıları tunnel.bga.com.tr makinasının 443 (SSH) portuna iletecektir.

Test için, putty aracı ile 127.0.0.1:8080 portuna bağlantı isteği başlatıldığında bga.com.tr adresinin 443 portuna erişim kurulacaktır.

Dosya:Putty.png


Dosya:Putty2.png


SSH trafiği Firewall tarafından engellenmiş olsada, DNS paketleri ile SSH trafiği internete kaçırılmıştır. Bu yöntem ile birçok yerde bulunan Hotspot sistemleri de atlatılabilmek mümkündür.

Iodine ile Dns Tünelleme

Diğer bir tünelleme yazılımı olan iodine oldukça kullanışlı ve stabil bir araçtır. Sunucu istemci mantığı ile çalışmakta olup sunucu tarafında servisi çalıştırdıktan sonra istemciden bağlanması oldukça kolaydır.

Iodine kurulumu:

İlk olarak kaynak kod indirilip “make” diyerek sunucu tarafında kurulum yapılır. Daha sonra sunucu tarafında aşağıdaki gibi bir komut çalıştırılır.

iodined  -c -P P@ssw0rd 192.168.50.1 tunnel.example.com

Buradaki IP karşılığı olmayan bir IP adresidir. Başarılı bir şekilde bağlanıldığı zaman belirlenen o IP aralığından bir IP alınacaktır. -P ile parola belirlenir. Daha sonra istemci tarafında ise aşağıdaki gibi bir komut çalıştırılır ve bağlantı kurulur.

iodine tunnel.example.com

Bu komut çalıştırıldıktan sonra size parolayı soracaktır ve doğru girdikten sonra tünelleme gerçekleşecektir. Bağlantı başarılı ise ilk başta belirlenen IP aralığından dns0 arayüzüne otomatik olarak bir IP alınmış olacaktır.

Örnek bir komut çıktısı aşağıdaki gibidir.

root@pentest:/home/cihat# ifconfig
dns0  	Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
     	inet addr:192.168.50.1  P-t-P:192.168.99.1  Mask:255.255.255.224
     	UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1130  Metric:1
     	RX packets:535 errors:0 dropped:0 overruns:0 frame:0
     	TX packets:672 errors:0 dropped:0 overruns:0 carrier:0
     	collisions:0 txqueuelen:500
     	RX bytes:143210 (139.8 KiB)  TX bytes:370746 (362.0 KiB)

Bu işlemden sonra sorunsuz bir şekilde direk olarak internete çıkmak için aynı sunucuya SSH tünelleme yapılırsa proxy kullanmadan direkt internet erişimi sağlanabilecektir.