# Spectre (güvenlik açığı)
Spectre dallanma öngörüsü kullanan modern mikroişlemcileri etkileyen bir güvenlik açığıdır. Çoğu işlemcide spekülatif yürütmeden kaynaklanan hatalı dallanma tahmini, özel bilgilerin saldırganların eline geçmesine neden olabilecek ciddi yan etkiler bırakabilir. Örneğin, bu spekülatif yürütme tarafından gerçekleştirilen bellek modeli özel verilere bağlıysa veri önbelleğinin sonuç durumu, bir saldırganın bir zamanlama saldırısı gerçekleştirerek özel veriler hakkında bilgi alabildiği bir yan kanal oluşturur.
Spectre'ye ait iki Common Vulnerabilities and Exposures (CVE) kimliği bildirilmiştir, CVE-2017-5753 (sınır denetimini atlama, Spectre-V1) ve CVE-2017-5715 (dal hedefi ekleme, Spectre-V2). JİT motorları için kullanılan JavaScript savunmasız bulunmuştur. Bu zafiyet, bir web sitesinin, tarayıcıda bir başka websitesi için saklanan verileri veya tarayıcının belleğinin kendisini okuyabilmesinden kaynaklanmaktadır.
15 Mart 2018'de Intel, Spectre ve ilgili Meltdown güvenlik açıklarına (Spectre-V1 değil, özellikle Spectre-V2 ve Meltdown-V3'e) karşı koruma sağmak için işlemcilerini (performans kayıpları açıklanmak üzere) yeniden tasarlayacağını bildirdi. Yeniden tasarlanan işlemcilerin 2018'de daha sonra piyasaya sürülmesi bekleniyor.


## Tarihçe.
2002 ve 2003 yıllarında Yukiyasu Tsunoo ve NEC'den meslektaşları sırasıyla MISTY ve DES'e nasıl saldırılacağını gösterdi. 2005'te Illinois Üniversitesinden Daniel Bernstein, bir önbellek zamanlama saldırısı yoluyla OpenSSL AES anahtarının elde edilebileceğini bildirdi ve Colin Percival, Intel işlemcinin önbelleğini kullanarak OpenSSL RSA anahtarında çalışan bir saldırıyı elde etmiş oldu. 2013 yılında Adelaide Üniversitesinden Yuval Yarom ve Katrina Falkner, verilere erişim süresinin ölçülmesinin, bilginin önbellekten okunup okunmadığı konusunda casusluk uygulamasının nasıl tahmin edileceğini gösterdi. Önbellekten okunduğunda erişim süresi çok kısa olmaktaydı ve okunan veriler şifreleme algoritmalarının özel anahtarını içerebilmekteydi. Bu teknik GnuPG, AES ve diğer kriptografik uygulamalara başarılı bir şekilde saldırmak için kullanıldı. Anders Fogh, Ocak 2017'de Ruhruniversität Bochum'da özellikle birden fazla işlemci çekirdeği tarafından kullanılan bir boru hattına sahip işlemcilerde gizli kanalları otomatik olarak bulma konusunda bir sunum yaptı.
Spectre, Google'daki Project Zero'dan Jann Horn ve Paul Kocher tarafından Daniel Genkin, Mike Hamburg, Moritz Lipp, Yuval Yarom ile işbirliği ile bağımsız olarak keşfedildi. Microsoft Güvenlik Açığı Araştırması, tarayıcıların JavaScript JIT motorlarına genişletildi. 3 Ocak 2018'de, etkilenen donanım tedarikçilerinin konunun 1 Haziran 2017'de farkına varmasından sonra başka bir zayıflık olan Meltdown ile birlikte kamuoyuna açıklandı. Bu güvenlik açığı "Kök neden, spekülatif yürütüme dayanıyor. Düzeltilmesi kolay olmadığından, oldukça uzun bir süre bizi rahatsız edecektir. " şeklinde açıklandığı için "Spectre" olarak adlandırıldı.
28 Ocak 2018'de Intel'in kusurlar hakkında ABD'ye haber vermeden önce Çin'in teknoloji şirketlerine Meltdown ve Spectre güvenlik açıkları hakkındaki haberleri paylaştığı bildirildi.
29 Ocak 2018'de Microsoft'un daha önce Intel'in Varyant 2 saldırısı için Intel tarafından yayınlanan sorunlu mikrokod düzeltmesini (olası yeniden başlatmalara, kararlılığa ve veri kaybına / bozulma sorunlarına neden olan) devre dışı bırakan bir Windows güncellemesi yayınladığı bildirildi. Yeni Microsoft yamasının yüklenmesiyle ilgili endişeler yaşandığı bildirildi.


## Ayrıntılı açıklama.
Spectre, bir programı programın bellek alanındaki rastgele konumlara erişmeye zorlayan bir güvenlik açığıdır. Bir saldırgan, erişilen belleğin içeriğini okuyabilir ve bu sayede potansiyel olarak önemli veriler alabilir.
Spectre teknik incelemesinde düzeltilmesi kolay sadece bir güvenlik açığı yerine bir dizi olası güvenlik açıkları anlatılmaktadır. Bunların hepsi; spekülatif yürütmenin yan etkilerini, bellek gecikmelerini gizlemenin yaygın bir yolunu ve modern mikroişlemcilerde yürütmeyi hızlandırmayı temel alır. Spectre bilhassa spekülatif yürütmenin özel bir durumu olan dallanma öngörüsü üzerine odaklanmaktadır. Aynı zamanda açıklanan ilgili Meltdown açığının aksine Spectre; tek bir işlemcinin bellek yönetimi ve koruma sisteminin belirli bir özelliğine dayanmaz, daha genelleştirilmiş bir fikirdir.
Beyaz kağıdın başlangıç noktası, sırasız yürütme yapan modern mikroişlemcilerden oluşan dallanma öngörüsü makinelerine uygulanan bir yan kanal zamanlama saldırısıdır. İşlemci veri defterlerinde belgelenen mimari düzeyde, yanlış tahmin sonuçlarının gerçeğin ardından iptal edilmesinden sonra bile, ortaya çıkan spekülatif yürütme, yüklenen önbellek çizgileri gibi, yan etkileri hala kalmış olabilmektedir. Bunlar daha sonra bilgi işlem ortamının sözde işlevsel olmayan yönlerini etkileyebilir. Bu tür yan etkiler (bellek erişim zamanlaması dahil, ancak bunlarla sınırlı olmamak üzere) kötü amaçlı bir program tarafından görülebilir ve kurbanın işlemi tarafından tutulan hassas verilere dayanacak şekilde tasarlanabilirse, bu yan etkiler, hassas verilerin fark edilebilir hale gelmesine neden olabilir. Bu, tasarlandığı gibi çalışan mimarlık düzeyinde güvenlik düzenlemelerine rağmen gerçekleşebilir; Bu durumda, kod yürütmesi için daha alt, mikromimari seviyesinde yapılan optimizasyonların, normal program yürütme doğruluğu için gerekli olmayan bilgiler sızdırabilmektedir..
Spectre makalesi saldırıyı dört temel adımda açıklar:
  - İlk olarak modern işlemcilerdeki dallanma öngörüsü mantığının, kötü amaçlı bir programın iç işleyişine dayanarak güvenilir bir şekilde vuracak ya da kaçırabilecek şekilde eğitilebileceğini göstermektedir.
  - Daha sonra önbellek isabetleri ile kaçırmaları arasındaki sonraki farkın güvenilir bir şekilde zamanlanabileceğini göstermek için devam eder, böylece basit bir işlevsel olmayan farkın olması, aslında ilgisiz bir sürecin iç çalışmalarından gelen bilgileri ayıklayan gizli bir kanala dönüştürülebilir.
  - Üçüncüsü, sonuçlar, basit bir örnek program ve bir sanal alan tarayıcısı altında çalıştırılan bir JavaScript pasajı ile geri dönüş yönelimli programlama istismarları ve diğer ilkeler ile sonuçları sentezler  her iki durumda da, mağdur sürecinin tüm adres alanı (yani, çalışan bir programın içeriği), bir stok derleyicisinin veya mevcut bir tarayıcıda mevcut olan JavaScript makinesinin oluşturduğu koddaki koşullu dalların spekülatif yürütmesini basitçe kullanarak okunabilir olarak gösterilmektedir. Temel fikir, spekülasyonun erişilemeyen veriler üzerine dokunduğu yerler için mevcut kodu aramak, işlemciyi spekülatif yürütmenin bu verilere temas etmesi gereken bir duruma geçirmesi ve daha sonra işlemcinin yan etkisinden faydalanarak, daha hızlı olması için kullanılan önbelleğe alma makinelerini gerçekten bir önbellek hattı yükleyecek şekilde zamanlamaktır.
  - Son olarak makale, saldırıyı mağdur sürecinin işlevsel olmayan herhangi bir durumuna genelleştirerek sona ermektedir. Bu durum, veriyolu tahkim gecikmesi gibi belirgin olmayan işlevsel olmayan etkileri bile kısaca tartışır.
Spectre ve Meltdown arasındaki temel fark, Spectre'nin bir işlemi kendi verilerini açığa çıkarmak için kullanmasıdır. Öte yandan, Meltdown, sürecin normalde erişemediği bir süreç adres alanında ayrıcalıklı belleği okumak için kullanılabilir (bazı korumasız işletim sistemlerinde bu, çekirdeğe veya diğer işlemlere ait verileri içerir).
Meltdown makalesi, bu iki zafiyeti şu şekilde ayırmaktadır: “Meltdown, Spectre saldırılarından, özellikle Spectre'nin kurban sürecinin yazılım ortamına göre uyarlanmasını gerektirdiği, ancak daha geniş bir şekilde CPU'lara uygulanmasını gerektirdiği ve KAISER tarafından hafifletilmediği gibi birçok açıdan farklıdır.”


### Uzaktan çalıştırma.
Spectre, C veya C ++ gibi derlenmiş bir dil ile yerel olarak makine kodunun çalıştırılmasıyla açığın istismar edilmesinin daha kolay olmasına rağmen, uzak web sayfalarında barındırılan kod tarafından uzaktan da kullanılabilir. Örneğin, JavaScript gibi web tarayıcısı kullanılarak yerel olarak çalışan yorumlanmış diller. Kodlanmış kötü amaçlı yazılım, çalışan tarayıcının adres alanına eşlenen tüm belleğe erişebilir.
Uzaktan erişimde JavaScript kullanan istismar, yerel makine kodu istismarınınkine benzer bir akış izler: Floş Önbellek → Mistrain Branch Predictor → Zamanlanmış Okumalar (isabet etti / etmedi takibi).
JavaScript'te "clflush" komutunu (önbellek satırı floş) kullanmak için uygunluğun olmaması, alternatif bir yaklaşım gerektirmektedir. İşlemcinin seçebileceği birkaç otomatik önbellek tahliye politikası vardır ve bu istismarın çalışması için tahliyenin zorlanabilmesine güvenmekteyiz. İlk dizinin arkasında birkaç iterasyon tutulan büyük dizide ikinci bir endeks kullanılmasının, en az kullanılan (LRU) politikanın kullanılmasına neden olacağı bulunmuştur. Bu, istismarın, büyük bir veri kümesinde artan sayıda okuma yaparak önbelleği etkin bir şekilde temizlemesine olanak tanır.
Daha sonra dallanma öngörücüsü, endeksi aralıklı değerlere ayarlamak için bitsel işlemleri kullanarak çok büyük bir veri kümesi üzerinde yinelemek ve ardından son yinelemede sınır dışı adresi kullanmak suretiyle yeniden denetlenir.
Bir okuma kümesinin bir önbellek isabeti veya önbellek kaçırmasına neden olup olmadığını belirlemek için yüksek hassasiyetli bir zamanlayıcı gerekir. Chrome, Firefox ve Tor (Firefox'a dayalı) gibi tarayıcılar, zamanlayıcıların çözümüne (Spectre istismarında istenen önbellek vurulma / kaçırma olup olmadığını belirlemek için), kısıtlamalar koydu. Beyaz kağıdın yazılması sırasında, Spectre yazarı, HTML5'in web çalışanı özelliğini kullanarak yüksek hassasiyetli bir zamanlayıcı oluşturabildi.
Tam zamanında derleme (JIT) derleyicisi tarafından yürütülen makine kodunun dikkatli kodlaması ve analizi, önbellek temizlemenin ve istismarcı okumaların optimize edilmediğinden emin olmak için gerekliydi.


## Etkisi.
2018 itibarıyla hemen hemen her bilgisayar sistemi, masaüstü bilgisayarlar, dizüstü bilgisayarlar ve mobil cihazlar dahil olmak üzere, Spectre'den etkilenmektedir. Spectre'nin spesifik olarak Intel, AMD, ARM tabanlı ve IBM işlemciler üzerinde çalıştığı görülmüştür. Intel, bildirilen güvenlik açıklarına resmi bir açıklama ile yanıt verdi. AMD, işlemcilerinin Spectre-V1'e karşı savunmasızlığını kabul etti ancak mimarisindeki farklılıklardan dolayı “sıfıra yakın istismar barındırma riski ” iddiasıyla işlemcileri üzerinde Spectre-V2'ye yönelik güvenlik açıklığının henüz bulunmadığını belirtti.
Araştırmacılar, Spectre açığının bazı Intel, AMD ve ARM işlemcileri etkileyebileceğini belirttiler. Özellikle spekülatif yürütüm yapan işlemciler bu güvenlik açıklarından etkilenmektedir.
ARM, işlemcilerinin çoğunun savunmasız olmadığını belirtti ve Spectre açığından etkilenen belirli işlemci çekirdeklerinin bir listesini yayınladı: Cortex-R7, Cortex-R8, Cortex-A8, Cortex-A9, Cortex-A15, Cortex -A17, Cortex-A57, Cortex-A72, Cortex-A73 ve ARM Cortex-A75
Spectre, bulut sağlayıcılar üzerinde Meltdown'dan daha büyük bir etki yapma potansiyeline sahiptir. Meltdown, yetkisiz uygulamaların aynı bulut sunucusunda çalışan işlemlerden hassas veriler elde etmek için ayrıcalıklı bellekten okumalarına izin verirken Spectre, kötü amaçlı programların verileri üstte çalışan bir konuk sisteme iletmek üzere bir hiper denetimcinin manipüle edilerek çalıştırılmasına izin verebilmektedir.


## Hafifletme.
Spectre bütün bir saldırı sınıfını temsil ettiğinden, büyük olasılıkla bunun için tek bir yama yapılması mümkün değildir. Güvenlik açığı olan özel durumları ele almak için şimdiden çalışmalar yapılmakta iken, Spectre ve Meltdown'a ayrılmış orijinal web sitesi şunu belirtmektedir: "[Spectre] 'nin düzeltmesi kolay olmadığı gibi, uzun bir süre boyunca bizi rahatsız edecektir." Aynı zamanda DELL bilgisayarlarına göre: Araştırmacılar, kavram kanıtı üretmiş olsalar da, "Bu 'güvenlik açığının' [yani, Meltdown ve Spectre] 'nin hiçbiri [7 Şubat 2018] tarihine dek 'gerçek-zamanlı' bir istismara maruz kalmadığını rapor edilmiştir. "
Ev bilgisayarlarını ve ilgili cihazları güvenlik açığından korumaya yardımcı olacak birkaç prosedür yayınlanmıştır. Spectre yamalarının, özellikle eski bilgisayarlarda, performansı önemli ölçüde yavaşlattığı bildirilmiştir; daha yeni olan sekizinci nesil Core platformlarında, yüzde 2 ile 14 arasında benchmark performans düşüşleri ölçülmüştür. 18 Ocak 2018'de, Meltdown ve Spectre yamaları nedeniyle daha yeni Intel çiplerinde bile istenmeyen yeniden başlatmalar rapor edilmiştir.
Etki azaltma maliyetinin, Intel 64 mimarisi altında işlem bağlam tanımlayıcısı (PCID) olarak adlandırılan bir özellik olan ve bir adres alanı numarası (ASN) olan Alpha altında, seçici etkin sayfalar önbelleği (TLB) boşaltımı özelliği olan işlemciler tarafından azaltılabileceği önerilmiştir. Bunun nedeni, seçici boşaltımın, ESÖ davranışının, tüm ESÖ'yü boşaltmadan işlemler arasında izole edilmek üzere, ESÖ'nün davranış açısından hayati öneme sahip olmasını sağlamasıdır.
Mart 2018'de Intel, Spectre-V1 için değil, yalnızca Meltdown-V3 ve Specter-V2 için donanım düzeltmeleri geliştirdiğini açıkladı. Güvenlik açıkları, süreci ve ayrıcalık düzeyini ayırmayı geliştiren yeni bir bölümleme sistemi tarafından azaltıldı.


### Özel yazılım.
Ev bilgisayarlarının ve ilgili cihazların bu güvenlik açığından korunmasına yardımcı olacak birkaç prosedür yayınlandı.
İlk hafifletme çabaları tamamen sorunsuz değildi. İlk başta, özellikle eski bilgisayarlarda, Spectre yamalarının performansı önemli ölçüde azalttığı bildirildi. Nispeten yeni olan sekizinci nesil Core platformlarında % 2-14 oranında benchmark performans düşüşleri ölçüldü. 18 Ocak 2018'de, nispeten yeni Intel çiplerinde bile istenmeyen yeniden başlatmalar bildirildi.
Web sitelerine yerleştirilmiş JavaScript kodları aracılığıyla Spectre'ın kullanılması mümkün olduğundan Chrome 64, saldırıya karşı varsayılan olarak hafifletme önlemleri içerecektir. Chrome 63 kullanıcıları, Site Yalıtım özelliğini etkinleştirerek saldırıyı manuel olarak azaltabilir (chrome://flags#enable-site-işlem başına).
Mozilla zamanlama saldırılarının engellenmesine yardımcı olmak için Firefox 57.0.4'ten itibaren JavaScript zamanlayıcılarının çözünürlüğünü azaltmakta ve gelecekteki sürümler için planlanan zamana hitap eden teknikler üzerinde ek çalışmalar gerçekleştirmektedir.


### Genel yaklaşımlar ve tartışmalar.
Google, 4 Ocak 2018'de güvenlik blogunda "Retpoline" (dönüş trambolini)  adı verilen ve ihmal edilebilir miktarda işlemci yükü ile birlikte Spectre açığının üstesinden gelebilecek yeni bir teknik açıkladı. Derleyici seviyesinde doğrudan olmayan dallanmaların, istismara yol açmayacak spekülatif sırasız yürütmenin gerçekleştirildiği başka bir hedefe yönlendirilmesi ile yapılmaktadır. x86 komut kümesi için geliştirilmiş olsa da, Google mühendisleri tekniğin diğer işlemcilere de aktarılabileceğini düşünmekteler.
25 Ocak 2018'de Meltdown ve Spectre açıklarını çözmek için mevcut durum ve gelecekte dikkate alınacak hususlar sunuldu.
Intel, Spectre hafifletme işleminin bir hata olmak yerine "güvenlik özelliği" olarak kullanılabileceğini duyurduğunda Linux'un yaratıcısı Linus Torvalds, yamaları "kesin ve tamamen çöp" olarak adlandırdı. Daha sonra Ingo Molnar, İndirekt Dal Sınırlı Spekülasyon (IBRS) mikrokod desteği olmadan Spectre'ı düzeltmek için Linux çekirdeğinde işlev izleme makinelerinin kullanılmasını önerdi. Bu, sonuç olarak, sadece Intel Skylake ve daha yeni mimariye dayanan işlemciler üzerinde bir performans etkisine sahip olacaktı.


## Konuyla ilgili yayınlar.
 -