DNS'deki Güvenlik Sorunları ve Çözümler

Kaynaklar:
cloudflare.com/learning/dns/dns-security
cloudflare.com/learning/dns/dns-over-tls


DNS sorgusu nasıl çalışır? Olası atak vektörleri.

Birçok başka protokol gibi, DNS protokolü de geliştirilirken güvenlik pek ön planda tutulmamıştır. Bu sebeple ile DNS sorguları üzerinde bir çok atak vektörü bulunmaktadır. Bu atak vektörlerini engellemek amacıyla DNS Security Extensions (DNSSEC) isminde bir protokol yapılmıştır. Fakat, DNSSEC hala dünya genelinde kabul edilip yaygın olarak kullanılmadığı için bu atak vektörleri büyük ölçüde geçerlidir.

Ben de bu yazı çerçevesinde; DNS’deki güvenlik durumundan, atak vektörlerinden ve olası çözümlerden bahsedeceğim.


DNS’deki bu güvenlik durumunun oluşma sebebini daha iyi kavrayabilmek amacıyla, bir istemci tarafından dağıtık olarak kurulmuş bu DNS yapısının nasıl kullanıldığını bilmeliyiz.

Örneğin, istemci tarayıcısında bora.sh‘i açarken, arka planda sırasıyla bu adımlar uygulanır;

  • Tarayıcının önbelleğine bakılır. (İşletim sistemi tarayıcılara DNS kayıtlarının TTL süreleri belirtmez, bu sebeple genellikle tarayıcılar tarafından bu süre 2-3 dakika olarak ayarlanır.)
  • Tarayıcının önbelleğinde bulunmuyorsa, işletim sisteminin önbelleğine bakılır.
  • İşletim sisteminde de bulunmuyorsa, bulunan ağ üzerindeki router’ın önbelleğine bakılır.
  • Eğer burada da bulunmuyorsa, ağdan dışarı çıkılarak, işletim sisteminde ayarlanmış olan (/etc/resolv.conf), Recursive Resolver sunucusuna istek atılır. Bu sunucu işlemleri yapamadan önce, ilk olarak kendisindeki önbelleği kontrol eder.
  • Eğer Recursive Resolver sunucusunun önbelleğinde de yok ise; Recursive Resolver, özyinelemeli olarak bir DNS sorgusu gerçekleştirir. Bu tam sorgu adımının şablonuna ve detaylarına buradan ulaşabilirsiniz: bora.sh/dns-nedir-nasil-calisir

Bu adımlar sırasında, local ağda ya da dış ağda DNS’e müdahale edilebilir. Çünkü DNS protokolü varsayılan olarak şifrelenmeden (plain-text) kullanılır.
Başka protokollerden de hatırlayıp tahmin edebileceğiniz gibi (örneğin HTTP protokolü) bu durum DNS üzerinde bir atak alanı açmış olur.

Örneğin bulunduğunuz ağdaki bir saldırgan, bu plain-text olarak iletilen DNS sorgu ve cevaplarını değiştirilebilir ve kendi isteğine uygun şekilde farklı sonuçlar görülmesini sağlayabilir.

Kendi bulunduğumuz ağ dışında da, bu DNS sorgularına müdahil olunabilir. Örneğin yaşadığınız ülkede, o ülkenin ISP’lerinin DNS sunucularından farklı bir Recursive Resolver sunucusu kullansanız dahi, plain-text iletilen DNS sorgularınıza müdahil edilebileceği için, sizi aslında kullandığınız Recursive Resolver yerine, farklı sunuculara yönlendirebilirler, böylece istedikleri gibi DNS kaydı sonuçları almanızı sağlarlar. Bu şekilde ilgili siteleres erişimizi kısıtlanabilir ya da farklı yerlere yönlendirilebilirsiniz (DNS hijacking).


Genel olarak atak vektörlerini aşağıdaki gibi sırayalabiliriz:

  • DNS spoofing/cache poisoning
    Bu atak yönteminde, saldırgan istemci ile Recursive Resolver’ın arasına girerek, DNS önbelleğinden dönen bir sonuç gibi sahte DNS kaydı geri döner. Bu sayede gerçek adres yerine farklı bir adrese yönlendirilmiş olunur. Bu yöntem saldırgan istemci ile DNS sunucusu arasına girerek, DNS sunucus gibi davranır. Bunun gerçekleşmesine sebep olan, UDP kullanılması ve geri dönen DNS için bir kontrol yapısı olmamasındandır.
    (Fotoğraf cloudflare’den alınmıştır.)

    (Fotoğraf cloudflare’den alınmıştır.)

  • DNS tunneling
    Bu saldırı yönteminde saldırga, başka protokolleri kullanarak DNS sorgu ve cevaplarına müdahil olmaya çalışır.
  • DNS hijacking
    Bu atak yönteminde, saldırgan istemci tarafından yapılan DNS sorgusu gerçekte olduğundan farklı bir DNS sunucusuna yönlendirilir. Spoofing’den farklı olarak, gerçek DNS sunucusuna bir istek yollanmaz, DNS sorgusu direkt olarak saldırgan tarafından istenilen DNS sunucusuna yönlendirilir.
    (Fotoğraf cloudflare’den alınmıştır.)

    (Fotoğraf cloudflare’den alınmıştır.)

  • … (daha fazlası için buraya göz atılabilir: Cloudflare - DNS Security)

Peki, Çözüm?

DNS’in yapısından kaynaklı olarak ortaya çıkan bu tarz atak vektörlerini engellemek amacıyla DNS Security Extensions (DNSSEC) isminde bir protokol tasarlanmıştır. Bu protokol atak vektörlerine büyük ölçüde çözüm olsa da, halen dünyada yaygın olarak kullanılmamaktadır.


DNSSEC

DNSSEC, DNS’in yapısında bulunmayan kontrol yapısı ve verinin güvenliğini sağlayarak atak vektörünü azaltmış olur. DNS’in yapısında tüm katmalar için bir digital imza uygulayarak bunu sağlar.

DNSSEC daha çok DNS spoofing/cache poisoning saldırılarına çözüm olmak amacıyla tasarlanmıştır. Root sunucularının ve Authoritative Nameserver’larının kimliği kontrol eder. Herhangi bir şifreleme sağlamaz. İstemci ile sunucuların arasında iletişim hale şifresiz olarak yapılmaktadır. Bunlara çözüm olması amacıyla DNS over TLS/HTTPS protokolleri tasarlanmıştır.


DNS over TLS/HTTPS (DoT ve DoH)

(Fotoğraf cloudflare’den alınmıştır.)

(Fotoğraf cloudflare’den alınmıştır.)

İstemci ile sunucular arasında DNS tarafiğinin şifrelenmesi amacıla tasarlanan bu protokeller iletişimi şifrelediği için dışarıdan DNS verilerinin incelenmesini ya da değiştirilmesini engellemeyi sağlar.

İki protokol de şifreleme yöntemi olarak TLS kullanır fakat kullanılan iletişim yöntemi farklıdır.

DoH, DoT’dan farklı olarak, iletişim yöntemi olarak UDP yerine, HTTP v1 ya da HTTP v2 kullanılır. Bu sebep ile DNS over HTTPS olarak isimlendirilir.
DoT 853 portunu kullanırken, DoH direkt olarak HTTPS portu olan 443’ü kullanır.
İki yöntemin de avantajları vardır. DoT ağ yönteminde kolaylık sağlar. DoH’un engellenmesi için tüm HTTPS trafiğinin engellenmesi gerekir, DoH büyük boyutlardaki HTTPS trafiği içerisnde daha çok gizlilik sağlar .


DNSCrypt Proxy

Son kullanıcılar DNS over TLS/HTTPS‘i tüm sistemlerinde kullanabilmek amacıyla dnscrypt-proxy‘i tercih edebilirler.