Zraniteľnosť v eBPF, ktorá by mohla obísť ochranu pred útokmi Spectre 4

V linuxovom jadre boli identifikované dve zraniteľnosti, ktoré umožňujú použitie subsystému eBPF na obídenie ochrany proti útoku Spectre v4 (SSB, Speculative Store Bypass). Pomocou neprivilegovaného programu BPF môže útočník vytvoriť podmienky pre špekulatívne vykonávanie určitých operácií a určiť obsah ľubovoľných oblastí pamäte jadra. Správcovia subsystémov eBPF v jadre získali prístup k prototypu exploitu, ktorý demonštruje schopnosť vykonávať útoky v praxi. Problémy boli opravené vo forme záplat (1, 2), ktoré budú zahrnuté v ďalšej aktualizácii jadra Linuxu. Aktualizácie v distribučných súpravách ešte neboli vytvorené (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Metóda útoku Spectre 4 je založená na obnove dát uložených vo vyrovnávacej pamäti procesora po zahodení výsledku špekulatívneho vykonávania operácií pri spracovaní striedavých operácií zápisu a čítania pomocou nepriameho adresovania. Keď operácia čítania nasleduje po operácii zápisu (napr. mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), posun adresy čítania už môže byť známy z dôvodu vykonávania podobných operácií (operácie čítania sú vykonáva oveľa častejšie a čítanie je možné vykonávať z vyrovnávacej pamäte) a procesor môže špekulatívne vykonávať čítanie pred zápisom bez toho, aby čakal na výpočet nepriameho posunu zápisu.

Ak sa po výpočte offsetu zistí priesečník pamäťových oblastí pre zápis a čítanie, procesor jednoducho zahodí už špekulatívne získaný výsledok čítania a túto operáciu zopakuje. Táto funkcia umožňuje inštrukcii čítania pristupovať k starej hodnote na nejakej adrese, kým operácia uloženia ešte nie je dokončená. Po zahodení neúspešnej špekulatívnej operácie ostanú v pamäti cache stopy jej vykonania, po ktorých je možné použiť jednu z metód na určenie obsahu cache na jej získanie na základe analýzy zmien v prístupovom čase k dátam v cache a uncached.

Prvá zraniteľnosť (CVE-2021-35477) je spôsobená chybou v mechanizme overovania programu BPF. Na ochranu pred útokom Spectre 4 pridáva overovateľ po potenciálne problematických uloženiach do pamäte ďalšiu inštrukciu, ktorá ukladá nulovú hodnotu, aby nahradila stopy predchádzajúcej operácie. Očakávalo sa, že operácia zápisu null bude veľmi rýchla a bude blokovať špekulatívne vykonávanie, pretože závisí iba od ukazovateľa na rámec zásobníka BPF. V skutočnosti sa však ukázalo, že je možné vytvoriť podmienky, za ktorých sa pokyn vedúci k špekulatívnemu vykonaniu podarí vykonať pred operáciou preventívneho obchodu.

Druhá chyba zabezpečenia (CVE-2021-3455) je spôsobená skutočnosťou, že keď overovač BPF identifikuje potenciálne nebezpečné operácie ukladania pamäte, neberie do úvahy neinicializované oblasti zásobníka BPF, pričom prvá operácia zápisu nie je chránená. Táto vlastnosť vedie k možnosti vykonať operáciu špekulatívneho čítania v závislosti od neinicializovanej oblasti pamäte pred vykonaním inštrukcie store. Nová pamäť pre zásobník BPF sa pridelí bez kontroly obsahu, ktorý už je v pridelenej pamäti, a pred spustením programu BPF existuje spôsob, ako manipulovať s obsahom pamäťovej oblasti, ktorá sa potom pridelí zásobníku BPF.

Zdroj: opennet.ru

Pridať komentár