Processor MMIO Stale Data clear¶
Intel's mitigation for Processor MMIO Stale Data (SBDR/SBDS/DRPW/SRBDS-update): a microcode-enhanced
VERWoverwrites the CPU fill buffers, and the kernel issues that clear on transitions to less-privileged domains so MMIO reads cannot sample stale uncore data.
Mechanism¶
Neden çalışır
Bir core MMIO okuduğunda ya da yazdığında, işlem uncore üzerinden yönlendirilir — tüm physical core'lar tarafından paylaşılan logic. Birkaç uncore/core buffer'ı (fill buffer'lar, sideband ve primary response buffer'lar) daha önceki operasyonlardan stale data'yı tutabilir ve bunu bir saldırganın sample'layabildiği yere geri propagate edebilir. Intel bunları Processor MMIO Stale Data (INTEL-SA-00615) altında gruplar:
- SBDR — Shared Buffers Data Read (CVE-2022-21123): stale data doğrudan mimari, yazılımdan görülebilen state'e okunur.
- SBDS — Shared Buffers Data Sampling (CVE-2022-21125): bir propagator onu uncore üzerinden hareket ettirdikten sonra fill buffer'dan veri sızar.
- DRPW — Device Register Partial Write (CVE-2022-21166): register boyutundan küçük bir MMIO write, partial write'ı yanlış işler ve FBSDP-etkilenen parçalarda fill-buffer verisini açığa çıkarır.
- SRBDS update (CVE-2022-21127): aynı buffer-clear yolunu kapsayan Special Register Data Sampling mitigation'ına bir güncelleme.
Düzeltme MDS/TAA buffer-overwrite primitive'ini yeniden kullanır: aksi halde
eskimiş olan VERW instruction'ı, bir microcode güncellemesi mevcutken, CPU
fill-buffer değerlerini overwrite eden bir MD_CLEAR operasyonu yapar. Invariant:
daha-ayrıcalıklı bir domain'den daha-az-ayrıcalıklı bir domain'e her geçiş paylaşılan
buffer'lar temizlenerek bitiyorsa, downstream'deki bir MMIO sampler önceki bir
victim'in verisini değil, yalnızca sıfırlanmış/overwrite edilmiş byte'ları bulur.
Altta yatan buffer'lar MDS ve TAA'nın sample'ladıklarıyla aynı olduğu için MMIO
mitigation'ı yeni bir mekanizma yerine mevcut VERW-tabanlı clear üzerine katmanlanır.
Walkthrough¶
Bu CPU/kernel altyapısıdır; onu sorgular ve yapılandırırsınız.
1. Vulnerability/mitigation durumunu oku. Kernel bir sysfs dosyası sunar:
$ cat /sys/devices/system/cpu/vulnerabilities/mmio_stale_data
Mitigation: Clear CPU buffers; SMT vulnerable
Diğer durumlar arasında Vulnerable, Not affected ve
Mitigation: Clear CPU buffers; SMT disabled bulunur.
2. Microcode'un clear'ı gerçekten sağladığını doğrula. VERW overwrite'ı yalnızca
microcode gerekli enumeration'ı bildirdiğinde buffer'ları temizler. Burada iki ayrı
enumeration bit'i vardır: MD_CLEAR bir CPUID özelliğidir
(CPUID.(EAX=07H,ECX=0):EDX[bit 10]) ve MDS/TAA için VERW-tabanlı clear'ı imler; MMIO
fill-buffer durumu içinse VERW'ün fill buffer'ları overwrite etmesi ayrıca
IA32_ARCH_CAPABILITIES bit 17 (FB_CLEAR) set olduğunda gerçekleşir — yani "MD_CLEAR"
ve "FB_CLEAR" aynı bit değil, farklı MSR/CPUID alanlarında yaşayan iki ayrı enumeration'dır.
Enumerate edilmiş microcode desteği olmadan VERW mimari
(segment-check) davranışına geri döner ve hiçbir şeyi clear etmez — durum string'i o
zaman eksik bir mitigation'ı yansıtır.
3. Kernel command line üzerinden ayarla. Mitigation mmio_stale_data= ile kontrol
edilir:
mmio_stale_data=full # clear buffers on return to userspace and VM entry
mmio_stale_data=full,nosmt # full clear, and disable SMT
mmio_stale_data=off # disable the mitigation
full, user space'e geçişlerde ve VM entry'de buffer clear'ını devreye sokar; nosmt
varyantı ek olarak SMT'yi devre dışı bırakır çünkü bir sibling hyperthread, clear'dan
önceki pencerede paylaşılan buffer'ları sample'layabilir.
4. Mevcut clear'larla etkileşim. Zaten MDS ya da TSX
Asynchronous Abort (TAA)'dan etkilenen CPU'larda, kernel'in aynı geçişteki mevcut
VERW'ü buffer'ları zaten overwrite eder, bu yüzden MMIO için ek bir clear eklenmez;
MMIO'ya özgü clear esas olarak MMIO Stale Data'dan etkilenen ama MDS/TAA'dan
etkilenmeyen parçalarda önem kazanır.
Microcode zorunludur
Clear tamamen microcode ile güçlendirilmiş VERW'ün bir özelliğidir. Clear'ı
yapacak kadar yeni ama güncellenmemiş microcode üzerinde çalışan bir kernel'de,
kernel buffer'ları overwrite edemez ve düşürülmüş bir durum bildirir — yalnızca
kernel'i patch'lemek yetersizdir.
Detection¶
Leak'in kendisi için runtime IOC yoktur; doğrulama konfigürasyon seviyesindedir.
/sys/devices/system/cpu/vulnerabilities/mmio_stale_data ile kardeş mds,
tsx_async_abort ve srbds dosyalarını okuyun, güncel bir microcode paketini doğrulayın
ve kernel command line'ı istenmeyen bir mmio_stale_data=off ya da global bir
mitigations=off için denetleyin.
Mitigation¶
(Artık risk / bypass.) SMT etkinken, birlikte yerleşik bir sibling thread,
cross-domain VERW'den önceki aralıkta paylaşılan buffer'ları sample'layabilir, bu
yüzden durum dürüstçe SMT vulnerable bildirir; yalnızca nosmt bunu kapatır.
Mitigation'ı devre dışı bırakmak (mmio_stale_data=off/mitigations=off) ya da stale
microcode çalıştırmak kanalı yeniden açar. Clear, MDS, TSX
Asynchronous Abort (TAA) ve daha geniş microcode-mitigations
ailesinin buffer-overwrite mekanizmasını paylaşır; bunların herhangi birindeki açıklar
(örn. kurulu microcode'un enumerate etmediği varyantlar) artık MMIO maruziyetine
dönüşür. İlgili fill-buffer sampling için bkz.
microarchitectural-data-sampling-uncacheable-memory.
References¶
- The Linux Kernel. Processor MMIO Stale Data Vulnerabilities
(
Documentation/admin-guide/hw-vuln/processor_mmio_stale_data.rst). — https://www.kernel.org/doc/html/latest/admin-guide/hw-vuln/processor_mmio_stale_data.html - Intel. Processor MMIO Stale Data Vulnerabilities (advisory guidance, INTEL-SA-00615). — https://www.intel.com/content/www/us/en/developer/articles/technical/software-security-guidance/advisory-guidance/processor-mmio-stale-data-vulnerabilities.html
- Intel Security Center. INTEL-SA-00615. — https://www.intel.com/content/www/us/en/security-center/advisory/intel-sa-00615.html