Skip to content

Mayhem

Rowhammer bit flip'lerini register ve stack değişkenlerine yönlendirerek, bir kurbanın yalnızca kalıcı verisi değil, geçici program durumu da bozulur.

Mechanism

Note

Klasik Rowhammer istismarları uzun ömürlü veri yapılarındaki (page-table entry'ler, durağan RSA key'leri) bit'leri flip'ler. Mayhem, CPU register'larında tutulan değerlerin kalıcı olarak güvende olmadığını gözlemler: calling convention ve signal delivery, register içeriğini rutin olarak thread'in stack'ine spill eder; orada DRAM'de bulunur ve başka herhangi bir byte gibi hammer'lanabilir hâle gelir. Mayhem'in dayandığı değişmez şudur: bir fonksiyon call'ı boyunca push edilen callee-saved bir register ya da signal delivery tarafından bir ucontext/sigcontext'e spill edilen bir register kümesi, ölçülebilir bir window boyunca öngörülebilir bir stack offset'inde durur. Saldırgan deterministik biçimde flip'lenen bir DRAM cell'i profillemişse ve kurbanın stack'ini hedef değişken o cell'e düşecek şekilde düzenlemişse, spill window'u sırasındaki bir flip, kurbanın daha sonra reload ettiği değeri bozar.

Zor kısım senkronizasyon'dur: flip, değer DRAM'deyken ve reload edilmeden önce isabet etmelidir. Mayhem bir "blocking window" kullanır — kurbanı stall etmeye (örn. bir blocking syscall'da) zorlar, böylece spill edilen değer hammer'lanacak kadar uzun süre bellekte kalır. Yazarlar (Adiletta, Tol, Sunar, ve diğerleri, ASIACCS 2024) bunu uçtan uca saldırılara zincirler: sudo / SSH authentication check'lerini bypass etme ve key'i geri kazanmak için bir OpenSSL ECDSA signature hesaplamasını fault'lama.

Walkthrough

Saldırı kompozisyonunun (paper'dan) dört kavramsal aşaması vardır. Memory templating ve fiziksel yerleşim standart Rowhammer toolchain'ini yeniden kullanır; yeni olan iş, spill'i bulmak ve flip'i zamanlamaktır.

1. Template DRAM            -> find a cell with a reproducible 1->0 (or 0->1) flip
2. Massage victim stack     -> arrange the target stack slot onto that cell
3. Open a blocking window   -> stall the victim so the spilled register persists
4. Hammer aggressor rows    -> flip the spilled value; victim reloads corrupt data

Spill edilmiş bir karşılaştırma sonucu kanonik hedeftir. Kavramsal olarak, bir authentication check şuna benzer bir şeye derlenir:

int authed = verify(password);   // result lives in a register
some_blocking_call();            // register spilled to stack, value in DRAM
if (authed) grant_root();        // reloaded after the window

Blocking window sırasında spill edilen authed'ı 0'dan sıfır olmayan bir değere flip'lemek, başarısız bir check'i başarıya çevirir. Paper, sudo ve SSH public-key authentication'ın çalışan bypass'larını ve bir OpenSSL signature fault'unu raporlar; bu da register/stack değişkenlerinin pratik bir Rowhammer hedefi olduğunu gösterir.

Mitigation

  • Altta yatan bit flip'leri önleyen herhangi bir savunma (refresh-bilinçli scrubbing ile ECC, TRR/PRAC, guard row'lar) Mayhem'i engeller.
  • Fiziksel yerleşim üzerindeki saldırgan kontrolünü azaltmak (domain-bilinçli allocation) 2. aşamanın maliyetini yükseltir.
  • Güvenlik açısından kritik kararları cache'lemek yerine yeniden hesaplamak ve hassas değerlerin blocking call'lar boyunca uzun spill'lerinden kaçınmak, window'u küçültür.

References