Microcode branch mispredictions exploit¶
uSpectre: programın architectural branch'leri değil, karmaşık x86 instruction'larını gerçekleyen microcode'un içindeki mispredict olmuş branch'lerin sürüklediği transient execution sızıntısı.
Mechanism¶
Bug sınıfı / invariant
Karmaşık x86 instruction'ları (örneğin string op'ları, xsave/xrstor, belirli
divide ve gather'lar) hardware tarafından doğrudan yürütülmez. Decoder, onları
bir microcode sequencer tarafından yayılan dahili micro-op (uop) stream'ine
genişletir ve o uop stream'i kendi dahili control flow'unu içerir — loop
yapan, flag test eden ya da bir slow/fast path seçen microcode branch'leri.
Tıpkı architectural branch'ler gibi, bu microcode branch'leri de predict edilir. Microarchitecture bir microcode branch'ini mispredict ettiğinde, onları squash etmeden önce yanlış dahili path'teki uop'ları transient olarak yürütür. Yanlış yürütülen bu uop'lar, microarchitectural ayak izi (cache state) rollback'ten sağ çıkan secret'a bağlı load/işlemler gerçekleştirebilir.
Aşılan güvenlik sınırı aynı Spectre invariant'ıdır — speculatively yürütülen instruction'lar kalıcı microarchitectural state bırakır — ama misprediction'ın kaynağı ISA'nın altındadır, microcode engine'inde. uSpectre çalışması, bazı Intel parçalarında daha önce klasik Spectre/Meltdown variant'ı olarak kataloglanmış birkaç transient-execution etkisinin aslında microcode düzeyindeki (uSpectre) misprediction örnekleri olduğunu savunur.
Bu, tekniği kavramsal olarak Spectre, Spectre-PHT ve Spectre-BTB'ye komşu kılar, ama mispredict eden predictor ve speculation window, programın branch graph'ında değil, instruction implementation'ının içinde yaşar.
Walkthrough¶
Üst düzey yeniden üretim mantığı, herkese açık arXiv preprint'inden (Mosier, Nemati, Mitchell, Trippel, 2025) alınmıştır. Yalnızca temsili fragment'lar.
-
Dahili branch'i olan microcode'lanmış bir instruction bul. uop expansion'ı loop yapan ya da operand verisine göre bir path seçen karmaşık bir instruction tespit et (makale, microcode'u veriye bağlı dahili branch'ler içeren instruction'ları inceler).
-
Microcode predictor'ını eğit. Instruction'ı, dahili microcode branch'i tek bir predict edilmiş yöne yerleşene kadar tekrar tekrar çağır — architectural Spectre ile aynı "predictor'ı prime et, sonra kalıbı ihlal et" şekli.
for i in 0..N: invoke complex_insn(operands that take path A) # train
invoke complex_insn(operands that should take path B) # mispredict
-
Transient wrong-path uop'ları tetikle. İhlal eden çağrıda microcode sequencer, yanlış dahili path'i transient olarak çalıştırır; bu da microcode branch resolve olmadan ve uop'lar squash edilmeden önce secret'a bağlı bir transient erişim gerçekleştirir.
-
Bir cache channel ile recover et. Sızdırılan değeri, tıpkı klasik transient-execution PoC'lerinde olduğu gibi Flush+Reload ya da Prime+Probe gibi standart bir cache covert channel ile okuyup çıkar.
Warning
Bu girdi kavramsaldır. Hangi spesifik instruction'ların, microcode path'lerinin ya da microarchitecture'ların exploit edilebilir olduğunu ve gadget inşasını kasıtlı olarak atlar. Tam analiz için yetkili araştırma koşulları altında birincil makaleye başvur.
Status: unverified — bu teknik tek bir 2025 arXiv preprint'ine (Mosier et al., arXiv:2501.12890, peer-review'lanmamış) dayanır; pratik exploit edilebilirliği bağımsız olarak doğrulanmamıştır.
Detection¶
- Yalnızca dolaylı, davranışsal sinyaller. Diğer transient-execution saldırıları gibi microcode misprediction sızıntısı da architectural olarak görünmezdir; log'lanacak fault veren bir instruction yoktur.
- Bir cache covert-channel kalıbıyla (yüksek oranda
clflush/ zamanlanmış reload'lar) eşleşmiş, sıkı loop'lardaki karmaşık/microcode'lanmış instruction'ların anormal kullanımı en gerçekçi host sinyalidir. EDR ya daMACHINE_CLEARS, branch-misprediction counter'ları ve L1/LLC miss patlamalarının perf-counter izlemesi, microcode branch'inin kendisi yerine onu çevreleyen cache channel'ı işaretleyebilir. - Hardware performance counter'ları (örneğin Intel'de mispredict ve
ms_decoded/ microcode sequencer event'leri), bir iş yükü dahili mispredict'leri kışkırtmak için bir microcode'lanmış instruction'ı zorladığında olağandışı oranlar gösterebilir. - Detection, generic Spectre detection'ı ile örtüşür: bir speculation primitive'i ile bir timing/cache açığa çıkarma gadget'ının kombinasyonunu izle.
Mitigation¶
- Microcode/firmware güncellemeleri. Microcode düzeyindeki prediction sorunları, prensipte vendor microcode revizyonlarıyla ele alınabilir; CPU microcode ve firmware güncellemelerini hemen uygula.
- uSLH (microcode-aware Speculative Load Hardening). Makale, hassas kod için
bir software savunması olarak, microcode kaynaklı speculation'ı da hesaba katan,
speculative load hardening'in bir uzantısı olan
uSLH'i önerir. - Mevcut Spectre savunmaları hâlâ yardımcı olur. Speculation barrier'ları
(
lfence), retpoline/IBRS sınıfı kontroller ve secret handling'in constant-time / branchless kodlanması exploit edilebilir window'ları azaltır, ama bunlar architectural predictor'lar için tasarlanmıştır ve microcode branch'lerini tam olarak kapsamayabilir. - Speculation kaynağından bağımsız olarak saldırının açığa çıkarma yarısını köreltmek için saldırganın yüksek çözünürlüklü timer'lara ve paylaşılan cache'e erişimini azalt.