Skip to content

Blacksmith

In-DRAM Target Row Refresh (TRR)'ı yenmek için non-uniform, frequency-domain hammering pattern'leri (frequency / phase / amplitude) üreten bir Rowhammer fuzzer'ı — test edilen 40 DDR4 DIMM'in hepsinde bit flip elde etti.

Mechanism

Neden çalışır

TRR (Target Row Refresh), hammer'lanan row'ları izleyip flip olmadan önce aggressor komşularına fazladan bir refresh sıkıştıran in-DRAM savunmadır. Sampler'ı sonlu kapasiteye ve sabit bir detection heuristic'ine sahiptir: yalnızca bir avuç aggressor'ı takip edebilir ve saldırganların row'ları uniform hammer'ladığını varsayar (her aggressor aynı sayıda, lockstep halinde) — önceki single-/double-/n-sided pattern'lerin yaptığı gibi. TRRespass many-sided hammering'in sampler'ı boğduğunu zaten göstermişti; Blacksmith daha da ileri gidiyor.

Blacksmith'in invariant'ı: sampler'ın kandırılıp kandırılmadığını erişimlerin sırası, düzenliliği ve yoğunluğu belirler — sadece ham sayı değil. Bir hammering pattern'ini frequency domain'de üç düğmeyle modeller:

  • frequency — her aggressor'ın bir refresh interval içinde ne sıklıkla erişildiği,
  • phase — erişimlerin refresh interval'ın neresine düştüğü,
  • amplitude — burst başına kaç erişim olduğu.

Aggressor'ları farklı, non-uniform frequency'lerde hammer'latarak pattern, gerçek victim row'ları sürekli baskı altında tutarken — uniform varsayımına senkronize olan — TRR sampler'ı tekrar tekrar yanlış row'ları refresh eder. Bu tür pattern'lerin uzayı devasa olduğundan Blacksmith parametreleri her DIMM için fuzz'lar.

Bu doğrudan klasik Rowhammer ve double-sided / many-sided eskalasyonunun üzerine kurulur; TRRespass ise geliştirdiği doğrudan selefidir.

Walkthrough

Referans implementasyonu COMSEC (ETH Zürich) tarafından açık kaynaklıdır.

1. Build. DRAM row/bank addressing'in kontrol edilebilmesi için contiguous bir physical region'a (1 GB hugepage) ihtiyaç duyar.

git clone https://github.com/comsec-group/blacksmith
cd blacksmith && mkdir build && cd build
cmake .. && make -j

2. Kurulu DIMM üzerinde pattern'leri fuzz'la. Blacksmith rastgele frequency / phase / amplitude atamaları örnekler, bunları hammer'lar ve contiguous region'ı flip için tarar; flip üreten pattern'leri saklar.

sudo ./blacksmith --dimm-id 0 --runtime-limit 43200   # 12-hour run
Temsili fuzzing çıktısı
[+] mapped 1 GiB hugepage, base PA 0x1c0000000
[+] reverse-engineered DRAM addressing: 16 banks
[+] fuzzing non-uniform patterns (freq/phase/amplitude) ...
[+] pattern #2271  aggressors=18  -> 4 bit flips
[+] best pattern this run: 138601 total bit flips
[+] dumping effective pattern + mapping to stdout.json

3. Kazanan pattern'i replay et ve exploit edilebilir bir hedefte (page table entry, RSA-2048 modulus veya sudo binary'si) bir flip elde et. Raporlanan uçtan uca exploitation, üreticiye bağlı olarak ~saniyelerden saatlere kadar değişti.

Tuzaklar

  • Gerçekten contiguous bir region (hugepage / pagemap) olmadan aggressor'ları ve victim'i aynı bank'a güvenilir biçimde yerleştiremezsin — gürültü hammer'larsın. Bkz. DRAM bank/row addressing reverse engineering.
  • Pattern'ler DIMM'e özeldir: bir modülde kazanan bir frequency ataması nadiren başka modüle aktarılır; sabit bir pattern yerine fuzzing'in gerekmesinin nedeni tam olarak budur.

Detection

  • Bank başına patolojik row-activation (ACT) oranları için performance-counter monitörleri hammering'i işaretleyebilir; Blacksmith'in non-uniformity'si thresholding'i zorlaştırır.
  • DDR5 on-die ECC ve refresh-management (RFM) çıtayı yükseltir ama tam bir çözüm değildir.

Mitigation

  • Düzgün Rowhammer mitigation'a sahip belleğe geç (RFM / probabilistic refresh, daha güçlü TRR, ECC); artırılmış refresh rate (daha düşük tREFI) flip'leri azaltır ama ortadan kaldırmaz.

References