Skip to content

Thunderhammer

Bir PCIe ya da Thunderbolt (USB-C) peripheral'ından, hassas zamanlanmış DMA TLP'leri DRAM'e stream ederek Rowhammer bit flip'lerini indüklemek.

Mechanism

Note

Kötü niyetli bir PCIe peripheral'ı — ya da Thunderbolt PCIe'yi tünellediğinden bir Thunderbolt cihazı — DMA aracılığıyla doğrudan host DRAM'e Memory Read/Write Transaction Layer Packet (TLP)'ler gönderir ve host CPU'da hiçbir kod çalışmadan row'ları hammer'lar. Thunderhammer'ın kurduğu invariant: modern DDR4'te PCIe üzerinden flip tetiklemek hedefe göre uyarlanmış hassas zamanlanmış erişim desenleri gerektirir, çünkü memory controller'ın Read/Write Pending Queue'ları istekleri yeniden sıralar ve throttle eder; bu yüzden naif bir DMA döngüsü Rowhammer'ın ihtiyaç duyduğu back-to-back activation'ları asla üretmez. Yazarlar controller'ın scheduling/throttling'ini reverse-engineer eder, sonra DRAM'deki etkili activation oranı yeterince yüksek olan TLP akışları oluşturur — ve bu, bazı konfigürasyonlarda IOMMU (VT-d) etkin olsa bile çalışabilir.

Walkthrough

Dumitru ve diğerleri (arXiv:2509.11440, 2025; artifact: github.com/0xADE1A1DE/Thunderhammer). Cihaz, Ulf Frisk'in pcileech yazılımı tarafından sürülen bir modified ZDMA board'udur (bir pcileech-fpga cihazı); varsayılan USB software loop'u çok yavaş olduğu için TLP transmit loop'u hardware RTL'e taşınmıştır.

  1. Modified ZDMA'yı bir PCIe slot'u üzerinden ya da PCIe'yi tünelleyen bir Thunderbolt 3 şasisi (Startech TB31PCIEX16) üzerinden bağla.
  2. Belleği map'le: host driver DMA region base+size'ını cihaz BAR'ına yazar; DMA read'ler physical memory'yi enumerate eder (standart pcileech yeteneği).
  3. Etkili per-bank activation kadansını öğrenmek için memory controller'ın request scheduling'ini reverse-engineer et.
  4. Cihazı, completion paketlerini atarak many-sided (>= 8 aggressor row) bir desene karşı hardware'de crafted read/write TLP'leri loop'layacak şekilde programla.
  5. Hammer'la, sonra victim region'larını dump et ve flip'leri tara.

Warning

Varsayılan (double-sided) pcileech testlerinde DDR4'ü flip'leyemedi; en az 8 aggressor row'luk many-sided desenler gerekti. Software-loop'lu pcileech kabaca her 117 ns'de bir istek gönderir; hardware-loop'lu modified ZDMA her ~16.2 ns'de bir Read TLP'ye ulaşır, 50+ aggressor üzerinde aggressor başına ~50K erişim ihtiyacı belirtilir.

Repo kontrol komutları (artifact README'sinden)

pcileech.exe tlp -in 2000100180800001000000018701E000 -vvv   # START
pcileech.exe tlp -in 20001001200003010000000183878000 -vvv   # INTERVAL
pcileech.exe tlp -in 20001001400003010000000183F14000 -vvv   # END
pcileech.exe tlp -in FF0000000000000000000000 -vvv -tlpwait 10  # BAR dump via Thunderbolt
Bir DDR3 hedefinde (Mac mini, Thunderbolt 2) ve DDR4 hedeflerinde (Gigabyte Z170X / i7-7700) gösterildi. Bu bir arXiv preprint'idir; mecrayı henüz peer-review edilmemiş olarak ele alın.

Detection

DMA-driven hammering core'ları bypass eder, bu yüzden CPU performance-counter dedektörleri activation'ları görmez; PCIe-fabric request-rate izleme daha makul sinyaldir.

Mitigation

Thunderhammer'a özgü savunma, Root Complex ya da switch'lerde PCIe peripheral'larının TLP request rate'lerini sınırlamaktır (rate limit'lerin daha büyük payload'lar üzerinden bandwidth'i mutlaka sınırlamadığını not ederek). Genel Rowhammer savunmaları kısmen geçerlidir: ECC ve Copy-on-Flip flip'leri azaltır ama ortadan kaldırmaz; refresh rate'i iki katına çıkarmak (DDR5 zaten 64 ms -> 32 ms'e geçiyor); ve Blacksmith / Rowhammer-test gibi araçlarla DIMM'leri tarayıp elemek.

References