[FONT=Verdana, Arial, Helvetica, sans-serif]Rosetta Flash Tekniği Nedir?
Rosetta Flash, Same Origin Policy güvenliğinin bypass edilmesi sonucu oluşan CSRF açığının sömürülmesi için ortaya atılmış bir tekniktir. Michele Spagnuolo tarafından açığa çıkartılmış olan bu teknik aslında kendi içinde özel bir aracı barındırır. Dolayısıyla Rosetta Flashın bir araç olduğunu söylemek yanlış olmaz.
Rosetta Flash ile Adobe Flash Player kaynaklı açığın sömürülmesi mümkündür. Bu teknikte kullanılan araç özetle, orijinali binary olan bir SWF dosyasını sadece alfanümerik karakterlerden müteşekkil bir hale getirerek JSONP endpoint (uç noktalar)lerini sömürür. Bu yolla, kurbanın zararlı domaine tıklayarak yaptığı istek sonucunda, saldırganın veri çalabilmesi mümkün olur.
Önemli web sitelerinde (Google, Youtube, Twitter, Linkedin ...) bulunmuş olup, tekniğin ortaya çıkarılmasının ardından çoğu önemli web sitesi açığı kapatmışlardır. Ayrıca Adobenin kendisi de birkaç tane yama yayımlamıştır.
Rosetta Flash ile Alakalı Bazı Terimler
Same Origin Policy: Farklı origin (protokol + domain + port)lerin birbirlerine erişmesini engelleyen web tarayıcı tabanlı bir kısıtlamadır. Bununla birlikte aynı originde bulunan kaynaklar kendi aralarında etkileşim kurabilirler.
JSONP: JSON veri formatının farklı originler arasında kullanılmasını sağlamak için web geliştiriciler tarafından JSON-Padding tekniği kullanılır. Bir SOP aşma yöntemidir.
Rosetta Flash İsminin Kaynağı: Rosetta Stone (Taşı) olarak bilinen bu yazıt, üç farklı dilde yazılmıştır. Taşın keşfinden önce Hiyeroglif yazısı çözülememişken, taşın bulunması sonrasında araştırmacılar Yunanca versiyonuyla karşılaştırma yaparak Hiyeroglif yazısını çözümlemişlerdir. Yani bir nevi tercüme taşı olan Rosetta Stone; binary bir SWF dosyasının alfanümerik karakterlere dönüştürülmesine yardımcı olan aracın adı olmuştur. Bu yüzden teknik, Rosetta Flash olarak isimlendirilmiştir.
[/FONT][FONT=Verdana, Arial, Helvetica, sans-serif][FONT=Verdana, Arial, Helvetica, sans-serif]Zaafiyete Dair
Zaafiyetin sömürülmesine yönelik mantığın anlaşılması için şu birkaç madde göz önünde bulundurulmalıdır:
- Hassas bir domainde kullanıcılara SWF dosyası yükleme yetkisinin verilmesi önemli tehlikeler barındırır. Çünkü herhangi bir SWF dosyası Flashla, kendi bulunduğu hosta ait domaine, crossdomain.xml kontrolü sağlamaksızın cookie taşıyan GET ve POST istekleri yapabilir. Yani açık kullanılarak, dikkatlice hazırlanan bir SWF dosyası upload edilir ve hassas verinin saldırganın domainine gönderilmesi mümkün hale gelebilir.
- JSONP saldırgana, yapılan URL isteğindeki callback parametresinin belirtilmesi yoluyla, bir endpointin çıktısına ait ilk bytelerini kontrol etme izni verir. JSONP callback parametrelerinin çoğu izin verilen karakter kümesini a-zA-z, _ ve . karakterleriyle kısıtlar. Rosetta Flash aracı, kısıtlanmış bu karakter kümesine odaklanır.
- SWF dosyaları, <object> etiketinin zorlanmasıyla saldırganın sitesine embed (gömülebilir) edilebilir. Böylece içerik bir Flash olarak görüldüğünden dosyanın çalışması sağlanır.
[/FONT]
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif][FONT=Verdana, Arial, Helvetica, sans-serif]Örneğin saldırgan, çalıştırılması istenen bir ActionScript 2 kodunu genişletilmiş bir SWF dosyasına dönüştürür ve bunu Rosetta Flash aracıyla alfanümerik hale getirir. Saldırgan SWF dosyasını ve Rosetta Flash çıktısını, yukarıda görüldüğü gibi, kendi domainine embed eder. Bununla birlikte kurbandan gelecek bağlantılara izin veren bir de crossdomain.xml dosyası tanımlar. URL kısmında, kurbanın cookiesiyle GET isteği yapan, açığın mevcut olduğu endpointin bulunduğu siteye ait domain yazılır. sizdir parametresi ise sızdırılmış verinin saldırganın belirlediği adrese POST isteğiyle gönderilmesini belirtir.
Rosetta Flash Aracı Nasıl Çalışır?
Özetle, binary halde bulunan SWF girdisi; zlib, Huffman Kodu ve ADLER32 algoritmalarının güçlendirilmiş şekilleriyle kullanılmasıdır. Bu algoritmalarla Rosetta Flash adındaki araç elde edilir.
Riski Azaltma ve Açığın Fixlenmesi
Birçok önemli firma açığını Adobenin yamasını beklemeden kapatmıştı. Adobe ise Flash Player 14 beta sürümüyle ilk yamasını yayımlamış (Temmuz 2014) ardından üç yama da yayımlayarak açığı Eylül 2015te kapattığını duyurmuştu.
Ayrıca birçok framework açıktan zarar görmemek için kendi JSONP patchlerini çıkardı. Tüm bunların dışında web site sahiplerinin alabileceği birkaç önlem ve yapabileceği fixleme yöntemi mevcuttur:
- Dikkat edilmesi gereken ilk nokta şu ki: hassas veri içeren domainlerde JSONP kullanılmaması gerekir.
- Sniffing saldırılarını önlemek için callback fonksiyonunun önüne yorum satırı (/**/) eklenmelidir.
- Sniffing saldırılarını önleme amacıyla modern web tarayıcıların çoğunda bulunan X-Content-Type-Options: nosniff HTTP headeri da döndürülebilir. Şayet JSONP uç noktası application/x-shockwave-flash değerine sahip olmayan bir Content-Type döndürürse, Flash Player SWF dosyasını çalıştırmayı reddedecektir.
- Mümkünse bir dedicated sandbox domaini kullanılmalı.
- Diğer bir önlem ise dosya indirmeye zorlayarak, endpointleri Content-Disposition: attachment; filename=f.txt headeri ile döndürmektir. Bu işlem, Adobe Flash 10.2 ve üstü versiyonlarda Flash Playere SWF çalıştırma! demek için yeterlidir.[/FONT]
[/FONT]
Rosetta Flash, Same Origin Policy güvenliğinin bypass edilmesi sonucu oluşan CSRF açığının sömürülmesi için ortaya atılmış bir tekniktir. Michele Spagnuolo tarafından açığa çıkartılmış olan bu teknik aslında kendi içinde özel bir aracı barındırır. Dolayısıyla Rosetta Flashın bir araç olduğunu söylemek yanlış olmaz.
Rosetta Flash ile Adobe Flash Player kaynaklı açığın sömürülmesi mümkündür. Bu teknikte kullanılan araç özetle, orijinali binary olan bir SWF dosyasını sadece alfanümerik karakterlerden müteşekkil bir hale getirerek JSONP endpoint (uç noktalar)lerini sömürür. Bu yolla, kurbanın zararlı domaine tıklayarak yaptığı istek sonucunda, saldırganın veri çalabilmesi mümkün olur.
Önemli web sitelerinde (Google, Youtube, Twitter, Linkedin ...) bulunmuş olup, tekniğin ortaya çıkarılmasının ardından çoğu önemli web sitesi açığı kapatmışlardır. Ayrıca Adobenin kendisi de birkaç tane yama yayımlamıştır.
Rosetta Flash ile Alakalı Bazı Terimler
Same Origin Policy: Farklı origin (protokol + domain + port)lerin birbirlerine erişmesini engelleyen web tarayıcı tabanlı bir kısıtlamadır. Bununla birlikte aynı originde bulunan kaynaklar kendi aralarında etkileşim kurabilirler.
JSONP: JSON veri formatının farklı originler arasında kullanılmasını sağlamak için web geliştiriciler tarafından JSON-Padding tekniği kullanılır. Bir SOP aşma yöntemidir.
Rosetta Flash İsminin Kaynağı: Rosetta Stone (Taşı) olarak bilinen bu yazıt, üç farklı dilde yazılmıştır. Taşın keşfinden önce Hiyeroglif yazısı çözülememişken, taşın bulunması sonrasında araştırmacılar Yunanca versiyonuyla karşılaştırma yaparak Hiyeroglif yazısını çözümlemişlerdir. Yani bir nevi tercüme taşı olan Rosetta Stone; binary bir SWF dosyasının alfanümerik karakterlere dönüştürülmesine yardımcı olan aracın adı olmuştur. Bu yüzden teknik, Rosetta Flash olarak isimlendirilmiştir.
[/FONT][FONT=Verdana, Arial, Helvetica, sans-serif][FONT=Verdana, Arial, Helvetica, sans-serif]Zaafiyete Dair
Zaafiyetin sömürülmesine yönelik mantığın anlaşılması için şu birkaç madde göz önünde bulundurulmalıdır:
- Hassas bir domainde kullanıcılara SWF dosyası yükleme yetkisinin verilmesi önemli tehlikeler barındırır. Çünkü herhangi bir SWF dosyası Flashla, kendi bulunduğu hosta ait domaine, crossdomain.xml kontrolü sağlamaksızın cookie taşıyan GET ve POST istekleri yapabilir. Yani açık kullanılarak, dikkatlice hazırlanan bir SWF dosyası upload edilir ve hassas verinin saldırganın domainine gönderilmesi mümkün hale gelebilir.
- JSONP saldırgana, yapılan URL isteğindeki callback parametresinin belirtilmesi yoluyla, bir endpointin çıktısına ait ilk bytelerini kontrol etme izni verir. JSONP callback parametrelerinin çoğu izin verilen karakter kümesini a-zA-z, _ ve . karakterleriyle kısıtlar. Rosetta Flash aracı, kısıtlanmış bu karakter kümesine odaklanır.
- SWF dosyaları, <object> etiketinin zorlanmasıyla saldırganın sitesine embed (gömülebilir) edilebilir. Böylece içerik bir Flash olarak görüldüğünden dosyanın çalışması sağlanır.
[/FONT]
[/FONT]
[FONT=Verdana, Arial, Helvetica, sans-serif][FONT=Verdana, Arial, Helvetica, sans-serif]Örneğin saldırgan, çalıştırılması istenen bir ActionScript 2 kodunu genişletilmiş bir SWF dosyasına dönüştürür ve bunu Rosetta Flash aracıyla alfanümerik hale getirir. Saldırgan SWF dosyasını ve Rosetta Flash çıktısını, yukarıda görüldüğü gibi, kendi domainine embed eder. Bununla birlikte kurbandan gelecek bağlantılara izin veren bir de crossdomain.xml dosyası tanımlar. URL kısmında, kurbanın cookiesiyle GET isteği yapan, açığın mevcut olduğu endpointin bulunduğu siteye ait domain yazılır. sizdir parametresi ise sızdırılmış verinin saldırganın belirlediği adrese POST isteğiyle gönderilmesini belirtir.
Rosetta Flash Aracı Nasıl Çalışır?
Özetle, binary halde bulunan SWF girdisi; zlib, Huffman Kodu ve ADLER32 algoritmalarının güçlendirilmiş şekilleriyle kullanılmasıdır. Bu algoritmalarla Rosetta Flash adındaki araç elde edilir.
Riski Azaltma ve Açığın Fixlenmesi
Birçok önemli firma açığını Adobenin yamasını beklemeden kapatmıştı. Adobe ise Flash Player 14 beta sürümüyle ilk yamasını yayımlamış (Temmuz 2014) ardından üç yama da yayımlayarak açığı Eylül 2015te kapattığını duyurmuştu.
Ayrıca birçok framework açıktan zarar görmemek için kendi JSONP patchlerini çıkardı. Tüm bunların dışında web site sahiplerinin alabileceği birkaç önlem ve yapabileceği fixleme yöntemi mevcuttur:
- Dikkat edilmesi gereken ilk nokta şu ki: hassas veri içeren domainlerde JSONP kullanılmaması gerekir.
- Sniffing saldırılarını önlemek için callback fonksiyonunun önüne yorum satırı (/**/) eklenmelidir.
- Sniffing saldırılarını önleme amacıyla modern web tarayıcıların çoğunda bulunan X-Content-Type-Options: nosniff HTTP headeri da döndürülebilir. Şayet JSONP uç noktası application/x-shockwave-flash değerine sahip olmayan bir Content-Type döndürürse, Flash Player SWF dosyasını çalıştırmayı reddedecektir.
- Mümkünse bir dedicated sandbox domaini kullanılmalı.
- Diğer bir önlem ise dosya indirmeye zorlayarak, endpointleri Content-Disposition: attachment; filename=f.txt headeri ile döndürmektir. Bu işlem, Adobe Flash 10.2 ve üstü versiyonlarda Flash Playere SWF çalıştırma! demek için yeterlidir.[/FONT]
[/FONT]