Perşembe, Ağustos 16, 2007

Anti DNS Sabitleme ve Yeniden Bağlama

Anti DNS Sabitleme (Anti DNS pinning) saldırıları hakkında okuyalı uzun zaman olmuştu. Geçen gün beğendiğim güvenlik araştırmacılarından birinin sayfasında DNS yeniden bağlama (DNS rebinding) saldırıları hakkında bir yorum okudum.
Tanımı anti DNS sabitleme saldırısına benziyor, ancak çözüm önerisi ADSL modemlerin DNS ayarlarını değiştirmeye yönelik bir saldırıyı tarifliyordu.

Basit bir arama, bana üç şey gösterdi:
  1. DNS yeniden bağlama aslında anti DNS sabitleme nin daha yeni, daha kullanışlı bir ismi.
  2. Stanford Üniversitesindeki araştırmacılar DNS yeniden bağlama saldırısı konusunda güzel bir çalışma yapmışlar
  3. Bu tip saldırılar henüz fazla duyulmamış veya pek çok kişi üzerinde fazla düşünmemiş. Bazen biz güvenlikçiler yeni bir saldırı veya teknik duyunca, detaylarına fazla dikkat etmeden bir hüküm verebiliyoruz.
Bu nedenle bu yeni saldırı tipinden biraz bahsetmeye karar verdim. DNS sabitleme saldırısı, Web tarayıcılarının aynı kaynak (same origin) politikalarını atlatarak bir kullanıcının web tarayıcısı ile başka sayfaların içeriğine erişmeyi sağlayan bir saldırı.

Normal bir web kullanım senaryosunu düşünelim. Bir web sayfası içerisinde başka sayfalardaki içeriğe link verebilirsiniz. Bu linki bir imaj veya çerçeve (frame, iframe) olarak verdiğinizde, sayfanıza bağlanan web tarayıcıları otomatik olarak diğer sitelere de bağlanarak tüm içeriği kullanıcının önüne sunarlar.

Ancak, sizin sitenize koyacağınız aktif içerik (javascript vb.) aynı kaynak politikası nedeniyle diğer sitelerden getirilen bu içeriğe ulaşamaz. Bunun nedeni, sizin sitenize bağlanmak için kullanılan alan adı ile diğer içeriğin bağlı bulunduğu sitenin farklı alan adlarına sahip olmasıdır.

Ancak, başka sitelerin içeriğine erişmek, özellikle bu siteler özel ağ (intranet, VPN) veya IP kısıtlamalı servisler olduğunda, bır saldırgan için çok çekici olabilir. Bu kapsamda uzun süredir bilinen CSRF (cross site request forgery, çapraz site istek oluşturma) saldırıları körlemesine istekler gönderebilmekte, hatta ADSL modemleri yeniden programlayabilmekte, ancak hassas içeriği saldırgana eriştiremediği için yüksek riskli kabul edilmemekteydi.

Bir saldırı senaryosu düşünelim. Ben www.saldırgan.com sitesinin sahibi olarak bu alan adına istediğim IP adresini verebilirim. yüklenen ilk sayfada bir betik çalıştırıp DNS sunucusunda IP adresini, örneğin 10.0.0.73 olarak değiştirdikten sonra kurbanımın tarayıcısında çalışan betik iç web sunucusuna ait olan bu IP adresinden istediği bilgileri çekip (XMLHttpRequest sağolsun) benim internet siteme post edebilir, hatta HTTPS ile bilgilerin güvenliğini sağlamak bile mümkün olacaktır :)

Web tarayıcıları bu senaryoya karşı DNS pinning (DNS sabitleme) yöntemlerini kullanırlar, Örneğin Internet Explorer öğrendiği bir IP adresini 30 dakika unutmaz, DNS kaydı değişse bile. Ancak bu mekanizmaya karşı geliştirilen saldırılar (anti DNS pinning) birden fazla adres kaydı, ikinci bağlantıyı reddetme gibi tekniklerle bu mekanizmaları bertataf etmeyi başarmaktadır. Bu saldırıların bir özetini, ve Java applet ve Flash kullanılan yeni teknikleri Stanford grubunun makalesinde bulabilirsiniz.

En etkin önlem, DNS önbellek sunucunuzun (cache) dışarıdan gelen cevaplarda iç IP adreslerini engellemesini sağlamak olarak gözüküyor.

Ayrıca, intranet ve kritik servislerde kimlik doğrulaması ve HTTPS kullanmak, Web sunucularına IP adresi ile bağlanıldığında (varsayılan site) hassas içeriğe ulaşılmasını engellemek gibi yöntemler bu saldırıların etkisini azaltacaktır.

Hiç yorum yok: