Ranljivosti v eBPF, ki omogočajo obhod zaščite pred napadi Spectre 4

V jedru Linuxa sta bili odkriti dve ranljivosti, ki omogočata uporabo podsistema eBPF za obhod zaščite pred napadom Spectre v4 (SSB, Speculative Store Bypass). Z uporabo neprivilegiranega programa BPF lahko napadalec ustvari pogoje za špekulativno izvajanje določenih operacij in določi vsebino poljubnih območij pomnilnika jedra. Vzdrževalci podsistemov eBPF v jedru so prejeli dostop do prototipa izkoriščanja, ki prikazuje sposobnost izvajanja napadov v praksi. Težave so bile odpravljene v obliki popravkov (1, 2), ki bodo vključeni v naslednjo posodobitev jedra Linuxa. Posodobitve v distribucijskih kompletih še niso bile ustvarjene (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Metoda napada Spectre 4 temelji na obnavljanju podatkov, shranjenih v predpomnilniku procesorja po zavrženju rezultata špekulativnega izvajanja operacij pri obdelavi izmeničnih operacij pisanja in branja z uporabo posrednega naslavljanja. Ko operacija branja sledi operaciji pisanja (npr. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), je odmik naslova branja morda že znan zaradi podobnih operacij, ki se izvajajo (operacije branja so se izvajajo veliko pogosteje in se branja lahko izvajajo iz predpomnilnika), procesor pa lahko špekulativno izvaja branja pred pisanjem, ne da bi čakal, da se izračuna posredni odmik pisanja.

Če je po izračunu odmika zaznano presečišče pomnilniških območij za zapisovanje in branje, bo procesor preprosto zavrgel že špekulativno pridobljen rezultat branja in to operacijo ponovil. Ta funkcija omogoča navodilo za branje za dostop do stare vrednosti na nekem naslovu, medtem ko operacija shranjevanja še ni dokončana. Po zavrženju neuspešne špekulativne operacije v predpomnilniku ostanejo sledi njene izvedbe, nato pa jo lahko na podlagi analize sprememb dostopnega časa do predpomnjenih in nepredpomnjenih podatkov uporabimo z eno od metod za ugotavljanje vsebine predpomnilnika.

Prvo ranljivost (CVE-2021-35477) povzroča napaka v mehanizmu preverjanja programa BPF. Za zaščito pred napadom Spectre 4 preveritelj po potencialno problematičnih shranitvah v pomnilnik doda dodatna navodila, ki shranijo ničelno vrednost, da izpodrinejo sledi prejšnje operacije. Pričakuje se, da bo ničelna operacija pisanja zelo hitra in bo blokirala špekulativno izvajanje, ker je odvisna le od kazalca na okvir sklada BPF. Toda v resnici se je izkazalo, da je mogoče ustvariti pogoje, pod katerimi se navodilo, ki vodi do špekulativne izvedbe, uspe izvršiti pred operacijo preventivne trgovine.

Druga ranljivost (CVE-2021-3455) je posledica dejstva, da ko preverjalnik BPF prepozna potencialno nevarne operacije shranjevanja v pomnilnik, ne upošteva neinicializiranih območij sklada BPF, na katere prva operacija zapisovanja ni zaščitena. Ta funkcija vodi do možnosti izvajanja operacije špekulativnega branja, ki je odvisna od neinicializiranega pomnilniškega področja, preden se izvede navodilo za shranjevanje. Nov pomnilnik za sklad BPF je dodeljen brez preverjanja vsebine, ki je že v dodeljenem pomnilniku, in obstaja način, preden se program BPF zažene, da manipulira z vsebino pomnilniške regije, ki bo nato dodeljena za sklad BPF.

Vir: opennet.ru

Dodaj komentar