Skip to content

SpecHammer

SpecHammer, attacker-kontrollü değerleri bir victim'in kendi belleğine enjekte etmek için Rowhammer bit flip'lerini kullanır; böylece Spectre'nin attacker ile victim'in bir değişkeni paylaşması gerektiği yönündeki olağan şartını ortadan kaldırır — ve taint-tracking savunmalarını kırar.

Mechanism

Bug sınıfı: Rowhammer ile sağlanan operand'lar benign kodu exploit edilebilir Spectre gadget'larına dönüştürür

Klasik Spectre-v1 (bounds-check bypass), victim'in speculative load'unu secret belleğe yönlendirmek için attacker-etkili bir değere — tipik olarak shared bir index'e — ihtiyaç duyar. Birçok savunma (taint tracking, yalnızca attacker-untrusted girdileri indexleme) attacker'ın victim'i yalnızca meşru biçimde paylaşılan girdiler üzerinden etkileyebileceği varsayımına dayanır.

SpecHammer bu varsayımı geçersiz kılar. Rowhammer, bitişik aggressor row'larını hammerlayarak attacker'ın sahip olmadığı DRAM row'larındaki bit'leri flip'ler. Belleği öyle massaj eder ki güvenlik açısından önemli bir victim değeri (örn. bir array bound'u, bir length ya da speculative bir gadget'ta kullanılan bir pointer) flip'lenebilir bir hücreye düşsün; böylece attacker hiçbir değişken paylaşmadan victim'in address space'ine yazar. Bozulan değer sonra, aksi halde güvenli bir conditional branch'i attacker'ın lehine mispredict ettirir ve ardından gelen transient load, secret'ları bir cache side channel üzerinden sızdırır.

Aşılan sınır iki katmanlıdır: Rowhammer, operand'ı yerleştirmek için memory integrity/isolation'ı ihlal eder ve sonra Spectre, onu exfiltrate etmek için speculative confidentiality'yi ihlal eder. Önemlisi, malicious operand program girdisi yerine bir bit flip ile geldiği için taint-tracking hiçbir tainted veri akışı görmez ve gadget artık "self-evidently" attacker-kontrollü değildir.

Walkthrough

Üst seviye kavramsal yeniden üretim (IEEE S&P 2022, Tobah et al.)

Kamuya açık makale iki bilinen primitive'i bir araya getirir:

  1. Güvenilir Rowhammer bit-flip konumlarını bulmak için DRAM'i profille (templating).
  2. Victim'in speculative bir gadget içinde kullandığı bir değerin flip'lenebilir bir hücreyi işgal etmesi için belleği massaj et.
  3. O değeri misprediction'ı tetikleyen bir değere flip'lemek için komşu aggressor row'larını hammerla.
  4. Victim'in Spectre gadget'ını çağır; operand'ı bozulduğu için artık speculatively out-of-bounds okur.
  5. Bir cache covert channel (Flush+Reload tarzı) ile secret'ı kurtar. İkinci bir varyant, flip'leri zincirleyerek hangi gadget'ların kullanılabilir olduğunu genişletir.

Burada hiçbir kesin templating offset'i ya da silah haline getirilmiş gadget yeniden üretilmiyor.

Detection

Rowhammer yarısına dikkat et — daha gürültülü bileşendir

  • Rowhammer etkinliği: aggressor row'lara aşırı yüksek row-activation oranları / DRAM access pattern'leri; correctable/uncorrectable ECC hatalarında ani artışlar; MC error log'ları. Last-level-cache miss'leri ve CLFLUSH-yoğun döngüler için EDR/perf counter'ları klasik Rowhammer işaretleridir (bkz. rowhammer).
  • Spectre kuyruğu: tekrarlayan mispredict eden branch'lerin ardından bir buffer üzerinde timing-probe döngüleri (bkz. flush-reload).
  • Integrity anomalileri: güvenlik açısından kritik bir değerin (bound/length/pointer) hiçbir kod path'i onu yazmadan değişmesi, tetiklenen bir flip'in güçlü göstergesidir.

Mitigation

Her iki katmanı da savun; yalnızca taint tracking'e güvenme

  • Rowhammer'ı engelle: ECC artı on-die refresh mitigation'ları (TRR), artırılmış DRAM refresh oranı ve Target Row Refresh; destekleyen platformlarda memory integrity özellikleri gibi error-detection, operand'ı yerleştirme çıtasını yükseltir.
  • Spectre-v1'i engelle: bounds-checked load'larda speculation barrier'ları (x86'da lfence) ya da pointer/index masking ekle ki bozulan bir operand out-of-bounds bir speculative erişimi süremesin (bkz. spectre-pht).
  • Tek bir Spectre savunması olarak taint tracking'e bel bağlama — SpecHammer'ın bütün noktası, malicious operand'ın tainted bir veri-akışı provenance'ına sahip olmamasıdır.
  • Hassas operand'ları attacker-kontrol edilebilir bellek komşuluklarından uzak tut (guard row'lar, isolation) ki flip'lenebilir hücrelerle aynı yere düşemesinler.

References