Skip to content

RAMBleed

Rowhammer'ı bir read side channel'a çevirmek: victim'in memory bit'lerini (onları okumadan) saldırganın kendi komşu row'larındaki Rowhammer kaynaklı flip'lerin data-dependent yönünden çıkarsamak.

Mechanism

Note

Rowhammer genelde bir integrity attack olarak çerçevelenir — saldırganın yazamaması gereken bit'leri flip'lemek. RAMBleed, bunun aynı zamanda bir confidentiality attack olduğunu gözlemler. Belirli bir vulnerable cell'in flip'leyip flip'lemediği, onun komşu row'larında saklanan değerlere bağlıdır (Rowhammer'ın "data dependence"ı): bir cell, komşuları belirli bir bit pattern tuttuğunda flip'lemeye daha meyillidir. Yani bir saldırgan sahip olduğu bir cell'i hammer'larsa ve o cell iki victim row'unun arasında oturuyorsa, saldırganın kendi cell'inin flip'leme olasılığı komşu victim row'undaki bit değerini açığa çıkarır — victim'in memory'sini hiç okumadan.

RAMBleed (Kwong, Genkin, Gruss, Yarom; IEEE S&P 2020) şunları zincirler: (1) data-dependent cell'leri bulmak için Rowhammer templating, (2) secret'ı saldırganın flip'lenebilir cell'ine komşu row'a yerleştirmek için memory massaging, (3) hammer'lamak ve her secret bit'ini okumak için saldırganın kendi cell'inin flip'leyip flip'lemediğini gözlemlemek. Yazarlar normal user privilege'larıyla bir OpenSSH server'dan 2048-bit RSA key recover ettiler ve bunun ECC memory'ye karşı bile çalıştığını gösterdiler (çünkü saldırgan kendi flip'lerini okuyor, victim üzerindeki ECC sinyali gizlemiyor).

Walkthrough

Saldırı, templated ve data-dependent her cell başına bir secret bit okur:

1. Template       -> find attacker-owned cells whose flip probability depends on
                     the value in the physically adjacent row (data dependence).
2. Massage        -> use "Frame Feng Shui" so the victim's secret page lands in
                     the row adjacent to such a cell (e.g. an OpenSSH RSA key page).
3. Hammer + read  -> hammer; check whether the attacker's OWN cell flipped:
                         flipped     -> adjacent victim bit = X
                         not flipped -> adjacent victim bit = !X
4. Repeat across many cells to recover the full secret (e.g. RSA private key).

Kritik ölçüm saldırgana ait memory üzerinde yapılır, dolayısıyla hiçbir victim read'i gerekmez:

// Attacker hammers and then inspects ITS OWN page for an induced flip.
hammer(aggressor_rows_around(my_page));
int flipped = (my_page[off] != expected_value);
int secret_bit = flipped ? 1 : 0;   // direction set by the adjacent victim row

Detection

  • Aktivite Rowhammer aktivitesidir: yüksek activation rate'leri ve ECC correctable error'ları. RAMBleed'i tespit etmek integrity Rowhammer'dan daha zordur, çünkü saldırganın yalnızca kendi memory'sindeki flip'leri okuması gerekir.

Mitigation

  • Altta yatan flip'leri durduran defense'ler — TRR/PRAC, artırılmış refresh, guard row'lar — RAMBleed'i de durdurur; paper, ECC'nin tek başına yetersiz olduğunu belirtir.
  • Secret'ların (private key'ler) saldırganın kontrol edebileceği row'larla fiziksel olarak co-locate olmasını engellemek (domain-aware allocation), placement adımını bloklar.
  • Constant-time / memory-encrypted key handling, recover edilen bit'lerin değerini düşürür.

References