HTML5 Güvenliği: HTML5 Cross Domain Messaging Yeniliği

Cross domain messaging yani alanlar arası iletişim bağlamında Web sitelerinin güvenlikli bir şekilde birlikte çalışabilirliği Web 2.0 gelişmeleri ile ihtiyaç duyulmaya başlanan en temel gereksinimlerinden biridir. Bu süreçte tarayıcılar, gizlilik ve güvenlik gereksinimlerinden dolayı farklı alanlardaki kaynakların birbirleriyle kuralsız bir şekilde haberleşmelerini engellemiştir (OWASP ve W3C).

 

HTML4 standardında bahsedilmeyen bu ihtiyaç HTML5 desteklenene kadar yan yollarla çözülmeye çalışılmış; bu da ya genel-geçer çözümler üretmeyi zorlaştırmış ya da çok ciddi güvenlik zafiyetlerine sebep olmuştur. HTML5 standardında tanımlanana kadar kullanılan çözümler aşağıdaki gibi özetlenebilir:

  • Flash Alanlar-Arası İletişim Politikası: Adobe Flash, bu ihtiyacı güvenli bir şekilde karşılayabilmek için bir kaynaklar-arası iletişim politikası dosyasında güvenilir kaynakları tanımlamış ve kullanıcıya gönderilen bu dosya sayesinde tarayıcıların bağlantı yapabilecekleri alanları sınırlamıştır. Bu protokol DNS-yeniden sorgulama saldırılarına karşı zafiyet göstermektedir.
  • JavaScript Alanlar-Arası İletişim Protokolü: XSS saldırılarına sebebiyet verebileceğinden dolayı alanlar arası gönderilen AJAX istekleri tarayıcılar tarafından uzunca bir süre engellenmiştir. W3C tarafında bu iletişimi sağlayabilecek protokol tanımlandıktan sonra web uygulamaları belirlenen protokoller doğrultusunda tarayıcılar aracılığıyla birbirleriyle iletişim kurmaya başlamıştır.

Barth ve arkadaşları bu yukarıda belirtilen metotların gerçeklemeleri üzerinde yaptıkları çalışmalarda çeşitli zafiyetler tespit etmiş ve sağlayabileceği güvenlik seviyesinden dolayı HTML5 mesajlaşma modeli olan postMessage arayüzünün kullanılmasını tavsiye etmiştir. postMessage arayüzü, alanlar-arası iletişim ihtiyacını karşılamak üzere HTML5 standardına eklenmiş bir arayüzdür. Tarayıcılar tarafından gerçeklenmesi gereken bu ara yüz sayesinde, istemci tarafında çalışan JavaScript kodu, sunucuya gitmeden başka alanlarla iletişim kurabileceklerdir. Basit bir şekilde tanımlanan bu ara yüzde doğrulanması gereken gereksinimler;

  • Gizlilik: Ara yüzde mesaj gönderen taraf mesajın alıcısı olan (targetOrigin) alanları belirtebilmelidir.
  • Kimlik Doğrulama: Ara yüz ile gelen mesajda mesajın göndericisi olan alan bildirilmelidir.

HTML5 standardını desteklediğini iddia eden tarayıcı tarafından garanti edilmelidir. Bu şekilde alanlar-arası güven probleminde tarayıcı garantör olarak devreye girerek güven sorununu çözecektir.

 

postMessage Arayüzü

  • Mesaj Gönderme: window.postMessage arayüzü standartta şöyle tanımlanmıştır:

    postMessage(message, targetOrigin);

Bu fonksiyonun çağrılması sonucunda tarayıcı targetOrigin ile belirtilmiş alanlara bu mesajı ulaştırmakla yükümlüdür. targetOrigin parametresi “*” karakteri kabul etmekte ve bu karakter verildiğinde tarayıcı mesajı bütün pencerelere iletmektedir.

  • Mesaj Alma: postMessage arayüzünden gelecek mesajları almak için pencerenin mesaj olay dinleyicisi tanımlanmalıdır.

    window.addEventListener(‘message’,receive,false)

receive fonksiyonu içerisinde gelen mesajlar işlenebilir ve gerekli aksiyonlar gerçekleştirilebilir.

 

HTML5 Alanlar-arası İletişim Zafiyetleri

HTML5 alanlar-arası haberleşme problemini tarayıcıyı garantör olarak basit bir şekilde çözmeyi başarmış fakat çözerken web uygulaması geliştiricilere “giden mesajın gizliliğini sağlamak” ve “gelen mesajda göndericinin kimlik doğrulamasını yapmak” sorumluluklarını yüklemiştir. Bu doğrulamaların önceki uygulamalarda olduğu gibi merkezi bir şekilde yönetilememesi, her mesajda tekrar edilmesi gerekliliği de güvenlik zafiyetine sebebiyet verebilecek bir eksiklik olarak görünmektedir. Protokolün targetOrigin tanımlanırken “*” joker karakterine izin vermesi yine geliştiriciler tarafından yanlış uygulanacak ve veri gizliliğine yönelik sızmalara sebebiyet verecektir. Bu iletişimin düzgün bir şekilde gerçeklenmiş olmaması durumunda iletişim üzerinde aşağıdaki saldırı senaryolarının uygulanması mümkün olacaktır:

  • Mesaj Bütünlüğüne Yönelik Saldırılar: Gönderici kimliğinin kontrol edilmemesi durumunda postMessage arayüzü kullanılarak yapılacak sorgulara asıl gönderici yerine kötü niyetli bir saldırgan tarafından cevap verilebilir. Bu dönen cevabın alıcı tarafında işlenişine göre istemci makinede rastgele kod çalıştırılmasına kadar varabilecek bir saldırı senaryosunun uygulanması
    mümkündür.
  • Gizliliğin İhlaline Yönelik Saldırılar: postMessage fonksiyonu “*” joker karakteri ile birlikte çağrıldığında tarayıcı gönderilen mesajı yetkili alıcıya değil de bütün dinleyicilere ulaştıracağından, mesajın içeriği kötü niyetli saldırganlar tarafından açık edilebilecektir.

 

HTML5 ile Alanlar-arası İletişim Güvenliği

postMessage arayüzü kullanılırken mesajın alıcısı düzgünce tanımlanmalı ve pencereye iletilen mesajlar işlenmeden önce gönderici mutlaka kontrol edilmelidir. Bu mesajlarda girdi doğrulaması mutlaka yapılmalı, “*” joker kartı kesinlikle kullanılmamalıdır.

Protokolün bir başka zafiyeti olan bu kontrollerin her mesajlaşmada uygulanması gerekliliği konusunda da gerekli önlemler alınmalı, postMessage fonksiyon çağrılarının güvenliği mutlaka kod gözden geçirme aktivitesine eklenmelidir.

Hanna ve arkadaşları bu zafiyet için “mesuliyet ekonomisi” önerisinde bulunmuşlar, fakat bu öneri henüz HTML5 standardında yer bulmamıştır. “Mesuliyet ekonomisi” bu postMessage doğrulamalarının geliştirici bırakılmasındansa tarayıcı tarafından yapılmasını önermektedir. Bu şekilde unutkanlık, bilgisizlik, dalgınlık sebebiyle geliştiricilerin zafiyet içeren kod geliştirmelerine engel olmayı hedeflemektedir. Şu anki haliyle bu mümkün görünmemektedir, fakat postMessage ara yüzünü kullanılarak hazırlanabilecek kütüphanelerle bu ekonomi sağlanabilir. Her durumda postMessage içeren çıktılar ikinci bir gözün gözden geçirme faaliyetine tabi tutulmalıdır.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir