CacheOut¶
L1D Eviction Sampling (CVE-2020-0549): seçilen L1-D cache line'larını, line-fill buffer üzerinden drain olurken sızdıran, yönlendirilmiş bir L1D Eviction Sampling transient attack'i.
Mechanism¶
CacheOut, klasik MDS saldırılarının "bir CPU buffer'da ne varsa onu (kontrol edilemeyen şekilde) sızdır" modelini "seçtiğin data'yı sızdır"a çeviren, eviction-driven bir sampling saldırısıdır. MDS'ten farkı temeldir: MDS buffer'larda o an ne varsa onu kontrolsüz olarak örnekler, CacheOut ise L1D'den seçilen bir line'ı kontrollü şekilde evict ederek LFB'ye giren verinin ne olacağını belirler. Her ikisi de aynı LFB'yi kullanır ama mekanizmaları ve operasyonel modelleri farklıdır — bu yüzden Intel de INTEL-SA-00329'da L1D Eviction Sampling'i (L1DES) residual MDS leak'lerinin yanında ayrı bir sorun olarak ele alır. Core, L1 data cache'ten bir line evict ettiğinde, evict edilen byte'lar dışarı çıkarken Line Fill Buffer (LFB) üzerinden geçer. Faulting ya da microcode destekli bir load, sonra ZombieLoad/RIDL'deki gibi, architectural fault retire olmadan önce bu in-flight LFB data'sını transient olarak attacker'ın speculative penceresine forward'layabilir.
Note
Yenilik yöndür: önce belirli bir L1D line'ı (cache conflict üzerinden) evict ederek attacker, sızıntılı buffer'a hangi secret'ın düşeceğini kontrol eder. Bu, CacheOut'un hyperthread'ler, process'ler, VM'ler, user/kernel sınırı boyunca ve SGX enclave'lerinden dışarı, 32 KiB'lik tüm L1D'yi sample'lamasına izin verir. SGX'i L1TF/Foreshadow'dan korumak için tasarlanan L1D-flush mitigation, doğrudan L1 okumasını (L1TF) engellese de CacheOut'un eviction-driven LFB sampling yolunu adreslemediği için bu vektörü tam olarak engelleyemez — mitigation zayıflamaz, farklı/ortogonal bir yol kullanılır.
Walkthrough¶
- Hedef line'ı evict et. Seçilmiş bir L1D line'ını dışarı itmek için cache contention kullan; data LFB üzerinden akar.
- Bir transient pencere aç. Faulting ya da assisting bir load çalıştır (genelde bir TSX transaction içinde, böylece architectural fault bastırılır ve pencere dar kalır).
- Secret'ı encode et. Transient pencerede, sızan byte'ı bir
FLUSH+RELOADprobe array'ini indexlemek için kullan — secret değer bir cache line seçer. - Decode et. Pencere çöktükten sonra her probe line'ının reload'ını
rdtscpile timing'le; makine başına cache-hit threshold'unun altındaki bir access, sızan byte'ı açığa çıkarır. - Byte byte tekrarla ve gürültüyü yenmek için ortalama al.
Transient encode/decode skeleton (conceptual)
Detection¶
Victim'in içinden zordur. Host tarafında, anormal derecede yüksek TSX-abort oranları, sıkı eviction + timing loop'larıyla birlikte zayıf bir heuristic sinyaldir.
Mitigation¶
Intel microcode (INTEL-SA-00329) artı buffer-overwriting (VERW/MD_CLEAR) ve context/VM switch'te L1D flush; yüksek güvence gereken ortamlarda SMT ve TSX'i devre dışı bırakma.