DNS Tünelleme Tespiti ve Önlemleri

Domain Name System (DNS), bir uygulama katmanı protokolüdür. Temel amacı domain isimlerini ip’ye dönüştürmektir. Bu sebeple DNS protokolü internetin ta kendisidir diyebiliriz. Malesef bu güzide protokolun asıl amacından saptırılarak farklı işlevler içinde kullanılmakta mümkün. Bunun başlıca sebebi, DNS güvenliğine verilmeyen önemdir.

Bu yazımızda DNS ‘in neden önemli bir protokol olduğunu ve ona neden önem vermeniz gerektiğini en basit şekilde anlatmamıza olanak sağlayan DNS tünellemeden, DNS tünellemenin önüne geçmek için ne gibi önlemler almamız gerektiğinden bahsedeceğiz.

DNS Tünelleme’nin temel mantığı istemcinizin paketleri sunucuya DNS kayıtları üzerinden göndermesidir. Öyle bir uygulama olur ki bu tünelden sadece http ya da sadece ssh paketlerini gönderebilirsiniz. Bu tamamiyle istemciden giden DNS paketinin karşıdaki sunucu da nasıl yorumladığına bağlıdır. Tünelleme aslında DNS’e özel bir şey değildir. Ancak genelde DNS protokolü özgür bir protokoldür. Kimse gelip analiz edip sorgulamadığı için DNS tünellemeyle günlük hayattaki bir çok şeyi bypass edebilirsiniz.

DNS tünelleme için spesifik bir çok araç bulabilirsiniz. DNS tünelleme araçları genelde sunucuda sanal bir tünel portu açarlar. Taleplerinizi bu interface veya port üzerinden yaparsınız. Yaptığınız istekler artık DNS’deki bir kayda encode edilerek gönderilir. Bu tünelleme aracının sunucu tarafındaki ucu, size gelen bu paketi açar ve DNS kayıdını decode ederek, yapması gerekeni yapar.

# DNS tünelleme neden ihtiyaç duyulur?

Biri neden DNS tünelleme ihtiyaç duyarki. Aslında bakarsanız karşılık olarak VPN’i neden kullanıyorsunuz diye sorabilirim. Aslında en masumane bakış açısıyla bakarsak, erişemediğiniz bir yere erişmek için tünelleme yapıyor olabilirsiniz. Hiç bir kötü amacınız olmayabilir. Olayı biraz daha sıcak hale getirelim. Bir otele veya kafeye gittiniz, burada DNS için ek bir yapılandırma yok. İnternet için şifre gerekli. Dışarıya da DNS sorguları açık. Bedava internetin keyfini çıkarabilirsiniz. Olayı daha da dramize edelim. Kötü birisiniz. Zararlı yazılım yazan biri olduğunuzu düşünün. Takibi zorlaştırmak istiyorsunuz. DNS gibi ip çeviren yapınız var, sürekli farklı domainler üreten bir de yapınız var. Bunları bir araya getirdiniz. Trojanları saldınız. Kurbanlarınız sizden iş bekliyor. Sizden komutlar gidiyor ve onlar da görevlerini yerine getirmek istiyor. Tabi ki bu belirtiklerim basit senaryolar. Bu senaryoları çoğaltabiliriz.

# Proof of Concept Çalışma

Olayı az da olsa görselle süsleme isteğimden, iodine gibi çok bilinen bir dns tunnelling aracı üzerinden örneklemeye karar verdim. Iodine DNS üzerinden ip paketi göndermeye yarar.

DNS tünelinin iki ucuna (ikisi de Linux, ancak Windows içinde mevcut) da iodine’i yükleriz.

apt-get install iodine

DNS sunucumda ek olarak A ve NS kayıtlarını girdim. Aşağıda kayıtların anlamı şu: tunel.gokhankesici.com için dns sorgusu yapıldığında tunelns.gokhankesici.com ‘u name server olarak kullan. Git tunelns.gokhankesici.com için tanımlanmış 192.155.91.32 IP ‘sine sor.

tunelns.gokhankesici.com (A) 192.155.91.32
tunnel (NS) tunelns.gokhankesici.com

Not : Bu kayıtlar hemen aktif olmayabilir. Biraz beklemeniz gerekebilir.

Artık sunucumuzun 53 portuna gelecek tunel.gokhankesici.com isteklerini iodine ile dinleyebiliriz. Bunun için aşağıdaki komutu girmemiz yeterli. Parola burada dns tünelleme kimlik doğrulama ile yapılabilsin diye.

iodined -f 10.0.0.1 tunnel.gokhankesici.com -P parolam321

Böylece bir tünel oluşturup, bu tünelin sunucu tarafındaki ip’si 10.10.1.1 olarak belirledik.

Artık herhangi bir yerden bu sunucuma parolayı biliyorsanız tünel yapabileceksiniz anlamına geliyor. İstemci tarafında bu sefer benzer mantıkla tünele bağlanmaya çalışırız.

iodine -f 192.155.91.32 tunnel.gokhankesici.com -P parolam321

Not: Son olarak bu komutu girdiniz ancak bağlanamadınız. Böyle bir durum yaşarsanız kesinlikle Wireshark ile hem sunucu hem de istemci tarafında paketleri yakalayıp 53 portuna input output trafiği inceleyiniz.

mytunnel - DNS Tünelleme Tespiti ve Önlemleri

Örneğin 10.0.0.1 ‘i pinglediğimizde ilk olarak gidip dns sorgusu içerisinde encode edip sunucumuza soracaktır. Sunucu decode edecek ve bakacak bu ip kendisinde var cevabı kendi dönecek. Bu aşamadan sonra bu sunucuya isterseniz ssh ile bağlanın, isterseniz sock proxy olarak kullanın. Tamamiyle amacınıza yönelik kullanabilirsiniz.

# Tespit & Analiz

Tespit aşaması her ne kadar kolaymış gibi gözükse de bir çok senaryo olması sebebiyle aslında otomize araçlarla yapılmazsa işiniz biraz zor. Bu sebeple fikir vermesi açısından ya da manuel kontrollerde dikkat edilmesi gereken gözlemlerdir.

  • İlk yapılması gerekenlerden biri hangi kaynak adresinin ne kadar DNS isteği yaptığına bakmak. SIEM gibi bir çok kaynağı yönettiğiniz bir sisteminiz varsa eğer, anormallik analizi yapmanız çok daha kolay. Belirli bir kaynak için belirli değerde yükselmeleri haberdar etmesini isteyebilirsiniz.
  • Her ne kadar son kullanıcı güvenliği denilse de, sunucular genellikle istemcilerden daha değerli olabiliyor. Bu sebeple bir üst madde de belirttiğim anormalik analizi yapın.
  • Aşağıdaki önlem  kısmında belirttiğim ilk maddedeki işlemi yaptıktan sonra kesinlikle hangi hedef ip ‘lere dns isteklerinin yoğunlaştığını görün. Tünelleminin ötesinde muhtemelen bir botnet tespit edebilirsiniz.
  • DNS’de cache mekanizması diye mekanizma var. Gidip tekrar tekrar dns sorgusu yapmak biraz anormal bir durum olsa gerek. En çok hangi domain ve subdomain’ler için dns tünellemenin yapıldığını öğrenebilirseniz, o kısma yoğunlaşıp onu inceleyebilirsiniz.Burada belirli hostnameler için belirli karakter setlerinden oluşmuş anlamsız bir çok isim görürseniz yüksek ihtimal bir dns tünelini buldunuz demektir. Bu tarz şeylere Non exist (NX) domain diyorlar. Bunları nasıl yapıyor derseniz eğer Domain Generation Algorithm (DGA) aslında kendinde olmayan sub domaini oluşturarak sağlıyor.
  • DNS sorguları genellikle belirli bir uzunlukta olur ve belirli bir büyükte de sizlere cevap gelir. DNS paketlerinde yapılan dns sorgularının ne kadar uzunlukta yapıldığına bakılmalı. Bu da tespit için iyi bir materyal. Ve daha önemlisi gelen paketlerin büyüklüğü. İstek yaptığınızda ne kadar büyüklükte ve ne sıklıkta dosya geldiğine bakılmalı.
  • Genelde domain isimleri sayısal olmayan karakterler olarak alınır. Ancak tünel yazılımları encode yaptığından rakamsal ifade yoğunluğu çok olur. Bu da tünel keşfetmede faydalı olacaktır.
  • Sunucular haricinde son kullanıcının çok ta kullanmadığı TXT sorguları incelenebilir.
  • Bir çok kişi bir şeyleri sıfırdan yapmak yerine hazır tünelleme yazılımları kullanır. Bu tünelleme araçlarının en popüllerinin imzalarını internetten bulabilir, IDS/IPS gibi sistemlerle keşfedip engelleyebilirsiniz.
  • Kullanıcılarınız dns ‘lerini değişebiliyorsa eğer, coğrafik dns sorgusu yapmak yine onları da çeşitli alanlar için group by yaparak bir şeyler elde edebilirsiniz.

# Önlem

  • Özellikle kurumsal bir firma iseniz kesinlikle kullanıcılarınızın sizlerin dns sunucularınız dışındaki dns isteklerini network bazında engelleyin. Daha sonra yukarıdaki tespit ve analizleri de dikkate alarak network bazında güvenlik önlemleri alın.
  • İlk maddeyi uygulama şansınız yok veya uyguladınız ancak yine de kaçan şeyler olabilir, bypass edilebilir bu yüzden defense in depth felsefesi çerçevesinde çeşitli güvenlik ürünlerini kullanınız. Örneğin en basitinden network bazlı IPS çözümleri ile ön tanımlı veya tespit & analiz bölümünde anlattıklarımızı dikkate alarak kendiniz imzalar tanımlayıp önlemler alınız. Ya da işi DNS olan çözümleri kullanınız.
  • DNS sunucular dışında yapılan içeriden dışarıya yapılan 53 portlarını gidenleri SIEM gibi çözümlerle raporlatıp gözden kaçanları gözlemleyip, yukarıda bahsettğimiz önlemleri bu kişilerde uygulayın. SIEM tarafında hedef vs. bazlı gruplamalar yaparak içerideki botnet üyesi şüpheli bilgisayarları tespit ettikten sonra bunlara karşı önlem alabilirsiniz.
  • Son kullanıcıların sanal interface oluşturmalarına izin vermeyin, kurumsal bir firmaysanız program kurulumlarını kullanıcıya bırakmayın, policylerle kısıtlayın. Sanal makina kurulumlarını kontrolünüz dışında yapamayacak şekilde yapılandırın. Aksi durumunda son kullanıcı sanalda her türlü bypass metotunu deneyebilir.