Před časem prosákla zpráva, že Intel (a zřejmě i další výrobci procesorů) opět pod NDA řeší bezpečnostní zranitelnosti podobné chybě Spectre ze začátku letošního roku. První příděl těchto chyb byl včera odhalen v podobě chyby označené CVE-2018-3639, neboli „Speculative Store Bypass“. Tato zranitelnost se podobá chybě Spectre a opět spočívá přímo v architektuře jader out-of-order procesorů – nelze ji tedy nějak jednoduše zazáplatovat. Jde o další ze skupiny útoků na spekulativní provádění kódu a je tedy řazena k Spectre a Meltdownu jako „varianta 4“ těchto děr. Podrobnosti publikoval Microsoft a Google Project Zero, koordinovaně s výrobci procesorů Intelem, AMD a ARMem, jichž se zranitelnost všech týká. Pro zjednodušení lze asi momentálně říci, že alespoň u běžných uživatelských PC by neměl být dopad této chyby velký a mělo by stačit, pokud budete jako vždy udržovat operační systém a prohlížeč webu aktuální. Nejde tedy asi o tak závažnou zranitelnost jakou je Meltdown a Spectre. Nepříjemné riziko ale představuje.
Útok na spekulativní čtení dat
V čem chyba spočívá? Slabým místem je opět spekulativní vykonávání práce v procesoru, ovšem tentokrát lokalizované do load/store pipeline. Moderní CPU čtení a ukládání hodnot mezi pracovními registry procesoru a operační pamětí také provádějí stylem out-of-order, neboť to dovoluje zvýšit výkon a prostupnost vstupu a výstupu a zamezit ve výpočetních jednotkách prostojům při čekání na data. Tato technika se často označuje jako Memory Disambiguation a možná si ji pamatujete jako jednu z velkých novinek architektury Intel Conroe z roku 2006. Ovšem podobně jako mezi instrukcemi programu mohou i mezi čteními a zápisy být závislosti. CPU například musí hlídat, aby iniciativně nepřečetlo (což je „load“) data z adresy, do které by směřoval nějaký zápis, jenž má dle posloupnosti kódu předcházet („store“). Jinak by CPU dostalo neaktuální a chybná data.
Procesory proto používají techniky, které toto kontrolují. Ovšem protože fronty čtení a zápisů mají dnes desítky položek, které se musí na konflikty zkontrolovat, začala být jako optimalizace výkonu použita i zde technika spekulativního vykonání operací. CPU tak připustí čtení s hypotézou, že nekoliduje s žádným zápisem, aby byla operace co nejrychleji dokončena. Podobně jako při predikci větvení je pak v případě, že se tento odhad ukáže jako chybný, dodatečně načtená hodnota zahozena a CPU začne znovu správně. Ovšem ono načtení předchozí hodnoty je podobně jako u chyby Spectre riziko, protože data už jsou v cache. Šikovný programátor si je tam může najít a dostat se k nim ve svém programu dostat, i když by správně neměl. A pokud se mu podaří takto „nasát“ nějakou citlivou adresu, stává se tato chyba bezpečnostním problémem.
Nebezpečnost této zranitelnosti byla skutečně prokázána a dostala tedy již zmíněné jméno „Speculative Store Bypass“ a označení CVE-2018-3639. Útok Speculative Store Bypass by neměl být schopen dostat se do paměti jádra, takže ohrožuje jen uživatelský prostor a aplikace, kde ale stále může dojít k získání citlivých dat útočníkem. Nejohroženější budou aplikace spouštějící cizí kód, u těch by tento útok mohl být použit pro čtení dat mimo sandbox. Podle Microsoftu by teoreticky mohly být ohrožené také servery používající virtualizaci či enklávy, kde by mohlo dojít k útoku mezi jednotlivými VM nebo na hypervizor.
Co je důležité: chyba vyžaduje spuštění kódu na cílovém počítači, útočník tedy buď musí být lokální uživatel (ovšem nepotřebuje zvýšená práva), nebo musí kód na počítač dostat jinak – například jako javascript na webové stránce nebo v reklamě zobrazované na ní, i když takovéto zneužití asi zatím výzkumníci nevyvinuli či nezveřejnili. Nejde každopádně o chybu zneužitelnou vzdáleně.
Zranitelnost má opět (skoro) všechno
Postiženy či teoreticky zranitelná jsou jako u Spectre pravděpodobně všechna či skoro všechna výkonnější CPU typu out-of-order, jelikož jde o obecně používanou techniku pro zvýšení výkonu. Intel například uvádí procesory od Nehalemu až po současnou osmou generace Core (Coffee Lake, Cannon Lake, Kaby Lake) a Skylake-X/SP, včetně Xeonů. Také Atomy jsou zranitelné, a to zřejmě architektury Goldmont (včetně serverového Denvertonu), Goldmont+, naopak Silvermont a Airmont snad ne, uvedené nejsou. U AMD by měly být postižena minimálně jádra od Bulldozeru až po Excavator i Zen. U ARMU pak chyba postihuje Cortexy A57, A72, A73 a A75, z 32bitových Cortexů pak A8, A9, A15 a A12/A17. Je pravděpodobné, že zranitelnost mají také vlastní jádra například Applu. Podle IBM by zřejmě měly být zranitelné i procesory Power včetně nejnovějších Power9. Další procesorové architektury budou patrně také zastoupeny, ale nebyly o nich informace v prvním sledu po odhalení chyb.
Řešení chyby
Řešení této chyby bude dvojí. Podobně jako u varianty 1 chyby Spectre by se měla použít různá opatření stěžující využití tohoto útoku v citlivých místech různého softwaru, který by mohl být zranitelný, tedy různé sandboxy, spouštění javascriptu v prohlížečích a podobně. V těchto aplikacích mohou být použité například serializující instrukce. Některá opatření proti Spectre v1 už by sama měla být účinná – například redukce přesnosti časovačů pro javasctript v prohlížečích webu.
Ztráty výkonu zatím nebudou
Druhou možností, které bude již na hardwarové úrovni, bude vypnutí spekulativního čtení v procesoru, což je označeno jako funkce SSBD (Speculative Store Bypass Disable). Její aktivace zakáže procesoru provádět citlivou optimalizaci I/O, ovšem je to za cenu ztráty výkonu, kterou Intel uvádí jako 4–8 %. Problém je, že v tomto případě by nebyla postižená jen systémová volání do jádra a změny kontextu jako u Spectre/Meltdown, ale veškeré vykonávání kódu, takže tento postih by byl pravděpodobně nepříjemnější. Protože by chyba měla být relativně náročnější k zneužití a momentálně není riziko vyhodnoceno jako tak vysoké, nebude proto v operačních systémech tato hardwarová ochrana SSBD ve výchozím stavu aktivní. Tato ochrana je nabízena jen jako volitelné opatření pro zvlášť citlivé či opatrné uživatele a výrobci CPU doporučují ji ponechat ve výchozím neaktivním stavu. Prozatím tedy bude použita jen první čistě softwarová ochrana spočívající v úpravách citlivého kódu, ovšem je samozřejmě možné, že v případě, že by se chyba ukázala jako nebezpečnější a začala se zneužívat, by mohlo dojít ke změně tohoto rozhodnutí.
SSBD by mělo být možné aktivovat pro jednotlivé procesy, naštěstí tedy nemusí být nastaveno úplně globálně. Tedy alespoň na platformě x86, u ARMu ale snad má jít o kompletní vypnutí funkce Memory Disambiguation při bootu, což zní docela drsně. K použití SSBD bude podobně jako v případě aktualizací proti chybě Spectre třeba nový mikrokód či firmware, tedy alespoň v případě Intelu a ARMu. Materiály AMD o něm nehovoří, je možné, že funkce zpřístupňující deaktivování spekulativního čtení (a tedy pro SSBD) tohoto typu jsou již přítomné. Podobně jako u Spectre nebudou tyto aktualizace samy o sobě automaticky ovlivňovat chod CPU (tedy ho zpomalovat), pouze zpřístupní infrastrukturu, pomocí níž bude ono zpomalovací ochranné opatření moci aktivovat operační systém.
Aktualizace, které umožní SSBD používat, by měly postupně vycházet v hlavních operačních systémech. Zatím to ale vypadá, že pro Windows ještě nejsou a také informace o vydáních Linuxu, v kterých by se měla objevit, jsem nenašel. Nové mikrokódy patrně ještě také chvíli potrvají, Intel je má údajně v beta fázi a jsou testované výrobci počítačů a desek. Ochrany prvního softwarového typu by měly být roztroušené v různých potenciálně citlivých programech (prohlížeče, virtualizační hypervizory), takže nemusí vyjít jako nějaká zvláštní vyhrazená aktualizace OS.