Ranljivosti v podsistemu eBPF, ki omogočajo obid zaščite pred napadi Spectre

V jedru Linuxa (CVE-2021-33624) je bila ugotovljena ranljivost, ki omogoča uporabo podsistema eBPF za obhod zaščite pred ranljivostmi razreda Spectre, ki omogočajo določitev vsebine pomnilnika kot rezultat ustvarjanja pogojev za špekulativno izvajanje določenih operacij. Napad Spectre zahteva prisotnost določenega zaporedja ukazov v privilegirani kodi, ki vodi do špekulativnega izvajanja navodil. Z manipulacijo programov BPF, poslanih za izvajanje, je mogoče ustvariti podobna navodila v eBPF in uhajati vsebino pomnilnika jedra in poljubnih območij fizičnega pomnilnika skozi stranske kanale.

Ranljivost povzročajo napake v preverjalniku, ki se uporablja za odkrivanje napak in nesprejemljive dejavnosti v programih BPF. Preverjevalnik našteje možne poti izvajanja kode, vendar preskoči možnosti razvejanja, ki so nesprejemljive z vidika semantike arhitekture nabora ukazov. Pri izvajanju programa BPF lahko procesor nepravilno predvidi takšne možnosti razvejanja, ki jih preveritelj ne upošteva, in jih izvede v špekulativnem načinu. Na primer, pri analizi operacije »nalaganje« preveritelj pričakuje, da navodilo uporablja register z naslovom, katerega vrednost je vedno znotraj podanih meja, vendar lahko napadalec ustvari pogoje, pod katerimi bo procesor poskušal špekulativno izvesti operacijo z naslov, ki ne izpolnjuje verifikacijskih pogojev.

Težava se pojavlja že od izdaje jedra 4.15 in je bila odpravljena v obliki popravkov (1, 2, 3, 4). Ranljivost ostaja nepopravljena v distribucijah (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Poleg tega si lahko ogledate opombo o vplivu orodij na zmogljivost za zaščito pred ranljivostmi Spectre. Opomba povzema rezultate optimizacije razhroščevalnika rr (Record and Replay), ki je bil nekoč ustvarjen v Mozilli za odpravljanje napak pri težko ponovljivih napakah v Firefoxu. Predpomnjenje sistemskih klicev, uporabljenih za preverjanje obstoja imenikov, je zmanjšalo operacijo "rr sources" za testni projekt s 3 minut 19 sekund na 36 sekund.

Avtor optimizacije se je odločil preveriti, kako se bo zmogljivost spremenila po onemogočitvi zaščite Spectre. Po zagonu sistema s parametrom “mitigs=off” je bil čas izvajanja “rr sources” brez optimizacije 2 minuti 5 sekund (1.6-krat hitreje), z optimizacijo pa 33 sekund (9 % hitreje). Zanimivo je, da onemogočanje zaščite Spectre ni zmanjšalo le časa izvajanja kode na ravni jedra za 1.4-krat (z 2 m9 s na 1 m32 s), ampak tudi prepolovilo čas izvajanja v uporabniškem prostoru (z 1 m9 s na 0 m33 s), verjetno zaradi zmanjšane učinkovitosti delovanja predpomnilnika procesorja in TLB. ponastavi, ko je omogočena zaščita Spectre.

Vir: opennet.ru

Dodaj komentar