Skip to content

Register File Data Sampling / RFDS (CVE-2023-28746)

Intel Atom (E-)core'larında bir domain-bypass transient-execution saldırısı; attacker'ın integer, floating-point ve vector register file'larında geride bırakılan stale değerleri çıkarsamasını sağlar.

Mechanism

Sınır neden kırılıyor

RFDS bir MDS tarzı sampling leak'idir, ama sızdıran yapı bir load/store/fill buffer değil register file'dır. Etkilenen Intel Atom (efficiency) core'larında, belirli transient (mis-speculated) operasyonlar önceki bir context'e — başka bir process, kernel ya da aynı core'daki önceki bir task'a — ait olan register file entry'lerinde hâlâ yerleşik stale veriyi okuyabilir.

Kırılan invariant, bir context/domain geçişinde register-file scrubbing'idir. CPU, farklı bir security domain onu transient olarak gözlemleyebilmeden önce bir register-file entry'sinin temizlendiğini garanti etmez, dolayısıyla:

  • Leak: faulting/assisting/transient bir instruction bir register-file slot'unu okur ve bir stale değer elde eder (tüm etkilenen core'larda FP/vector; Gracemont'ta integer da).
  • Transmit: stale değer, onu cache state'e encode eden bağımlı bir transient erişimde kullanılır.
  • Decode: Flush+Reload gibi bir cache-timing oracle byte'ı geri çıkarır. Sampling olduğundan attacker belirli bir secret'ı adresleyemez — yalnızca register file'dan yakın zamanda geçen şeyi gözlemler — bu yüzden saldırı tekrarlanır ve ortalaması alınır.

Etkilenen core'lar arasında Goldmont, Goldmont Plus, Tremont ve Gracemont bulunur — Alder Lake ve Raptor Lake'teki E-core'lar. Dikkat çekici biçimde bu core'ların hiçbiri SMT desteklemez, dolayısıyla cross-thread bir varyant yoktur; sızıntı aynı logical core üzerinde ardışık context switch'ler boyuncadır.

Walkthrough

Intel'in advisory'sinden ve Linux kernel dokümantasyonundan, kavramsal akış MDS'i yansıtır:

// Conceptual RFDS sampling loop (transient; requires affected Atom core).
flush(probe);                       // clear covert-channel buffer
transient_window {                  // fault/assist that mis-speculates
    v = read_some_register();       // transiently reads a STALE register-file slot
    (void) probe[v * 4096];         // encode stale byte into cache state
}
// time probe[] -> fastest line index == sampled stale byte

Yüksek seviyeli reprodüksiyon:

  1. Bir register okumasının stale veri forward edebileceği bir transient pencere tetikle.
  2. Sample'lanan byte'ı cache-indexed bir probe array üzerinden encode et.
  3. Onu Flush+Reload ile geri çıkar ve yakın zamanda bir register'dan geçmiş bir victim secret'ını (örn. bir syscall ya da context switch boyunca kopyalanan crypto state) yeniden birleştirmek için tekrarla.
Sample'lanan çıktı (kavramsal)
sampled 0x2f hits=611
sampled 0x00 hits=20
=> stale register bytes reassembled by repetition + alignment

Warning

Threat model aynı core üzerinde cross-domain'dir: user-to-kernel, guest-to-host (VM entry/exit) ve task-to-task geçişleri, stale register verisinin bir sınırı aştığı yerlerdir.

Detection

  • RFDS kendisi architectural seviyede sessizdir; Linux'ta enumeration'ı sysfs dosyası /sys/devices/system/cpu/vulnerabilities/reg_file_data_sampling üzerinden kontrol et; bu dosya Not affected, Vulnerable, Vulnerable: No microcode ya da Mitigation: Clear Register File raporlar.
  • Bir host'un clearing microcode'a ihtiyacı olup olmadığını bilmek için RFDS_NO (IA32_ARCH_CAPABILITIES bit 27) ile RFDS_CLEAR (bit 28) durumunu doğrula.
  • Davranışsal olarak, cache-probing pattern'leriyle eşleşmiş yüksek oranda faulting/assisting instruction üreten process'leri izle (generic MDS/Flush+Reload detection sezgisi), örn. machine-clear ya da page-fault oranlarında ani sıçramalar.

Mitigation

  • INTEL-SA-00898 için microcode update'i uygula; etkilenen part'lar sonra RFDS_CLEAR enumerate eder, bu da VERW instruction'ının etkilenen register-file entry'lerini de overwrite etmesini sağlar.
  • OS, stale register verisini scrub etmek için mevcut MDS/VERW clearing dizisini return-to-user'da ve VM entry'den önce yeniden kullanır; yeni Linux kernel'leri bunu reg_file_data_sampling mitigation'ına bağlar.
  • Workload izin verdiğinde, MDS için kullanılan aynı scheduling sertleştirmesi (untrusted kodu co-schedule etmekten kaçın; domain geçişinde flush'la) geçerli olur; etkilenen Atom core'larında SMT olmadığı için SMT burada bir faktör değildir.

References