Retbleed je nový útok na mechanizmus špekulatívneho vykonávania procesorov Intel a AMD

Skupina výskumníkov z ETH Zurich identifikovala nový útok na mechanizmus špekulatívneho vykonávania nepriamych prechodov v CPU, ktorý umožňuje extrahovať informácie z pamäte jadra alebo organizovať útok na hostiteľský systém z virtuálnych strojov. Chyby majú kódové označenie Retbleed (CVE-2022-29900, CVE-2022-29901) a svojou povahou sú blízke útokom Spectre-v2. Rozdiel spočíva v organizácii špekulatívneho vykonávania ľubovoľného kódu pri spracovaní inštrukcie „ret“ (návrat), ktorá načíta adresu na skok zo zásobníka, namiesto nepriameho skoku pomocou inštrukcie „jmp“ načítaním adresy z pamäť alebo register CPU.

Útočník môže vytvoriť podmienky pre nesprávnu predikciu prechodu a zorganizovať cielený, špekulatívny prechod do bloku kódu, ktorý nie je zabezpečený logikou vykonávania programu. V konečnom dôsledku procesor určí, že predpoveď vetvenia nebola opodstatnená a vráti operáciu do pôvodného stavu, ale dáta spracované počas špekulatívneho vykonávania skončia vo vyrovnávacej pamäti a mikroarchitektonických bufferoch. Ak chybne vykonaný blok pristúpi k pamäti, potom jeho špekulatívne vykonanie povedie k uloženiu údajov načítaných z pamäte do zdieľanej vyrovnávacej pamäte.

Na určenie zostávajúcich údajov vo vyrovnávacej pamäti po špekulatívnych operáciách môže útočník použiť techniky bočného kanála na určenie zvyškových údajov, ako je napríklad analýza zmien v časoch prístupu k údajom uloženým vo vyrovnávacej pamäti a údajom bez vyrovnávacej pamäte. Na účelové extrahovanie informácií z oblastí na inej úrovni privilégií (napríklad z pamäte jadra) sa používajú „gadgety“ - sekvencie príkazov prítomných v jadre, ktoré sú vhodné na špekulatívne čítanie údajov z pamäte v závislosti od vonkajších podmienok, ktoré môžu byť ovplyvnené útočník.

Na ochranu pred klasickými útokmi triedy Spectre, ktoré používajú inštrukcie podmieneného a nepriameho skoku, väčšina operačných systémov používa techniku ​​„retpoline“, ktorá je založená na nahradení operácií nepriameho skoku inštrukciou „ret“, pre ktorú procesory používajú samostatnú jednotku predikcie stavu zásobníka. bez použitia bloku predikcie vetvenia. Keď bola retpolína predstavená v roku 2018, verilo sa, že manipulácie s adresami podobné Spectre neboli praktické pre špekulatívne vetvenie pomocou inštrukcie „ret“.

Výskumníci, ktorí vyvinuli metódu útoku Retbleed, preukázali možnosť vytvorenia mikroarchitektonických podmienok na spustenie špekulatívneho prechodu pomocou inštrukcie „ret“ a publikovali hotové nástroje na identifikáciu sekvencií inštrukcií (gadgetov) vhodných na využitie zraniteľnosti v jadre Linuxu, v ktorých sa takéto stavy prejavujú.

Počas výskumu bol pripravený pracovný exploit, ktorý umožňuje na systémoch s procesormi Intel extrahovať ľubovoľné dáta z pamäte jadra z neprivilegovaného procesu v užívateľskom priestore rýchlosťou 219 bajtov za sekundu a presnosťou 98 %. Na procesoroch AMD je efektivita exploitu oveľa vyššia – rýchlosť úniku je 3.9 KB za sekundu. Ako praktický príklad ukážeme, ako použiť navrhovaný exploit na určenie obsahu súboru /etc/shadow. Na systémoch s procesormi Intel bol útok na určenie hash hesla používateľa root vykonaný za 28 minút a na systémoch s procesormi AMD za 6 minút.

Útok bol potvrdený pre generácie 6-8 procesorov Intel, ktoré boli vydané pred 3. štvrťrokom 2019 (vrátane Skylake), a procesory AMD založené na mikroarchitektúrach Zen 1, Zen 1+ a Zen 2, ktoré boli vydané pred 2021. štvrťrokom 3. V novších modeloch procesorov, ako sú AMD ZenXNUMX a Intel Alder Lake, ako aj v procesoroch ARM je problém blokovaný existujúcimi ochrannými mechanizmami. Napríklad používanie inštrukcií IBRS (Indirect Branch Restricted Speculation) pomáha chrániť pred útokmi.

Pre linuxové jadro a hypervízor Xen je pripravený súbor zmien, ktoré zablokujú problém v softvéri na starších CPU. Navrhovaná oprava pre jadro Linuxu zmení 68 súborov, pridá 1783 riadkov a odstráni 387 riadkov. Bohužiaľ, ochrana vedie k značným režijným nákladom - v textoch vedených na procesoroch AMD a Intel sa pokles výkonu odhaduje zo 14% na 39%. Je vhodnejšie použiť ochranu založenú na inštrukciách IBRS, ktorá je dostupná v nových generáciách procesorov Intel a je podporovaná od jadra Linuxu 4.19.

Na procesoroch Intel sa náhrada adresy za špekulatívny nepriamy skok vykonáva vďaka funkcii, ktorá sa objaví, keď dôjde k pretečeniu cez dolnú hranicu (podtečenie) vo vyrovnávacej pamäti Return Stack. Keď nastanú takéto podmienky, inštrukcia „ret“ začne uplatňovať logiku výberu adresy podobnú tej, ktorá sa používa pre normálne nepriame skoky. V linuxovom jadre sa našlo viac ako tisíc miest, ktoré vytvárajú podmienky na spustenie takéhoto spätného toku a sú prístupné prostredníctvom systémových volaní.

Na procesoroch AMD sa špekulatívne vykonávanie inštrukcie „ret“ vykonáva bez odkazu na zásobník špecifický pre vyrovnávaciu pamäť (Return Address Stack) a jednotka predikcie vetvenia nepovažuje inštrukciu „ret“ za návrat kontroly, ale za nepriamu vetvu. , a preto používa údaje na predikciu nepriamych prechodov. Za týchto podmienok je možné využiť prakticky akúkoľvek operáciu „ret“ dosiahnuteľnú prostredníctvom systémového volania.

Okrem toho bol v procesoroch AMD identifikovaný ďalší problém (CVE-2022-23825, Branch Type Confusion) súvisiaci s implementáciou fiktívnych vetiev - podmienky pre predikciu vetvenia sa môžu vyskytnúť aj bez potrebných inštrukcií vetvy, čo umožňuje ovplyvniť vyrovnávaciu pamäť predikcie vetvy bez pokynu „ret“. Táto funkcia výrazne komplikuje implementáciu ochrany a vyžaduje aktívnejšie čistenie buffera predikcie vetvenia. Očakáva sa, že pridanie úplnej ochrany do jadra zvýši réžiu o 209 %.

Zdroj: opennet.ru

Pridať komentár