Indirect Branch Restricted Speculation¶
IBRS, daha ayrıcalıklı bir mode'daki indirect branch'lerin, daha az ayrıcalıklı yazılım tarafından eğitilmiş branch prediction'larla kontrol edilmesini engelleyen bir x86 kontrolüdür (
IA32_SPEC_CTRLbit 0 set edilir); Spectre v2'yi (Branch Target Injection) mitige eder.
Mechanism¶
Note
IBRS'nin uyguladığı invariant: IBRS set edildiği sürece, daha yüksek
ayrıcalıklı bir predictor mode'unda yürütülen indirect branch'ler, daha
düşük ayrıcalıklı bir mode'da çalışan yazılımdan (ya da legacy IBRS'te, IBRS
en son set edilmeden önce) öğrenilen tahminlerle kontrol edilmez. OS bunu,
IA32_SPEC_CTRL MSR'ına bit 0'ı (IBRS) set eden bir WRMSR ile etkinleştirir.
Bu, user-mode (veya guest) kodunun kernel indirect branch'lerini bir
Spectre-v2 disclosure gadget'ına yönlendirmek için Branch Target Buffer'ı
poison etmesini durdurur.
Kernel Spectre belgelerine göre IBRS, trust sınırlarının çevresinde devreye sokulur, örneğin:
indirect branch restricted speculation is turned on by default before invoking any firmware code to prevent Spectre variant 2 exploits
Legacy vs Enhanced IBRS. Legacy IBRS'in, daha ayrıcalıklı bir mode'a her
girişte OS tarafından toggle'lanması (ve dönüşte temizlenmesi) gerekir ki bu
maliyetlidir. Enhanced IBRS (eIBRS) IA32_ARCH_CAPABILITIES üzerinden enumerate
edilir ve boot'ta bir kez set edilir; hardware bundan sonra predictor entry'lerini
privilege mode'ları arasında sürekli izole eder. Bkz. enhanced IBRS.
Warning
IBRS yalnızca mode'lar arası indirect-branch prediction kontrolünü kısıtlar. Tek başına Branch History Buffer'ı izole etmez (BHI'yı geride bırakır) ve bazı eIBRS Intel parçalarında return tabanlı Spectre-BTI'ya (Retbleed) karşı yetersiz olduğu gösterildi; daha sonra Indirect Target Selection eIBRS guest/host isolation'ını daha da zayıflattı.
Walkthrough¶
Check the reported mitigation
$ cat /sys/devices/system/cpu/vulnerabilities/spectre_v2
Mitigation: IBRS, IBPB: conditional, RSB filling
Mitigation: IBRS legacy IBRS'i gösterir; Mitigation: Enhanced IBRS
(isteğe bağlı + Retpolines) bir kez set edilen hardware varyantını gösterir.
Mode'u kernel command line üzerinden zorla veya seç:
spectre_v2=ibrs # use (legacy) IBRS
spectre_v2=eibrs # use enhanced IBRS where supported
spectre_v2=retpoline # use software retpoline instead
spectre_v2=off # disable (vulnerable)
CPU/microcode'un feature'ı enumerate ettiğini doğrula:
Detection¶
spectre_v2 sysfs node'u aktif stratejiyi adlandırır; kernel, eIBRS veya
retpoline'ın daha iyi default olduğu parçalarda ibrs istendiğinde uyarır.
Mitigation¶
IBRS, retpoline ve enhanced IBRS ile birlikte kernel içi birbiriyle değiştirilebilir birkaç Spectre-v2 stratejisinden biridir; tipik olarak context switch'ler boyunca IBPB, SMT için STIBP ve RSB stuffing ile birleştirilir. Etkinliği microcode mitigations'a bağlıdır.