Retbleed je nový útok na mechanismus spekulativního provádění procesorů Intel a AMD

Skupina výzkumníků z ETH Zurich identifikovala nový útok na mechanismus spekulativního provádění nepřímých přechodů v CPU, který umožňuje extrahovat informace z paměti jádra nebo organizovat útok na hostitelský systém z virtuálních strojů. Chyby mají kódové označení Retbleed (CVE-2022-29900, CVE-2022-29901) a svou povahou jsou blízké útokům Spectre-v2. Rozdíl spočívá v organizaci spekulativního provádění libovolného kódu při zpracování instrukce „ret“ (return), která načte adresu pro skok ze zásobníku, namísto nepřímého skoku pomocí instrukce „jmp“, načtení adresy z paměti nebo registru CPU.

Útočník může vytvořit podmínky pro nesprávnou predikci přechodu a zorganizovat cílený, spekulativní přechod na blok kódu, který není zajištěn logikou provádění programu. Nakonec procesor určí, že předpověď větvení nebyla oprávněná a vrátí operaci do původního stavu, ale data zpracovaná během spekulativního provádění skončí v mezipaměti a mikroarchitektonických bufferech. Pokud chybně provedený blok přistoupí k paměti, pak jeho spekulativní provedení povede k uložení dat načtených z paměti do sdílené mezipaměti.

K určení dat zbývajících v mezipaměti po spekulativních operacích může útočník použít techniky postranního kanálu k určení zbytkových dat, jako je analýza změn v časech přístupu k datům uloženým v mezipaměti a datům bez mezipaměti. K účelovému extrahování informací z oblastí na jiné úrovni oprávnění (například z paměti jádra) se používají „gadgety“ - sekvence příkazů přítomných v jádře, které jsou vhodné pro spekulativní čtení dat z paměti v závislosti na vnějších podmínkách, které mohou být ovlivněny útočníka.

K ochraně před klasickými útoky třídy Spectre, které používají instrukce podmíněného a nepřímého skoku, používá většina operačních systémů techniku ​​„retpoline“, která je založena na nahrazení operací nepřímého skoku instrukcí „ret“, pro kterou procesory používají samostatnou jednotku predikce stavu zásobníku. nepoužíváte blok predikce větvení. Když byla v roce 2018 představena retpoline, věřilo se, že manipulace s adresou podobné Spectre nejsou praktické pro spekulativní větvení pomocí instrukce „ret“.

Výzkumníci, kteří vyvinuli metodu útoku Retbleed, prokázali možnost vytvoření mikroarchitektonických podmínek pro zahájení spekulativního přechodu pomocí instrukce „ret“ a publikovali hotové nástroje pro identifikaci sekvencí instrukcí (gadgetů) vhodných pro zneužití zranitelnosti v jádře Linuxu, ve kterých se takové stavy projevují.

Během výzkumu byl připraven pracovní exploit, který umožňuje na systémech s CPU Intel extrahovat libovolná data z paměti jádra z neprivilegovaného procesu v uživatelském prostoru rychlostí 219 bajtů za sekundu a 98% přesností. U procesorů AMD je efektivita exploitu mnohem vyšší – rychlost úniku je 3.9 KB za sekundu. Jako praktický příklad ukážeme, jak použít navrhovaný exploit k určení obsahu souboru /etc/shadow. Na systémech s procesory Intel byl útok na určení hash hesla uživatele root proveden za 28 minut a na systémech s procesory AMD za 6 minut.

Útok byl potvrzen pro generace 6-8 procesorů Intel, které byly vydány před 3. čtvrtletím 2019 (včetně Skylake), a procesory AMD založené na mikroarchitekturách Zen 1, Zen 1+ a Zen 2, které byly vydány před 2021. čtvrtletím 3. V novějších modelech procesorů, jako jsou AMD ZenXNUMX a Intel Alder Lake, stejně jako v procesorech ARM, je problém blokován stávajícími ochrannými mechanismy. Například použití instrukcí IBRS (Indirect Branch Restricted Speculation) pomáhá chránit před útoky.

Pro linuxové jádro a hypervizor Xen je připravena sada změn, které zablokují problém v softwaru na starších CPU. Navrhovaný patch pro linuxové jádro změní 68 souborů, přidá 1783 řádků a odstraní 387 řádků. Bohužel ochrana vede ke značným režijním nákladům - v textech vedených na procesorech AMD a Intel je pokles výkonu odhadován ze 14 % na 39 %. Je vhodnější použít ochranu založenou na instrukcích IBRS, která je dostupná v nových generacích procesorů Intel a je podporována počínaje linuxovým jádrem 4.19.

U procesorů Intel se substituce adresy pro spekulativní nepřímý skok provádí díky funkci, která se objeví, když dojde k přetečení přes spodní hranici (podtečení) ve vyrovnávací paměti návratového zásobníku. Když nastanou takové podmínky, instrukce „ret“ začne aplikovat logiku výběru adresy podobnou té, která se používá pro normální nepřímé skoky. V linuxovém jádře bylo nalezeno více než tisíc míst, která vytvářejí podmínky pro zahájení takového zpětného toku a jsou přístupná prostřednictvím systémových volání.

Na procesorech AMD se spekulativní provádění instrukce „ret“ provádí bez odkazu na zásobník specifický pro zásobník (Return Address Stack) a jednotka predikce větvení nepovažuje instrukci „ret“ za kontrolní návrat, ale za nepřímou větev. a v souladu s tím používá data pro predikci nepřímých přechodů. Za těchto podmínek lze prakticky využít jakoukoli operaci „ret“, kterou lze dosáhnout prostřednictvím systémového volání.

Navíc byl také identifikován další problém v CPU AMD (CVE-2022-23825, Branch Type Confusion) související s implementací fiktivních větví - podmínky pro predikci větví mohou nastat i bez nezbytných instrukcí větví, což umožňuje ovlivnit vyrovnávací paměť pro predikci větví. bez pokynu "ret". Tato funkce výrazně komplikuje implementaci ochrany a vyžaduje aktivnější čištění bufferu predikce větví. Očekává se, že přidání plné ochrany do jádra zvýší režii o 209 %.

Zdroj: opennet.ru

Přidat komentář