Erime/Spectre

Genel bakış

3 Ocak'ta Project Zero, modern CPU'larda bir işlemin söz konusu işleme ait olmayan bellekler de dahil olmak üzere rastgele belleği (en kötü ihtimalle) okumak için kullanabileceği güvenlik açıklarını ortaya çıkardı. Bu güvenlik açıkları Spectre ve Meltdown olarak adlandırılmıştır. Chrome web'i güvenli tutmaya yardımcı olmak için ne yapıyor, web geliştiricileri kendi siteleri için ne yapmalıdır?

ö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. Ek olarak, Chrome kullanıcıları Site İzolasyonu'nu da etkinleştirebilir.

Web geliştiricisiyseniz Chrome ekibinin önerileri:

  • Mümkün olduğunda SameSite ve HTTPOnly çerez özelliklerini kullanarak ve document.cookie değerinden okuma yaparak çerezlerin oluşturucu işleminin belleğine girmesini önleyin.
  • Site Yalıtımı'nı etkinleştirmiş olan kullanıcılarda Kaynaklar Arası 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 tüm URL'ler için bir X-Content-Type-Options: nosniff üst bilgisi belirtin.
  • Site İzolasyonu'nu etkinleştirin ve siteniz için sorunlara neden olup olmadığını Chrome ekibine bildirin.

Bu adımların neden işe yaradığını merak ediyorsanız okumaya devam edin!

Risk

Bu güvenlik açıklarının çok çeşitli açıklamaları bulunduğundan başka bir tane daha eklemeyeceğim. Bu güvenlik açıklarının nasıl istismar edilebileceğiyle ilgileniyorsanız Google Cloud ekibindeki iş arkadaşlarımın hazırladığı blog yayınına göz atmanızı öneririm.

Hem Meltdown hem de Spectre, bir işlemin yapması gerekmeyen belleği okumasına potansiyel olarak izin verir. Bazen farklı sitelerdeki birden fazla doküman, Chrome'da bir işlemi paylaşabilir. Bu durum, bir taraf window.open, <a href="..." target="_blank"> veya iframe kullanarak diğerini açtığında gerçekleşebilir. Bir web sitesi kullanıcıya özel veriler içeriyorsa başka bir sitenin bu kullanıcı verilerini okumak için bu yeni güvenlik açıklarını 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

Hassas verilerin, bir işlemi saldırgan kontrolündeki kodla paylaşmasını önleyerek Spectre'dan başarıyla yararlanmanın etkisi büyük ölçüde azaltılabilir. Chrome ekibi, bunu başarmak için "Site İzolasyonu" adlı bir özellik üzerinde çalışıyor:

Bilinen birkaç sorun olduğu ve Chrome ekibi, mümkün olduğunca çok saha testi yapılmasını istediği için Site İzolasyonu henüz varsayılan olarak etkinleştirilmemiştir. Web geliştiricisiyseniz Site İzolasyonu'nu etkinleştirmeli ve sitenizin çalışır durumda olup olmadığını kontrol etmelisiniz. Şimdi etkinleştirmek istiyorsanız chrome://flags#enable-site-per-process özelliğini etkinleştirin. Çalışmayan bir site bulursanız lütfen hata bildiriminde bulunarak bize yardımcı olun ve Site İzolasyonu'nu etkinleştirdiğinizi belirtin.

Siteler Arası Belge Engelleme

Tüm siteler arası sayfalar ayrı süreçlere yerleştirilse bile, sayfalar yine de resimler ve JavaScript gibi bazı siteler arası alt kaynakları meşru şekilde isteyebilir. Site İzolasyonu, hassas bilgilerin bu bilgileri sızdırmasını önlemek için bir "siteler arası belge engelleme" özelliği içerir. Bu özellik, oluşturucu sürecine hangi ağ yanıtlarının iletileceğini sınırlandırır.

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

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

  1. Bunlar HTML, XML, JSON veya metin/düz MIME türünde ve
  2. Bu URL'ler X-Content-Type-Options: nosniff HTTP yanıt başlığına sahip veya hızlı içerik analizi ("dinleme") türün doğru olduğunu onaylayan
  3. CORS, dokümana erişime açıkça izin vermiyor

Bu politika tarafından engellenen dokümanlar işleme boş olarak sunulur ancak istek arka planda gerçekleşir.

Örneğin: Bir saldırganın, hassas veriler (ör. <img src="https://yourbank.com/balance.json">) içeren JSON dosyası içeren bir <img> etiketi oluşturduğunu düşünün. Site İzolasyonu olmadığında, JSON dosyasının içeriği oluşturucu işleminin belleğine ulaşır. Bu noktada oluşturucu, geçerli bir resim biçimi olmadığını fark eder ve bir resim oluşturmaz. Ancak Spectre sayesinde artık bu bellek yığınını potansiyel olarak okumanın bir yolu var. MIME türü siteler arası belge engelleme tarafından engellendiği için siteler arası belge engelleme, bu dosyanın 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 gönderilen çok sayıda JavaScript ve CSS dosyası vardır. Chrome, yanlışlıkla belge olarak işaretlenen kaynakları engellememek için 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 üst bilgisini eklemenizi önerir.

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

SameSite çerez

Yukarıdaki örneğe dönelim: <img src="https://yourbank.com/balance.json">. Bu yalnızca, bankanız.com'da kullanıcının oturumunu otomatik olarak sağlayan bir çerez depoladıysa işe yarar. Çerezler genellikle bir üçüncü tarafça <img> etiketi kullanarak yapılmış olsa bile çerezi ayarlayan web sitesine yapılan tüm istekler için gönderilir. SameSite çerezleri, bir çerezin yalnızca aynı siteden gelen bir isteğe eklenmesi gerektiğini belirten yeni bir özelliktir. Bu nedenle adı belirtir. 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. Chrome gibi desteklenen tarayıcılarda çereze istemci tarafı komut dosyası aracılığıyla erişilmesini açıkça engelleyen HTTPOnly çerez özelliğini ayarlayabilirsiniz. HTTPOnly ayarını yapmak mümkün değilse kesinlikle gerekli olmadığı sürece document.cookie değerini okumayarak çerez verilerinin oluşturulan işleme riskini sınırlamaya yardımcı olabilirsiniz.

target="_blank" kullanarak başka bir sayfaya bağlantı oluşturduğunuzda, açılan sayfa window nesnenize erişebilir, sayfanızı farklı bir URL'ye yönlendirebilir ve Site İzolasyonu olmadan sayfanızla aynı işlem uygulanır. Sayfanızı daha iyi korumak için, yeni bir pencerede açılan harici sayfa bağlantıları her zaman rel="noopener" öğesini belirtmelidir.

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

Meltdown veya Spectre'dan yararlanmak isteyen saldırganların, belirli bir değeri bellekten okumasını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ğruluk oranına sahip performance.now()'tir. Önde gelen tüm tarayıcılar, saldırıları önlemeyi zorlaştırmak için performance.now() çözümünün çözünürlüğünü düşürmüştür.

Yüksek çözünürlüklü bir zamanlayıcı elde etmenin bir başka yolu da SharedArrayBuffer kullanmaktır. Tampon, ö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. Şimdilik tarayıcılar, diğer çözümler uygulanana kadar SharedArrayBuffer'ı devre dışı bırakmaya karar verdi.

V8

Spectre'ı kötüye kullanmak için özel olarak hazırlanmış bir CPU talimatları dizisi gerekir. V8 ekibi bilinen saldırı kavramı kanıtları için hafifletmeler uyguladı ve optimizasyon derleyicileri olan TurboFan'da, bu saldırılar tetiklendiğinde bile oluşturulan kodu güvenli hale getiren değişiklikler üzerinde çalışıyor. Ancak bu kod oluşturma değişiklikleri, performans cezası alabilir.

Web'i güvenli tutma

Spectre ve Meltdown'ın keşfi ve sonuçlarıyla ilgili birçok 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 açıklık getirdiğini umuyorum. Sorunuz olursa Twitter'dan bize ulaşabilirsiniz.