One-location hammering¶
Tek bir address'e tekrar tekrar erişerek Rowhammer bit flip'leri tetikleme; saldırgan tarafından sürülen ikinci bir aggressor yerine memory controller'ın row-policy'sinin row'u kapatıp yeniden açmasına dayanır.
Mechanism¶
Note
Single- ve double-sided Rowhammer, saldırganın aynı bank'teki iki (ya da daha fazla) farklı row arasında alternatif yapmasını gerektirir, böylece her erişim row buffer'ı bir row'u kapatıp bir başkasını açmaya zorlar — komşuları bozan şey activation'lardır. One-location hammering ikinci aggressor'ı tamamen kaldırır: saldırgan tek bir address'i mümkün olduğunca hızlı hammer'lamaya devam eder. İşe yarar çünkü modern memory controller'lar, açık row'u açık tutmak yerine proaktif olarak kapatan agresif, performans-odaklı bir row policy'si (closed-page ya da adaptive) kullanır. Tek address'e yapılan her sonraki erişim o zaman row'u yeniden aktive etmek zorundadır, dolayısıyla tek bir konuma yapılan bir erişim akışı bir activation akışı üretir — komşu row'ları hammer'lamaya yetecek kadar.
Gruss ve diğerleri one-location hammering'i tanıttı ve onu sudo binary'sindeki
opcode bit'lerini flip'leyerek root elde etmek için kullandı. Önemi, DRAM bank/row
addressing fonksiyonu hakkında bilgi gerektirmemesi (aynı-bank bir partner row
bulmaya gerek yok) ve controller'ı row'ları istekli biçimde kapatan sistemlerde
çalışmasıdır; bu da Rowhammer'ın uygulandığı yeri genişletir.
Walkthrough¶
Hammer loop'u, sıkı bir loop içinde tek bir address'e dokunur ve onu flush eder:
// One aggressor address; rely on the controller to close+reopen the row.
volatile char *p = target;
for (uint64_t i = 0; i < HAMMER_COUNT; i++) {
*p; // access -> activation (row reopened)
asm volatile("clflush (%0)" :: "r"(p) : "memory");
asm volatile("mfence");
}
Flip üretip üretmediği controller'ın policy'sine bağlıdır, bu yüzden saldırgan önce tek-address hammering'in gerçekten activation sürdüğünü kontrol eder:
Prerequisite : memory controller uses a closed/adaptive row policy that
proactively closes the open row between accesses.
Test : hammer one address over a templated victim region; if flips
appear, the policy is exploitable on this platform.
Use case : flip opcode bytes in a setuid binary (e.g. sudo) loaded in a
neighboring row -> privilege escalation (Gruss et al.).
Detection¶
Tüm Rowhammer gibi, küçük bir row kümesine yapılan activation oranı anormaldir; DRAM activation'larını ya da LLC-bypass eden erişim patlamalarını izleyen performance counter'lar bunu açığa çıkarır. One-location hammering'in tek hot address'i aslında multi-aggressor pattern'lerinden daha temiz bir sinyal olabilir.
Mitigation¶
- TRR/PRAC, ECC ve daha yüksek refresh, aggressor sayısından bağımsız olarak flip'leri azaltır.
- Row'ları daha uzun süre açık tutan memory controller'lar (open-page policy) tekniği köreltir, çünkü erişim başına daha az yeniden-activation gerçekleşir.