Single-sided Rowhammer¶
Tek bir aggressor row'u (ya da victim adjacency'sini kontrol etmeden iki aggressor'ı) hammer'lamak ve yanına hangi victim row denk gelirse onu bozmak için şansa güvenmek.
Mechanism¶
Note
Rowhammer bit flip'leri, victim'e fiziksel olarak komşu bir row'un çok sayıda activation'ını gerektirir. Single-sided hammering'de saldırgan, tam olarak hangi victim row'un yanlarında olduğunu bilmeden — ya da kontrol etmeden — aggressor row'lara tekrar tekrar erişir; disturbance, bir aggressor'a komşu olan hangi row denk gelirse onun üzerine düşer. Bu, kesin fiziksel row layout'unun bilinmesini gerektirmez, ancak double-sided hammering'den daha az güvenilir ve daha yavaştır, çünkü herhangi bir victim'in yalnızca bir tarafı sürülür ve aggressor/victim adjacency'si büyük ölçüde şansa bırakılır.
İsim, victim'i iki aggressor (row N−1 ve N+1) arasına sıkıştırarak disturbance'ı kabaca iki katına çıkaran ve verimi büyük ölçüde artıran double-sided hammering ile zıtlık oluşturur.
Walkthrough¶
Google Project Zero'nun orijinal single-sided loop'u (büyük bir blok içinde rastgele seçilen) iki adresi okur ve her iterasyonda bunları flush eder, böylece okumalar cache'e değil DRAM'e gider:
code_loop:
mov (%X), %eax ; read address X
mov (%Y), %ebx ; read address Y
clflush (%X) ; force X out of cache
clflush (%Y) ; force Y out of cache
jmp code_loop
Burada X ve Y, belirli bir victim'i kuşattıklarından emin olunmadan seçilir,
yani saldırgan sadece hammer'lar ve ardından herhangi bir flip için bellekte
tarama yapar. Birçok makinede bu, makul bir sürede flip üretmek için fazla
yavaştır; double-sided hammering'in (aynı bank'taki adjacent-row offset'ini
gerektiren) genellikle tercih edilmesinin nedeni budur.
Mitigation¶
Genel olarak Rowhammer ile aynı: ECC, artırılmış refresh rate ve Target Row Refresh. Single-sided hammering birim zamanda daha az flip ürettiği için, kısmi mitigation'lar bile buna karşı double-sided ya da many-sided pattern'lara kıyasla nispeten daha etkilidir.