Zraniteľnosť v mechanizme špekulatívneho vykonávania procesorov AMD

Projekt Grsecurity zverejnil podrobnosti a ukážku metódy útoku na novú zraniteľnosť (CVE-2021-26341) v procesoroch AMD súvisiacu so špekulatívnym vykonávaním pokynov po bezpodmienečných operáciách vpred. Ak je útok úspešný, zraniteľnosť umožňuje určiť obsah ľubovoľných pamäťových oblastí. Výskumníci napríklad pripravili exploit, ktorý im umožňuje určiť rozloženie adries a obísť ochranný mechanizmus KASLR (náhodnosť pamäte jadra) spustením neprivilegovaného kódu v subsystéme jadra ePBF. Nedajú sa vylúčiť ani iné scenáre útoku, ktoré by mohli viesť k úniku obsahu pamäte jadra.

Zraniteľnosť umožňuje vytvárať podmienky, za ktorých procesor počas preemptívneho vykonávania špekulatívne spracuje inštrukciu bezprostredne nasledujúcu po inštrukcii skoku v pamäti (SLS, Straight Line Speculation). Navyše takáto optimalizácia funguje nielen pre operátory podmieneného skoku, ale aj pre inštrukcie, ktoré zahŕňajú priamy nepodmienený skok, ako sú JMP, RET a CALL. Podľa pokynov bezpodmienečného skoku je možné umiestniť ľubovoľné údaje, ktoré nie sú určené na vykonanie. Po zistení, že vetva nezahŕňa vykonanie ďalšej inštrukcie, procesor jednoducho vráti späť stav a ignoruje špekulatívne vykonávanie, ale stopa vykonania inštrukcie zostáva v zdieľanej vyrovnávacej pamäti a je dostupná na analýzu pomocou techník vyhľadávania bočných kanálov.

Rovnako ako pri využívaní zraniteľnosti Spectre-v1, útok vyžaduje prítomnosť určitých sekvencií inštrukcií (gadgetov) v jadre, ktoré vedú k špekulatívnemu vykonávaniu. Blokovanie zraniteľnosti v tomto prípade spočíva v identifikácii takýchto modulov gadget v kóde a pridaní ďalších inštrukcií, ktoré blokujú špekulatívne vykonávanie. Podmienky pre špekulatívne spúšťanie môžu vytvárať aj neprivilegované programy bežiace vo virtuálnom stroji eBPF. Ak chcete zablokovať možnosť vytvárať miniaplikácie pomocou eBPF, odporúča sa zakázať neprivilegovaný prístup k eBPF v systéme („sysctl -w kernel.unprivileged_bpf_disabled=1“).

Zraniteľnosť sa týka procesorov založených na mikroarchitektúre Zen1 a Zen2, vrátane prvej a druhej generácie procesorov AMD EPYC a AMD Ryzen Threadripper, ako aj AMD Ryzen 2000/3000/4000/5000, AMD Athlon, AMD Athlon X, AMD Ryzen Threadripper Procesory série PRO a APU A. Pre blokovanie špekulatívneho vykonávania inštrukcií sa odporúča volať inštrukcie INT3 alebo LFENCE po operáciách vetvenia (RET, JMP, CALL).

Zdroj: opennet.ru

Pridať komentár