Erime/Spectre

Genel bakış

3 Ocak'ta Project Zero, modern CPU'larda bir işlemin (en kötü durumda) rastgele belleği (bu işleme ait olmayan bellek dahil) okumak için kullanabileceği güvenlik açıklarını ortaya koydu. Bu güvenlik açıkları Spectre ve Meltdown olarak adlandırılmıştır. Chrome web'in güvenliğini sağlamak için ne yapıyor ve web geliştiricileri kendi siteleri için ne yapmalı?

özet

Web'e göz atan bir kullanıcı olarak işletim sisteminizi ve tarayıcınızı güncel tuttuğunuzdan emin olmalısınız. Chrome kullanıcıları Site İzolasyonu'nu da etkinleştirebilir.

Web geliştiriciyseniz Chrome ekibi şunları yapmanızı önerir:

  • Mümkün olduğunda, SameSite ve HTTPOnly çerez özelliklerini kullanarak ve document.cookie ürününden okuma yapmaktan kaçınarak çerezlerin oluşturucu işleminin belleğine girmesini önleyin.
  • Site İzolasyonu'nu etkinleştirmiş kullanıcılar için Çapraz Kaynak Okuma Engelleme'den en iyi şekilde yararlanmak amacıyla, MIME türlerinizin doğru olduğundan emin olun ve kullanıcıya özel veya hassas içerik barındıran URL'ler için bir X-Content-Type-Options: nosniff üst bilgisi belirtin.
  • Site İzolasyonu'nu etkinleştirin ve sitenizde sorunlara neden olup olmadığını Chrome ekibine bildirin.

Bu adımların neden yardımcı olduğunu merak ediyorsanız okumaya devam edin.

Risk

Bu güvenlik açıklarıyla ilgili çok çeşitli açıklamalar olduğundan bununla ilgili başka bir açıklama eklemeyeceğiz. Bu güvenlik açıklarından nasıl yararlanılabileceğini merak ediyorsanız Google Cloud ekibindeki meslektaşlarımın yayınladığı blog yayınına göz atmanızı öneririm.

Hem Meltdown hem de Spectre, bir işleme izin vermemesi gereken belleği okumasına izin verebilir. Bazen farklı sitelerdeki birden fazla doküman, Chrome'da aynı işlemi paylaşabilir. Bu durum, bir kullanıcı window.open, <a href="..." target="_blank"> ya da iframe'ler kullanarak diğerini açtığında gerçekleşebilir. Bir web sitesi kullanıcıya özel veriler içeriyorsa başka bir sitenin bu yeni güvenlik açıklarını söz konusu kullanıcı verilerini okumak için kullanma olasılığı vardır.

Çözümler

Chrome ve V8 mühendislik ekibi bu tehdidi azaltmak için çeşitli çalışmalar yürütmektedir.

Site İzolasyonu

Spectre'ın başarılı bir şekilde istismar edilmesinin etkisi, hassas verilerin bir işlemi saldırgan tarafından kontrol edilen kodla paylaşmasını önleyerek büyük ölçüde azaltılabilir. Chrome ekibi, bunu başarmak için "Site İzolasyonu" adı verilen bir özellik üzerinde çalışıyor:

Bilinen birkaç sorun olduğundan ve Chrome ekibi mümkün olduğunca çok alan testi yapmak istediği için Site İzolasyonu henüz varsayılan olarak etkinleştirilmemiştir. Web geliştiricisiyseniz Site İzolasyonu'nu etkinleştirmeniz ve sitenizin çalışır durumda kalıp kalmadığını kontrol etmeniz gerekir. Şimdi kaydolmak istiyorsanız chrome://flags#enable-site-per-process özelliğini etkinleştirin. Çalışmayan bir site bulursanız lütfen hata bildiriminde bulunarak ve Site İzolasyonu'nu etkinleştirdiğinizi belirterek bize yardımcı olun.

Siteler Arası Doküman Engelleme

Tüm siteler arası sayfalar ayrı işlemlere tabi tutulsa bile, sayfalar meşru olarak resimler ve JavaScript gibi bazı siteler arası alt kaynakları istemeye devam edebilir. Site İzolasyonu, hassas bilgilerin bu bilgilerin sızdırılmasını önlemeye yardımcı olmak için oluşturucu işlemine gönderilecek ağ yanıtlarını sınırlayan "siteler arası doküman engelleme" özelliği içerir.

Bir web sitesi bir sunucudan iki tür veri isteyebilir: "dokümanlar" ve "kaynaklar". Burada belgeler; HTML, XML, JSON ve metin dosyalarıdır. Bir web sitesi, kendi alan adından veya izin verilen CORS başlıklarına sahip diğer alanlardan belge alabilir. Kaynaklar arasında resimler, JavaScript, CSS ve yazı tipleri gibi öğeler bulunur. Kaynaklar herhangi bir siteden eklenebilir.

Siteler arası belge engelleme politikası, aşağıdaki durumlarda bir işlemin diğer kaynaklardan "dokümanları" almasını engeller:

  1. HTML, XML, JSON veya metin/düz MIME türüne sahipler ve
  2. Bunlar X-Content-Type-Options: nosniff HTTP yanıt başlığına sahiptir veya hızlı içerik analizi ("anlama") türün doğru olduğunu onaylar
  3. CORS, dokümana erişime açıkça izin vermediğinde

Bu politika ile engellenen dokümanlar, istek arka planda yine de olsa işleme boş olarak sunulur.

Örneğin: Bir saldırganın, <img src="https://yourbank.com/balance.json"> gibi hassas veriler içeren bir JSON dosyası içeren <img> etiketi oluşturduğunu düşünün. Site İzolasyonu olmadan, JSON dosyasının içeriği oluşturucu işleminin belleğine aktarılır. Bu noktada oluşturucu, geçerli bir resim biçimi olmadığını ve bir resim oluşturmadığını fark eder. Ancak Spectre ile artık bu bellek parçasını potansiyel olarak okumanın bir yolu var. Siteler arası belge engelleme, MIME türü siteler arası belge engelleme tarafından engellendiği için bu dosya içeriğinin oluşturucunun çalıştığı işlemin belleğine girmesini engeller.

Kullanıcı metriklerine göre, text/html veya text/plain MIME türleriyle yayınlanan çok sayıda JavaScript ve CSS dosyası vardır. Yanlışlıkla doküman olarak işaretlenen kaynakların engellenmesini önlemek amacıyla Chrome, MIME türünün doğru olduğundan emin olmak için yanıtı algılamaya çalışır. Bu algılama işlemi kusursuz değildir. Bu nedenle, web sitenizde doğru Content-Type başlıklarını ayarladığınızdan eminseniz Chrome ekibi tüm yanıtlarınıza X-Content-Type-Options: nosniff başlığını eklemenizi önerir.

Siteler arası doküman engellemeyi denemek istiyorsanız Site İzolasyonu'nu yukarıda açıklandığı şekilde etkinleştirin.

SameSite çerez

Yukarıdaki örneğe geri dönelim: <img src="https://yourbank.com/balance.json">. Bu yöntem yalnızca bankanızın.com, kullanıcının oturumuna otomatik olarak giriş yapan bir çerez depoladıysa işe yarar. Çerezler genellikle çerezi ayarlayan web sitesine yapılan tüm istekler için gönderilir (İstek üçüncü taraflarca <img> etiketi kullanılarak yapılmış olsa bile). SameSite çerezleri, bir çerezin yalnızca aynı siteden gelen isteğe bağlı olması gerektiğini belirten yeni bir özelliktir. Dolayısıyla da bu addan gelmektedir. Ne yazık ki, bu yazının yazıldığı sırada bu özelliği yalnızca Chrome ve Firefox 58 ve sonraki sürümler destekliyor.

HTTPOnly ve document.cookie

Sitenizin çerezleri istemci JavaScript tarafından değil, yalnızca sunucu tarafında kullanılıyorsa çerez verilerinin oluşturucu işlemine girmesini engellemenin yolları vardır. HTTPOnly çerez özelliğini ayarlayabilirsiniz. Bu özellik, Chrome gibi desteklenen tarayıcılarda istemci tarafı komut dosyası aracılığıyla çereze erişilmesini açık bir şekilde engeller. HTTPOnly ayarlaması mümkün değilse kesinlikle gerekli olmadığı sürece document.cookie değerini okumayarak çerez verilerinin yüklenmesinin oluşturulan işlemle sınırlandırılmasına yardımcı olabilirsiniz.

target="_blank" kullanarak başka bir sayfaya bağlantı oluşturduğunuzda, açılan sayfa window nesnenize erişebilir, sayfanızda farklı bir URL'ye gidebilir ve Site İzolasyonu olmadan sayfanızla aynı işlemde olur. Sayfanızı daha iyi korumak için yeni bir pencerede açılan harici sayfa bağlantılarında her zaman rel="noopener" değeri belirtilmelidir.

Yüksek çözünürlüklü zamanlayıcılar

Meltdown veya Spectre'dan yararlanmak için saldırganın, belirli bir değeri bellekten okumanın ne kadar sürdüğünü ölçmesi gerekir. Bunun için güvenilir ve doğru bir zamanlayıcı gerekir.

Web platformunun sunduğu bir API, 5 mikrosaniyeye kadar doğrulukta performance.now() şeklindedir. Bu sorunu hafifletmek için tüm büyük tarayıcılar, saldırıların uygulanmasını zorlaştırmak için performance.now() çözünürlüğünü düşürdü.

Yüksek çözünürlüklü bir zamanlayıcı almanın diğer bir yolu da SharedArrayBuffer kullanmaktır. Arabellek, özel bir çalışan tarafından bir sayacı artırmak için kullanılır. Ana iş parçacığı bu sayacı okur ve bunu bir zamanlayıcı olarak kullanır. Şu an için tarayıcılar, diğer çözümler uygulanana kadar SharedArrayBuffer'ı devre dışı bırakmaya karar vermiştir.

V8

Spectre'dan yararlanmak için özel olarak hazırlanmış bir CPU talimatı dizisi gerekir. Bilinen saldırı kavramları için çözümler uygulamış olan V8 ekibi, optimizasyon yapan derleyicisi TurboFan'da, bu saldırılar tetiklendiğinde bile oluşturulan kodu güvenli hale getirecek değişiklikler üzerinde çalışıyor. Ancak bu kod oluşturma değişiklikleri nedeniyle performans cezası uygulanabilir.

Web'in güvenliğini sağlama

Spectre ve Meltdown'ın keşfi ve bunların etkileri konusunda çok fazla belirsizlik vardı. Bu makalenin, Chrome ve V8 ekiplerinin web platformunu güvende tutmak için neler yaptığına ve web geliştiricilerinin mevcut güvenlik özelliklerini kullanarak nasıl yardımcı olabileceklerine biraz ışık tuttuklarını umuyorum. Sorularınız varsa Twitter'dan bana ulaşabilirsiniz.