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
VERWinstruction'ı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-retreturn-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.
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¶
- Linux kernel docs. MDS — Microarchitectural Data Sampling. — https://docs.kernel.org/admin-guide/hw-vuln/mds.html
- Linux kernel docs. Speculative Return Stack Overflow (SRSO). — https://docs.kernel.org/admin-guide/hw-vuln/srso.html
- Linux kernel docs. Hardware vulnerabilities (index). — https://docs.kernel.org/admin-guide/hw-vuln/index.html