Zraniteľnosť v subsystéme eBPF, ktorá umožňuje obísť ochranu pred útokmi Spectre

V linuxovom jadre (CVE-2021-33624) bola identifikovaná zraniteľnosť, ktorá umožňuje použiť subsystém eBPF na obídenie ochrany proti zraniteľnostiam triedy Spectre, ktoré umožňujú určiť obsah pamäte ako výsledok vytvorenia podmienok pre špekulatívne vykonávanie určitých operácií. Útok Spectre vyžaduje prítomnosť určitej postupnosti príkazov v privilegovanom kóde, čo vedie k špekulatívnemu vykonávaniu pokynov. Manipuláciou s programami BPF prenášanými na vykonanie je možné generovať podobné inštrukcie v eBPF a uniknúť obsah pamäte jadra a ľubovoľných oblastí fyzickej pamäte cez vedľajšie kanály.

Zraniteľnosť je spôsobená chybami v overovači, ktorý sa používa na zisťovanie chýb a neprijateľnej aktivity v programoch BPF. Overovateľ vymenúva možné cesty vykonávania kódu, ale preskakuje možnosti vetvenia, ktoré sú neprijateľné z hľadiska sémantiky architektúry inštrukčnej sady. Pri vykonávaní programu BPF môžu byť také možnosti vetvenia, ktoré overovateľ neberie do úvahy, procesorom nesprávne predpovedané a vykonávané v špekulatívnom režime. Napríklad pri analýze operácie „load“ overovateľ očakáva, že inštrukcia používa register s adresou, ktorej hodnota je vždy v rámci špecifikovaných hraníc, ale útočník môže vytvoriť podmienky, za ktorých sa procesor pokúsi špekulatívne vykonať operáciu s adresu, ktorá nespĺňa podmienky overenia.

Problém sa objavuje od vydania jadra 4.15 a bol opravený vo forme záplat (1, 2, 3, 4). Chyba zostáva neopravená v distribúciách (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Okrem toho si môžete všimnúť poznámku o vplyve nástrojov na ochranu pred zraniteľnosťami Spectre na výkon. Poznámka sumarizuje výsledky optimalizácie ladiaceho nástroja rr (Record and Replay), ktorý bol kedysi vytvorený v Mozille na ladenie ťažko opakovateľných chýb vo Firefoxe. Ukladanie systémových volaní používaných na kontrolu existencie adresárov do vyrovnávacej pamäte znížilo operáciu „rr sources“ pre testovací projekt z 3 minút 19 sekúnd na 36 sekúnd.

Autor optimalizácie sa rozhodol skontrolovať, ako sa zmení výkon po vypnutí ochrany Spectre. Po zavedení systému s parametrom „mitigations=off“ bol čas vykonania „rr sources“ bez optimalizácie 2 minúty 5 sekúnd (1.6-krát rýchlejšie) a s optimalizáciou 33 sekúnd (o 9 % rýchlejšie). Zaujímavé je, že deaktivácia ochrany Spectre nielen skrátila čas vykonávania kódu na úrovni jadra 1.4-krát (z 2 m9s na 1m32s), ale tiež skrátila čas vykonávania v užívateľskom priestore na polovicu (z 1m9s na 0m33s), pravdepodobne v dôsledku zníženej efektívnosti prevádzky CPU cache a TLB. resetuje sa, keď je zapnutá ochrana Spectre.

Zdroj: opennet.ru

Pridať komentár