Výskumníci z Massachusettského technologického inštitútu identifikovali techniku útoku TONTOU (Time-of-Neutralization to Time-of-Use), ktorá ponúka nový spôsob zneužitia mikroarchitektonických zraniteľností triedy Spectre v2. Zraniteľnosť umožňuje určiť obsah pamäte jadra pri vykonávaní exploit v užívateľskom priestore. Kód na blokovanie zneužitia zraniteľnosti bol zahrnutý do jadra Linux 5. augusta a je súčasťou vydaní 7.1.7, 6.18.43, 6.12.102, 6.6.149, 6.1.181, 5.15.214 a 5.10.263.
Výskumníci predviedli možnosť uskutočniť útok lokálnym nepriviligovaným užívateľom za účelom určenia hash hesla užívateľa root, uloženého v súbore /etc/shadow a načítaného do pamäte pri vykonávaní autentifikácie v systéme. Výskumníkom sa podarilo dosiahnuť únik údajov z pamäte jadra s výkonom 5.47 bajtov za sekundu a presnosťou 91.97%. Z 10 testovacích spustení exploitu, ktoré v priemere trvali 18 minút, sa v polovici prípadov podarilo úspešne určiť prítomnosť súboru /etc/shadow v pamäti a extrahovať jeho obsah.
Exploit bol demonštrovaný na systémoch s procesormi AMD a môže sa použiť s CPU AMD rodín Zen 1-4. Na systémoch Intel je útok tiež uskutočniteľný, ale zneužitie je zložitejšie. Na ochranu pred pretečením zásobníka adries návratu a blokovaním zraniteľnosti SRSO (Speculative Return Stack Overflow) v procesoroch AMD sa používa ochranný mechanizmus Safe-RET, ktorý čistí buffer predpovedania prechodov po každom použití a zúži okno vykonania útoku na 2 inštrukcie vykonávané počas niekoľkých desiatok nanosekúnd.
Na obídenie tejto ochrany a rozšírenie okna útoku bola implementovaná technika spomalenia CPU, ktorá umožnila vykonať substitúciu prerušenia v pravý čas a tým presmerovať prúd vykonávania v jadre a využiť handler prerušenia na skreslenie záznamu v bufferi predpovedania prechodov. Na vykonanie zraniteľnosti SRSO môže útočník vytvoriť podmienky, za ktorých blok predpovedania prechodov spekulatívne vykoná veľké množstvo nesprávne predpovedaných volaní CALL, dostatočné na preplnenie zásobníka adries návratu a prepísanie správne predpovedaných bodov návratu umiestnených na začiatku zásobníka. V dôsledku toho môžu byť počiatočné prvky zásobníka prepísané na hodnoty zvolené útočníkom, čo následne povedie k použitiu týchto nahradených hodnôt pri spekulatívnom vykonávaní inštrukcie RET v kontexte iného procesu.
Procesor určí, že predpovedanie vetvenia nevyšlo a vráti operáciu do pôvodného stavu, ale údaje spracované počas spekulatívneho vykonávania ostanú v cache a mikroarchitektonických buforoch. Ak chybne vykonaný blok pristupuje do pamäte, jeho spekulatívne vykonávanie vedie k uloženiu v spoločnej cache a údajoch prečítaných z pamäte. Na extrakciu informácií z cache môže byť použitá jedna z metód určovania obsahu cache na základe analýzy zmien času prístupu k kešovaným a nekešovaným údajom.
Zdroj: opennet.ru
