Haftanın Hackleri: HEIST Atağı ve CSS mix-blend-mode ile Tarayıcı Geçmişini Çalmak

Alperen Yilmaz - 15 Ağustos 2016 -

“Haftanın Hackleri” başlığı ile yayınladığımız yazılarda bu hafta HEIST ile HTTPS içerisindeki bilgileri çalmak ve CSS mix-blend-mode ile tarayıcı geçmişini çalmak isimli ilginç konulara değindik. Sosyal medyada bu yazıyı #haftaninhackleri etiketi ile tartışabilirsiniz, bize sorularınızı sorabilirsiniz.

Haftanın Hackleri: HEIST Atağı ve CSS mix-blend-mode ile Tarayıcı Geçmişini Çalmak

Geçtiğimiz hafta Tarayıcı Bazlı Zamanlama Saldırıları, Pil Durumundan Kaynaklanan Gizlilik Riski konularına değinmiştik.

“Haftanın Hackleri” başlığı ile yayınladığımız yazılarda bu hafta HEIST ile HTTPS içerisindeki bilgileri çalmak ve CSS mix-blend-mode ile tarayıcı geçmişini çalmak isimli ilginç konulara değindik. Sosyal medyada bu yazıyı #haftaninhackleri etiketi ile tartışabilirsiniz, bize sorularınızı sorabilirsiniz.

Bu hafta web güvenliğinde dikkatimizi çeken konular:

HEIST ile HTTPS İçerisindeki Bilgileri Çalmak

SSL, uygulama ve aktarım katmanları arasında bir arayüz görevi görmektedir. Uygulamadan alınan veri, TCP protokolü ile birden çok aşamadan geçerek aktarım katmanına ulaşır. Bu aşamalardan biri de, SSL'in blok sıkıştırmasıdır. Her bir blok 1024 byte'tan büyük olamaz. Geçtiğimiz tarihlerde yayınlanan BREACH ve CRIME adlı güvenlik açıkları, SSL'in blok sıkıştırma mekanizmasına dayanıyordu.

Sıkıştırmanın en temel mantığına göre, example.com/?search=abcd gibi bir URL'de, HTTP isteğinin başında abcd varsa, içerikte bu string'den iki tane olsa bile bir tanesi yazılacak ve böylelikle sayfa uzunluğu değişecektir. Bu mantıkla isteklerin boyutu incelenerek, Brute Force ile CSRF token'ı bulunabiliyor. BREACH ataklarının başarılı olması için Man in the Middle’a ihtiyaç vardı çünkü HTTP isteklerinin uzunluğunun gözükmesi gerekliydi.

Mathy Vanhoef ve Tom Van Goethem, BREACH zafiyetini baz alarak buradaki mantığı biraz daha genişletti. Bu noktada HEIST'i BREACH'ten ayıran en önemli özellik, BREACH'te aynı ağ içerisinde MITM atağı gerekliyken, HEIST'ta timing bazlı ataklar ile aynı ağda olmaya gerek kalmadan sayfa uzunluğunun alınması diyebiliriz. Timing ataklarını geçen hafta anlatmıştık, Tom burada bahsettiği <video> tagını kullanıyor.

Ana sorun Cross-site Timing atağı olduğundan dolayı, kullanıcı tarafında üçüncü parti cookie'lerin tarayıcıdan kapatılması sorunu çözüyor.

HEIST ile ilgili detaylı bilgi almak için, Black Hat konferasında yapılan sunum: https://tom.vg/papers/heist_blackhat2016.pdf

CSS mix-blend-mode ile Tarayıcı Geçmişini Çalmak

Bir web sayfasında bulunan linklere daha önce tıkladıysa o linkin mor şekilde gösterildiğini biliyoruz. Basit bir durum gibi görünse de ziyaret ettiğimiz sayfa eğer bu renk bilgisini elde ederse, saldırgan bizim hangi siteleri ziyaret edip etmediğimizi öğrenebilir. Kısacası bizim tarayıcı geçmişimiz hakkında bilgi sahibi olabilir.

Bu yöntem ilk başta ComputedStyle özelliği kullanarak çalışıyordu fakat tarayıcılar bu durumu düzelttiler. Daha sonrasında yeni bir yöntem geliştirildi. Bu yöntemde kullanıcı bir uzay oyunu oynadığını düşünüyor ve üzerine gelen renkli topları işaretleyerek yok ediyor. Aslında arka plan linklerden oluşuyor fakat CSS’in :visited özelliği kullanılarak ziyaret edilenler renkli, diğerleri ise siyah olarak gösteriliyor. Yani sizin işaretlediğiniz renkli toplar aslında ziyaret ettiğiniz web siteleri olmuş oluyor. Oyunun sonunda size hangi siteleri ziyaret ettiğiniz ve etmediğiniz gösteriliyor.

Yukarıda bahsettiğimiz örnek hala çalışıyor fakat uygulanabilirlik konusunda sıkıntıları var. En temel problem her site için 1 kez tıklanmasının gerekiyor olması ve eğer onlarca siteyi kontrol ediyorsak bu onlarca tıklanmanın gerektiğini gösteriyor. Bir de üstüne üstlük bu yöntemi yukarıdaki gibi bir oyun haliyle deniyorsak yanlış tıklamalar olabilir. Her yanlış tıklama aslında bize yanlış bilgi verilmesi olacaktır çünkü siyah renkler aslında ziyaret etmediği linkleri temsil ediyor.

Bunun üzerine Michal Zalewski yeni bir yöntem geliştiriyor. Bu yöntemde CSS’in mix-blend-mode özelliği kullanılıyor. Bu sayede listedeki siteleri birbirleriyle kombinasyon haline getirip kullanıcıya sadece ilgili kısmın görünmesini sağlıyor. Kullanıcı sadece bir tıklama ile ziyaret ettiği ve etmediği sitelerin listesini çıkartabiliyor.

Bu konu ile ilgili daha fazla bilgi ve detaylar için: https://lcamtuf.blogspot.com.tr/2016/08/css-mix-blend-mode-is-bad-for-keeping.html

Alperen Yılmaz & Deniz Parlak