- Veri belleğine bağımlı prefetcher (DMP), şifreleme kodundaki veri değerlerini adres gibi ele aldığında, sabit zamanlı (constant-time) uygulamalarda bile gizli anahtarlar sızabilir
- Apple m-series CPU'larda, bellekten yüklenen bir değer işaretçi gibi göründüğünde DMP dereference etmeyi dener; bu da sabit zamanlı programlamanın veri ve adres ayrımı varsayımını sarsar
- Araştırmacılar Apple m1 üzerinde OpenSSL Diffie-Hellman, Go RSA şifre çözme, CRYSTALS-Kyber ve CRYSTALS-Dilithium için uçtan uca anahtar çıkarma gösterimi yaptı; m2 ve m3'te de benzer DMP davranışları doğrulandı
- m3'te DIT bit DMP'yi etkili biçimde devre dışı bırakıyor, ancak bu m1 ve m2 için geçerli değil; Nisan 2024'te keşfedilen HID ayar biti ise macOS çekirdek desteği olmadığı için hemen kullanılması zor
- Azaltma önlemleri arasında yazılımı güncel tutmak, bazı CPU'larda DIT/DOIT bit kullanmak, girdi körleme ve donanım paylaşımından kaçınmak yer alır; zafiyet değerlendirmesi kriptanaliz ve kod incelemesi gerektirir
GoFetch saldırısının özü
- GoFetch, veri belleğine bağımlı prefetcher'dan (DMP) yararlanan bir mikro mimari yan kanal saldırısıdır
- Sabit zamanlı yazılmış kriptografik uygulamalarda bile gizli anahtar çıkarımı mümkündür
- Araştırmacıların gösterdiği hedefler şunlardır
- OpenSSL Diffie-Hellman Key Exchange
- Go RSA decryption
- CRYSTALS-Kyber
- CRYSTALS-Dilithium
- Makale ve araçlar sırasıyla Paper, Tools olarak sunuluyor
DMP'nin sabit zaman varsayımını bozma biçimi
- Apple m-series CPU'ların DMP'si, bellekten yüklenen veri işaretçi gibi görünen bir değer olduğunda etkinleşir ve dereference etmeyi dener
- Sabit zamanlı programlama, gizli değere bağlı olarak dallanmaların, döngülerin, bellek erişimlerinin ve dizi indekslerinin değişmemesi için veri ile adresi ayırmalıdır
- Kurban kod bu kurala uysa bile DMP, donanım düzeyinde onun yerine gizli veriye bağımlı bellek erişimi oluşturabilir
- Sonuç olarak normalde sabit zamanlı olması gereken kodda gözlemlenebilir zaman farkları oluşur ve kod anahtar çıkarma saldırılarına açık hale gelir
Saldırı prosedürü
- Saldırgan, kriptografik işleme giren seçilmiş girdiler oluşturarak, gizli anahtarın bir kısmı doğru tahmin edildiğinde ara durumda işaretçi gibi görünen bir değerin ortaya çıkmasını sağlar
- Ardından cache timing analiziyle DMP'nin dereference işlemi yapıp yapmadığını kontrol ederek tahminin doğru olup olmadığını doğrular
- Doğru tahmin onaylandığında aynı yöntemle sonraki anahtar biti grubunu tahmin eder
- Bu prosedürle klasik kriptografi ve post-kuantum kriptografi uygulamalarında uçtan uca anahtar çıkarımı mümkün olur
Etkilenen işlemciler ve gözlemler
- Uçtan uca GoFetch saldırısı, Apple m1 işlemcili donanım üzerinde gerçekleştirildi
- m2 ve m3 CPU'lar da benzer şekilde istismar edilebilir DMP etkinleşme örüntüleri gösteriyor
- m2 Pro gibi diğer m-series varyantları test edilmedi; ancak basit modellerle aynı mikro mimariyi kullandıkları için istismar edilebilir DMP'ye sahip olmaları olası
- Intel 13th Gen Raptor Lake mikro mimarisinde de DMP bulunuyor
- Ancak etkinleşme kriteri daha kısıtlı olduğundan GoFetch saldırısına karşı dayanıklı
Augury ile farkı
- Apple m-series DMP ilk olarak Augury tarafından keşfedildi
- Augury, DMP'nin bazı koşullarda veri ile adresi karıştırabileceğini değerlendirdi
- GoFetch araştırmacıları, Augury'nin tanımladığı DMP etkinleşme kriterlerinin aşırı kısıtlı olduğu sonucuna vardı
- Gerçek davranışta, bellekten yüklenen herhangi bir değer dereference adayı olabilir; bu da gerçek sabit zamanlı kriptografik koda yönelik uçtan uca saldırılara yol açar
Cache ve prefetcher arka planı
- Modern işlemciler bellek erişim gecikmesini azaltmak için cache kullanır
- Daha önce erişilen veriler cache'te kalır ve sonraki erişimler daha hızlı olur
- Aynı makinede birlikte çalışan bir saldırgan, paylaşılan cache durumunu gözlemleyerek kurbanın erişim örüntülerini çıkarabilir
- Genel prefetcher'lar, önceki bellek erişim adreslerinin takibine dayanarak ileride erişilecek adresleri tahmin eder
- DMP, bağlı liste dolaşımı gibi düzensiz erişim örüntülerini işlemek için bellek içeriğini de dikkate alarak getirilecek verileri belirler
- Bu davranış donanım düzeyinde veri ile bellek adresini karıştırdığı için tüm hesaplama yığınını sabit zamanlı olmayan (non-constant-time) gibi hale getirebilir
Zafiyetin belirlenmesi ve azaltma önlemleri
- Bir uygulamanın zafiyet içerip içermediğini belirlemek için ara değerlerin ne zaman ve nasıl gizli veriye bağımlı biçimde işaretçi gibi görünür hale getirilebileceğini bilmek gerekir
- Bu değerlendirme kriptanaliz ve kod incelemesi gerektirir; manuel ve yavaştır, ayrıca başka saldırı yöntemlerini dışlayamaz
- Bazı işlemcilerde DMP devre dışı bırakılabilir
- Nisan 2024'te Hector Martin (marcan), m1 ve m2 CPU'larda DMP'yi devre dışı bırakan HID ayar biti
SYS_APL_HID11_EL1[30]u keşfetti- Bu chicken bit ayarı çekirdek desteği gerektirir
- Şu anda macOS'te bu destek yoktur
- İlgili bilgi @marcan'ın gönderisinde yer alıyor
- Kullanıcılara güncel yazılım kullanmaları ve düzenli güncelleme yapmaları önerilir
- Kriptografi kütüphanesi geliştiricileri, mümkün olan CPU'larda DIT/DOIT bitini ayarlayabilir
- Girdi körleme, bazı kriptografik şemalarda saldırganın kontrol ettiği ara değerlerden kaçınmaya yardımcı olabilir
- Saldırganın DMP etkinleşmesini ölçememesi için donanım paylaşımından kaçınmak, kriptografik protokol güvenliğini daha da güçlendirebilir
Açıklama ve sonraki güncellemeler
- Araştırmacılar sonuçları 5 Aralık 2023'te Apple'a açıkladı; bu, halka açık yayın tarihinden 107 gün önceydi
- Ağustos 2024'te GoFetch, Pwnie Award 2024 Best Cryptographic Attack ödülünü kazandı
- Aralık 2024'teki takip araştırmasında Intel DMP'nin semantiği tersine mühendislikle çıkarıldı ve DMP'nin geçersiz işaretçileri dereference ettiği durumlarda bile bilgi sızdırabileceğini gösteren bir teknik sunuldu
- Takip makalesi: Peek-a-Walk: Leaking Secrets via Page Walk Side Channels
- Kod Peek-a-Walk GitHub deposunda yer alıyor
1 yorum
Hacker News yorumları
Verimlilik çekirdeği gibi şeylerin olduğu bir çağdaysak, modern mimarilerde kriptografi çekirdeği de gerekebilir gibi görünüyor
Böyle bir çekirdek, sabit zamanlı algoritmalarla ilgili garantileri açıkça sunmalı; prefetching ya da dallanma tahmini gibi şeyler yapmamalı
Itanium'a benzer ama “kriptografi işlemcisi” ile sınırlı bir biçim olursa, birçok özellik eksik olacağı için ilke olarak çekirdeğin kendi silikon alanı da büyük olmaz gibi
Kriptografi kodu uygulayan biri için bu tür sorunlar insanı içkiye yöneltecek kadar zor olmalı. En iyi koşullarda bile zorlu bir mücadele; her şeyi doğru uygulasanız bile, mevcut ve gelecekteki sayısız işlemci özelliği her an kodunuzu bozabilir
Ama kriptografi yardımcı işlemcisi fazla yıkıcı bir çözüm. O çekirdeğe geçip geri dönmek, belleği paylaşmak vb. için dağ gibi altyapı kurmak gerekir
Daha da kötüsü, yalnızca RSA çarpmasını o çekirdeğe taşıyıp işi bitiremezsiniz. Anahtar bir yerde ayrıştırılmış olacak; ayrıştırıcı da kriptografi çekirdeğinde mi çalışmalı? Ağdan gelirse ne olacak? Tüm anahtarları korusanız bile CPU yan kanalı şifrelenmiş mesajı sızdırırsa sorun değil mi? Anahtar olmadığı için sorun değil diyebilir miyiz?
Kriptografi dışı kodda bu saldırıların pek görünmemesinin nedeni, hedef bulma işinin uygulamaya göre çok değişmesi; kriptografi kütüphanelerinde ise herkes anahtar sızmasının kötü olduğu konusunda hemfikir
Sonuçta işlemci tasarımcıları varsayımları bozmamalı; en azından bunu yapmadan önce bizimle konuşmalılar
Soyutlama birimi muhtemelen iş parçacığı düzeyi olacaktır
https://support.apple.com/guide/security/secure-enclave-sec5...
Ama maliyet odaklı bulut mimarileri tüketici donanımına yönelip CPU pazarını ele geçirdi; artık büyük ölçekli uygulamalarda bile gerçekçi seçenek tüketici CPU'ları
Yeni algoritmaları mümkün kılmak için birkaç kriptografik temel işlem komutu eklemek de iyi olabilir
Makaleye göre “OpenSSL, yerel yan kanal saldırılarının tehdit modelinin dışında olduğunu bildirdi; Go Crypto ekibi ise bu saldırının ciddiyetini düşük görüyor”
Bu tür yan kanal saldırılarının nihai sonucu, hiçbir optimizasyon yapmayan ve her komutun her koşulda aynı çevrim sayısında çalıştığı bir CPU olurdu
Ama böyle bir şey asla olmayacak. Kimse yavaş CPU istemez
Uzaktan kötüye kullanılamıyorsa endişelenecek bir mesele değil bence. Elbette çok kiracılı bulut sanallaştırması olmaz
Spekülatif yürütme yok, prefetching yok; bilgisayar mimarisi 101 dersindeki 5 aşamalı boru hattı gibi bir çekirdek
Raf tipi Mac Mini işlem süresi kiralayan birkaç bulut sağlayıcısı var ama çok değiller; onlar da çok belirli iş yükleri veya derleme işleri için
Bu tür hizmetlere ciddi para ödeyenler için sorun olabilir; ancak Apple Silicon cihazlarının ezici çoğunluğu kesinlikle bulut hizmeti barındırmayacak
Kodu belirli bir çekirdeğe izole ederseniz, her şeyin amaçlandığı gibi çalıştığı varsayımıyla exploit başka kiracıları tehlikeye atamaz
“DMP devre dışı bırakılabilir mi?” sorusuna “Evet, ama yalnızca bazı işlemcilerde mümkün. M3 CPU'larda DIT bitini ayarlamak DMP'yi etkili biçimde devre dışı bırakıyor; M1 ve M2'de ise bırakmıyor” denmiş
Bunu kapatan bir chicken bit mutlaka bir yerlerde yok mudur?
Swift'ten yapılabiliyor mu, yoksa assembly mi gerekiyor?
Okuduğum kadarıyla libsodium gibi kütüphaneler M3 ve sonrasında hassas kriptografik işlemlerden önce devre dışı bırakma bitini ayarlayabilir gibi görünüyor
Ayrıca anahtarın bazı yönlerini önceden öğrenmek gerekiyor gibi
Çok havalı ama pek pratik görünmüyor
2022'deki Augury saldırısı aklıma geldi. O da Apple Silicon CPU'nun DMP prefetching özelliğini kötüye kullanmıştı
[1]: https://www.prefetchers.info
Apple'da neden bu kadar çok donanım arka kapı… saf bug var?
O saçma arka kapı komplo teorisine cevap olarak: insanlar hızlı CPU istediği için işlemcilerde cache ve zamanlama farkları var. Sabit zamanlı olup aynı anda hızlı performansa sahip olamazsınız; prefetching'e sahip tek şirket de Apple değil
Burada Apple'ın kriptografi için sabit zamanlı işlemleri açma yöntemini belgelediği bir kaynak var. Sanki donanıma kasıtlı olarak tasarlanmış gibi görünüyor. Ne tuhaf: https://developer.apple.com/documentation/xcode/writing-arm6...
Kriptografi rutinleri yazıyorsanız platformun kriptografi kütüphanesini kullanmalı ya da dokümantasyonu izlemelisiniz
https://developer.apple.com/documentation/xcode/writing-arm6...
Artık Mac ve iPad'de de kötü amaçlı yazılım taraması ve virüs tarayıcıları anlamlı hale geldi
Saldırganın aynı donanım üzerinde çalışıyor olması gerekiyor