eBPF pažeidžiamumas, leidžiantis apeiti Spectre 4 atakų apsaugą

Nustatyti du „Linux“ branduolio pažeidžiamumai, leidžiantys naudoti „eBPF“ posistemį siekiant apeiti apsaugą nuo „Spectre v4“ atakos (SSB, „Speculative Store Bypass“). Naudodamas neprivilegijuotą BPF programą, užpuolikas gali sudaryti sąlygas spekuliaciniam tam tikrų operacijų vykdymui ir nustatyti savavališkų branduolio atminties sričių turinį. Branduolio eBPF posistemės prižiūrėtojai gavo prieigą prie prototipo išnaudojimo, kuris parodo galimybę praktiškai vykdyti atakas. Problemos buvo išspręstos pataisomis (1, 2), kurios bus įtrauktos į kitą Linux branduolio atnaujinimą. Platinimo rinkinių naujinimai dar nebuvo sukurti (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Spectre 4 atakos metodas yra pagrįstas duomenų, saugomų procesoriaus talpykloje, atkūrimu, atmetus spekuliatyvaus operacijų vykdymo rezultatus, kai apdorojamos kintamos rašymo ir skaitymo operacijos naudojant netiesioginį adresavimą. Kai skaitymo operacija atliekama po rašymo operacijos (pvz., mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), skaitymo adreso poslinkis jau gali būti žinomas dėl atliekamų panašių operacijų (skaitymo operacijos yra atliekama daug dažniau ir nuskaitymai gali būti atliekami iš talpyklos), o procesorius gali spėlioti nuskaityti prieš rašydamas nelaukdamas, kol bus apskaičiuotas rašymo netiesioginis poslinkis.

Jei, apskaičiavus poslinkį, aptinkama atminties sričių, skirtų rašymui ir skaitymui, susikirtimas, procesorius tiesiog išmes spėliojamai gautą skaitymo rezultatą ir pakartos šią operaciją. Ši funkcija leidžia skaityti nurodymą pasiekti seną vertę tam tikru adresu, kol parduotuvės operacija dar nebaigta. Atmetus nesėkmingą spekuliacinę operaciją, jos vykdymo pėdsakai lieka talpykloje, po to vienu iš talpyklos turinio nustatymo metodų galima jį nuskaityti, remiantis prieigos prie talpykloje saugomų ir neišsaugotų duomenų laiko pokyčių analize.

Pirmąjį pažeidžiamumą (CVE-2021-35477) sukelia BPF programos tikrinimo mechanizmo trūkumas. Siekdamas apsisaugoti nuo Spectre 4 atakos, tikrintuvas prideda papildomą instrukciją po potencialiai problemiškų saugyklų į atmintį, kuri išsaugo nulinę reikšmę, kad išstumtų ankstesnės operacijos pėdsakus. Tikimasi, kad nulinio įrašymo operacija bus labai greita ir blokuos spekuliacinį vykdymą, nes tai priklauso tik nuo žymeklio į BPF kamino rėmelį. Tačiau iš tikrųjų pasirodė, kad įmanoma sukurti sąlygas, kurioms esant spekuliacinio vykdymo nurodymas gali būti įvykdytas prieš prevencinę parduotuvės operaciją.

Antrasis pažeidžiamumas (CVE-2021-3455) atsiranda dėl to, kad kai BPF tikrintuvas nustato potencialiai pavojingas atminties išsaugojimo operacijas, jis neatsižvelgia į neinicializuotas BPF dėklo sritis, į kurias pirmoji įrašymo operacija nėra apsaugota. Ši funkcija suteikia galimybę atlikti spekuliacinę skaitymo operaciją, priklausančią nuo neinicijuotos atminties srities, prieš vykdant saugojimo komandą. Nauja atmintis BPF dėkui paskirstoma netikrinant jau paskirstytoje atmintyje esančio turinio, o prieš paleidžiant BPF programą yra galimybė manipuliuoti atminties srities, kuri vėliau bus skirta BPF dėkui, turiniu.

Šaltinis: opennet.ru

Добавить комментарий