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

Skupina výskumníkov zo Švajčiarskej federálnej technickej vysoké školy v Zürichu odhalila nový variant útoku na mechanizmus špekulatívneho vykonávania nepriamych skokov v CPU, ktorý umožňuje získanie informácií z pamäte jadra alebo realizáciu útoku na hostiteľský systém z virtuálnych strojov. Zraniteľnosti dostali kódové meno Retbleed (CVE-2022-29900, CVE-2022-29901) a sú podobné útokom Spectre-v2. Rozdiel spočíva v organizácii špekulatívneho vykonávania ľubovoľného kódu pri spracovaní inštrukcie „ret“ (return), ktorá extrahuje adresu na skok zo zásobníka, namiesto nepriamych skokov s použitím inštrukcie „jmp“ na načítanie adresy z pamäte alebo registra CPU.

Útočník môže vytvoriť podmienky pre nesprávne predpovedanie skoku a zorganizovať cielene špekulatívny skok na blok kódu, ktorý nie je predpokladaný logikou vykonávania programu. Nakoniec procesor zistí, že predpoveď vetvenia nebola správna a vráti operáciu späť do pôvodného stavu, ale spracované dáta počas špekulatívneho vykonávania zostanú v cache a mikroarchitektonických vyrovnávacích pamätiach. Ak chybne vykonaný blok vykonáva prístup do pamäte, jeho špekulatívne vykonávanie povedie k uchovaniu v spoločnej cache a údajov prečítaných z pamäte.

Na určenie údajov, ktoré zostali v cache po špekulatívnom vykonávaní operácií, môže útočník využiť metódy identifikácie zostatkových údajov cez bočné kanály, napríklad analyzovaním zmien v čase prístupu k uloženým a neuloženým údajom. Na cielenejšie získavanie informácií z oblastí na inej úrovni privilegovania (napr. z pamäte jadra) sa používajú „gadžety“ – prítomné v jadre sekvencie príkazov vhodné na špekulatívne čítanie údajov z pamäte v závislosti od vonkajších podmienok, na ktoré môže útočník vplývať.

Na ochranu pred klasickými útokmi typu Spectre, ktoré využívajú inštrukcie podmieneného a nepriamého skoku, sa v väčšine operačných systémov používa technika „retpoline“, ktorá spočíva vo výmene operácií nepriamych skokov za inštrukciu „ret“. Pre ňu procesory využívajú samostatný blok predikcie stavu zásobníka, ktorý nevyužíva blok predikcie skokov. Pri zavedení retpoline v roku 2018 sa predpokladalo, že manipulácie s adresami podobné Spectre nie sú v praxi použiteľné pre špekulatívne skoky pomocou inštrukcie „ret“.

Výskumníci, ktorí vyvinuli metódu útoku Retbleed, preukázali možnosť vytvorenia mikroarchitektonických podmienok na iniciovanie špekulatívneho skoku pomocou inštrukcie „ret“ a zverejnili hotový nástroj na zisťovanie v jadre Linux vhodných sekvencií inštrukcií (gadgets) na zneužitie, v ktorých sa prejavujú podobné podmienky.

V rámci výskumu bol pripravený funkčný exploit, ktorý umožňuje na systémoch s CPU Intel z neprivilegovaného procesu v priestore používateľa extrahovať ľubovoľné dáta z pamäte jadra rýchlosťou 219 bajtov za sekundu a s presnosťou 98%. Na procesoroch AMD je efektivita exploitácie oveľa vyššia — rýchlosť úniku dosahuje 3,9 kB za sekundu. Ako praktický príklad bolo ukázané, ako pomocou navrhnutého exploitu určiť obsah súboru /etc/shadow. Na systémoch s CPU Intel bola útok na určenie hash hesla používateľa root vykonaný za 28 minút, zatiaľ čo na systémoch s CPU AMD to trvalo 6 minút.

Prehrajte video

Možnosť vykonania útoku je potvrdená pre 6-8 generácie procesorov Intel, ktoré boli vyrobené do 3. štvrťroka 2019 (vrátane Skylake) a procesorov AMD na báze mikroarchitektúr Zen 1, Zen 1+ a Zen 2, ktoré boli vyrobené do druhého kvartálu 2021. V novších modeloch procesorov, ako sú AMD Zen3 a Intel Alder Lake, ako aj v procesoroch ARM, je problém blokovaný existujúcimi ochrannými mechanizmami. Napríklad použitie inštrukcií IBRS (Indirect Branch Restricted Speculation) pomáha chrániť pred útokom.

Pre Linux kernel and hypervisor Xen, a set of changes has been prepared that address the issue on older CPUs through software methods. The patch proposed for the Linux kernel modifies 68 files, adds 1783 lines, and removes 387 lines. Unfortunately, the protection leads to significant overhead — in tests conducted on AMD and Intel processors, the performance drop is estimated to be between 14% to 39%. A more preferable solution is to apply protection based on IBRS instructions, available in new generations of Intel CPUs and supported starting from Linux kernel 4.19.

On Intel processors, address substitution for speculative indirect branches occurs due to a feature that manifests during an underflow in the Return Stack Buffer. When such conditions arise for the 'ret' instruction, an address selection logic similar to that used in regular indirect jumps is employed. The Linux kernel has over a thousand instances that create conditions for initiating such reverse underflows accessible through system calls.

On AMD processors, speculative execution of the 'ret' instruction is executed without being tied to a stack-specific buffer (Return Address Stack), and the branch prediction unit treats the 'ret' instruction not as a return of control, but as an indirect jump, thus utilizing prediction data for indirect jumps. Under such conditions, practically any 'ret' operation accessible through a system call can be exploited.

Additionally, another issue has been identified in AMD CPUs (CVE-2022-23825, Branch Type Confusion) related to performing fake branches — conditions for branch prediction can arise even without the necessary branching instructions, allowing influence on the branch prediction buffer without a 'ret' instruction. This feature significantly complicates the implementation of protection and requires more active clearing of the branch prediction buffer. It is expected that the addition of full protection in the kernel will result in an overhead increase of 209%.

Zdroj: opennet.ru

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster