Sårbarheter i eBPF-undersystemet som tillåter förbigående skydd mot Spectre-attacker

En sårbarhet har identifierats i Linux-kärnan (CVE-2021-33624) som gör att eBPF-undersystemet kan användas för att kringgå skydd mot Spectre-klasssårbarheter, vilket gör det möjligt att fastställa innehållet i minnet som ett resultat av att skapa förutsättningar för spekulativt genomförande av vissa operationer. Spectre-attacken kräver närvaron av en viss sekvens av kommandon i privilegierad kod som leder till spekulativ exekvering av instruktioner. Genom att manipulera BPF-program som överförs för exekvering är det möjligt att generera liknande instruktioner i eBPF och läcka innehållet i kärnminnet och godtyckliga områden av fysiskt minne genom sidokanaler.

Sårbarheten orsakas av brister i verifieraren, som används för att upptäcka fel och oacceptabel aktivitet i BPF-program. Verifieraren räknar upp möjliga kodexekveringsvägar, men hoppar över förgreningsalternativ som är oacceptabla ur synvinkeln av semantiken för instruktionsuppsättningsarkitekturen. När ett BPF-program körs kan sådana förgreningsalternativ som inte beaktas av verifieraren felaktigt förutsägas av processorn och exekveras i spekulativt läge. Till exempel, när man analyserar "load"-operationen, förväntar sig verifieraren att instruktionen använder ett register med en adress vars värde alltid ligger inom de angivna gränserna, men en angripare kan skapa förhållanden under vilka processorn kommer att försöka spekulativt utföra en operation med en adress som inte uppfyller verifieringsvillkoren.

Problemet har dykt upp sedan kärnan 4.15 släpptes och har åtgärdats i form av patchar (1, 2, 3, 4). Sårbarheten förblir ofixad i distributioner (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Dessutom kan du notera anteckningen om prestandapåverkan av verktyg för att skydda mot Spectre-sårbarheter. Anteckningen sammanfattar resultaten av optimeringen av rr (Record and Replay) debugger, som en gång skapades i Mozilla för att felsöka svårupprepade fel i Firefox. Cachning av systemanrop som användes för att kontrollera förekomsten av kataloger minskade "rr sources"-operationen för testprojektet från 3 minuter 19 sekunder till 36 sekunder.

Optimeringsförfattaren bestämde sig för att kontrollera hur prestandan skulle förändras efter att ha inaktiverat Spectre-skyddet. Efter uppstart av systemet med parametern "mitigations=off" var exekveringstiden för "rr-källor" utan optimering 2 minuter 5 sekunder (1.6 gånger snabbare), och med optimering var den 33 sekunder (9% snabbare). Intressant är att inaktivering av Spectre-skydd inte bara minskade kodexekveringstiden på kärnnivån med 1.4 gånger (från 2m9s till 1m32s), utan också halverade exekveringstiden i användarutrymmet (från 1m9s till 0m33s), förmodligen på grund av minskad effektivitet CPU-cachedrift och TLB återställs när Spectre-skydd är aktiverat.

Källa: opennet.ru

Lägg en kommentar