Další díra přímo v CPU. Zranitelností Speculative Store Bypass trpí ARM, AMD i Intel

22. 5. 2018

Sdílet

 Autor: Intel

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ě.

Křemíkový čip zblízka (foto: Fritzchens Fritz) Křemíkový čip s jádry CPU vyfotografovaný zblízka (foto: Fritzchens Fritz)

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.

Shrnutí chyby Speculative Store Bypass z webu Microsoftu Shrnutí chyby Speculative Store Bypass z webu Microsoftu

Ř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í.

ICTS24

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.

Přehled technik proti útokům na Spekulativní vykonávání kódu podle Microsoftu. Nová chyba Speculative Store Bypass je v posledním sloupci (CVE-2018-3639) Přehled technik proti všem čtyřem útokům na spekulativní vykonávání kódu podle Microsoftu. Nová chyba Speculative Store Bypass je v posledním sloupci (CVE-2018-3639)

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.

Odkazy na informace k chybě Speculative Store Bypass

Doplněno: chyba CVE-2018-3640, Rogue System Register Read

Kromě předcházející chyby byla zveřejněna ještě jedna, jejíž číslo je CVE-2018-3640 a v soupisce spekulativních útoků skupiny Spectre/Meltdown je označená jako varianta 3a (což by odkazovalo na Meltdown, ale spojitost není úplně jasná). Tato díra způsobuje, že lokální uživatel či program bez administrátorských práv může přečíst některé citlivé údaje o stavu registrů z procesoru. Opět k tomu vede cesta přes útok na spekulativní vykonávání a poté analýza "side channelu", kterou se útočník dostane k datům, která neměl dostat. Tato chyba funguje skrz virtualizaci, takže se útočník může z hostovaného OS dostat k hodnotám registrů hostitelského systému (hypervizoru).
Tuto chybu obsahují procesory Intel, zatímco AMD uvádí, že jeho architektury jader jí netrpí (přesněji říká, že jeho analýzy dosud neodhalily, že by jeho CPU byla touto chybou ohrožena). Z jader architektury ARM jsou postižené Cortexy A15, A57 a A72. ARM uvádí, že chyba nevyžaduje nějaká softwarová opatření. U procesorů Intel má být tato druhá chyba opravena aktualizací mikrokódu, zřejmě stejnou, která bude současně zavádět podporu SSBD pro ochranu před předchozí zranitelností Speculative Store Bypass.