Co je to vlastně RETBLEED
Výzkumníci Johannes Wikner a Kaveh Razavi ze Spolkové vysoké technické školy v Curychu (Eidgenössische Technische Hochschule, zkráceně ETH Zürich) začínají abstrakt připomenutím současného smutného, ač z hlediska rostoucího tempa vývoje logického stavu: moderní operační systémy závisejí na softwarových ochranách proti hardwarovým útokům. Tedy chybám v hardwaru, které lze ošetřit pouze softwarově. Tyto ochrany jsou ale pouze tak dobré, jak dobré jsou předpoklady jejich tvůrců o hardwaru, nad kterým jsou aplikovány.
Svůj úvod mimochodem končí citací Linuse Torvaldse z LKML z ledna 2018, kde se Linus ohrazuje proti jistým navrhovaným patchům proti nepřímému větvení s tím, že už tam máme retpoline s menší režií. Je poměrně zajímavé si dané vlákno přečíst celé a snažit se v tomto kontextu chápat Davida Woodhouse a jeho komentář směrem k Linusovi v souvislosti s tím, že na Skylake prostě retpoline nestačí a potřebujeme i IBRS. Ve stejném vláknu na Intelu nenechává suchou nit Pavel Machek, proti čemuž nelze též nic moc říci. Vlákno na LKML jako takové rozhodně stojí za přečtení, pokud jste tak již neučinili v minulosti. Zpátky k RETBLEEDu.
V dokumentu popisujícím RETBLEED tak tvůrci boří jeden předpoklad, a sice že retpoline jako mechanismus vyvinutý jako ochrana před chybou Spectre Branch Target Injection (BTI, též Spectre Variant 2), před touto chybou chrání mechanismem konverze (děravých) nepřímých větvení (indirect branches) na chráněné výstupy (protected returns). RETBLEED je mechanismus, který umí retpoline obcházet, jde o nový typ útoku typu Spectre-BTI, který umí tahat data z kernelové paměti na plně opatchovaných systémech s procesory AMD a Intel [které jsou na chybu Spectre-BTI náchylné].
První věcí je, že RETBLEED ukazuje, jak se návratové instrukce chovají stejně jako ono nepřímé větvení, byť za určitých na microkarchitektuře závislých okolnostech, které autoři museli zjistit reverzním inženýrstvím. Jejich systém však v linuxovém jádru zjistil vícero takových návratových instrukcí, dostat se k nim přitom dá skrze neprivilegovaná systémová volání. Za druhé pak takový neprivilegovaný útočník může libovolně ovládat předpovídaný cíl takové návratové instrukce větvením do paměti jádra. RETBLEED umí téhle paměti „pouštět žilou“ tempem 219 B/s (bajtů za sekundu) na procesorech Intel Coffee Lake, resp. 3,9 kB/s na procesorech AMD Zen 2.
Na začátku bylo Spectre-BTI
Dobově řečeno „druhá varianta Spectre“, tedy Spectre-BTI, je tu s námi už hodně dlouho, viz výše odkazy na vlákno s Linusem. Při tomto útoku se využíval (využívá) Branch Target Buffer (BTB) pro podvržené spekulativní vykonávání a dochází k branch poisoningu, zkrátka mechanismus fungování se od prvotní varianty Spectre mírně liší. Tehdy (opět viz vlákno s Linusem výše) navrhoval Intel jako řešení Indirect Branch Restricted Speculation (IBRS), kdy měl procesor ignorovat potenciálně infikované BTB záznamy od nížeji-privilegovaného softwaru, tehdejší „boj“ o záplatu na Spectre-BTI ale vyhrál mechanismus retpoline, ač tehdy lidé z Intelu upozorňovali, že pro Skylake a výš to není dostatečné řešení.
Zde se hodí doplnit malou hardwarovou vsuvku. Jak narážel ve výše odkazovaném vláknu Pavel Machek a jak plyne právě i z tehdejších (leden 2018) reakcí lidí z Intelu v LKML vláknech, už tehdy se vědělo, že to není u Intelu dobré. Dnes historicky víme, že některé chyby v procesorech Intel sahají až do poloviny 90. let (řekněme od Pentií Pro výše), většina se ale týká primárně procesorů s HyperThreadingem (přišel s Pentii 4, AMD jej u sebe nazývá SMT) a zejména s generacemi od Conroe výše, což znamená víceméně Core 2 Duo/Quad a vyšší modely CPU.
Avšak pokud budeme považovat rodinu Core 2 Duo/Quad za historicky veleúspěšnou (což byla), pak se pozvolna můžeme u Intelu dopracovat až k procesorům rodiny Sandy Bridge (32nm „tock“ z roku 2011) – toto je poslední opravdu hodně povedená generace CPU Intel z hlediska výrobního. Dá se volně říci (a prosím nechytejte mě v diskusi za slovo a nežádejte o zdroje, protože by to bylo na příliš dlouho a zdrojů by musely být desítky), že následný 22nm „tick“ Ivy Bridge nebyl architektonicky příliš zajímavý (též maximem AVX), šlo hlavně o přechod od planárních ke 3D (FinFET) tranzistorům. Tento přechod měl přinést procesory zejména úspornější, ale také výhledově výkonnější.
Tyto cíle se příliš nenaplnily, Ivy Bridge trpěl zejména omezeným OC potenciálem (Což byla doména Sandy Bridge). Celé to ukázala právě následná vylepšená ob-generace Intelovy výrobní technologie, první 14nm procesory, tedy generace Broadwell (v retailu dostupných desktop CPU reprezentovaná pouze super-drahou HEDT řadou Broadwell-E), resp. později právě mainstreamový Skylake, kde Intel za účelem navýšení IPC provádět architektonické modifikace, ze kterých dnes těží mnoho z chyb typu Spectre / Meltdown. Stále také přetrvává toto dědictví, které jakoby ukazuje, že Intel nezvolil na začátku dobré řešení FinFET tranzistorů a nakonec v průběhu let své vedení oproti TSMC ztratil (s 10nm a nyní 7nm procesem, který je nazýván Intel 4).
Vše ale doháněl zvyšující se architektonickou efektivitou. Nelze Intelu upřít, že IPC jeho procesorů vzrůstá a je schopen držet stabilně vyšší takty prakticky s každou další generací a i iGPU část je stále lepší a lepší. Nicméně vše toto jde na vrub za prvé spotřeby (od procesorů s TDP pod 100 W jsme u procesorů s PL2 kolem 250 W, papírový údaj TDP už dávno nic neznamená) a za druhé bezpečnosti. Proto tu máme už 4,5 roku Spectre a Meltdown a všechny další odhalené chyby a i proto tu dnes máme RETBLEED. Intel momentálně „dostává po papuli“ za všechny hříchy proti bezpečnosti CPU, které v posledních 10 až 15 letech napáchal, protože na jeho procesory se od ledna 2018 logicky soustředí nejvíce výzkumů v této oblasti. Konec vsuvky.
Jen nová varianta (ne)řešeného problému
Pavel Machek měl před čtyřmi roky pravdu: Intel o typově této děravosti svých CPU věděl. A věděl o Spectre a Meltdown od chvíle, kdy mu to výzkumníci oznámili a přesto svá CPU prodával dál, aniž by varoval zákazníky, jak nebezpečné jejich užívání může být. Pavel Machek (a jiní, nerad bych se dotkl jej osobně, beru jej jen jako příklad, je to obecné) ale plakal na špatném hrobě: intelovští linuxoví vývojáři nejsou typicky ti, kdo navrhují nové procesorové architektury Intel – mimochodem, tam se historicky střídaly dva firemní týmy, přičemž Conroe / Core2 / atd. je dílem izraelského týmu Intelu. Linuxáci v Intelu se jen snaží navrhovanými opatřeními jako IBRS řešit existující problém. Pokud zde někdo zaslouží morální facku, pak jsou to firemní „kravaťáci“, protože ti rozhodují o firemních strategiích, prodejích, informacích předávaných tisku atd. Proto se Intel nemůže omluvit, protože by tím minimálně poškodil své akcionáře poklesem hodnoty.
Ale jde o podstatně širší problematiku. Jistě se shodneme, že celý IT svět od ledna 2018 pracuje na tom, aby se všechny tyto chyby podařilo nějak eliminovat, ostatně netýkají se jen Intelu, mnohými z chyb je do větší či menší míry postižen prakticky každý, od AMD až po všechny ARMy. Snad jedině o POWER nebývá tolik slyšet.
Jsem toho názoru, že v Intelu i AMD od léta 2017 (kdy byly firmy se Spectre / Meltdown seznámeny) skrečovali nejednu inovaci svých CPU architektur čistě proto, že jim došlo, že by tím jen dali další možný hardwarový vektor nějakého útoku těchto typů. Už jen to jak se postupně zvyšovala efektivita HyperThreadingu od jeho první implementace, je neskutečné, a je už nad slunce jasné, že tyto flexibilní aspekty architektur, všemožná sdílení a predikce a spekulace, které zefektivňují běh o desítky i stovky procent, jsou právě onou líhní bezpečnostních problémů. IT svět je od ledna 2018 ve fázi hledání těchto chyb a také kompromisů mezi bezpečností a efektivitou či flexibilitou návrhů CPU. Třeba OpenBSD je nekompromisní a HyperThreading natvrdo vypíná, na Linuxu máme možnost volby (a takový instalátor openSUSE dává i běžnému uživateli na výběr, jestli chce mít počítač bezpečnější, ale pomalejší, či naopak).
Celkem hezky pak kompromisy shrnuje tabulka na 12. straně PDFka o RETBLEED: zatímco u Ryzenů a EPYCů prvních dvou generací ani aplikace retpoline nepomůže a úspěšnost útoku je často až skoro stoprocentní, na Zen 3 už útok nefunguje. U Intelu zase mají problém Kaby Lake (což je refresh původního Skylake) a následný Coffee Lake (úspěšnost je ale spíš kolem 80 %), pokud je použit jen obranný mechanismus retpoline. Když se nasadí eIBRS, tak RETBLEED nefunguje ani na současném Alder Lake, ani na Coffee Lake Refresh.
Výkonnostní dopad záplat na RETBLEED
Zkrátka RETBLEED je tady, ukazuje, že Spectre-BTI vyžaduje sofistikovanější softwarové záplatování než jen retpoline, výzkumníci z ETH Curych sami prezentovali propad výkonu po záplatování a Phoronix to už také změřil. V Curychu to vychází s propadem výkonu po záplatách takto:
- Intel Coffee Lake: pokles o 20%
- AMD Zen1+: pokles o 6%
- AMD Zen1+ bez SMT: pokles o 39%
- pozn.: jsou Zen1+ systémy, kde je současně nutné vypnout SMT, pak je pokles takto vysoký
- AMD Zen 2: pokles o 14%
Server Phoronix otestoval vliv oprav na RETBLEED na třech různých strojích, prvním byl Coffee Lake Core i7–8700K s 6×CPU/12×HT, druhým Skylake Xeon E3–1260L v5 4×CPU/8×HT a třetím AMD Zen 2 Threadripper 3960X s 24×CPU/48×HT. V závislosti na typu subtestu dochází víceméně u všech k propadu výkonu na daném CPU, a to marginálnímu (méně než 1 %) až výraznému (desítky %). Propad se logicky netýká jen serverových aplikací, lze jej pozorovat například i u zpracování fotek v Rawtherapee a měřitelný propad je samozřejmě i u procesorů vysloveně serverových, například Zen 2 procesorů EPYC 7742 (6. a 7. strana testu).
RETBLEED jako další, nikoli poslední v řadě
Řečeno jednoduše na závěr: RETBLEED ukazuje, co všechny post-Spectre a post-Meltdown a odvozené útoky před ním: procesory jsou „ve svém křemíku“ stále děravé a stále objevujeme nové způsoby, jak je ošálit, jak přesměrovat tok dat, jak navýšit privilegia atd. Bylo by naivní si myslet, že hotové záplaty na RETBLEED jsou definitivním řešením útoků typu Spectre.
Je víceméně jen otázkou času, než výzkumníci ti či onde vymyslí další cestu, jak i tyto ochrany obejít, protože fundamentální problém přetrvává: principiální díry vedoucí k cestám typu Spectre jsou prostě natvrdo zadrátované v křemíku procesorů, které nám poslední roky slouží a které nám s ohledem na svůj více než dostatečný výkon budou nejspíš sloužit i další léta.
Bude to 5 let? Bude to 10 let? Těžko předvídat, protože třeba Linusův vlastní 32jádrový Threadripper 3970X je generace Zen2 a je to procesor, který má i dnes po letech výkonu na rozdávání. Kdo bezpečnost svého desktopu neřeší, ten se propady výkonu trápit nemusí, nicméně o serverovém nasazení lze říci například toto: pokud dnes někdo provozuje EPYCy 2. generace a chce mít ochrany na RETBLEED zapnuté, pak se musí smířit s tím, že aby dosahoval jeho server stejného výkonu, musel by být upgradován na typově odpovídající EPYCy 3. generace (mezigenerační nárůst IPC byl udáván kolem 15 až 20 %).