DNS tünelleme, DNS protokolü üzerinden veri göndermek için kullanılan bir yöntemdir. DNS protokolü, veri transferi için tasarlanmamıştır. Bu nedenle, insanlar bunu göz ardı etme eğilimindedir ve bu da birçok saldırıda etkili bir araç haline gelmiştir. DNS tünelleme, internet erişimi engellenmiş veya kısıtlanmış bir kullanıcının, DNS trafiğinin izin verildiği bir ağdan internete ulaşmasını sağlayabilir. Ayrıca, bir saldırganın ağ güvenlik cihazlarını (Firewall, DLP cihazları...) atlayarak bir kuruluşun ağı üzerinde doğrudan ve izlenmeyen bir iletişim kanalı kurmasını da mümkün kılar. DNS tünelleme, SSH, HTTP, FTP gibi farklı protokolleri DNS ile tünelleme yoluyla gerçekleştirilebilir.
DNS tünelleme yapmak için, aşağıdaki ön gereksinimleri karşılamalısınız:
- 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.
- İ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.
- Kullandığınız işletim sistemine göre DNS tünelleme yazılımı. Bu yazılımların çoğu Java tabanlıdır, bu yüzden mutlaka Java kurulu olmalıdır. DNS tünelleme yazılımları arasında DNScat2, Iodine, TCP-over-DNS gibi popüler seçenekler vardır.
DNS tünelleme yapmak için, aşağıdaki adımları izleyebilirsiniz:
1. Adım: Bir alan adına ve bu alan adından sorumlu DNS sunucuya ihtiyacınız vardır. Bu örnekte, tunnel.example.com alan adını ve dns.example.com DNS sunucusunu kullanacağız. Bu alan adı ve DNS sunucusu sizin kontrolünüzde olmalıdır. DNS sunucusu üzerinde, tunnel.example.com alan adı için A kaydı ve example.com alan adı için NS kaydı oluşturmalısınız. Örneğin:
tunnel.example.com. IN A 192.168.0.113
example.com. IN NS dns.example.com.
Bu kayıtlar, DNS isteklerinin tunnel.example.com alan adından sorumlu DNS sunucusuna yönlendirilmesini sağlar.
2. Adım: DNS tünelleme yazılımınızı DNS sunucunuzda çalıştırmalısınız. Bu örnekte, TCP-over-DNS yazılımını kullanacağız. TCP-over-DNS, multi platform çalışmaktadır (Windows, Linux, *BSD). Bu örnekte, DNS sunucu FreeBSD, istemci ise Windows 10 işletim sisteminde kurulmuştur. TCP-over-DNS yazılımını indirdikten sonra, DNS sunucunuzda aşağıdaki komutu çalıştırarak TCP-over-DNS sunucusunu başlatabilirsiniz:
java -jar tcpoverdns.jar server tunnel.example.com
Bu komut, TCP-over-DNS sunucusunu tunnel.example.com alan adı için çalıştırır. TCP-over-DNS sunucusu, gelen trafiği port 443 (SSH servisine) yönlendirecektir.
3. Adım: DNS tünelleme yazılımınızı istemci bilgisayarınızda çalıştırmalısınız. TCP-over-DNS yazılımını indirdikten sonra, istemci bilgisayarınızda client-example.bat dosyasını düzenleyerek DOMAIN değerini bu iş için oluşturduğunuz alan adı ile değiştirmelisiniz. Örneğin:
set DOMAIN=tunnel.example.com
client-example.bat dosyasını çalıştırdığınızda, tünel için 127.0.0.1:8080 portu dinlemeye alınacaktır. TCP-over-DNS istemcisi, yerel bilgisayarınızda 8080 portunu dinlemeye açtı ve bu porta yapılan bağlantıları tunnel.example.com makinasının 443 (SSH) portuna iletecektir.
4. Adım: Test için, Putty aracı ile 127.0.0.1:8080 portuna bağlantı isteği başlattığınızda, tunnel.example.com adresinin 443 portuna erişim kurulacaktır. SSH trafiği firewall tarafından engellenmiş olsa da, DNS paketleri ile SSH trafiği internete kaçırılmış olacaktır.
Bu yöntem ile birçok yerde bulunan hotspot sistemlerini de atlatabilmek mümkündür. Ancak, DNS tünelleme yaparken dikkatli olmalısınız. Çünkü, DNS tünelleme, ağ güvenliğini ihlal eden ve yasal sorumluluk doğurabilecek bir eylemdir. Ayrıca, DNS tünelleme, veri transferi için çok yavaş ve verimsiz bir yöntemdir. Bu nedenle, DNS tünelleme yapmadan önce, alternatif yöntemleri değerlendirmenizi ve ağ kurallarına uymanızı tavsiye ederim.
DNS tünelleme yapmak için, aşağıdaki ön gereksinimleri karşılamalısınız:
- 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.
- İ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.
- Kullandığınız işletim sistemine göre DNS tünelleme yazılımı. Bu yazılımların çoğu Java tabanlıdır, bu yüzden mutlaka Java kurulu olmalıdır. DNS tünelleme yazılımları arasında DNScat2, Iodine, TCP-over-DNS gibi popüler seçenekler vardır.
DNS tünelleme yapmak için, aşağıdaki adımları izleyebilirsiniz:
1. Adım: Bir alan adına ve bu alan adından sorumlu DNS sunucuya ihtiyacınız vardır. Bu örnekte, tunnel.example.com alan adını ve dns.example.com DNS sunucusunu kullanacağız. Bu alan adı ve DNS sunucusu sizin kontrolünüzde olmalıdır. DNS sunucusu üzerinde, tunnel.example.com alan adı için A kaydı ve example.com alan adı için NS kaydı oluşturmalısınız. Örneğin:
tunnel.example.com. IN A 192.168.0.113
example.com. IN NS dns.example.com.
Bu kayıtlar, DNS isteklerinin tunnel.example.com alan adından sorumlu DNS sunucusuna yönlendirilmesini sağlar.
2. Adım: DNS tünelleme yazılımınızı DNS sunucunuzda çalıştırmalısınız. Bu örnekte, TCP-over-DNS yazılımını kullanacağız. TCP-over-DNS, multi platform çalışmaktadır (Windows, Linux, *BSD). Bu örnekte, DNS sunucu FreeBSD, istemci ise Windows 10 işletim sisteminde kurulmuştur. TCP-over-DNS yazılımını indirdikten sonra, DNS sunucunuzda aşağıdaki komutu çalıştırarak TCP-over-DNS sunucusunu başlatabilirsiniz:
java -jar tcpoverdns.jar server tunnel.example.com
Bu komut, TCP-over-DNS sunucusunu tunnel.example.com alan adı için çalıştırır. TCP-over-DNS sunucusu, gelen trafiği port 443 (SSH servisine) yönlendirecektir.
3. Adım: DNS tünelleme yazılımınızı istemci bilgisayarınızda çalıştırmalısınız. TCP-over-DNS yazılımını indirdikten sonra, istemci bilgisayarınızda client-example.bat dosyasını düzenleyerek DOMAIN değerini bu iş için oluşturduğunuz alan adı ile değiştirmelisiniz. Örneğin:
set DOMAIN=tunnel.example.com
client-example.bat dosyasını çalıştırdığınızda, tünel için 127.0.0.1:8080 portu dinlemeye alınacaktır. TCP-over-DNS istemcisi, yerel bilgisayarınızda 8080 portunu dinlemeye açtı ve bu porta yapılan bağlantıları tunnel.example.com makinasının 443 (SSH) portuna iletecektir.
4. Adım: Test için, Putty aracı ile 127.0.0.1:8080 portuna bağlantı isteği başlattığınızda, tunnel.example.com adresinin 443 portuna erişim kurulacaktır. SSH trafiği firewall tarafından engellenmiş olsa da, DNS paketleri ile SSH trafiği internete kaçırılmış olacaktır.
Bu yöntem ile birçok yerde bulunan hotspot sistemlerini de atlatabilmek mümkündür. Ancak, DNS tünelleme yaparken dikkatli olmalısınız. Çünkü, DNS tünelleme, ağ güvenliğini ihlal eden ve yasal sorumluluk doğurabilecek bir eylemdir. Ayrıca, DNS tünelleme, veri transferi için çok yavaş ve verimsiz bir yöntemdir. Bu nedenle, DNS tünelleme yapmadan önce, alternatif yöntemleri değerlendirmenizi ve ağ kurallarına uymanızı tavsiye ederim.

