Skip to content

Vector Register Sampling

SSE/AVX/AVX-512 vector register'larındaki stale verinin process ve SMT-sibling sınırları boyunca transient olarak çıkarsanabildiği bir Microarchitectural Data Sampling (MDS) varyantı.

Mechanism

The invariant

Vector Register Sampling (VRS), INTEL-SA-00329 altında CVE-2020-0548 olarak izlenir (CVSS base 2.8, "Low") ve Microarchitectural Data Sampling (MDS) ailesinin bir üyesidir. MDS-sınıfı bug'lar tek bir kök nedeni paylaşır: küçük CPU-içi staging yapıları (fill buffer'lar, store buffer'lar, load port'lar) güvenlik domain'i başına partition edilmez ve faulting ya da assisting bir load, böyle bir yapıda rastlantısal olarak bulunan stale byte'ları speculative window'da bağımlı micro-op'lara transient olarak forward edebilir. VRS için sızan kalıntılar, vector register'larının içeriğidir (SSE/AVX/ AVX-512 datapath'i üzerinden hareket eden veri). Belirli koşullar altında — özellikle bir vector inactivity döneminden sonra yürütülen vector operasyonları — önceki bir vector operasyonunun, muhtemelen başka bir process'e ya da aynı physical core'daki diğer SMT thread'ine ait kısmi değerleri sample edilebilir. Tüm MDS'lerde olduğu gibi, sızan byte'lara doğrudan adreslenemez; attacker onları yalnızca bir transient olarak gözler, sonra geleneksel bir covering channel (örn. Flush+Reload) üzerinden exfiltrate eder. VRS bir adres seçmenize izin vermez — o anda in flight olan hangi vector veri varsa onu sample eder.

Walkthrough

Bu kavramsal, defensive bir walkthrough'dur. Yapı herhangi bir MDS sampler'ını yansıtır ve çalışan bir leak primitive içermez.

  1. Buffer-overwrite mitigation'ının aktif olup olmadığını kontrol et. Linux'ta MDS/MDS-sınıfı durumu sysfs altında gösterilir:
grep -r . /sys/devices/system/cpu/vulnerabilities/mds
  1. CPU'nun MD_CLEAR'ı sunduğunu doğrula. Microcode mitigation'ı, microarchitectural buffer'ları temizlemek için legacy VERW instruction'ını yeniden amaçlandırır; kullanılabilirliği md_clear CPU flag'iyle ilan edilir:
grep -o 'md_clear' /proc/cpuinfo | head -n1
  1. (İşlevsel olmayan) sampling şeklini anla. Bir MDS sampler, faulting/assisting bir load tetikler, transient'in bir stale byte'ı bağımlı bir vector op'a forward etmesine izin verir ve onu bir cache covering channel'dan okur. VRS için stale kaynak, genel bir fill buffer yerine vector register datapath'idir.

Warning

VRS bir sampling primitive'idir, arbitrary bir read değil. Seçilmiş bir adresi hedefleyemez; yakın zamanda yerleşik olan hangi vector veri varsa onu gözler, dolayısıyla pratik saldırılar bir secret'ı yeniden oluşturmak için birçok sample artı istatistik gerektirir. Yayımlanan 2.8'lik CVSS bu zorluğu yansıtır.

Patch'lenmiş bir sistemde beklenen davranış

/sys/devices/system/cpu/vulnerabilities/mds:Mitigation: Clear CPU buffers; SMT vulnerable
md_clear
Güncel bir microcode + kernel'de, VERW her privilege-domain transition'ında buffer'ları temizler, böylece bir sampler stale vector veri yerine yalnızca temizlenmiş (sıfırlanmış) değeri gözler. SMT enabled iken sibling thread, co-resident execution sırasında hâlâ expose olabilir; bu yüzden status string'i hâlâ "SMT vulnerable" gösterebilir.

Detection

Devam eden bir VRS sampler'ının güvenilir bir software tarafı detection'ı yoktur; transient operasyonlar architectural iz bırakmaz. Savunma duruşu, md_clear/buffer-clear mitigation'ının enabled olduğunu doğrulamak (yukarıdaki sysfs ve /proc/cpuinfo kontrollerine bak) ve microcode revision'larını Intel'in advisory listesine karşı izlemektir.

Mitigation

  • MD_CLEAR'ı enable eden Intel microcode'unu uygula ki bir VERW (ve uygun olduğunda L1D_FLUSH) domain transition'larında microarchitectural buffer'ların üzerine yazsın — bkz. mds-buffer-clear ve microcode-mitigations.
  • SMT'yi disable etmek cross-thread same-core exposure window'unu ortadan kaldırır.
  • Intel'in bu sınıf için 2020'deki ilk mitigation'ı eksik bulundu ve düzeltilmiş bir microcode revision'ı ile takip edildi; microcode'u güncel tut.

References