Sårbarheter i eBPF som kan kringgå Spectre 4-attackskydd

Två sårbarheter har identifierats i Linux-kärnan som gör att eBPF-undersystemet kan kringgå attackskyddet Spectre v4 (SSB, Speculative Store Bypass). Med hjälp av ett oprivilegierat BPF-program kan en angripare skapa förutsättningar för spekulativ exekvering av vissa operationer och bestämma innehållet i godtyckliga områden i kärnminnet. Escort eBPF-delsystem i kärnan fick tillgång till en prototypexploat som demonstrerar möjligheten att begå attacker i praktiken. Problemen har åtgärdats i form av patchar (1, 2) som kommer att ingå i nästa Linux-kärnauppdatering. Uppdateringar i distributioner har ännu inte skapats (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Spectre 4-attackmetoden är baserad på att återställa data som har lagt sig i processorcachen efter att ha förkastat resultatet av spekulativt exekvering av operationer vid bearbetning av alternerande skriv- och läsoperationer med indirekt adressering. När en läsoperation följer en skrivoperation (till exempel mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), kan läsadressförskjutningen redan vara känd på grund av att liknande operationer utförs (läsoperationer utförs mycket oftare och en läsning kan utföras från cachen) och processorn kan spekulativt utföra en läsning före en skrivning utan att vänta på att skrivinriktningsförskjutningen ska beräknas.

Om, efter beräkning av offset, en skärning av minnesområden för skrivning och läsning detekteras, kommer processorn helt enkelt att förkasta det redan spekulativt erhållna läsresultatet och upprepa denna operation. Denna funktion tillåter läsinstruktionen att komma åt det gamla värdet på någon adress medan lagringsoperationen ännu inte har slutförts. Efter att ha kasserat en misslyckad spekulativ operation, finns spår av dess exekvering kvar i cachen, varefter en av metoderna för att bestämma innehållet i cachen baserat på analys av ändringar i åtkomsttiden till cachad och inte cachad data kan användas för att hämta Det.

Den första sårbarheten (CVE-2021-35477) orsakas av ett fel i BPF-programverifieringsmekanismen. För att skydda mot Spectre 4-attacken lägger verifieraren till en ytterligare instruktion efter potentiellt problematiska lagringsoperationer till minnet, och lagrar värdet på noll för att ta bort spår från föregående operation. Nollskrivningsoperationen var tänkt att vara mycket snabb och blockera spekulativ exekvering, eftersom den bara beror på pekaren till BPF-stackramen. Men i själva verket visade det sig vara möjligt att skapa förutsättningar under vilka instruktionen som leder till spekulativ utförande hinner verkställas före den förebyggande butiksdriften.

Den andra sårbarheten (CVE-2021-3455) är relaterad till det faktum att när potentiellt farliga minneslagringsoperationer upptäcks av BPF-verifieraren, tas inte hänsyn till oinitierade områden i BPF-stacken, varvid den första skrivoperationen inte är skyddad . Denna funktion leder till möjligheten att utföra en spekulativ läsoperation, beroende på ett oinitierat minnesområde, innan en lagringsinstruktion exekveras. Nytt minne för BPF-stacken tilldelas utan att kontrollera innehållet som redan finns i det allokerade minnet, och det finns ett sätt att hantera innehållet i minnesområdet som sedan kommer att allokeras till BPF-stacken innan BPF-programmet startar.

Källa: opennet.ru

Lägg en kommentar