Spook.js, bir korku masalı

Spectre tabanlı ilk uygulanabilir saldırı olan Spook.js nasıl gerçekleştiriliyor?

Baktığınızda, kimlik avı saldırısının bir mantığı vardır: Bir bağlantıya tıklarsınız, kötü niyetli bir sayfaya gidersiniz, bazı bilgileri girersiniz ve bu bilgileriniz bir saldırgan tarafından çalınır. Peki bir de şunu düşünün: Bir bağlantıya tıklıyorsunuz ve verileriniz bir saldırgan tarafından çalınıyor. Evet doğru, bugün, kurbanın herhangi bir şey yapmasına gerek kalmadan temel bir CPU özelliğinden yararlanarak veri çalan kötü amaçlı sayfalardan bahsediyoruz. Ve bu söz konusu güvenlik açığının düzeltilmesi, imkansız değilse bile oldukça zor.

2018’de araştırmacılar, Spectre güvenlik açığının ilk iki türünü ortaya çıkararak açıktan faydalanmanın teorik olarak mümkün olduğunu kanıtladılar. Üç yıl sonra, Eylül 2021’de, Spectre v1.1’in kullanıldığı gerçek hayattaki ilk saldırıyı gördük. Spook.js olarak bilinen saldırı oldukça karmaşık bir konsepte sahip olsa da elimizden geldiğince bunu basitleştirmeye çalışacağız.

Spectre v1’in geçmişi

Bu aileye ait ilk iki saldırının — Spectre ve Meltdown — haberi 2018’de geldi. Saldırılar, tüm modern CPU’larda bulunan, komut yürütmeyi hızlandırmak için tasarlanmış dallanma öngörüsü (branch prediction) mekanizmasından yararlanıyordu.

Spectre güvenlik açığı logosu

Bir kullanıcı, bir internet sitesinde oturum açmak için parolasını girdiğinde arkada, parola doğruysa bir dizi komut, doğru olmaması durumunda ise başka bir dizi komut yürütülür. Bununla birlikte — dallanma öngörüsünün devreye girdiği yer tam da burasıdır — doğru olup olmadığına ilişkin geri dönüş almadan önce CPU, büyük olasılıkla çalıştırması gerektiğini düşünen komut setini yürütmeye başlar.

Örneğimizde, parola daha önce yüzlerce kez doğru girildiyse, CPU bu sefer de farklı olmayacağını varsayar. CPU’nun öngörüsü doğru çıkarsa, kullanıcı bir performans artışı sağlamış olur. Yanlış çıkarsa da, CPU varsayımsal olarak yürütülen komutları atar ve diğer komut setini çalıştırır.

Bir Spectre güvenlik açığı saldırısında, programın erişimi olmayan bir veri alanını okuma girişiminde bulunulur. Saldırının ilk aşamasında, açık erişim veri alanlarına çoklu çağrılar yapılır, bu sayede dallanma öngörü sistemi yasaklı okuma işlemini de gerçekleştirecek şekilde “eğitilir”. Dallanma öngörüsü kullanılarak CPU, gerçekten okumasına izin verilen verileri okumak isteyen programa alışkın olduğu için işlemi önceden gerçekleştirir. Ancak yapılan bir kontrol, programın verilere erişiminin yasak olduğunu ortaya çıkarır ve bunun sonucunda varsayımsal olarak yürütülen hesaplamalar atılır. Buraya kadar her şey yolunda — ancak CPU tarafından okunan veriler bir süre CPU’nun kendi belleği olan önbellekte saklanmaya devam eder.

İşin ilginç kısmı da bundan sonra başlar: CPU’nun önbelleğinden gizli verileri doğrudan okumanın hiçbir yolu olmadığından, kötü niyetli süreç, bu verileri çalmak için yan kanal saldırısı(side-channel attack) adı verilen bir saldırı başlatır. Bu saldırıda belirli bilgilere erişim hızı ölçülür. Veri görece olarak küçükse, bu, verilerin önbellekte tutulduğu anlamına gelir. Büyükse, normal RAM’den yüklenir. Bir dizi okuma denemesi, gizli bilgilerin sızmasına neden olur.

Sonuç olarak yaşanan, tek çözümü dallanma öngürüsünün tamamen devre dışı bırakılması olan ve dolayısıyla performansı ciddi şekilde etkileyen temel bir CPU hatasıdır. Bununla birlikte, Spectre saldırılarında:

  • Saldırganın, hedef bilgisayarda veya mobil cihazda program kodunu çalıştırabilmesi,
  • Saldırının, başarılı bir saldırı için gereken koşulları oluşturacak şekilde kodlanmış belirli bir hedef programa sahip olması,
  • Saldırı başarılı bir şekilde gerçekleştirilmiş olsa bile, verinin çıkarılmasının oldukça yavaş (saniyede onlarca veya yüzlerce bayt) ve okuma hatalarının imkansız olmaktan çok uzak olması,
  • Genel olarak, parolalar, şifreleme anahtarları vb. gibi ele geçirilmesi amaçlanan gizli verilerin çalınmasının bir dizi koşula bağlı olması gibi sınırlamalar söz konusudur.

Spook.js — Spectre v1’in gerçek hayattaki uygulaması

Spectre’nin o kadar da tehlikeli olmadığı sonucuna varabiliriz. Sonuçta, bir saldırgan hedef bilgisayarda kod çalıştırabiliyorsa, ayrıcalıkları yükseltmek ve verileri çalmak için işletim sistemindeki veya yüklü programlardaki çok sayıdaki güvenlik açığından birini kullanmak saldırgan açısından çok daha kolay bir tercih olurdu.

Bu doğru olsa da günümüz web sayfalarında, kullanıcının bilgisayarında ve tarayıcıda yürütülen büyük miktarda program kodu yer alıyor. Spook.js saldırıları da Spectre v1 güvenlik açığından bu şekilde yararlanıyor: Virüslü bir sayfa yükleniyor, tarayıcı kodu yürütüyor ve siber suçlu gizli verileri çalıyor.

Raporu hazırlayanlar uygulanabilir bazı saldırıları gösterdiler. İlk önce Tumblr’dan bir kullanıcı parolasını çaldılar. Ardından, Lastpass’tan veri çaldılar. Üçüncü olarak da bir Google sunucusundaki özel depolama alanından, kullanıcı tarafından yüklenen bir görseli ele geçirdiler.

Bunların hepsi, Google Chrome tarayıcısındaki bir özellik sayesinde mümkün oluyordu. Spectre ile ilgili bilgilerin yayınlanmasının ardından Chrome’un geliştiricileri, internet sitelerinin izole edilmiş şekilde yüklenmesini mecbur kılarak olası saldırıları önlemeye yönelik önlemler aldı. Böylece her bir internet sitesi kendi sürecini oluşturduğundan, bir sayfadaki kötü amaçlı kodun, başka bir kaynaktan veri çalmak için kullanılması mümkün olmuyor. Ancak bunun da bir istisnası bulunuyor: Aynı sitedeki veya alan adındaki birden çok sayfa, ortak bir tarayıcı işleminde gruplandırıldığı için bunlardan birinde kötü amaçlı kod (kod JavaScript ile yazıldığı için saldırın adında .js bulunuyor) çalıştırıldığında, diğer sayfalardaki veriler çalınabiliyor.

Tumblr’daki Spectre.js saldırısı

Kolektif bir blog olan Tumblr’da kötü amaçlı kod barındırmak, en azından teoride mümkün. Bu şekilde, bir sekmede açık olan kötü amaçlı bir sayfayla birlikte, bir kullanıcının başka bir sekmede Tumblr hesabına giriş yapmaya çalışması halinde, tarayıcı kullanıcı adını ve parolasını kaydeder ve otomatik olarak doldurur — kötü amaçlı kod daha sonra bu bilgileri çalabilir.

Bir saldırı, Spectre güvenlik açığından yararlanarak, aynı siteye ait başka bir sekmeyle yüzeysel olarak etkileşime girebilir ve dolaylı yollarla veri çalabilir. Bu yaklaşım ile gerçekleştirilen başarılı bir saldırı, neredeyse ardında hiç iz bırakmaz.

LastPass”teki Specter.js saldırısı

LastPass parola yöneticisine yönelik gerçekleştirilen saldırı, Spectre v1 kullanan veri çalma kodunun Google Chrome’daki kötü amaçlı bir uzantıya yerleştirilmiş olması bakımından diğerlerinden ayrılıyordu. Tarayıcıda LastPass uzantısı da çalışıyordu ve bazı durumlarda, uzantılar da ortak bir tarayıcı işleminde yürütülür, bu da veri hırsızlığını mümkün kılar.

Google Cloud Storage’daki Spectre.js saldırısı

Google’ın bulut depolama alanına yapılan saldırılara ilişkin örnekte ise; bir tarayıcı sekmesinde sites.google.com’da barındırılan kötü amaçlı bir sayfa yer alırken, diğer sekmede kullanıcıların, G Suite hizmetindeki özel depolama alanlarına görüntü dosyaları yüklemeleri sağlanıyordu. Bu senaryoda saldırgan, kötü amaçlı kodu kullanarak kullanıcıların yüklediği görüntü dosyalarına erişme imkanına sahip oluyor.

Orijinal görsel (solda) ve bir Spook.js saldırısı kullanılarak Google bulut depolama alanından çalınan görsel. Kaynak

 

Yönteme ilişkin sınırlamalar

Araştırmacılar, Intel’in güncel bir kaç işlemcisi ile yeni ARM tabanlı Apple M1 de dahil olmak üzere farklı CPU’larda saldırının nasıl gerçekleştirilebileceğini gösterdiler. Tüm hepsinde saldırılar, Google Chrome’da gerçekleştirildi. Temelde Spook.js saldırısının gerçekleştirilebilmesini sağlayan şey, tarayıcının sahip olduğu eşsiz birkaç özellik olduğu için bu durum, Microsoft Edge gibi diğer Chromium tabanlı tarayıcıları da saldırıya açık getiriyor.

Bununla birlikte saldırı bazı sınırlamalara sahip. Birincisi, veri hırsızlığındaki düşük hız (CPU’ya bağlı olarak saniyede 400-600 bayt), bu nedenle son gösterilen örnekteki hedef dosya oldukça küçük boyuta sahip. İkincisi ise, CPU önbelleğinden veri çalarken çok sayıda hatanın ortaya çıkması. Verilerde %4’e varan oranda hata ile karşılaşmak mümkün; ki bu da çalınan görüntüde bozulmalar oluşmasına neden oluyor.

Saldırı, AMD işlemcilerde veya JavaScript motoru farklı çalışan Mozilla Firefox’ta işe yaramıyor. Araştırmacılar, AMD çiplerine ve Firefox tarayıcısına yönelik başarılı bir saldırı olasılığını tamamen göz ardı etmemekle birlikte bunun için daha fazla çaba harcamak gerektiğini doğruluyorlar.

Son olarak, bir saldırının gerçekleştirilebilmesi için kolektif blog veya dosya barındırma örneğinde olduğu gibi, aynı alan adına sahip bir sayfaya kötü amaçlı kod yüklenmesi gerekiyor. Yöntemin bir bankanın internet sitesinde uygulanması çok da mümkün görünmüyor.

Paniğe gerek yok

Araştırmacıların, ilk kez Spectre güvenlik açıklarından birinin kullanılmasına ilişkin oldukça gerçekçi bir senaryoyu ortaya koyması nedeniyle Spook.js konusunda yürütülen çalışma oldukça büyük önem arz ediyor. Bununla birlikte, gerçek hayatta böyle bir saldırı yaşanması da düşük bir olasılık. Birincisi, bu araştırmanın ardından Google Chrome geliştiricileri, yüklenen siteleri izole etme mekanizmasını güçlendirdiler. İkincisi ise siber suçluların bu yöntemi kullanabilmek için modern CPU’ların düşük seviye çalışmaları (low-level) hakkında ciddi bilgi sahibi olması gerekirken, kullanıcı verilerini çalma konusunda geleneksel kötü amaçlı yazılımlardan sosyal mühendisliğe kadar çok daha kolay yöntemler mevcut.

Bilimsel bir çalışma olarak Spook.js, internet sitesi güvenliği konusunda sunduğu yeni önerilerle (örneğin, raporu yazanlar yetkilendirme sayfalarının ayrı bir alan adına taşınmasını öneriyor) yazılım ortamında değişikliğe neden oldu. Sonraki çalışmalarda, saldırıları biraz daha kolaylaştıracak yöntemler ortaya çıkabilecek olsa da bu yöntemler, büyük olasılıkla güvenliğin daha fazla gelişmesini sağlayacaktır. Spectre tipi güvenlik açıklarından toplu olarak yararlanmak mümkün olsa bile, koruma araçları her bir kötü amaçlı yazılım için aynı kalmaya devam eder. Güvenlik ürünleri üreticilerinin yapacağı şey, yürütülmeden önce izlenecek ve engellenecekler listesine yeni saldırı türlerini eklemektir.

Araştırmacıların bir gün, Spectre benzeri güvenlik açıklarının tüm modern BT ekosisteminde büyük bir çalışma yürütülmesini gerektirecek bir özelliğine rastlamaları da mümkün. Ancak şimdilik bu pek olası görünmüyor. Bir güvenlik açığının teoriden uygulanabilir bir saldırı aşamasına (ve bu durumda bile, birçok sınırlamaya sahip bir saldırı) gelmesinin üç yıl sürdüğünü unutmayalım.

Spectre ayrıca, çalınan verilerden elde edilecek potansiyel faydanın operasyon maliyetlerini aştığı hedefli saldırılar için de kullanılabilir. Bu senaryo işletmenize bağlı olsa bile farklı içerikler için farklı tarayıcılar kullanarak bu saldırıları basitçe zorlaştırabilirsiniz. Örneğin, hassas bilgiler içeren sayfaları ve web hizmetlerini çevrimiçi eğlence için kullandığınız tarayıcıda açmayın. Tercihen, gizli bilgileri yalıtılmış bir ortamda, sanal bir makinede veya ayrı bir aygıtta işleyin.

İpuçları