Memory templating¶
Hangi tam bit offset'lerinin Rowhammer altında ve hangi yönde flip'lendiğinin bir haritasını oluşturmak için bir DRAM modülünü önceden profilleyerek, sonraki istismarı deterministik kıl.
Mechanism¶
Note
Rowhammer bit flip'leri rastgele gürültü değildir: bir kez flip'lenen bir cell, aynı hammering pattern'i altında tekrar flip'lenme eğilimindedir. Templating bu tekrarlanabilirliği istismar eder. Saldırgan belleği tarar, aday aggressor row'ları hammer'lar ve bir flip'in oluştuğu her konumu yönü (1->0 ya da 0->1) ve page içindeki offset'iyle birlikte kaydeder. Ortaya çıkan "template", güvenilir, yeniden üretilebilir flip'lerin bir kataloğudur. İstismar o zaman bir yerleştirme problemine dönüşür: kurbanın hassas verisini, güvenlik açısından kritik bir bit'in flip yönü işe yarar olan template'lenmiş bir cell'e düşeceği şekilde düzenle.
Templating fazının hesaba katması gereken bir incelik memory scrambling'dir: memory controller veriyi DRAM'e yazmadan önce kodlar, dolayısıyla bir saldırganın gözlemlediği mantıksal flip yönü, saklanan değere bağlıdır. Pratikte, belirli bir değer için bir yönde flip'lenmeye direnen bir cell, neredeyse her zaman tamamlayıcı değer için ters yönde flip'lenir, bu yüzden templating hem offset'i hem de flip'i üreten data pattern'ini kaydeder. Templating; Drammer, Flip Feng Shui, RAMBleed ve çoğu deterministik Rowhammer istismarının paylaşılan bir yapı taşıdır.
Walkthrough¶
Templating loop'u, kavramsal olarak:
for each candidate victim row R:
fill R and its neighbors with a known pattern (e.g. 0x00 / 0xFF / striped)
hammer the aggressor rows around R many times
read R back and diff against the pattern
for each differing bit:
record (physical_offset, bit_index, direction, data_pattern)
Minimal bir flip bulma iç loop'u (hammer primitive'inin kendisi) şuna benzer:
// a, b are addresses in two different rows of the same bank
while (hammer_count--) {
*(volatile char *)a; // activate row A
*(volatile char *)b; // activate row B
asm volatile("clflush (%0)" :: "r"(a) : "memory");
asm volatile("clflush (%0)" :: "r"(b) : "memory");
asm volatile("mfence");
}
// then read the victim row and compare to the known pattern
Bir templating pass'inin beklenen çıktısı bir flip tablosudur, örn.:
offset 0x0A3F bit 3 dir 1->0 pattern 0xFF (reproducible)
offset 0x1C08 bit 0 dir 0->1 pattern 0x00 (reproducible)
...
Bu tablo, sonraki yerleştirme tabanlı saldırılara (page-table spraying, Flip Feng Shui, Mayhem) girdidir.
Detection¶
Templating, sık cache flush'larıyla birlikte sürekli, yüksek-oranlı erişim pattern'leri üretir — Rowhammer'ın kendisiyle aynı ayak izi, performance counter'lar (LLC miss'leri, DRAM activation'ları) ya da row başına activation oranlarını izleyen Rowhammer dedektörleri üzerinden gözlemlenebilir.
Mitigation¶
- ECC, TRR/PRAC ve artırılmış refresh, yeniden üretilebilir flip'leri azaltır ya da ortadan kaldırır ve kullanılabilir template'i küçültür.
- Domain-bilinçli / guard-row allocation, saldırganın daha sonra kurban verisini template'lenmiş bir cell'e yönlendirmesini önler.