Şimdi Ara

Son 9 yılın AMD işlemcileri sızıntıya sebep olabilecek açığa sahip (3. sayfa)

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
60
Cevap
0
Favori
2.199
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: önceki 123
Sayfaya Git
Git
Giriş
Mesaj
  • Biraz öyle oluyor maalesef. Valla Melih hocamızın bilgisi gayet iyi.
  • Konudaki partizanlığı es geçiyorum, görmezden geliyorum.
    Başlıktaki partizanlığı da es geçiyorum. Lakin, çok güzel bir biçimde meltdown ile aynı ayarda değil denmiş.
    Lakin hata şurada; bu açık spectre ile denk. Yani yeni meni değil. Meltdown ve spectre'den az derken önceki spectre açığına meltdown açığı gibi yetkisiz seviye yükseltmesi yapmış oluyorsunuz. Meltdown>spectre=takeaway.
    Haber yazıyorsanız bari nesnellik adına hatanın adını da koyun ki, karşılaştırılabilir bir nesnellik olsun öncekileriyle, hepsini aynı tutan öznel kanaatinizle haberin içini dışına çıkarmayın.
    Hayırlı olsun Çağrı kardeş bu arada. Sen de ahmet.'in kürek mahkumusun demek. Takeaway hatasının konusu olduğunu mini siteden standart görünüme geçtik de kaynakçada gözüküyormuş bari, her okuyan benim kadar merakta kalmamıştır eminim.



    < Bu mesaj bu kişi tarafından değiştirildi Mete Can Karahasan -- 10 Mart 2020; 23:27:31 >
    < Bu ileti mini sürüm kullanılarak atıldı >
  • Bu açık şimdi mi söyleniyor?

    < Bu ileti DH mobil uygulamasından atıldı >
  • Gritek G kullanıcısına yanıt
    Açık maçık değil, erişim maruziyeti. L1d önbellekten atılan verilere kısa süreli erişim veriyor, o da erişilmeyen atılan veriye. Dolaylı açık.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • çöpe atılan aes anahtarına erişim. vay anasını açığa bak, çöpçatanlık mı yapacaksınız?

    < Bu ileti DH mobil uygulamasından atıldı >
  • ahmetay74 A kullanıcısına yanıt
    Aes anahtarına erişim değil, çakışma adres çözümlemesi. L1d üzerindeki belleğin ikinci çekirdek üzerinden erişildiği takdirde yerinden edilmesine sebep oluyor deniyor. Yani neye eriştiğini bileceksin, erişeceksin tahmini olarak, yerinden edeceksin ve üst seviye belleğe düşmesine yakın çakışma sırasında takip eden çekirdekte yetki erişim boşluğu yakalayacaksın. Erişim olmuyor, çünkü yerinden etme tayini olduktan sonra yine program belleğinin dışında kalıyorsun. Olay, bellek çakışması gerçekleştiği süre dahilinde olup bitmeli, üst seviye belleğe geri düşmeden.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Mete Can Karahasan kullanıcısına yanıt
    şöyle açıklama göreyim kurban olayım hocam. teşekkürler.

    < Bu ileti DH mobil uygulamasından atıldı >
  • ahmetay74 A kullanıcısına yanıt
    L1 gecikmesi ile l2 mi l3 mü artık neyse ne, o süre dahilinde bir mov komutu attığını düşünüyorum. O komut başladı diyelim, l2s devreye girdi. Bunların gecikmelerini hesaplayalım, şayet bu esnada ikinci bir mov atabiliyorsak, işte o sıra veri çıkışı başlıyor. L2 ya da l3 gecikmesine 2 mov bir l2s sığıyor mu ben anlamam. Anlayan izah etsin.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Şunu da tam anlamadım: aynı adrese iki sanal(mantıksal?) adres eşleme olması gerekiyor. Bunun olması için smt olması lazım. Kaparsın, smtyi bitti, gitti.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Şunu da diyim, şaibe tacirliği yapacaksanız bari şu sizin ateşinizi söndürsün:
    quote:

    AMD has worked hard on the performance of these L1D caches, an essential condition in optimal performance of a high frequency architecture (remember that the L1D on the Pentium 4 Northwood had a record latency of 2 cycles). AMD has used the ‘replay’ mechanism already used by Intel on the Pentium 4. ‘Replay, logic-track, re-execute’ is a prediction technique that speculates on which way the required data will take. In the case of misprediction, which is to say if the wrong piece of data is pre-extracted, only the instructions involved are executed again. Bulldozer’s L1D should thus have a 4 cycles latency.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Şunu da diyelim, bu hata veri kaybından önce veri bozulmasına yol açardı, eğer l1d belleğe atılmadan doğrudan iletim olmasa, l2sda bekleme yapsa, o takdirde veri tutarlılığı problemleri olabilirmiş. Intel açısından da böyle gözlemlenmeli anlayacağınız, rowhammer riski mevcut.
    quote:

    The reason for making the Bulldozer caches WT is to reduce the latency in the case of a cache miss. If there’s a cache miss, an L1 line is evicted and a WB relationship would trigger writing of the line to the L2. In WT mode however, the write has already taken place at the time the data was copied to the L1, so no operation is then required. WT also guarantees that the data between the cache levels is identical, which simplifies coherence.

    < Bu ileti mini sürüm kullanılarak atıldı >
  • Benim pc nin her yeri açık olsa nolacak sanki 😆 ille de AMD

    < Bu ileti DH mobil uygulamasından atıldı >
  • quote:

    Orijinalden alıntı: Jake Lockley

    evet odur gördüğünüz.Emekli Jandarma Albay diye biliyorum ben.

    Hocam konuda bahsiniz geçti baştan bir bakın.bıktınız bu konudan ama iki satır sizin de görüşünüzü almak isteriz.

    Alıntıları Göster
    Mete Can Karahasan üstad konuya kısaca değinmiş.

    Herkes AMD'de ilk açık diye düşünüyor ama doğru değil. AMD'de daha önce de açık çıkmıştı. (bununla ilgili yazmıştım)

    Bu açık PSP vulnerability (Platform Security Processor zayıflığı) diye bilinen açıktır. PSP birimi ARM yapısında olup işlemci içinde ayrı bir işlemcidir ve sistem-bileşen-veri-işlem tutarlılığını denetler-sağlar. Linux benzeri özel bir kod yürütür. PSP birimi ARM mimarisi olduğundan teorik olarak tüm Meltdown-Spectre açıklarına sahiptir. Ancak kendi cachesi olmadığından Spectre grubu açıklar işlemez. Meltdown grubu teorik olarak işlese de pratikte işlemez. Zira PSP spekülatif çalıştrma yapamaz, sadece tek bir uygulamayı lineer olarak çalıştırabilir. Bu durumda tek program hedef mi saldırgan mı olacak durumu ortaya çıkar. Programın kendi kendine saldırıp kendi verisini çalması gibi absürd bir durum ortaya çıkacağından Meltdown açıkları da işe yaramaz.

    Benzer bir açık Intel işlemcilerde de vardır ve yazılımla kapatılması çok zordur. Özellikle bulut sunucularda komşu serverleri hüpletmede çok işe yarar. AMD'de ise kullanımı kısıtlıdır, buna dayanan 1 veya 2 saldırı grubu (Ryzenfall-chimera vb 13 alt teknik) bilinmektedir. ABD borsa manipülasyon ve DDOS saldırısında kullanıldığı düşünülmektedir. Pek riskli değildir zira açıkların etkin hale geçmesi için de yönetici onayı (sistemi administrator olarak açtıysanız siz) gerekmekte, Intel'dekiler gibi doğrudan çalışmamaktadır.

    Açık aslında bir hatadan kaynaklanmamaktadır. Sistem bileşenleri arasında yoğun kullanımda performansı artıran kısayollar-bağlantılar kurmayı sağlayan bir yöntemi istismar eder. Mesela ağ kartına veya harici USB cihaza erişirken her veri paketinde, yol denetimi, yönlendirmesi, paket düzenlemesi, header düzenlemesi, protokol ayarı vb vb işlerin tekrar tekrar yapılması gerekir. Bu durumda ise adanmış bir yol oluşturulup, ayarlar bir kere yapılarak, veri paketlerinin daha hızlı iletilmesi söz konusudur. İstismar buna dayanır, kurala uygun ayarlar yapılıp, kısa yol açılır ama kurala uymayan-modifiyeli-zararlı paketler gönderilir.

    Bu açık tamamen kapatılmıştır. Windows artık buna yönetici onayını istemeyi ve almayı engellemektedir. Yeni modellerde yoktur, eski sistemlerde BIOS üzerinden kapatılmıştır, BIOS güncellediyseniz açık yoktur. Aslında bir AÇIK değil yan kanal saldırısı söz konusudur, yoksa sistem istismar edilmediğinde doğru çalışmaktadır. Mesela ekmek bıçağı ile ekmek kesersek normal kullanmış oluruz, ama adam kesersek amacının dışında (yan kanal saldırısı) kullanmış oluruz.

    AMD işlemlerde hiçbir Meltdown grubu (işlemcideki koruma mekanizmalarını atlatan açıklar) açığın olmamasını Intel'in aksine perf pahasına sıkı spekülatif çalıştırma denetimi (uOPS işaretlemesi dahil) oluğunu daha önceleri yazmıştım. Spectre grubunun da (yetkimiz olmayan veriye erişmeyi sağlayan açıklar) yapılan mutlak hedef-kaynak yetki-uygunluk kontrolü nedeniyle işlemediğini yazmıştım. Intel burada da nadir kontrol yapar.

    Aslında cache nedeniyle (Intel de AMD'nin yana bakan cache mimarisini kullanır) teorik olarak Spectre grubu açıkların AMD işlemcilerde de çalışması beklenir. Hatta ilk başlarda açık var diye bile gösteriliyordu. Ancak yukarıda bahsettiğimiz mutlak hedef-kaynak kontrolü nedeni ile Spectre grubu açıklar işe yaramaz. AMD verileri Intel gibi denetlemeden küt diye cacheye atmaz. (Bu denetimi de PSP yapar) Bu yüzden cacheden veri sızdırmak çok zordur, genelde çalmak istediğiniz değil zaten size ait olan veri gelir elinize ve bir işe yaramaz. Size ait olmayan veri ise rastlantısaldır (denetimi geçemediğinden eşleme yapılmamıştır) ve neye ait veya ne olduğu tamamen belirsizdir. Doğru veriyi bulmak anlamsız derecede zor ve uzun süreli olur.

    Bu yeni teorik açık da buna dayanıyor. Anlamak için zaman duyarlı yan kanal saldırısı ve cachenin işleme mantığını biraz bilmek gerekiyor.

    Öncelikle L1 cacheler segment+offset duyarlıdır. L1 Code/Inst cachede çekirdekte çalışan kodun (CS segmenti) verileri cachelenir, L1 Data cachede ise kullanılan bilgiler (DS segmenti) cachelenir. L1 cacheler çekirdek içinde (L2 bitişiğinde, L3 dışında) bulunduğundan başka bir çekirdekte çalışan kod tarafından erişilmesi mümkün değildir. Yani Spectre ile L1'den veri çalınamaz. (Intelde de çalınamaz, gelende L3 üzerinden çalınır her çekirdek erişebildiğinden)

    Bunu aşmak için aynı çekirdekte (L1 cachenin ait olduğu) çalışan iki kodun da aynı segment adresine sahip olması gerekir. 32 bitte win buna izin vermez. 64 bitte ise zaten tüm segmentler 0 adresinden başlar. Ancak segment register tanımlama kayıtları farklıdır, burada bunu da eşlemek gerekecektir. Yani iki kod da aynı segment tanım koduna sahip olmalıdır.

    Bu da yetmez, doğru alanı eşlemek için segmentlerin lineer adresleri de yanı olmalıdır. Win önce segmentleri sanal adresler ile oluşturur, sonra sayfaları ayarlayarak lineer adres oluşturur. TLB birimleri ise bunu fiziksel adrese çevirerek belleğe erişimi sağlar. Sanal adres demek segmentin boyuna göre 4 KB boyunda sayfa dizisi oluşturmak demektir. (Segment tanım kaydında kaydında başlangıç sayfası, ve Index-page tablo dizisi) Daha sonra bu sanal sayfa dizisini gerçek fiziksel bellek sayfaları ile eşler.

    Örneğin 8 KB boya sahip A-B programları sanal olarak 0 ve 1 sayfalarına (her biri 4 KB) sahiptir. Lineer adreste ise gerçek fiziksel sayfa nuaraları A=100,200 ve B=300,400 numaralı sayfalar olabilir. A programı kendi sanal 0 sayfasına eriştiğinde çekirdekteki adres üretici (AGU) bunu 100 nolu sayfa olarak TLB birimine iletir ve TLB de kendi denetimini (sayfa sanal bellekte olabilir vb) yaparak fiziksel belleğe erişir. Burada sorun B programının sanal 0 sayfasından veri çalacak olan A programının sanal 0 sayfasının farklı gerçek fiziksel adrese sahip olmasıdır.

    En kolay çözümü iki 0 sanal sayfanın da aynı fiziksel sayfayı göstermesini sağlamaktır. Ancak win buna engel olur. AMD işlemcilerde ise PAT diye bilinen (Page Atrributes Table) özellik buna zaten izin vermez. Intel olanlarda Meltdows grubu bir saldırı yaparak TLB girdisini veya segment tanımlama bilgisini (başlangıç sayfası-entry page) değiştirerek bunu aşabiliriz. Ancak bir segementin entry page veya TLB bilgisini değiştirebildi isem zaten segemntteki tüm veriye erişirim. Daha ne uğraşayım, direkt dalarım. Dolayısı ile bu yöntemi denemek de anlamsız olur.

    Geriye tek teorik zayıflık kalıyor. Bunun için öncelikle fiziksel sayfalar eşleşmese de sanal sayfaların eşleşmesi ve offset adreesinin bilinmesi lazımdır. Yani ulaşmak istediğimiz veri segmentin hangi sayfasında ve satırında. Ardından task switch işlemi sırasında yapılan Cache Flush/Refresh işlemine müdahale edebilmeli ve uygun ayarları tutturmuş olmamız lazım.

    L1C/L1D cachedeki her verinin bir kopyası L2 cachede, L2 cachedeki her verinin bir kopyası da L3 cachede bulunur. L1 cacheler hem segment bağımlı hem offset bağımlı, hem de satır yapısındadır. L1C/L1D cachedeki veriler kod (CD) ve data (DS) segmentlerinin offset adreslerine göre tutulur. 64 bit sistemde 64 KB L1 cache demek her biri 8 byte (64 bit) tutan 8192 veri demektir. L1 cahede veriler hizalıdır (aligned) ve ardışıktır. Veri 1 Byte veri bile olsa L1 cachede yine 8 byte kaplar. Bu yüzden L1 cacheler adete register gibi hızlı işler.

    L2 cache de segment duyarlıdır ama birden çok segmenti (kod-data vb) içeren veri tutabilir. Bu nedenle L1 gibi hizalı değildir, veriler 4 satırlık paketler halinde tutulur. Offset adresinden etkilenmediğinden verilerin sıralı bulunma olasılığı da çok düşüktür. 4 satırlık paketler en az kullanılan kümelere göre dinamik olarak dağıldığından yerinin tespiti de zordur. Üstelik uygulama birden çok kod-data segmenti de kullanabilir ve işi daha da zorlaştırır.

    L3 cache ise uygulama-çekirdek-segment vb işlerinden bağımsızdır. L3 cachenin adreslenmesi fiziksel belleğe göredir ve Burst Mode bellek erişim metoduna (her seferde 4 satır erişim) göre ayarlanmıştır. Veriler hizalı değildir ve 4 satırlık paketler halinde en az kullanılan kümelere dinamik olarak yerleşirler. Bir veri paketinin hangi kümeye yerleşeceğini etkileyen çok sayıda faktör vardır.

    Görüldüğü gibi her seviye cachenin çalışması farklıdır ve yüksek oranda (L1 hariç) rastlantısallık içerir. L1-L2 olanlara çekirdek dışından erişilemediğinden veri sızdırmada genelde L3 bellek hedeflenir. Burada problem ise segment-sayfa-offset eşlemenin çok zor olmasıdır, zira L3 fiziksel belleği aynalar.

    Mesela benim FX-8320 işlemci 8 MB L3 içerir, 64 yollu küme birleşimlidir (64 way set associative) ve her küme uzunluğu 64 bytedir (64 bit işlemci için her satır 8 byte, 4*8=32 byte burst paketi, iki kanal bellek için 64 byte). 8320 içinde 8 çekirdekte 32 adet 64 bit tamsayı birimi, modüllerde 8 FMAC içinde gruplanmış 64 adet 64 bit kayar nokta ve 16 MMX birimi, 4 decode, 4 fetch, 8 load, 8 store birimi vardır (toplam 132). Bunların hepsi cachelere-belleğe erişmeye ihtiyaç duyarlar ve aynı anda kaçının eriştiği önceden bilinemez.

    L3 cache yarı dinamiktir, boş yer olduğu sürece bilgiler tutulmaya devam eder ve belleğe geri yazılmaz. Ancak Writeback metodu ayarlandıysa belleğe de geri yazılır. Boş yer kalmadığında en az kullanılan kümeler (her biri 64 byte) belleğe geri yazılır ve yeni veriler yüklenir. Invalidate/clflush vb gibi komutlarla değişmiş tüm veriler geri yazdırılabilir veya buna ilaveten cache boşaltılabilir.

    L2 cache ise çekirdekte çalışan uygulama değiştiğinde dinamik olarak yenilenir. İçindeki değişmiş öbekler L3 cacheye yazılır ve boşaltılır. Yeni uygulamanın verileri komple yüklenmez, uygulama çalıştıkça yüklenirler. Yer kalmazsa en az kullanılan öbekler L3 cacheye yazılır ve yeni veriler buraya yüklenir. L1 cache de dinamiktir. Çekirdekte çalışan uygulama değişince L2 gibi yenilenir. Ancak L1 için çalışan uygulama değişmese de kod/data segmentleri değişti ise L1C/L1D cacheler yenilenir. Yenileme işleminde değişen veriler hep bir geriye (L1->L2, L2->L3, L3->Mem) olacak şekilde yazılır.

    Bu açık çekirdekte çalışan uygulama değiştiğinde (task switch) boşaltılan (invalidate) L1-L2 cachelerin L3 cacheden tekrar doldurulması (refresh) işlemini istismar etmeye çalışmaktadır. Cachenin boşaltılmasına müdahale edilemez, zira tek komutla ve tamamen işlemci tarafından yerine getirilir. Araya kod girmek mümkün olmadığından istismar da mümkün değildir. Ancak task switch sonrası cacheler komple değil, kullanıldıkça tazelendiğinden cacheler arası hız-gecikme farkını istismar etmek mümkün olabilir. Ancak bu sanıldığından çok daha karmaşıktır.

    Buna geçmeden önce zaman duyarlı yan kanal saldırısına biraz değinelim. Kolay anlaşılsın diye ilkinde C/C++ vb dillerin yamanmamış halinde bulunan bir özelliği istismar edeceğiz ve bir parola kırmaya çalışacağız. (şu anda bunu yamanmamış halini bulmak zordur, uğraşmaya değmez) Parolamız 'BDFH' olsun. Biz kaba kuvvet benzeri (tam kaba kuvvet değil, tüm olasılıkları denemiyoruz) bir yöntem uyguluyoruz. Parola olarak 'AA' gönderiyoruz. İlk harfler uymadığından hemen red dönüyor. Sonra parola 'BA' gönderiyoruz. İlk harfler uyuyor ama ikincide red dönüyor. Ancak bu 1 yerine 2 harf kontrol edildiğinden red cevabı daha uzun sürüyor.

    Birkaç deneme ile sonuca ulaşamayız ama yeteri kadar deneme yaptığımızda B ile diğer harfler arasında red cevabında ölçülebilir bir zaman farkı olacak ve B ile başlayan grubun süresi az ölçülecektir. Böylece parolanın ilk harfinin B olduğunu tahmin edebilir ve sonraki harfleri de benzer yöntemle tahmin bulabiliriz. Bu açık keşfedilip yamanıncaya kadar çok etkili şekilde kullanılmıştır. (internette fink atan site hesapları filan) Belli sürede belli deneme sınırı veya captcha vb tekniklerin çoğu bunu engellemeye yöneliktir temelinde. Kısa sürede sayısız ihtimali denemeyi önlerler.

    Spectre grubu açıkların çoğu ve bahsedilen bu açık da mantıksal açıdan buna benzer bir yaklaşım kullanıyor. Tabii ki daha karmaşık ve işlemcilerin bellek-cache kullanım mekanizmasını istismar ediyor. Zaman duyarlı yan kanal saldırısı yönemiyle cacheden veri sızdıralım (spectre grubu). Bunun için sızıntı yapacağımız bellek alanı ile kendi bellek alanımızın sanal-lineer adreslerini eşlememiz lazım. (Lüzumsuz kişiler kurcalamasın diye bunu pas geçiyorum. Zaten açığı kullanacak kadar programlama bilen bunu da bilir) Bellek ayarlarını yaptığımızı kabul edelim.

    Öncelikler sızdıracağımız bellek adreslerine rastgele erişemeyiz. İki veri arasında en az 4096 byte (4 KB sayfa boyu) mesafe olmalıdır, yani aynı sayfadaki verilere erişirsek olmaz. Mesela önce 0,4096,8192 vb sonra 1,4097,8193 vb adreslere erişmemiz lazım. Aksi takdirde burst mode bellek erişimi, page interleave ve ileri okuma tahmin mekanizması istediğimizden daha fazla veriyi cacheye atar ve ayrım yapamayız. Açığı ise her seferinde tek satır okuyarak istismar edebiliriz. Bu yüzden erişimi uygun adımla yapmak lazım.

    Sonra da cacheleri boşaltmalıyız ki eskiden kalan verilerle çakışma olmasın, sadece sızdırmaya çalıştığımız veri cachede bulunsun. L1-L2 cachelere çekirdek dışından erişilemediğinden L3 cacheyi kullanmamız lazım. Eşlediğimiz bellek erişimini yaparken cachelemeyi engelleyecek şekilde erişmemiz lazım. Bu durumda veri L1-L2 içine atılmaz. Ancak L3 çekirdek değil bellek eşgüdümlü çalıştığından tamamen kapatmadıkça veri L3 belleğe alınır. Böylece yine diğerleri ile karışmasını önleriz.

    Ardından sızdırmak istediğimiz bize ait olmayan bellek alanına bir erişim deneriz. İşlemci koruma hatası (exception) üretir ve veriyi bizim verdiğimiz hedefe (bellek-register) atmaz. Windows da exceptionu yakalar ve hata işleme işini devreye sokar, bizi uyarır. Bizim bu hatayı bastırmamız (error handling de bilmemiz) lazım. Ama Intel işlemcilerde veri L3 cacheye atılmış olur ve geri alınamaz. Pardon deyip hatayı bastırırız ve aynı adrese bu sefer kendi bellek alanımızdan (segmentimizden) erişiriz. Doğal olarak burada sorun olmaz.

    Eğer eriştiğimiz veri cachede ise (sızdırmaya çalıştığımız) hızlı okunacak, değilse (kendi bellek alanımız) daha yavaş okunacaktır. Sızdırılan verinin hangi cache kümesine atıldığını bilemeyiz. Bu yüzden tek erişim ile tespit etme imkanı yoktur, çünkü zaman farkı ölçülmayecek kadar küçüktür. Çok sayıda deneme yaparak zaman farkını ölçülebilir kadar artırırız ve kısa sürede gelen satır (veri) sızdırdığımız veri olur. AMD ise Intel gibi veriyi küt diye cacheye atmadığından genelde istene veriye ulaşamayız ve rastlantısallık nedeni ile zaman farkını tespit etmek imkansıza yakındır.

    Bu açık da cacheler arasındaki zaman (gecikme) farkını istismar ediyor. Task witch ile cacheler boşalıyor, yeni task yüklendiğinde L1-L2 cacheler tekrar L3 cacheden doldurulmaya başlıyor. L3 cachenin gecikme süresi L2-L1 ve işlemciye göre oldukça uzun. Bu açık bu araya başka bir okuma sıkıştırarak çakışma yaratmaya ve verinin bir kopyasını oluşturmaya çalışıyor. Ancak bu çok zor ve doğru zamanı yakalamak lazım, buna engel olacak da bir sürü husus var.

    AMD işlemcilerde Spectre grubu açıkların çalışmamasının veriyi intel gibi küt diye cacheye atmaması, önce denetimden geçirmesi olduğunu söylemiştik. Aynı Mhz hızda olsa da AMD CPU cache gecikmesi bu yüzden Intel CPU cache gecikmesinden daha fazladır, yani AMD cache az biraz daha yavaş çalışır daha sıkı denetim ve bunun gecikmesi yüzünden. Şimdi bazıları Ryzen cache gecikmesi niye azaltılmıyor, intel seviyesine neden gelmiyor diye tırı vırı yapıyor. Gecikmenin intel seviyesine inmesi için denetimin zayıflatılması lazım ki bu da Spectre açıklarının AMD işleemcide de işe yaraması anlamına gelir. (bırakın böyle kalsın)

    Bu açık da aslında bu extra denetimin oluşturduğu gecikmeden faydalanıyor. Araya ilave komut sıkıştırmaya çalışıyor. Extra denetimi kaldırsak bu açık kapanır ama Spectre açılır dediğim gibi. Ancak bu açığın kullanımı zor.

    Öncelikle denetimin yapılması, verinin geçerliliğinin onaylanması lazım. Bu tamamlanmadan erişirseniz elinize boş veri geçer. Bunu süresi de sabit değil. Cache doluluğu, tag yükü, işlemci yükü, bus kullanan EU sayısının yoğunluğu, cache crossbar çakışması gibi bir sürü faktör bunu süresini değiştiriyor. Yani sadece verinin geçerli olduğu anı yakalamak için sayısız deneme yapmak lazım.

    Bu da yetmiyor. Benim 8320 işlemcide 64 yollu L3 cache ve bus kullanabilecek 132 ünite olduğunu söylemiştim. Bu üniteler işlem yüküne göre cacheye-belleğe sık sık ve değişken/rastlantısal oran ve yoğunlukta erişmeye çalışır. Bizim sızdırma erişimimizi bunlar arasında mümkün olduğunca erken, mümkünse ilk olarak yapmamız lazım. Yoksa boşalttığımız cache bunların eriştiği veriler de dolacak ve hangisinin bizim olduğunu anlamamız çok zor olacaktır. Cacheye atılan veri arttıkça doğru veriyi bulma ihtimalimiz üstel olarak azalacak, yani zorluk üstel (permütasyon) şekilde inanılmaz artacaktır.

    Üstelik burada önceliği ele geçirmek için bir yol da yoktur. Yine sayısız deneme yanılma yapmak ve şansızmıza güvenmek lazım. İşlemcide çalışan uygulama-thread (işleç) sayısıs ne kadar azsa bunu başarma ihtimalimiz de o kadar yüksektir. Kendi makinamızda bunu yapabiliriz ama dışardan eriştiğimiz başka bilgisayardaki uygulama-thread sayısına yapacak pek bir şey yok. Bunu yapmak için Meltdown-virüs vb ile önce sızmak gerekir ki, bunu yaptıysam daha ne uğraşacam, zaten hedefi ele geçirmişim demektir.

    Ardından da bir ton veri arasında tamamen rastlantısal görüne zaman farklarını kullanarak (spectre gibi ölçemiyoruz) zibilyon ihtimal arasında tek doğru ihtimali bulmamız lazım. Hesaplamadım ama büyük ikramiye çıkma olasılığı eminim kat kat daha fazladır.

    Sonuç olarak:
    Güvenlik tedbirleri insanlar tarafından geliştirilir. Başka biri de bunu aşacak bir saldırı geliştirebilir. Hatta tüm olasılıkları deneyen bir kaba kuvvet (brute force) saldırısı, hatta bunu ihtimal sayısını azaltan analizler kullanılarak aşılamayacak güvenlik yoktur. Aslında cacheye yönelik (bu açık-specreler vb) temelde çok sayıda denemeye dayanan bir nevi kaba kuvvet saldırısıdır zaten.

    Burada önemli husus güvenliği aşmak için harcadığınız zaman ve maliyetin makul seviyede kalmasıdır. Yoksa anlamsız derecede çok deneme yaparak AMD cachelerinden bile bilgi sızdırabilirsiz. Ama kazanç-kayıp oranı arasında kabul edilemez derecede korkunç fark olacaktır.

    Mesela akşam kod uygulaması (yol araması, huzur operasyonu vb) yapacak Jandarma için emir öğlen yayınlandıysa akşama kadar kırılmaması yeterlidir. 15 gün sonra düşmanın sol kanadına hucüm edecek ordu emri için saldırı başlayıncaya kadar kırılmaması yeterlidir. 10 yıl saklanacak gizli meclis tutanakları da en az bu sürede kırılmamalıdır. Bunu sağlayan her güvenlik yeterlidir, fazlası gereksizdir. 1 günlük uygulama emrini 1000 yıl korumaya çalışmak abestir.

    Bahsettiğimiz açıkta da buna benzer bir durum var. Açığı istismar edebilmek için harcadığınız kaynak elde edeceğiniz kazanca değmiyor. Hoca nasreddin 10 lira alıp 9 liraya satıyordu, bu durum 1000 liraya alıp 1 liraya satmak gibi anlamsız ve abes. Bu maliyete katlanabilmek için elde edilecek şeyin çok ama çok değerli olması lazım. Bu da istirmar ihtimalinin neredeyse yok derecesine düşürür. Belki içerden adam satın almak, veya komple bilgisayarı çalacak soygun düzenlemek filan çok daha ucuz ve kolay olabilir.



    < Bu mesaj bu kişi tarafından değiştirildi melikulupinar -- 14 Mart 2020; 15:4:30 >




  • Mete Can Karahasan kullanıcısına yanıt
    Gerekiyor. SMT ile direkt alakası yok, AGU-TLB çevrimine dayanıyor.

    L1D cacheden task switch esnasında L3 cacheye atılan verinin tekrar yüklenmesi esnasında istismar yapılmaya çalışılıyor. (okuma çakışması ile verinin kopyasını oluşturma)

    L3 cache fiziksel adresleri aynaladığından (tag) bellek eşleşmesi olmazsa cache tag da uyuşmuyor ve çalmak istediğimize değil farklı veriye (kendimizinikne) erişiyoruz.
  • xgny58x kullanıcısına yanıt
    Doğru görmüşsünüz. (Deşifre olmuşuz.)
  • quote:

    Orijinalden alıntı: Jake Lockley

    Alan Turing'in arkadaşıymış o kadar eski pc konusunda.





    şaka bir yana kesinlikle 3.1'den geliyorum dos gördüm falan diye hava atmayın Melik hocam sizin görmediğiniz dönemleri görmüştür ben daha eski deneyimli bir üye olduğunu zannetmiyorum.heves merak da olunca bizim bilincimizi aşıyor bilgisi ama forumun olayı sorsan üni'yi yeni bitirmiş adam muamelesi yaparlar şuncu buncu diye.Rubisco hocam vardı bir de teorik bilgisi muazzam ama pratikte çok eski olmayabilir.çoğu şeyin kıymetini kaybedince anlamıyor muyuz?
    Üstad, tamam morukladım ama o kadar da değil yahu. Elrond'un son zamanlarını ancak hatırlıyorum hayal meyal, daha küçükmüşüm

    Alan Turing ile katiyyen samimyetim yoktur. Tarz değiştirnce ilgileniriz artık ayol.



    < Bu mesaj bu kişi tarafından değiştirildi melikulupinar -- 14 Mart 2020; 15:10:55 >




  • melikulupinar kullanıcısına yanıt
    hocam vaktinizi almayalım diye iki satır demiştim ama bildiğin bilimsel makale olmuş daha da kimse gelmesin amd'de açık kaçık diye.

    bilen vardır bilmeyen vardır Alan Turing ikinci dünya savaşında almanların bir cihaz ile oluşturduğu enigma ismindeki şifreyi icat ettiği bir makine ile kıran ve savaşın seyrini değiştiren insandır.derler ki o makine şimdi kullandığımız pc'lerin temelini oluşturur.nvidia'nın da son serisinin ismi turing'dir.eğilimleri bizi ilgilendirmez biz yaptığı işe bakarız sonuçta siz orada ben burada oturmuşuz bir makinenin başına iletişim kuruyoruz ki dünyanın neresinde olursanız olun.yüzyılın icadı bu değildir de nedir?bundan 10 sene önce kredi kartlarımızın hacklenebildiğini ve iznimiz olmadan alış veriş yapılabildiğini öğrendik.bu bakımdan işlemcideki açıkları bu şekilde algıladı insanlar bizim yerimize makinemizden bir iş yapar başımıza iş açar mı diye ya da bizi izler gözler mi diye ama benim anladığım bu iş o kadar kolay değil hele amd gibi işi kitabına göre yapan bir işlemciye sahipseniz kimse tarayıcı eklentinizden ya da diskinize erişip şifrenizi falan çalamaz uzaktan.lakin ne olur eklentide yazılımsal açık vardır o zaman çalar.bu ikisini ayırt etmek gerekir.




  • melikulupinar kullanıcısına yanıt
    Yok komutanım deşifre etmek biz kim :) Sizin yorumları okuyunca bayağı bir aydınlanıyorum ve yazılarınızın devamını bekliyorum saygılar.
  • quote:

    Orijinalden alıntı: Jake Lockley

    hocam vaktinizi almayalım diye iki satır demiştim ama bildiğin bilimsel makale olmuş daha da kimse gelmesin amd'de açık kaçık diye.

    bilen vardır bilmeyen vardır Alan Turing ikinci dünya savaşında almanların bir cihaz ile oluşturduğu enigma ismindeki şifreyi icat ettiği bir makine ile kıran ve savaşın seyrini değiştiren insandır.derler ki o makine şimdi kullandığımız pc'lerin temelini oluşturur.nvidia'nın da son serisinin ismi turing'dir.eğilimleri bizi ilgilendirmez biz yaptığı işe bakarız sonuçta siz orada ben burada oturmuşuz bir makinenin başına iletişim kuruyoruz ki dünyanın neresinde olursanız olun.yüzyılın icadı bu değildir de nedir?bundan 10 sene önce kredi kartlarımızın hacklenebildiğini ve iznimiz olmadan alış veriş yapılabildiğini öğrendik.bu bakımdan işlemcideki açıkları bu şekilde algıladı insanlar bizim yerimize makinemizden bir iş yapar başımıza iş açar mı diye ya da bizi izler gözler mi diye ama benim anladığım bu iş o kadar kolay değil hele amd gibi işi kitabına göre yapan bir işlemciye sahipseniz kimse tarayıcı eklentinizden ya da diskinize erişip şifrenizi falan çalamaz uzaktan.lakin ne olur eklentide yazılımsal açık vardır o zaman çalar.bu ikisini ayırt etmek gerekir.
    Intel'deki açıklar gerçekten açık. Zira perf için (IPC artışı için) işlem-yetki kontrolü zayıflatılmış olup doğru düzgün yapılmadığından Meltdown grubu açıklar ortaya çıkıyor. Bunları kullanmak için AMD'deki gibi (veya spectre) sayısız deneme de yapmak gerekmiyor. İşi biliyorsanız tik tak.

    Intel'de Spectre grubu açıkları kullanmak da nispeten kolay. Zira cache ve bellek gecikmesini azaltmak (bir gıdım perf artışı) için veri tutarlılığı denetimi de zayıflatılmış ve yetersiz durumda. Örneğin üstte açıkladığım spectre sızdırmasında şartlar-şans da yaver giderse bir veri 512/1024 denemede bulunabiliyor. AMD'de ise yüzbinlerce (belki milyonlarca) deneme yapmak lazım sadece veriyi alabilmek için. Sonra bir de bunların elenip doğru olanın ayıklanması gerekiyor.

    Dediğim gibi kusursuz güvenlik yoktur. Ancak güvenliği sıkı tutup (işi kitabına uygun yapıp) kırma maliyetini (zaman-para vb) elde edilecek kazancın üzerine çıkardığınızda, güvenliği kırmanın (açığı kullanmanın) da bir anlamı kalmıyor. Açık teorik olarak var olsa da pratikte işe yaramıyor, kimse kullanmıyor. Zira daha az maliyet-zaman gerektiren başka yollar bulunabiliyor.

    Örneğin Mete Can'ın sorduğu bellek eşlemesi gerekli mi sorusu var (gerekli, yazdım). Ama windows bunu engellemeye çalışır, üstelik AMD işlemcilerde Meltdown vb benzeri teknikler işlemediğinden bunu yapmak çok daha zordur. Buna rağmen AMD Intel gibi kulağının üzerine yatmadı. Pratikte kullanılabilen bir açığı olmamasına rağmen ilave tedbirler aldı. Bahsettiğim PAT (Page Attributes Table, Ryzen 2xxx ile geldi) tam da buna yönelik. Fiziksel bellek sayfalarının gerçekten ait olmadığı segment ve TLB kayıtlarına atanmasını engellemek, yani bellek eşleştirmesinin önüne geçmek için. (her fiziksel sayfanın kime ait olduğu, nitelikleri ve yetkilerini takip ediyor)

    Hem AMD'nin zaten sağlam olan güvenlik-yetki denetimini, hem windowsun koruma mekanizmalarını, hem de PAT'ın sıkı kontrolünü aşabilecek kadar bilgi ve tecrübeye (yeteneğe) sahip adam tonlarca deneme yaparak veri elde etmeye çalışmaz. Yani bir damla bal için bir çuval keçiboynuzu yemez.

    Böyle bir adam zaten her tarafı dökülen Windows'un ağzından girip burnundan çıkar. Direkt bellek yönetimini ele geçirir veya Trusted Installer yetkisi alıp her şeyi kontrol eder. Zibilyon denemede veri bulmaya çalışacağına direkt segmenti modifiye eder (kopyasını oluşturur, entry page değiştirir, common yapar vb vb ) ve her veriyi doğrudan hüpletir.

    Gerçekten kolay kullanılan ve işe yarayan açıklar ile, küçük bir bilgi elde etmek için zibilyon deneme gerektiren açığımsılar (aslında gerçek açık/hata değil yan kanal saldırısı) arasında fark dağlar kadar AÇIK.




  • 
Sayfa: önceki 123
Sayfaya Git
Git
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.