DNS Pinning, Nedir?, Nasıl çalışır?

23-1-2007

Makale Hakkında

DNS Pinning makalesi temeli 1996 yılına dayanan eski bir açığın son günlerde hortlayarak kullanıcı taraflı (clientside) güvenlikte yeni bir tehdit oluşturması.

Başarılı bir şekilde uygulanabildiği takdirde saldırgan kurbanın iç network’ ündeki bir web sitesine erişebilir, basic auth bilgilerini, cookilerini çalabilir, sistemin içeriğini görebilir ve daha farklı ataklara ön ayak olabilir.

Makale yeni bir şey ortaya koymamakla beraber benim konu hakkında küçük araştırmamın küçük bir makale halinde Türkçe olarak yayınlanmasıdır sadece. Bir çok detay bir dizi kaynaktan alınmıştır, tüm kullanılan kaynaklar makalede yeri geçen yerde link olarak belirtilmiştir.

Özellikle web uygulaması güvenliği ile yakından ilgilenenlere şiddetle tavsiye edilir.

Makale bir şekilde taslak sayılır. Konu hakkında atladığım, yanlış olan bir yer varsa lütfen bildiriniz.

Princeton Atak

Bütün DNS Pinning olayını anlamak için önce işin temeline inmemiz gerekiyor. 1996 Princeton üniversitesinde kullanıcı taraflı Java applet’ i ile iç network’ teki bir sisteme nasıl erişilebileceği üzerine bir yayın yapıldı.

Saldırı şu adımlarla gerçekleşir,

Princeton atak görüldüğü gibi Java’ yı kullanarak iç ağdaki bir sisteme erişiyor. Buradaki kilit nokta DNS Eşleştirme (DNS Mapping) kısmı.

DNS Pinning Nedir?

DNS Pinning özetle Princeton ataktaki kurbanın tarayıcısının bir belli bir adresi doğru olmayan bir IP adresiyle eşleştirmesine deniliyor. Princeton atakta yok.saldirgan.com 10.10.10.3 ile eşleşiyordu ve bu sayede iç sisteme erişebiliyordu.

Aynı mantıkla şimdi DNS Pinning Javascript cross-domain limitlerini (same origin policy) geçmek için kullanımını anlayacağız.

Same Origin Policy ya da cross-domain limiti basit şekilde tarayıcının bir domain’ in başka bir domainin içeriğini okuyamaması için yaptığı kontroller. Mesela XMLHTTP ile bulunduğunuz domaindeki adreslere web isteği yapabilirsiniz ancak başka bir adrese istek yapınca tarayıcı bunu reddeder ve güvenlik hatası verir.

Eğer bu limiti geçebilirseniz başka bir domainin içeriğini okuyabilir, bazı durumlarda da cookilerini çalabilir ve basic auth gibi bilgilere ulaşabilirsiniz.

Referans : DNS: Spoofing and Pinning

Gerçek dünyada DNS Pinning

Princeton atakta DNS Pinning için Java appleti kullanılıyordu. Burada bahsedeceğimiz ise Javascript tabanlı olarak DNS Pinning ile içteki bir IP adresine erişim ve tabii ki aynı zamanda tarayıcının same origin policy’ sini geçme.

Saldırı şu şekilde gerçekleşebilir,

  1. Kurban saldırganın sitesine girer
  2. Saldırgan DNS’ kayıtlarının değiştirir ve lokal adrese yönlendirir
  3. Saldırgan Javascript ile kendi sunucusunda kapalı bir porta istek yaptırır (isteği yapan kurbanın tarayıcısı)
  4. Tarayıcı bu noktada server’ a erişemediğini düşünür ve server için DNS belleğini temizler (normalde tarayıcı bunu siz tarayıcı kapatana kadar bellekte tutar)
  5. Saldırgan JS aracılığı ile bu sefer tekrar kendisine XMLHTTP gibi bir yolla istek yapar
  6. Tarayıcının belleği temizlendiğinden yeni DNS isteği yapar saldırganını DNS sunucu ise bunu sahte iç ağdaki saldırılacak IP adresi ile cevaplar
  7. Saldırganın kendi domaini artık lokal IP adresi ile eşleştiğinden yaptığı istek iç ağdaki istediği IP adresine yönlenir (bu tabii ki localhost ta olabilir).
  8. Browser bu domainin o IP adresine sahip olduğunu düşündüğünden isteğe cevap verir
  9. Ve saldırgan artık istediği gibi bu sistemdeki bilgileri okuyabilir

Gördüğünüz gibi saldırgan iç ağdaki bir sisteme web tarayıcısı üzerinden girdi.

Referans : (somewhat) breaking the same-origin policy by undermining dns-pinning

 

Host Header Sorununu Aşma

DNS Pinning ile tarayıcı yönlendirdiğiniz IP adresindeki web sunucu isteklerde host header bekliyorsa ve ona göre cevap veriyorsa bu sorun olabilir çünkü saldırgan olarak yapacağınız istekler yönettiğiniz sunucu domainini kullanacak. Mesela yok.saldirgan.com dolayısıyla sunucu da buna cevap vermeyecek.

Bu tip bir durumda XMLHTTP veya Flash ek bir araçla ve birkaç numarayla host header’ larını zorlayabilir ve normalde gönderilmesi gereken host header yerine sizin kendi host headerlarınızı gönderebilirsiniz.

Host header cannot be trusted as an anti anti DNS-pinning measure

Bundan Sonra

Özellikle Flash 9 la gelen tam soket erişimi ile iç ağdaki sistemleri Javascript portscan ile tarayıp daha sonra DNS Pinning ile bağlanıp DCOM gibi yamanmamış açıkları exploit etmek! Güzel olurdu değil mi? Gayet olası ve yapılabilir ancak pek pratik değil.

 

Gerçek bir Demo

Jumperz.net DNS Pinning için harika bir demo hazırlamış. Demoda DNS Pinning’ i iş üzerinde izleyebilirsiniz.

Recent Blog Posts

See all of the blog posts