Az eBPF alrendszer biztonsági rései, amelyek lehetővé teszik a Spectre támadások elleni védelem megkerülését

A Linux kernelben (CVE-2021-33624) egy sérülékenységet azonosítottak, amely lehetővé teszi az eBPF alrendszer használatát a Spectre osztályú sebezhetőségek elleni védelem megkerülésére, amely lehetővé teszi a memória tartalmának meghatározását azáltal, hogy feltételeket teremt bizonyos műveletek spekulatív végrehajtása. A Spectre támadás megköveteli egy bizonyos parancssorozat jelenlétét a privilegizált kódban, amely az utasítások spekulatív végrehajtásához vezet. A végrehajtásra továbbított BPF-programok manipulálásával lehetőség nyílik hasonló utasítások generálására az eBPF-ben, és a kernelmemória tartalmát és a fizikai memória tetszőleges területeit oldalcsatornákon keresztül kiszivárogtatni.

A sérülékenységet az ellenőrző hibái okozzák, amely a BPF-programok hibáinak és elfogadhatatlan tevékenységeinek észlelésére szolgál. A hitelesítő felsorolja a lehetséges kódvégrehajtási útvonalakat, de kihagyja azokat az elágazási lehetőségeket, amelyek az utasításkészlet-architektúra szemantikája szempontjából elfogadhatatlanok. Egy BPF program végrehajtásakor az olyan elágazási lehetőségeket, amelyeket a hitelesítő nem vesz figyelembe, a processzor hibásan előre jelezheti, és spekulatív módban hajthatja végre. Például a „load” művelet elemzésekor a hitelesítő arra számít, hogy az utasítás olyan címmel rendelkező regisztert használ, amelynek értéke mindig a megadott határokon belül van, de a támadó létrehozhat olyan feltételeket, amelyek mellett a processzor spekulatív módon megpróbál műveletet végrehajtani olyan cím, amely nem felel meg az ellenőrzési feltételeknek.

A probléma a 4.15-ös kernel megjelenése óta jelentkezik, és javítások formájában (1, 2, 3, 4) javították. A sérülékenység a disztribúciókban (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch) javítatlan marad.

Ezenkívül megjegyezheti a Spectre sebezhetőségei elleni védelmet szolgáló eszközök teljesítményre gyakorolt ​​hatásáról szóló megjegyzést. A jegyzet összefoglalja az rr (Record and Replay) hibakereső optimalizálásának eredményeit, amelyet egykor a Mozillában hoztak létre a Firefox nehezen ismételhető hibáinak hibakeresésére. A könyvtárak meglétének ellenőrzésére használt rendszerhívások gyorsítótárazása a tesztprojekt „rr források” műveletét 3 percről 19 másodpercről 36 másodpercre csökkentette.

Az optimalizálás szerzője úgy döntött, hogy megvizsgálja, hogyan változik a teljesítmény a Spectre-védelem letiltása után. A rendszer „mitigations=off” paraméterrel történő betöltése után az „rr források” végrehajtási ideje optimalizálás nélkül 2 perc 5 másodperc (1.6-szor gyorsabb), optimalizálással pedig 33 másodperc (9%-kal gyorsabb). Érdekes módon a Spectre védelem letiltása nemcsak 1.4-szeresére csökkentette a kódvégrehajtási időt kernel szinten (2m9s-ről 1m32s-re), hanem a felhasználói térben is felére csökkentette a végrehajtási időt (1m9s-ről 0m33s-ra), feltehetően a CPU gyorsítótár-működésének és a TLB-nek köszönhetően. visszaáll, ha a Spectre védelem engedélyezve van.

Forrás: opennet.ru

Hozzászólás