Hlavní navigace

Sedm nových variant Spectre a Meltdown přináší další potíže

David Ježek

Skupina vědců ze tří univerzit publikovala dokument popisující pět nových variant chyby Spectre a dvě nové varianty Meltdown. Zavádějí novou terminologii i systematizaci do členění jednotlivých variant.

Doba čtení: 5 minut

Devět stran textu, sedm nových chyb

Zdrojem následujících informací je 16stránkový dokument, za kterým stojí lidé z Graz University of Technology, imec-DistriNet KU Leuven a College of William and Mary. V něm popisují nově odhalené způsoby útoku chybami typu Spectre a Meltdown, přičemž zavádějí nové označení pro jednotlivé varianty a vše zastřešují pojmem transient execution, který si prozatím pracovně přeložme jako dočasné či přechodné provádění [instrukcí].

Nově představené varianty chyb jsou Meltdown-PK týkající se procesorů Intel, Meltdown-BR týkající se Intelu i AMD a dále 5 nových variant Spectre. Všechny chyby byly ověřeny na procesorech od Intelu, AMD a procesorech rodiny ARM, v dalších částech je nabídnuto shrnutí dopadu na jednotlivé architektury (budeme se mu ještě věnovat).

Odkud se vzalo označení „transient execution“

K tomu tvůrci dokumentu mají následující zdůvodnění: prakticky libovolná dnešní instrukce v procesorech může vyvolat chybu (například page fault či general protection fault) a vyžádat si tak (možná bychom mohli říci vynutit si) roll-back. I bez predikčních mechanismů, které procesory používají, a které jsou z hlediska inkriminovaných chyb letošním „hitem“ potřebují procesory i samy o sobě někdy vyprázdnit výpočetní pipeline (například při přerušení).

S predikčními mechanismy současných procesorů přichází také situace, kdy je pipeline vyprázdněna jen částečně (při chybné predikci). Vyprázdnění pipeline tak de facto vrací zpět všechny kladné efekty dané procesorové architektury využívající predikci a vedou ke korektnímu (exaktně předvídatelnému) funkčnímu chování. Odtud plyne pojmenování toho, že instrukce jsou prováděny přechodně (či dočasně).

Principiální podstata a důvod změny názvosloví

Pokud tedy vypneme z funkcionality modelového procesoru tyto predikce a spekulace ve vykonávání instrukcí, připravíme jej o významnou část výkonu, nicméně vedlejší efekty této části architektury zůstávají a právě toho zneužívají chyby rodin Spectre, Meltdown či Foreshadow, které vyžívají i stavů vyrovnávacích pamětí. Druhým dechem bychom mohli dodat, že i proto jsou dnes potřeba korekce na úrovni operačních systémů.

Protože všechny důsledky jemných nuancí procesorových architektur a jejich chyb nejsou vlastně dodnes známy a hlavně nebyly v době odhalení prvních chyb Spectre a Meltdown, může být jedinec zmaten, nevědom si všech důsledků všech variant jednotlivých chyb. V dokumentů autoři uvádějí mezi zdroji minimálně jeden případ, kdy toto nevhodné definování vedlo k chybné klasifikaci dané chyby. Ze stejných příčin také může dojít k chybám v aplikaci nevhodné obrany proti dané, mylně pochopené chybě.

Prezentovaný dokument tak představuje aktuálně nejucelenější systematizaci jednotlivých variant chyb, shrnutí jejich chování na daných procesorových architekturách a postupy obrany proti nim, pročež jej lze vřele doporučit jako vstupní zdroj informací do problematiky v současné době. A nyní blíže k novým variantám a terminologii. Jeden obrázek přitom vydá za tisíc slov:

Spectre a Meltdown, listopad 2018

Sluší se připomenout, že chyby typu Spectre a Meltdown sice principiálně využívají podobné mechanismy (proto autoři zavádějí společnou terminologii transient execution), ale jinak se liší.

V případě Spectre ony dočasné (přechodné) instrukce pracují pouze s daty, ke kterým má aplikace přístup z principu architektury CPU. Takové instrukce může aplikace provádět ve svém normálním běhu (a to i s vědomím, že varianta Spectre-BTB může skočit na libovolné místo v adresním prostoru, neb je to stále jen v mantinelech daných architekturou).

Naproti tomu Meltdown využívá přechodné instrukce, které pracují s daty, jež nejsou standardně na dané CPU architektuře aplikaci přístupná. V typickém běhu se k nim žádná aplikace nedostane, pročež Meltdown vlastně využívá skutečnosti, kdy je nadále otevřen přístup k datům instrukce, jež selhala. Výhodou je, že pro řešení Meltdown stačí data selhavší instrukce, která v CPU nadále „visí“, nahradit dummy daty (což efektivně řeší variantu Meltdown-US v procesorech AMD).

Nová terminologie a subvarianty chyb

Nově navržená terminologie pro označování jednotlivých subvariant chyb je tato: jako první je zde exploit predikčního mechanismu, jako druhý pak mechanismus falešného trénování prediktoru. Subvarianty Spectre (ty aktuálně známé) jsou tyto:

  • Spectre-PHT: Varianty 1 a 1.1, obě zneužívají Pattern History Table (PHT)
  • Spectre-BTB: Varianta 2 zneužívající Branch Target Buffer (BTB)
  • Spectre-STL: Varianta 4 zneužívající paměť rozcestníku predikcí, konkrétně store-to-load forwarding (STLF)
  • Spectre-RSB: ret2spec a Spectre-RSB, obě zneužívající Return Stack Buffer (RSB)

Na seznamu nejsou uvedeny varianty NetSpectre, SGXSpectre a SGXPectre, neb ty využívají kombinaci více výše uvedených chyb.

Systematizace způsobů falešného trénování prediktoru je následující:

  • same-address-space inplace mistraining: stejný adresní prostor, stejný branch.
  • same-address-space out-of-place: stejný adresní prostor, jiný branch.
  • cross-address- space in-place: uvnitř útočníkem ovládaného adresního prostoru, branch na stejné adrese jako branch oběti.
  • cross-address-space out-of-place: uvnitř útočníkem ovládaného adresního prostoru, shodná adresa s obětí.

Kategorizace chyb Meltdown je tato:

  • Meltdown-US (Meltdown) – Supervisor-only Bypass
  • Meltdown-P (Foreshadow) – Virtual Translation Bypass
  • Meltdown-GP (Variant 3a) – System Register Bypass
  • Meltdown-NM (Lazy FP) – FPU Register Bypass
  • Meltdown-RW (Variant 1.2) – Read-only Bypass
  • Meltdown-PK – Protection Key Bypass
  • Meltdown-BR – Bounds Check Bypass

Návrhy řešení a výhled

Významná část dokumentu je dále věnována popisům oprav na jednotlivé chyby. Konstatováno je i to, že zde bude potřeba hardwarových změn (což víme už dávno, od dob prvních oznámení Spectre/Meltdown). V neposlední řadě dále uvádí opravy, které zahrnují další produkty, například jádro prohlížečů WebKit, resp. firma Google v prohlížeči Chrome.

Dokument dále hovoří o implementacích oprav v Linuxu, a to až po kernel 4.19. V závěru ale z hlediska rodiny Meltdown konstatuje, že i na systémech se všemi opravami lze nadále úspěšně využívat útoky Meltdown-BR, Meltdown-PK a Meltdown-RW.

Dlužno dodat, že jistě nikdo na světě nedá ruku do ohně za to, že toto jsou poslední odhalené postupy zneužití chyb v procesorech, které spadají do rodin Spectre a Meltdown, stejně jako že se neobjeví nové cesty zneužití HyperThreadingu. Výrobci procesorů stojí po letech úspěchů s prediktivními technikami na pomezí. Musí najít řešení a musí jej najít pokud možno co nejrychleji a s co nejmenším dopadem na výkony CPU a kvality architektur.

Našli jste v článku chybu?