Jak je to s bezpečnostní dírou procesorů Intel. Chyby jsou dvě, Meltdown a Spectre

4. 1. 2018

Sdílet

 Autor: Redakce

Včera jsme předběžně přinesli informace o závažné bezpečnostní chybě procesorů Intel, která měla být obejita na straně operačního systému, ovšem s dopadem na výkon. V té chvíli ještě nebylo jasné, kdy vyprší informační embarga stanovená na dotyčné informace (na opravách se totiž pracovalo pod NDA delší dobu). Kvůli neoficiálnímu provalení bylo patrně odhalení uspíšeno a nyní už tedy máme i oficiální informace, které ukazují, že situace je nakonec ještě složitější a rozsah větší.

Jak to tedy nakonec vypadá? Proud nových informací asi ještě chvíli bude přitékat, ale to hlavní by už mělo být venku. V podstatě lze asi říci, že se potvrzuje existence bezpečnostního rizika v procesorech Intel. To, co jsme na toto téma uveřejnili včera, by mělo podle všeho víceméně sedět. Včetně toho, že problém bude zalátán v operačních systémech za cenu ztráty výkonu. Ovšem ještě nad rámec této chyby existuje soubor zranitelností dalších, které mají poněkud odlišný dopad, budou řešeny zvlášť a týkají se širší skupiny CPU, nejen Intelu. O této „druhé vlně“ v předchozích informacích ještě řeč nebyla, jde o novinku. Bezpečnostní analytici dali – věrni manýře posledních let – oběma problémům jméno. První, specifický pro Intel, se jmenuje Meltdown, druhý a obecnější problém Spectre. O obou problémech také uslyšíte pod obecným označením „side-channel attacks“.

Průlom ochrany paměti spekulativním vykonáváním kódu

Základní fungování těchto chyb je zdá se takovéto. Procesor typu out-of-order vykonává kvůli zvýšení výkonu často kód spekulativně, například pokud narazí na větvení (podmínku), tipne si, kterým směrem má jít a jednu z větví začne počítat dopředu. Naše chyba vyvstane, pokud je onou podmínkou rozhodnutí, zda kód smí číst z dané adresy, či ne. Útočník vyladí kód tak, aby prediktor zvolil tu větev, která dává přístup, ačkoliv reálně bude zamítnut z důvodu nedostatečných práv.

Když procesor na chybné větvení přijde, dosavadní výsledky zahodí a vrátí se zpět k větvení. Teoreticky by tedy vše mělo být v pořádku. V praxi ale v kombinaci s prefetchem dochází k tomu, že chybná větev skutečně načetla ona zakázaná data do cache. A útočník tam při správném načasování tato data dokáže najít a uložit si je. Bohužel nejde o jen teoretickou možnost, „proof of concept“ již zdá se byl publikován. Obecně tyto útoky na spekulativní vykonávání asi budou širším zdrojem problémů a budoucí CPU architektury se pravděpodobně budou těmto hrozbám muset přizpůsobovat.

Zranitelnost by snad údajně mohla jít do minulosti až po Pentium Pro z roku 1995 Zranitelnost by snad (teoreticky) mohla jít do minulosti až po Pentium Pro z roku 1995

Meltdown: problém Intelu a ztráta výkonu

V případě chyby Meltdown je tento postup navíc použitelný pro přečtení dat z jaderné paměti, což je patrně závažnější bezpečnostní problém. Právě pro tuto odrůdu problému byly napsány ony opravy operačních systémů (snižující výkon) spočívající v izolaci jaderného a uživatelského paměťového prostoru, o kterých jste si mohli přečíst včera. Tato oprava zhoršuje výkon u všech systémových volání, jelikož při nich dochází k dvojímu vyprázdnění TLB. Cena obsluhy systémového volání zdá se vzrostla asi dvojnásobně. Tuto cenu příliš nepoznáte v úlohách, kde je dominantní zátěž GPU či CPU. Zpomalení se týká hlavně I/O operací, čili zejména čtení a zápisů na disk. Čím rychlejší je úložiště, tím více se vyšší cena systémových volání může projevit. Největší dopad tedy bude na NVMe SSD s vysokým výkonem, obzvláště při přístupu k malým 4K blokům.

Dopad je o něco menší na procesorech, podporujících rozšíření PCID, což by měla být většina modernějších CPU (minimálně Sandy Bridge, zřejmě i Nehalem/Westmere), na předchozích o něco horší. Mimochodem, dříve jsme uváděli, že insider sestavení 17035 systému Windows již má opravy, zdá se ale, že ještě nebyly kompletní. Dopad měřený například webem ComputerBase na tomto sestavení nemusí být tedy definitivní.

meltdown-textDobrá zpráva (ale jen pro menšinu uživatelů) je, že varianta Meltdown je podle všeho izolována jen na procesory Intelu, vychází z konkrétní implementace a fungování jeho CPU. Tím pádem pouze procesory Intel potřebují onu výkon snižující opravu (výjimkou jsou staré 45nm a 32nm Atomy díky in-order architektuře). Na procesorech AMD se podle současných informací a vyjádření firmy Meltdown zneužít nedá kvůli odlišnosti architektury, která údajně neprovádí spekulativní přístup když se narazí na jaderné adresy. (Nicméně, nikdy neříkej nikdy, existuje pochopitelně nenulová šance, že jednou bude nalezen jiný exploit, který podobnou díru najde a zneužije.)

U ARMu jsou informace poněkud konfliktní, podle některých na Meltdown také netrpí, podle některých možná ano. Výzkumníkům se u nich Meltdown zneužít nepodařilo, podle ARMu ale prý některá CPU děravá být mohou (zdá se, že jde o Cortex-A75, tudíž asi i na něm založené Kryo v Snapdragonu 845). Ovšem pozor, nemusí jít o postižení všech jader a architektur (in-order jádra jako Cortexy-A53, A7 a A5 by mohla být z obliga). Status jader vyvíjených Applem nebo dalšími firmami s vlastními architekturami není ještě znám.

Aktualizace (5. 1. 2017):

Zdá se, že ARM procesory Apple by měly být postiženy problémem Meltdown. Situaci by měly řešit protiopatření v operačním systému iOS.

Efekt opravy podle testu Phoronixu (více zde): Kompilace kódu trpí, naopak x264 nebo FFmpeg (kód silně vytěžující čistě CPU s nízkým podílem systémových volání) zdá se příliš nezpomalil Efekt opravy pod Linuxem podle testu Phoronixu: Kompilace kódu výrazně závislá na I/O trpí, naopak x264 nebo FFmpeg (kód silně vytěžující čistě CPU s nízkým podílem systémových volání) zdá se příliš nezpomalil

Oprava chyby Meltdown by již měla být dostupná pro Windows, ačkoliv možná budete muset chvíli čekat, než se objeví ve Windows Update a údajně také váš antivirus musí avizovat kompatibilitu se změnou (velcí hráči to doufejme včas zařídili). Také pro macOS už oprava vyšla. Pro Linux je oprava („kPTI“ či „PTI“) začleněná do jádra 4.15rc6 (s eventuálním backportem do všech nyní udržovaných starších verzí). Prvotní patch ji aktivoval i u AMD, ale ve verzi 4.15rc7 už bude PTI pro procesory AMD vypnuté a jejich výkon tedy nebude zhoršený. Patche pro procesory ARM existují, zatím ale nevíme, zda budou také aplikovány ve výchozím stavu jako na Intelu.

Mimochodem, technický název zranitelnosti Meltdown je CVE-2017-5754 (Rogue Data Cache Load) a pod tímto označením ji naleznete i v některých nyní zveřejněných dokumentech, kde bývá diskutována spolu s následujícími chybami Spectre.

Spectre: problém všech(?)

Chyby Spectre mají dvě označení: CVE-2017-5753 (Bounds Check Bypass) nebo také varianta 1 a CVE-2017-5715 (Branch target injection), varianta 2. Spočívají v obecnějším využití side-channel útoků na kód, ve kterém dochází ke spekulativnímu vykonávání. Útok je zaměřen na místa v kódu, kde program kontroluje, zda má někam povolit přístup a opět asi využívá toho, že spekulativní vykonávání může dostat data do cache předtím, než CPU přijde na to, že mělo požadavek zamítnout. Web popisující obě chyby uvádí, že zde u exploitů hrozí krádež dat mezi jednotlivými aplikacemi, tedy jeden proces může vidět paměť druhého. Nicméně údaje například na blogu Google zase indikují, že by mohla opět být vystavena i jaderná paměť, v tomto tedy není úplně jasno. Zneužít chyby Spectre je údajně obecně obtížnější než zneužít Meltdown.

Zranitelnost je (zatím) největší na Intelu

Do Spectre jsou již namočeni kromě Intelu i další výrobci CPU, což zavdalo k interpretacím, že zranitelné je všechno. Rozdíl je ovšem v míře. Vedle toho, že Meltdown je jen problémem Intelu (alespoň nyní), měli zdá se výzkumníci také u chyby Spectre větší štěstí se zneužíváním procesorů Intel. Blog Google uvádí tři různé exploity. První používá chybu „Bounds Check Bypass“, ovšem dokáže přečíst paměť jen v rámci stejného procesu, aniž by se dostal do oblastí s vyššími privilegii (takže nebezpečnost je omezená). Toto se kromě Intelu podařilo i na AMD FX (architektura Piledriver) a APU Bristol Ridge (Excavator) plus na Cortexu-A57.

spectre-textDruhý exploit stejné chyby už dokáže přečíst libovolnou paměť v rozsahu 4 GB. Tento funguje na Intelech, ale podařilo se ho realizovat i na AMD Excavatoru, ovšem za podmínky, že operační systém má vypnutou volbu BPF JIT (týká se filtru paketů BPF na Unixech/Linuxu), což není výchozí stav. Zdá se, že výzkumníci bohužel netestovali Ryzeny. Třetí představený exploit se týká chyby Branch Target Injection, jenž byla také potvrzena na Intelech, přímo výzkumníkům se ji na testovaných čipech AMD a ARM zneužít nezdařilo.

AMD A12-9800, APU Bristol Ridge (Zdroj: us.hardware.info) AMD A12-9800, APU Bristol Ridge (Zdroj: us.hardware.info)

Softwarové opravy této chyby budou zdá se složitější, protože patche kPTI, tedy ona obrana proti Meltdownu, chybu Spectre jako takovou neodstraňují (proto by také měly být nasazené jen na Intelech). Nicméně i proti Spectre přesto asi bude nějaká obrana na straně operačního systému možná. Intel uvádí, že proti variantě 1 a variantě 2 budou nebo jsou nasazeny aktualizace operačních systémů a také virtualizačních nástrojů. V případě varianty 2 (Branch Target Injection) pak také nespecifikované úpravy BIOSů. Také AMD uvádí, že varianta 1 bude opravena na straně OS (výkonnostní cena má být „zanedbatelná“, tedy nějaká asi na stole je, nicméně dopadne i na Intel). Pro variantu 2 uvádí AMD, že riziko je téměř nulové (ovšem tím pádem asi ne zcela vyloučené) opět kvůli architektonickým odlišnostem. Softwarová obrana není zmíněna, ale je možné, že bude také aplikována.

Aktualizace (5. 1. 2017):

Varianta 2 chyby Spectre (Branch Target Injection) bude řešena mimo jiného aktualizacemi mikrokódu procesorů, jenž upraví chování predikce větvení. Zdá se, že tyto aktualizace budou přicházet jak pro procesory Intel, tak pro procesory AMD. Zde možná vyvstanou problémy, protože výrobci CPU mohou tyto aktualizace vydat jen pro novější CPU a ignorovat starší. Totéž pak ovšem může nastat u výrobců desek, kteří se možná nebudou obtěžovat aktualizovat BIOSy svých starších desek, i kdyby pro ně nový mikrokód CPU dostupný byl. Jak u AMD, tak u Intelu může po těchto opravách nastat určitý propad výkonu (u Intelu nad rámec toho, co přináší patch chyby Meltdown), takže je tu další rána pro relevanci starších testů výkonu. V roce 2018 bude třeba v podstatě vše přeměřit, ovšem až v momentě, kdy bude jasné, že je opraveno vše, co opravu potřebuje. Situace se asi bude stabilizovat delší dobu.

Naproti tomu varianta 1 Spectre (Bounds Check Bypass) je zdá se hlavně problémem, kterému budou čelit programátoři. Opatření jsou softwarového rázu a spočívají v zabezpečení komponent jako je třeba javascript engine, které provádějí kód z externích a tedy nedůvěryhodných zdrojů.

Tyto útoky jsou v podstatě založené na jedné ze základních vlastností procesorů s out-of-order vykonáváním kódu a minimálně konceptuálně asi budou aplikovatelné u všech dalších architektur jako je MIPS, Power (nebo x86 procesorů VIA) a tak dále. Rozdíl je asi jen v tom, že u těchto zatím asi nebyl čas je proklepnout, proto se nyní hovoří jen o AMD, Intelu a ARM. Zneužitelnost konkrétními exploity na základě timing útoků nicméně může záviset na vyladění kódu, proto některá CPU nyní mohou být označená jako bezpečná, ale stav může být nejistý. Vyšší aktuální míra zranitelnosti u Intelu je zřejmě daná velmi agresivním přístupem ke spekulativnímu provádění ve jménu výkonu, zatímco jiné architektury jsou buď méně radikální, nebo vědomě opatrnější.

Softwarové opravy Spectre a Meltdown

Opravy dostává kromě Linuxu také macOS (ve verzi 10.13.3). Pro Windows je zde oprava také, mělo by jít o tento update. Techniky těchto chyb mohou být zneužitelné javascriptem z prohlížeče, proto kromě operačních systémů jsou aktualizovány i prohlížeče Internet Explorer a Edge a také Mozilla píše o opravách či možná lépe řečeno protiopatřeních. Jelikož jde o „timing attack“, jedním z nich bude redukce časového rozlišení různých funkcí v prohlížeči na 20 μs (zřejmě stejná opatření budou i u Microsoftích prohlížečů). To výrazně zkomplikuje zneužitelnost, které jste vystaveni na webových stránkách.

bitcoin_skoleni

Následují odkazy na různé materiály, které byly k problému publikovány:

Zmatek v informacích

Intel ve svých prohlášeních k těmto problémům zdůrazňoval, že chyby postihují i ostatní, což ale může být zavádějící, jelikož jak už bylo řečeno, chyba Meltdown ve výsledku stojící výkon je izolovaná na jeho procesory. Po jeho prohlášení tedy nejprve vznikl dojem, že nakonec jsou na tom konkurenti stejně a nebyla pravda, že procesory AMD jsou v pořádku. Tento rozpor lze vysvětlit tím, že Intel v tiskovce nerozlišoval Spectre a Meltdown, čímž asi bagatelizoval význam druhé zmíněné chyby a s tím zároveň rozdíl ve zranitelnosti proti konkurenci. AMD poměrně rychle reagovalo výše nalinkovaným vlastním prohlášením, kde zopakovalo, že chybami procesorů Intel netrpí, nicméně připouští částečnou zranitelnost u Spectre.