Skip to content

Microcode mitigations

Çoğu CPU-zafiyet mitigation'ı önce bir microcode update'e ihtiyaç duyar: patch, kernel yazılımının sonra sürdüğü primitive'i (buffer-temizleyen bir VERW, genişletilmiş bir IBPB) ekler — bu olmadan kernel yalnızca bir best-effort ya da "Vulnerable: no microcode" durumunu yönetebilir.

Mechanism

Neden çalışır

Speculative-execution ve data-sampling kusurları (MDS, TAA, MMIO stale data, SRBDS, SRSO, …) architectural ISA'nın yazılıma temizleme yolu vermediği microarchitectural state üzerinden veri sızdırır. Bir microcode update, var olan instruction'ların davranışını yeniden tanımlar ya da yeni model-specific register'lar ekler, böylece software-reachable bir primitive var olur:

  • MDS için microcode, aksi takdirde obsolete olan VERW instruction'ını etkilenen CPU buffer'larını temizler hale getirir, böylece kernel onları userspace'e dönüşte ve guest entry'de flush edebilir.
  • SRSO için microcode IBPB'yi genişletebilir (birkaç policy seçeneğinden biri), böylece bir Indirect Branch Prediction Barrier saldırının istismar ettiği return-stack yolunu da kapsar; ancak Linux'ın varsayılan SRSO mitigation'ı bu değil, yazılım-tabanlı safe-ret return-thunk mekanizmasıdır.

Invariant: microcode mekanizmayı sağlar, kernel policy'yi (ne zaman çağrılacağını) sağlar. Mitigation yalnızca her ikisi de mevcut olduğunda etkilidir — kernel'in mitigation seçimini CPU'nun microcode özelliğini duyurup duyurmadığına (tipik olarak CPUID/MSR bit'leri üzerinden) bağlamasının nedeni budur. MDS için: "Bir CPU etkilenmişse ve microcode mevcutsa, kernel mitigation'ı varsayılan olarak etkinleştirir." CPU'nun vulnerable olduğu ama microcode primitive'inin bulunmadığı ya da duyurulmadığı yerde, kernel bir best-effort moduna geri düşer ve bunu sysfs'te söyler.

Walkthrough

1. Güncellenmiş microcode'un yüklü olup olmadığını kontrol et.

$ grep microcode /proc/cpuinfo | head -1
microcode       : 0x...
$ dmesg | grep -i microcode
microcode: Microcode Update Driver: ...
microcode: updated early: 0x... -> 0x..., date = ...

2. Per-vulnerability durumunu oku — microcode varlığı burada bildirilir.

$ grep -r . /sys/devices/system/cpu/vulnerabilities/

MDS için kernel, microcode state'lerini ayırt eden tam string'ler emit eder:

Mitigation: Clear CPU buffers                       # microcode present, VERW clears buffers
Vulnerable: Clear CPU buffers attempted, no microcode   # best-effort, primitive missing

SRSO için string'ler de eksik microcode'u aynı şekilde işaretler:

$ cat /sys/devices/system/cpu/vulnerabilities/spec_rstack_overflow
Mitigation: Safe RET
# or, when microcode / software protection is missing:
Vulnerable: No microcode
Vulnerable: Safe RET not enabled
SRSO state'lerini yorumlamak
  • Vulnerable: No microcode — gerekli IBPB-genişleten microcode patch'i yüklü değil; software mitigation tam olarak etkili olamaz.
  • Vulnerable: Safe RET not enabled — kernel tarafındaki "Safe RET" software return-thunk koruması etkin değil (devre dışı ya da build'de yok).
  • Mitigation: Safe RET — microcode ve software birleşir; tek başına microcode IBPB'nin, software parçası olmadan User→Kernel ya da Guest→Host transition'larını kapsamadığına dikkat et.

Microcode gerekli ama yeterli değil

Microcode'u yüklemek tek başına bu kusurları mitige etmez — kernel'in primitive'i yine de doğru sınırlarda çağırması gerekir. Tersine, microcode'u hiç güncellenmemiş bir host'ta (örn. stale firmware, intel-microcode/amd64-microcode paketi yok) bir mitigation'ı aktif olarak bildiren bir kernel, yalnızca best-effort çalışıyor olabilir. Her zaman hem yüklü microcode revision'ını hem de sysfs durumunu doğrula.

Detection

/sys/devices/system/cpu/vulnerabilities/* otoriter kaynaktır: bir no microcode substring'i CPU'nun firmware primitive'inden yoksun olduğu anlamına gelir. Bunu /proc/cpuinfo'dan yüklü revision ve dmesg'teki early-load satırlarıyla birlikte kullan.

Mitigation

(Operasyonel rehber.) CPU microcode'unu OS vendor'ının microcode paketi ve/veya bir BIOS/UEFI update'i üzerinden güncel tut ve her kernel ya da microcode değişikliğinden sonra sysfs zafiyet dosyalarını yeniden kontrol et. Microcode, enhanced IBRS, IBPB, L1D flush, MDS buffer clear, MMIO stale-data clear ve SRSO gibi ilgili mitigation'ları temellendirir.

References