Knock-Knock¶
Bir sistemin belgelenmemiş physical-to-DRAM address mapping'ini, GF(2) üzerinde linear bir fonksiyon olarak modelleyip row-buffer-conflict timing'inden bank-mask basis'ini polynomial time'da çözerek black-box, platform-agnostic biçimde geri kazanma.
Mechanism¶
DRAM address scrambling'i GF(2) üzerinde linear'dır — o hâlde tersini al
Modern SoC'ler, physical address'leri DRAM'e (channel/rank/bank/row) belgelenmemiş linear address fonksiyonları kullanarak scramble eder. Knock-Knock'ın içgörüsü şudur: bu fonksiyonlar GF(2) sonlu cismi üzerinde linear olduğundan (her bank-seçen bit, physical-address bit'lerinin bir XOR'udur), tüm mapping bir matris problemi olarak ifade edilebilir. Hangi physical address çiftlerinin aynı bank'e düştüğünü gözlemleyebilirsen, bir constraint matris kurup onun nullspace'ini hesaplayarak bank-mask basis'i — bank addressing'i tanımlayan XOR mask'ler kümesini — eski özel yöntemlerin kullandığı exponential arama yerine polynomial time'da geri kazanabilirsin.
"Aynı bank mı?" gözlemi row-buffer conflict timing'inden gelir: aynı bank'te ama farklı row'lardaki iki address, row-buffer'ı açma/kapama/yeniden açmaya zorlar, dolayısıyla bunlara sırayla erişmek farklı bank'lerdeki address'lere göre ölçülebilir biçimde daha yavaştır. Bu timing parmak izi gereken tek sinyaldir — datasheet yok, debug interface yok — ki bu da onu black-box ve platform-agnostic yapan şeydir.
Bu, row-buffer conflict timing üzerine kurulu, DRAM bank/row addressing reverse-engineering'in titiz bir formalleştirmesidir ve herhangi bir aynı-bank saldırısını (double-sided / many-sided Rowhammer, DRAMA kanalları) besler.
Walkthrough¶
1. Veri üretimi (hedef üzerinde). Hangi çiftlerin aynı bank'te conflict oluşturduğunu etiketlemek için çok sayıda physical-address çifti arasında alternatif erişimleri zamanla.
for pairs (p_i, p_j):
t = time_alternating_access(p_i, p_j)
label conflict if t > threshold # row-buffer conflict -> same bank
build matrix M of physical-address vectors + conflict labels
2. Tersine çevirme (offline). GF(2) sistemini çöz: bank-addressing matrisini / mask basis'ini elde etmek için kurulan matrisin nullspace'ini hesapla.
3. Mapping'i kullan. Hammering için ya da cross-CPU DRAMA tarzı covert/side kanalları için aynı-bank, row-komşusu address kümelerini doğrudan üret.
Reported result
(Çoğunlukla) linear scrambling varsayar
Temiz GF(2) tersine çevirmesi, mapping'in linear olmasına dayanır. Non-linear ya da keyed scrambler'lar closed-form nullspace yaklaşımını bozar; gerçi sahaya konuşlanmış SoC mapping'lerinin çoğu aslında linear XOR fonksiyonudur.
Mitigation¶
- Non-linear / keyed address scrambling linear çözücüyü etkisiz kılar.
- DRAM seviyesindeki Rowhammer savunmaları (TRR, artırılmış refresh, ECC), geri kazanılan mapping'i tüketen downstream saldırılar için hâlâ geçerlidir.
References¶
- Knock-Knock: Black-Box, Platform-Agnostic DRAM Address-Mapping Reverse Engineering. arXiv 2509.19568 — https://arxiv.org/abs/2509.19568
- Knock-Knock (Microarchitecture Security Conference, uASC) — https://ojs.ub.rub.de/index.php/uASC/article/view/12711