Anasayfa Makale İşlemcilerdeki Meltdown ve Spectre Açıkları Hakkında Bilmeniz Gerekenler

İşlemcilerdeki Meltdown ve Spectre Açıkları Hakkında Bilmeniz Gerekenler

Intel, AMD ve ARM işlemcilerde ortaya çıkan Meltdown ve Spectre açıkları hakkında bilmeniz gerekenler ve bu açıklardan korunmanın yolları.

Yakın zamanda işlemcilerde tespit edilen iki adet tasarım hatası, bilgisayar veya akıllı telefonlarınızdaki verilerin saldırganlar tarafından ele geçirilmesini mümkün kılıyor.

Meltdown ve Spectre isimli bu iki açık sayesinde saldırganlar, bilgisayarınızda normal şartlarda erişim iznine sahip olmadıkları belleğe erişebiliyorlar. Bu sayede bellekte yer alan bütün bilgiler yavaş da olsa ele geçirilebiliyor. Örneğin tarayıcıya banka şifrenizi giriyorsanız bu şifre başka bir program tarafından kolayca elde edilebiliyor.

Açıklar doğrudan işlemci tasarımının bir parçası olduğundan dolayı sorunu tamamen çözmek için işlemcinizi değiştirmeniz gerekiyor. Öte yandan yazılım ve BIOS güncellemeleri açığı hafifletebiliyor.

Hangi işlemciler etkileniyor?

  • Meltdown açığı, 1995 yılından beri üretilen – 2013 öncesi Atom ve Itanium modeller hariç- neredeyse bütün Intel işlemcilerde yer alıyor. Yine ARM işlemciler de açıktan etkilenmekte. Öte yandan Meltdown açığı AMD işlemcileri etkilemiyor.
  • Spectre ise Intel, AMD ve ARM işlemcileri etkilediğinden dolayı bütün masaüstü, dizüstü, tablet ve cep telefonlarını etkiliyor.

Hangi işletim sistemleri etkileniyor?

Açığın donanımsal olması, sorunu bütün işletim sistemlerine de taşıyor: Windows, Linux, macOS, FreeBDS, Android ve iOS da dahil olmak üzere bütün işletim sistemleri bu açıktan etkilenebiliyor.

Açığın yarattığı tehlikenin boyutunu anlatmak için şöyle bir örnek kullanalım: bir web sitesine girdiniz. Bu web sitesi hacklenmiş ve site koduna zararlı bir JavaScript kodu yerleştirilmiş. Zararlı kod çalıştığında, o an bellekteki bütün verilere erişebiliyor. Örneğin yan sekmede girdiğiniz banka şifreniz de bu açık ile ele geçirilebiliyor. Ya da o an bilgisayarınızda çalışan bir başka yazılıma ait veriler de bu açık ile saldırganlar tarafından okunabiliyor.

Yine birden çok sanal makine çalıştıran bir sunucuda sanal makinelerin birini kullanan saldırgan, makinedeki diğer kullanıcıların verilerine ve hatta sunucu içerisindeki verilere erişebiliyor.

Nasıl korunulur?

İyi haber, henüz bu açığı kullanan bir zararlı tespit edilmedi. Yine de işletim sisteminize ait bütün güncelleştirmeleri yapmanız gerek.

Benzer şekilde tarayıcılarınızı da güncellemeniz gerekiyor. Chrome, 64. sürümü ile birlikte bu açığa karşı yamalanmış olacak. Firefox ise sürüm 57 ile bu açığa karşı korumalı hale geldi. Yine Nexus telefonlar başı çekmek üzere bütün Android üreticileri açık için güncelleme yayınlayacak.

Performansa Etkisi

Son kullanıcıların performans konusunda endişelenmesini gerektirecek bir durum yok. Açık çoğu oyunda performansa etki etmezken bazı oyunlarda %1 ila %4 arasında performans düşüşüne sebep olabiliyor. Asıl performans düşüşü ise sunucularda görülebiliyor. Burada yavaşlama %30’lara çıkabiliyor.

Ne zaman Keşfedildi?

Meltdown açığı ilk olarak Haziran ayında üç bağımsız kurum tarafından tespit ediliyor:

  • Google
  • Cyberus Technology
  • Graz Teknoloji Üniversitesi

Spectre açığı da iki kişi tarafından bağımsız olarak tespit ediliyor:

  • Jann Horn (Google Project Zero)
  • Paul Kocher (ABD’li kriptografi uzmanı, Cryptography Research Şirketinin başkanı)

Açıklar yamaların yapılabilmesi için halktan gizli tutuluyor ve ilk olarak geliştiricilerle paylaşılıyor. Bu bağlamda macOS Aralık ayından beri açığa karşı yamanmış.

Komplo teorisi

Intel CEO’su kısa süre önce bütün hisselerini satmıştı. CEO’nun açığı önceden bildiği iddia ediliyor. Bu esnada Meltdown açığı AMD sistemleri etkilemediğinden dolayı AMD hisseleri büyük bir zıplama gösterdi.

Windows için Meltdown Güncellemesi

Microsoft, Windows 7, 8, 8.1 ve 10 için güncellemeler yayınladı. Kaiser isimli KB4056892 kodlu Meltdown güncellemesi sonrasında:

  • Oyunlarda devasa performans düşüşü yok.
    • Yapılan testlerde bazı oyunlarda %1 ila %4 performans düşerken bazılarında hiç değişiklik yok.
  • İçerik oluşturmada da devasa performans düşüşü yok.
  • NVMe SSD’lerde performans düşebiliyor.
    • Ardışık yazmada %5 performans düşü gözleniyor.

Spectre Güncellemesi

Spectre açığı işlemci tasarımında yer alan bir hata ve aslında açığı, işlemciyi değiştirene kadar tamamen kapatmak mümkün değil. BIOS güncellemesi açığı hafifletiyor fakat tamamen kapatmıyor.

Güncelleme sonrası Intel işlemcinin Branch Prediciton özelliğinin agresifliği azaltılıyor. Bu da işlemcinin IPC performansını azaltıyor. Şimdilik sadece ASUS güncelleme yayınladı ve bu da sadece Z370 anakartlar için. Diğer üreticiler de yakın zamanda BIOS güncellemesi yayınlayacak.

Öte yandan Google ve diğer teknoloji devleri açığın etkilerini azaltmak için yeni yöntemler üzerinde çalışıyor. Fakat yapılan açıklamalar konu hakkında daha iyi fikir edinmemizi sağlıyor: “Spectre, düzeltmesi kolay bir açık değil; bizi uzun zaman boyunca uğraştıracak.”[Kaynak]

Peki bu açıklar neden ortaya çıktı?

İşlemci üreticileri uzun zamandır saat frekansı ve çekirdek artırmaktan başka performans artırmanın yollarını arıyordu. Burada en etkili yollardan birisi işlemci içinde yer alan önbelleği artırmak oldu zira sistem belleğine erişme zaman alan bir işlem.

İkinci büyük gelişme ise aynı anda birden çok komut setini birden çalıştırmak oldu.

Üçüncü en büyük ilerleme ise spekülatif çalıştırma oldu. İşlemci, daha önce yaptığı işlemlerin bir kaydını tutuyor ve bir sonraki işlemde bu kayda bakarak aynı işlemi tekrarlıyor. Yani işlemci, daha yönerge gelmeden, kodu daha önceki örneklere göre tahmin edip çalıştırıyor. Her sabah gittiğiniz restoranda aynı kahvaltı siparişini verdikten sonra zamanla aşçının siz gelmeden siparişini vereceğiniz kahvaltıyı hazırlaması gibi.

İşlemci burada yapmaması gereken bir işlem varsa bunu geri alabiliyor. Fakat bunu yapamadığı durumlar da olabiliyor. Bunun iki sebebi var: önbellek. Önbelleğe kopyalanan her şey halen daha önbellekte duruyor. İkincisi de Branch Predition History, yani işlemcinin daha önce seçtiği yola ait kayıtlar. Bu iki kısım performans için büyük önem taşıyor ve bu yüzden işlemci burada depolanan verileri silmiyor.

Meltdown nasıl çalışıyor?

Meltdown açığı ile bir komut seti, önbellekte yer alan bu veriler üzerinden kernel içerisindeki korumalı bir alanda yer alan değerleri okuyabiliyor. İkinci komut seti ise kernel belleğinden okunan bu bir bit’i kullanarak A adresinin mi yoksa B adresinin mi okunacağına karar veriyor.

Bu noktada ilk komut setinin durması gerekiyor zira bir kullanıcı işlemi, korumalı işletim sistemi çekirdeğine ait belleğe erişmeye çalışıyor. Fakat tam da bu noktada, kullanıcının bu belleğe erişip erişemeyeceğine karar verilen kontrol aşamasında, Branch Prediction kullanılıyor. Yani işlemci burada bir karar verip hangi daldan (Branch) gideceğine karar vermeli: ya bu adrese erişilebilir kararı ya da bu kural dışı (exception).

Neredeyse bütün adres erişim taleplerinde bir sorun olmadığından hemen hemen kesinlikle komut çalıştırılacak ve bir sonraki komuta geçilecektir. Bu durumda ikinci komutun da kernel belleği içerisinde işlem yapması ve kapatılmadan önce bellekte hedeflediği kısımdan veri yüklemesi mümkün olmaktadır.

Bir sonraki aşamada çekirdeğe erişmeye çalışan bu işleme kural dışı işlem komutu gönderilir ve işlem sonlandırılır. Fakat bu işlem bir defa veriyi işlemci içinde yer alan önbelleğe almıştır ve artık buraya çok daha hızlı erişebilecektir. Bu aşamada zararlı kod, iki farklı konum üzerinde yükleme hızı testi (timing) yapar ve hangi bit’in kernel’da olduğunu tespit eder. Sonrasında önbelleği boşaltır ve bir sonraki bellek bit’i için işlemi tekrarlar. Sonuç olarak tamamen buna adanmış bir işlem, bit bit bütün belleği okuyabilir.

Standart bir kullanıcının bu veriye erişebilmesindeki sebep ise çekirdek belleğinin kullanıcıya ait işlemlerin belleğine haritalanmasıdır. Böylece çekirdeğe herhangi bir sistem çağrısı yapıldığında, kernel gerekli bütün veriyi sağlayabilecektir. Tabii ki bu veri halen koruma altındadır ve normal şartlarda bir kullanıcı işlemi, izni olmayan bir kernel verisine erişmeye çalıştığında kural dışılık (Exception) hatası alır.

Birçok durumda bunun çözümü kernel belleğini artık kullanıcını alanına eşlememektir. Bir sistem çağrısı yapıldığında bellek eşleşmesini değiştirecek, sonra sistem çağrısını gerçekleştirecek ve sonrasında bellek eşleşmesini temizleyecektir. Fakat bu işlem çok fazla ek yük bindirecektir ve bu yüzden çekirdeğe erişmeye çalışmak %30 gibi bir oranda performans düşüşüne sebep olabilir.

Spectre açığı

Bu açık da Branch Prediciton üzerinden çalışıyor. Kernel hafızasını okumak yerine bellekteki tampon kısmın dışına erişmeye çalışıyor. Burada işlem eğer bir sanal makine tarafından yönetiliyorsa, örneğin tarayıcı içerisindeki bir JavaScrpit motoru, açığı kullanarak tarayıcı içerisinde rastgele bir bellek okunabiliyor. Saldırgan bu sayede çerezler ve erişim bilgilerine erişebiliyor.

Açığın bir başka kullanım şekli ise Branch Prediciton kodu kullanan bir işlem olduğunu biliyorsanız -ki hepsi kullanıyor- Branch Predition önbelleğini zehirleyip, önbellek gecikmesini kötüye kullanabilir ve böylece verileri okumaya zorlayabilirsiniz. Önbellek zamanlaması burada side-channel saldırı için kullanılabiliyor. Burada işlemci tasarımcısı kasten veri sızdırmayı amaçlamıyor fakat saldırgan, bu işlemin bir şekilde veriyi açığa çıkardığını tespit ediyor. Yani veri burada istemsiz bir şekilde sızdırılmış oluyor.

Açıkların Kodları

  • İlk varyant: Spectre (CVE-2017-5753)
    • AMD, Intel ve ARM işlemciler etkileniyor
    • İşletim sistemi güncellemesi ile hafifletilebiliyor
    • Güncelleme sonrasında performansta fark edilir bir değişiklik olmuyor.
  • İkinci Varyant: Spectre (CVE-2017-5715)
  • Üçüncü Varyant: Meltdown (CVE-2017-5754)
    • Intel ve ARM işlemcilerde var
    • Yazılım güncellemesi ile çözülebildi

Açıktan etkileniyor muyum?

Windows ortamında açıktan etkilenip etkilenmediğinizi hazırlanan bir script ile öğrenebilirsiniz.

Ayrıntılı rehber için:

Meltdown ve Spectre Açıklarından Korunma Rehberi

  • Öncelikle buradaki Sciprt’i indirin: https://gallery.technet.microsoft.com/scriptcenter/Speculation-Control-e36f0050
  • ZIP dosyasını klasöre çıkartın ve klasörü de tercihen C:\ sürücüsüne kopyalayın. Klasör konumu şu şekilde olsun: C:\SpeculationControl
  • Şimdi başlat menüsüne sağ tıklayın ve PowerShell’i açın.
  • Burada şu komutları girin:
    • cd C:\SpeculationControl
    • Set-ExecutionPolicy RemoteSigned -Scope Currentuser
  • Çıkan soruyu “A” ve Enter’a basarak onaylayın.
  • Şimdi şu iki komutu girin:
    • Import-Module .\SpeculationControl.psd1
    • Get-SpeculationControlSettings

Burada “Hardware requires kernel VA shadowing: False” yazıyorsa açıktan etkileniyorsunuz demektir. Bu durumda anakart/sistem üreticinizin BIOS/Firmware güncellemesini yapmanız gerekiyor demektir. Script zaten sizi bu konuda uyaracaktır:

  • Speculation control settings for CVE-2017-5715 [branch target injection]
  • Hardware support for branch target injection mitigation is present: False
  • Windows OS support for branch target injection mitigation is present: True
  • Windows OS support for branch target injection mitigation is enabled: False
  • Windows OS support for branch target injection mitigation is disabled by system policy: False
  • Windows OS support for branch target injection mitigation is disabled by absence of hardware support: True

Speculation control settings for CVE-2017-5754 [rogue data cache load]

  • Hardware requires kernel VA shadowing: False

Suggested actions

* Install BIOS/firmware Güncellemesi provided by your device OEM that enables hardware support for the branch target injection mitigation.

  • BTIHardwarePresent             : False
  • BTIWindowsSupportPresent       : True
  • BTIWindowsSupportEnabled       : False
  • BTIDisabledBySystemPolicy      : False
  • BTIDisabledByNoHardwareSupport : True
  • KVAShadowRequired              : False
  • KVAShadowWindowsSupportPresent : True
  • KVAShadowWindowsSupportEnabled : False
  • KVAShadowPcidEnabled           : False

Ek Kaynaklar

Firma Bağlantı
Intel Güvenlik Tavsiyesi    /    Haber Odası    /     Resmi Rapor
ARM Güvenlik Güncellemesi
AMD Güvenlik Bilgisi
RISC-V Blog
NVIDIA Güvenlik Bülteni   /    Ürün Güvenliği
Microsoft Güvenlik Rehberi    /    Anti-virus yazılımlarına dair bilgi    /    Azure Blogu    /     Windows (İstemci)    /     Windows (Sunucu)
Amazon Güvenlik Bülteni
Google Project Zero Blogu    /     Bilmeniz gerekenler
Android Güvenlik Bülteni
Apple Apple Destek
Lenovo Güvenlik Tavsiyesi
IBM Blog
Dell Bilgi Tabanı   /   Bilgi Tabanı (Sunucu)
HP Zafiyet Uyarısı
Huawei Güvenlik Bildirimi
Synology Güvenlik Tavsiyesi
Cisco Güvenlik Tavsiyesi
F5 Güvenlik Tavsiyesi
Mozilla Güvenlik Blogu
Red Hat Zafiyet Cevabı   /    Performans Etkisi
Debian Güvenlik İzleyicisi
Ubuntu Bilgi Tabanı
SUSE Zafiyet Cevabı
Fedora Kernel Güncellemesi
Qubes Duyuru
Fortinet Tavsiye
NetApp Tavsiye
LLVM Spectre (Tür #2) Yama   /    İnceleme: __builtin_load_no_speculate   /    İnceleme: llvm.nospeculateload
CERT Zafiyet Notu
MITRE CVE-2017-5715   /    CVE-2017-5753    /     CVE-2017-5754
VMWare Güvenlik Tavsiyesi   /    Blog
Citrix Güvenlik Bülteni   /    Güvenlik Bülteni (XenServer)
Xen Güvenlik Tavsiyesi (XSA-254)   /    SSS