18 Şubat 2022 Cuma

Spectre Saldırısı

Bu yazıda amacımız, bilişim dünyasında aslında çok yakın bir zamanda keşfedilmiş ve araştırılmaya başlanmış olan Spectre Saldırısı hakkında okurlara kısaca bilgi vermek; saldırının işleyiş mekanizmasından bahsetmektir. Spectre Saldırısı, 2017’de keşfedilmiş ve Ocak 2018’de kamuoyuna açıklanmıştır. Saldırı; Intel, AMD ve ARM gibi günümüz işlemcilerinin birçoğunun kritik güvenlik açıklarından yararlanmaya çalışmakta ve bellekteki gizli verilere erişmeyi amaçlamaktadır [6].

[7]
Saldırıya “Spectre” denmesinin nedeni; aslında saldırının başlıca kaynağı olan “speculative execution” (spekülatif çalıştırma) yani işlemci tarafından okunmakta olan programın koşullu ifadeleri, koşulun doğru olup olmadığına bakmadan önce işlemeye başlamasıdır [4].                                           

Bu isim belirlenirken, James Bond evrenindeki SPECTRE (Special Executive for Counter-Intelligence, Terrorism, Revenge and Extortion) adlı örgütten esinlenilmiş midir insan merak etmiyor değil. Spectre saldırısında kullanılan güvenlik açıkları doğrudan işlemci mimarisinden ve işlemcinin çalışma şeklinden kaynaklandığı için bu tarz bir saldırıya karşı alınabilecek en iyi önlem, işlemci mimarisini tamamen değiştirmek olacaktır. Intel ve AMD gibi donanım şirketleri, Spectre Saldırısı keşfedildikten sonra birtakım önlemler almıştır. Intel’in Spectre saldırısıyla ve bu saldırıya karşı almış oldukları önlemlerle ilgili bir makaleye kaynaklardan erişebilirsiniz.

Spekülatif Çalıştırma

Saldırıyı detaylı bir şekilde incelemeden önce gelin “spekülatif çalıştırma” dediğimiz kavramı biraz daha açıklığa kavuşturalım. Spekülatif çalıştırma, işlemcilerin yüksek performans vermek için kullandığı başlıca tekniklerden biridir.  Şu şekilde bir kod parçasını ele alalım:

if(koşul) {   // giriş

ifade1;

ifade2;

ifade3:

       …

}     // çıkış

Bu kod parçasında “if statement” yani bir koşullu ifade görüyoruz. Programı okuyan mekanizmadan (işlemciden) beklediğimiz hareket önce “conditional” kısmını, yani koşulu sağlayıp sağlamadığımızı kontrol etmek. Koşulu sağlamıyorsak süslü parantez içerisindeki ifadeleri (statement) okumadan devam etmek; sağlıyorsak o ifadeleri çalıştırmaktır. Ancak dediğimiz gibi işlemciler çok daha hızlı çalışmak ve kullanıcılar için en yüksek performansı sağlayabilmek için genellikle spekülatif çalıştırma dediğimiz hareketi yaparlar. Koşul ifadesini okurken belirlenen algoritmaya göre koşulun sonucu hakkında (önceki sonuçlara da dayanarak) bir tahminde bulunurlar. Buna “dal tahmini” denir. Kısaca dal tahmini, dallanmanın hedefini öngörür ve dallanmanın gerçek çalışma yolu bilinmeden çok önce işlemcinin talimatları yürütmeye başlamasını sağlar [2].

Parantezlerin içini okuması gerektiğini düşünen bir işlemci, programın koşulu sağlayıp sağlamadığını tam olarak kontrol etmeden içerideki ifadeleri çalıştırmaya başlar. Koşullu kontrol işlemi tamamlandığında koşul sağlanıyorsa, işlemci kaldığı yerden devam eder ve beklemeden işlemleri yapmaya başladığı için bir nevi kâr elde etmiş olur. Eğer koşul sağlanmıyorsa yaptığı işlemleri yarıda keser (işlemci parantez içerisindeki işlemleri yapmaya başlamadan önceki haline geri döner) ve süslü parantezin dışından programı çalıştırmaya devam eder. Her iki durumda da işlemci, koşul ifadesinin kontrol işleminin bitmesini beklemez ve program boyunca çalışmaya devam eder. Bu yöntem, işlemciyi mümkün olduğunca çalıştırmak ve ondan maksimum verim elde etmeyi amaçlar. Spekülatif çalıştırma, programların kontrol akışıyla sınırlı değildir ancak kontrol akışında meydana gelen değişiklikler, anlaşılması en kolay örneklerden biridir [5]. Farklı bir örnek verilecek olursa, işlemci bir programın aynı fonksiyonunun sıklıkla kullanıldığını öğrendiyse, sorulmadığında bile bu işlevi hesaplamak için boşta kalma süresini kullanabilir ve böylece doğru olduğunu düşündüğü cevabı hazırda bekletir [2].

Nasıl oluyor da aynı anda birden çok ifadeyi çalıştırabiliyoruz (hem şart ifadesini hem de süslü parantez içerisindeki ifadeleri) diye soracak olursanız, günümüz işlemcilerinde vazgeçilmez yöntemlerden biri haline gelen “pipelining” (boru hattı yöntemi) tekniğinden bahsetmek gerekir. Kısaca boru hattı yöntemi, birbirine doğrudan bağlı olmayan işlemlerin paralel bir şekilde aynı anda okunması yöntemidir. Bu yöntem sayesinde işlemci aynı anda hem şart ifadesindeki işlemi hem de süslü parantez içerisindeki işlemleri okuyabilir.

Veri Depolama Birimleri - Önbellek

Spectre saldırısını anlamaya giden serüvenimizde değinmemiz gereken bir diğer nokta şüphesiz önbelleklerdir. Tipik bir bilgisayar mimarisinde küçükten büyüğe birçok farklı hafıza birimiyle karşılaşırız. Bu hafıza birimleri en yavaştan en hızlıya doğru HDD (Hard diskler), SSD (Solid State diskler), RAM (ana bellek) ve CPU içerisinde konumlandırılmış olan önbelleklerdir. Bu hafıza birimlerinin depolama alanını kabaca belirtmek gerekirse günümüzde HDD’lerde 512 GB - 1 TB, SSD’lerde 128-256 GB, RAM’lerde 8-16 GB, önbelleklerde genelde 8 KB - 64 KB büyüklüğünde veriler depolanabilmektedir.  İşlemci, herhangi bir programı çalıştırırken önce önbelleklerini ardından RAM’i kontrol eder. Önbellekler, işlemcinin hemen yanında olduğu ve çok daha az veri depoladığı için önbellekten veri okumak RAM’den veri okumaya kıyasla çok daha hızlıdır. Program sırasında kullanılan veriler, önbellekte bulunamadığı takdirde RAM’den getirilir ve daha sonradan hızlı bir şekilde kullanılabilmek için önbellekte depolanır. 

Spekülatif çalıştırma tekniğinin çalışma mekanizmasını anladığımıza ve önbelleklerin ne işe yaradığını öğrendiğimize göre, şimdi Spectre saldırısını daha yakından inceleyelim. Yukarıda da bahsettiğimiz gibi işlemci, süslü parantez içerisindeki ifadeleri okumaya başladıktan sonra koşulun sağlanmadığının farkına varırsa eski haline döner. Diğer bir deyişle işlemci, ‘yürütmesi gerekmeyen’ kodlardan veri okuyabilir fakat doğru dal seçildiğinde yürütme durumuna geri döner ve diğer dalların neden olabileceği bütün etkileri yok sayar [2]. Ancak bu saldırıdan önce Intel ve AMD gibi dev işlemci firmalarının gözünden kaçan nokta, önbellekte depolanan veriler olmuştu. Program, eski halinde dönüp hiçbir şey olmamış gibi devam etse de bellekten (RAM) cache belleğe getirilen veriler orada kalmaya devam ediyor ve güvenlik açığı oluşturuyordu [3]. İşte Spectre saldırısı da tam olarak bu açıktan faydalanıp önbellekte kalan veriyi çalmayı amaçlamaktadır.

Spektre

Yukarıda da bahsettiğimiz gibi Spectre saldırısı, spekülatif çalıştırma tekniğinin  açıklarından faydalanarak önbellekte depolanan verilere ulaşmayı hedefler. Bir programın bazı önemli verileri kullanıcılardan gizli tutması gerekebilir. Bu yüzden de bu verileri, belleğin kullanıcının erişim izni olmayan bölgelerinde saklar. Bir işlemin verilere erişebilmesi için o verileri görmeye yönelik izni olması gerekir. İlgili program çalıştırılmadan önce gerekli izne sahip olup olmadığı kontrol edilir. Bu kontrol etme işlemine ayrıcalık denetimi denir.
[10]

Ayrıcalık denetimi, kimi zaman beklenenden daha uzun sürebilir. İşlemci, ayrıcalık denetiminin sonuçlanmasını beklerken, spekülatif çalıştırma tekniğiyle söz konusu izni almadan gizli verilerle çalışmaya başlayabilir. İlgili veriler, önbellekte yoksa onlarla daha rahat çalışabilmek için verileri normal bellekten (RAM) önbelleğe aktarır. Teorik olarak veriler hala güvence altındadır çünkü spekülatif yürütme sonuçları donanım düzeyinde de korunmaktadır [1]. İşlem, ayrıcalık denetimini geçinceye kadar verileri göremez; ayrıcalık denetiminin sonucunda izin çıkmadığı takdirde işlemci spekülatif çalıştırmayı durdurur ve koşullu ifadeye geri döner. Bu sefer, izin çıkmadığı için ifadenin içini okumadan programı çalıştırmaya devam eder.

          Sorun da işlem verilere erişim izni almadığı halde korumalı verilerin işlemci önbelleğinde depolanıyor olmasından kaynaklanmaktadır. Daha önce değindiğimiz gibi işlemci, önbelleğe normal belleğe (RAM) göre çok daha hızlı erişebilir. Kötü niyetli bir yazılım; program boyunca kullanılan verilere erişmeye çalışıp hangi verilerin önbellekte depolandığını, hangilerinin normal bellekten getirilmek zorunda kaldığını gözlemleyebilir. Her ne kadar verilere erişemese de önbellekte depolanan veriler için okuma girişimi, normal bellektekine göre çok daha hızlı reddedilecektir. Bilgisayar belleğinin çalışma şekli sayesinde verilerin depolandığı adresleri bilmek, kişinin verilerin ne olduğu hakkında çıkarım yapmasını sağlayabilir.

          Spectre saldırısının çalışabilmesi için izin denetimi sırasında yapılan dal tahmini, işlemciyi söz konusu verilerle çalışmaya itmelidir. Dal tahmini, daha önce de değindiğimiz gibi dallanmanın hedefini öngörmeye çalışır. Gizli verilerle çalışabilmesi için iznin çıkması gerekir. Normal şartlarda gizli veriler için izin çıkmayacağı için verilere anlık da olsa erişebilmenin tek yolu spekülatif çalıştırmadır. Yani işlemcinin iznin çıkacağını düşünmesi gerekir. Bunun için de saldırıyı yapacak yazılımın izin denetimiyle ilgili kod parçasını gizli olmayan verilere erişmesi için önceden defalarca çalıştırması gerekir. Bu sayede işlemci, gizli bir veriye erişilmeye çalışıldığında daha önceden izin alma girişi defalarca olumlu sonuçlandığı için tekrar olumlu sonuçlanacağını düşünür ve dal tahminini gizli verilerle çalışacak şekilde yapar.

Etkiler ve Önlemler

Intel, AMD ve ARM gibi dev bilgisayar donanımı markaları, 2018’den beri bu konudaki araştırmaları sürdürmekte ve farklı çözüm önerileriyle gelmektedir. Spekülatif çalıştırma tekniği, sağladığı yüksek performans artışı dolayısıyla vazgeçilmesi mümkün bir teknik gibi görünmemektedir. Spectre’nin düzeltilmesi kolay değildir ancak Spectre saldırıları, yazılımsal yamalar sayesinde belirli bir seviyeye kadar engellenebilmektedir. Spectre yamalarının eski işlemcilerde performansı gözle görülür şekilde yavaşlattığı bildirilmiştir: yeni nesil işlemcilerde ise %2-%14 arasında performans düşüşleri ölçülmüştür [9]. 18 Ocak 2018’de MIT tarafından DAWG (Dynamically Allocated Way Guard) ve 16 Nisan 2019’da San Diego ve Virginia Üniversiteleri tarafından Context-Sensitive Fencing isimli yeni korunma mekanizmaları geliştirilmiştir. Şirketler ve araştırmacılar, Spectre saldırısına karşı yeni yöntemler ararken bu saldırıdan faydalanmaya çalışan kişiler de boş durmamaktadır. 2021’de San Diego ve Virginia Üniversiteleri’nde yapılan bir araştırmaya göre Spectre saldırısının şu ana kadar alınan hafifletme önlemlerinin birçoğunu aşabilen yeni sürümleri geliştirilmiştir [8]. Ancak makalenin yayınlanmasının ardından Intel, kendi işlemcilerinde aldıkları önlemlerin yeni saldırıları engelleyebildiğini belirtmiştir.

          İşletim sistemleri tarafından çıkarılan yamalar ve donanım seviyesinde alınan önlemler, her ne kadar gelişmiş olsa da daha önce belki de hiç ismini duymadığınız bu saldırıdan sizin de etkilenmiş olma ihtimaliniz çok yüksek. Spectre saldırısı, temelinde donanımsal açıklardan (önbellekte depolanan veriler ve spekülatif yürütme tekniği) faydalandığı için antivirüsler tarafından saptanması son derece zordur [1]. Alabileceğimiz en iyi önlem, yazılım güncellemelerini sık sık kontrol etmek, saldırıya karşı dayanıklı olduğu belirtilen işlemcileri kullanmak ve gerekirse araştırmacılar tarafından geliştirilen yamaları indirmektir. 

 

Kaynaklar

[1] Avast. What are Meltdown and Spectre? [Website] 04.01.2022 tarihinden https://www.avast.com/c-meltdown-spectre#gref adresinden alındı.

[2] Bilge SGT (2016)., Derin Bakış - Meltdown ve Spectre CPU Zafiyetleri. 29.12.2021 tarihinde https://www.bilgesgt.com/wp-content/uploads/2018/01/Derin-Bakis-Meltdown-ve-Spectre-CPU-Zafiyetleri-.pdf adresinden alındı.

[3] Du, W. (2018). SEED Labs - Spectre Attack Lab.  18.12.2021 tarihinde  https://seedsecuritylabs.org/Labs_16.04/PDF/Spectre_Attack.pdf adresinden alındı.

[4] Graz University of Technology. Meltdown and Spectre. [Website]. 18.12.2021 tarihinde https://spectreattack.com/ adresinden alındı.

[5] Intel (2018). Intel Analysis of Speculative Execution Side Channels, White Paper.

[6] Kocher, P., Genkin, D., Gruss, D., Haas, W., Hamburg, M., Lipp, M., Mangard, S., Prescher, T., Schwarz, M., ve Yarom, Y. (2019). Spectre attacks:

Exploiting speculative execution. IEEE Symposium on Security and Privacy.

[7] NME. James Bond 007 - Spectre. [Website]. 18.12.2021 tarihinde https://www.nme.com/reviews/reviews-various-artists-16306-309465 adresinden alındı.

[8] Ren, X., Moody, L., Taram, M., Jordan, M., Tullsen, D. M., ve Venkat, A. (2021). "I See Dead µops: Leaking Secrets via Intel/AMD Micro-Op Caches.," 2021 ACM/IEEE 48th Annual International Symposium on Computer Architecture (ISCA),  pp. 361-374., doi: 10.1109/ISCA52012.2021.00036.

[9] Spectre (security vulnerability). 04.01.2022 tarihinde https://en.wikipedia.org/wiki/Spectre_(security_vulnerability) adresinden alındı.

[10] Spectre [Website]. 30.12.2021 tarihinde https://spectreattack.com/ adresinden alındı. Tasarım: Natascha Eibl. (Common License).

[11] Yarom, Y., ve Falkner, K. (2014). Flush+reload: A high resolution, low noise, l3 cache side-channel attack. 23. USENIX Güvenlik Sempozyumu, SEC’14, Berkeley, CA, ABD.


Yazar: Karahan Sarıtaş

Editörler: Berna Kurt, Fatma Güldoğan

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Hiç yorum yok:

Yorum Gönder

Hikaye Anlatıcılığında Monomit Kuramı

          Birey olarak biz ve içerisinde bulunduğumuz sosyal küre; ailemizden arkadaşlarımıza, beraber vakit geçirdiğimiz insanlardan bir pa...