RIDL/CacheOut Variant - Fill Buffer Stale Data¶
Stale verinin — Vector Register Sampling (VRS, CVE-2020-0548) byte'ları dahil — orijinal MDS buffer-clearing mitigation'larından sonra bile fill buffer'larda hayatta kaldığı bir artık (residual) MDS leak'i (INTEL-SA-00329). Not: VRS (CVE-2020-0548) ve L1D Eviction Sampling (L1DES, CVE-2020-0549) tek bir advisory altında gruplanmış ayrı CVE'lerdir — birbirinin variant'ı değil; yalnızca L1DES CacheOut'un teknik temelidir.
Mechanism¶
MDS mitigation'larının ilk dalgası (microcode + VERW/MD_CLEAR), her domain geçişinde line-fill buffer'ları scrub ederek sample'lanacak hiçbir stale byte kalmamasını sağlamalıydı. INTEL-SA-00329, bu varsayımın etkilenen core'larda başarısız olduğu iki yolu açıkladı.
Note
Kırılan invariant: "OS VERW çalıştırdıktan sonra, etkilenen buffer'lar geri çıkarılabilir cross-domain veri içermez." Bu varyantlarda, clearing adımının kapsamadığı bir şekilde fill buffer'lara veri (yeniden) yatırılır ya da onlardan geri çıkarılır, dolayısıyla MDS ya da TAA tarzı bir faulting/asynchronous-abort load o stale byte'ları hâlâ bir transient pencereye forward edebilir — microcode güncellenene kadar patch'lenmiş makinelerde RIDL/CacheOut tarzı sızıntıyı yeniden etkinleştirir.
Bu advisory, birbirinin variant'ı olmayan ama aynı fill-buffer residual kök nedenini paylaşan iki ayrı CVE'yi kapsar:
- Vector Register Sampling — VRS (CVE-2020-0548). Dar koşullar altında, bir vector inaktivite döneminden sonra yürütülen vector operasyonlarının kısmi sonuçları çıkarsanabilir. Kavramsal olarak, stale vector verisi store/fill buffer'ların kullanılmayan kısımlarına yayılabilir ve sonra MDS/TAA tarzı tekniklerle sample'lanabilir. Intel, gerektirdiği kısıtlayıcı koşullar nedeniyle bunu düşük şiddette (CVSS ~2.8) değerlendirir.
- L1D Eviction Sampling — L1DES (CVE-2020-0549), CacheOut primitive'i: L1D'den evict edilen byte'lar line-fill buffer'dan geçer ve sample'lanabilir; ve önemlisi bu yol orijinal MDS
VERWclearing'i tarafından mühürlenmedi — bu da CacheOut'u aksi halde mitigate edilmiş core'larda yönlendirilmiş (directed) bir leak yapar (attacker önce seçilen line'ı evict eder).
Birlikte, MDS mitigation'ının eksik olduğunu gösterirler: fill buffer, daha önceki VERW overwrite'ının ortadan kaldırmadığı stale veriyi (vector kalıntıları, yeni evict edilmiş L1D line'ları) hâlâ tutabilir ya da alabilir.
Walkthrough¶
Kamuya açık Intel advisory'sinden ve CacheOut writeup'ından yüksek seviyeli:
- Secret'ın fill buffer'a girmesini sağla. L1DES için, seçilen bir L1D line'ını evict et (cache contention) böylece LFB'den drain olur; VRS için, inaktivite sonrası vector aktivitesinin buffer'da kısmi vector verisi bırakmasına dayan.
- Bir transient pencere aç. Bir faulting load çıkar ya da bir TSX asynchronous abort (TAA) tetikle, böylece architectural fault/abort geciktirilir ya da bastırılır.
- Stale byte'ı forward et. Pencerede, daha önceki mitigation'ların onu temizlemiş olması beklenmesine rağmen residual fill-buffer byte'ı transient olarak bağımlı instruction'lara forward edilir.
- Encode + decode. Sızdırılan byte'ı bir
FLUSH+RELOADprobe array'ini index'lemek için kullan, sonra hangi line'ın cache'lendiğini time-decode ederek byte'ı geri çıkar. - Tekrarla / yönlendir. CacheOut için, tüm L1D'yi SMT sibling'leri, process'ler, VM'ler, user/kernel sınırı ve SGX boyunca taramak için line'ları teker teker hedef al.
Directed leak iskeleti (kavramsal)
Detection¶
- Victim'den: büyük ölçüde gözlemlenemez. Host tarafında, eviction-set construction, çok yüksek TSX-abort oranları ve 256-stride bir probe buffer üzerinde sıkı
rdtscptiming döngülerini birleştiren unprivileged workload'ları izle. - Performance counter'lar: yoğun
clflushkullanımıyla birlikte TSX abort'larında (tx_abort), machine clear'larda ve memory-ordering assist'lerinde ani sıçramalar, MDS/TAA tarzı probing'in zayıf sezgisel sinyalleridir.
Mitigation¶
- Güncellenmiş Intel microcode (INTEL-SA-00329).
MD_CLEAR/VERW'i güçlendirir, böylece residual vector verisini de overwrite eder ve L1D-eviction yolunu kapatır; domain geçişlerinde clear çıkaran OS güncellemeleriyle eşleştir. - L1DES maruziyeti için context/VM switch'te L1D flush; TAA abort penceresini kaldırmak için TSX'i devre dışı bırak; cross-thread fill-buffer paylaşımını durdurmak için SMT'yi devre dışı bırak.
- SGX için, patch'ledikten sonra eski attestation key'lerinin geçersiz kılınması için TCB recovery uygula.