SWAPGS - en ny sårbarhet i den spekulativa exekveringsmekanismen för CPU

Forskare från Bitdefender avslöjat ny sårbarhet (CVE-2019-1125) i den spekulativa instruktionsexekveringsmekanismen för moderna CPU: er, som heter SWAPGS, vilket motsvarar namnet på processorinstruktionen som orsakar problemet. Sårbarhet det gör Tillåt en oprivilegierad angripare att fastställa innehållet i kärnminnesområden eller köra virtuella maskiner. Problem bekräftad i Intel-processorer (x86_64) och delvis påverkar AMD-processorer för vilka den huvudsakliga attackvektorn inte visas. Tidigare implementerade metoder för att motverka Spectre- och Meltdown-sårbarheterna skyddar inte mot SWAPGS-attacken när man använder Intel-processorer, men korrigeringar har redan föreslagits för Linux, ChromeOS, Android och Windows.

Sårbarheten tillhör klassen Spectre v1 och är baserad på idén om att återställa data från processorcachen som finns kvar efter spekulativ exekvering av instruktioner. För att förbättra prestandan använder grenprediktionsenheter för moderna CPU: er förebyggande exekvering av vissa instruktioner som med största sannolikhet kommer att exekveras, men utan att vänta på beräkningen av alla faktorer som bestämmer deras exekvering (till exempel när grenvillkor eller åtkomstparametrar inte har ännu beräknat). Om förutsägelsen inte bekräftas, kasserar processorn resultatet av den spekulativa exekveringen, men data som behandlas under den förblir i processorcachen och kan återställas med metoder för att bestämma innehållet i cachen genom sidokanaler, analysera förändringen i åtkomst tid till cachad och uncachad data.

Det speciella med den nya attacken är användningen av en läcka som uppstår under den spekulativa exekveringen av SWAPGS-instruktionen, som används i operativsystem för att ersätta värdet på GS-registret när kontrollen övergår från användarutrymmet till OS-kärnan (GS-kärnan) värdet som används i användarutrymmet ersätts med värdet som används under operationer i kärnan ). I Linux-kärnan lagrar GS en per_cpu-pekare som används för att komma åt kärndata, och användarutrymme lagrar pekare till TLS (Thread Local Storage).

För att undvika att anropa SWAPGS-instruktionen två gånger när du kommer åt kärnan igen från kärnutrymmet eller när kod körs som inte kräver en GS-registerändring, utförs en kontroll och en villkorlig gren före instruktionen. Den spekulativa exekveringsmotorn fortsätter proaktivt att exekvera kod med SWAPGS-instruktionen utan att vänta på resultatet av kontrollen, och om den valda grenen inte bekräftas, kasserar resultatet. Således kan en situation uppstå när en gren som inte involverar SWAPGS-exekvering väljs spekulativt, men under spekulativ exekvering kommer värdet på GS-registret att ändras av SWAPGS-instruktionen och användas i beroende minnesoperationer som hamnar i CPU-cachen.

Forskare har föreslagit två attackscenarier för vilka exploateringsprototyper har utarbetats. Det första scenariot är baserat på situationen där SWAPGS-instruktionen inte exekveras spekulativt, även om den faktiskt används i exekvering, och det andra är motsatsen, när SWAPGS-instruktionen exekveras spekulativt, även om den egentligen inte borde exekveras. För varje scenario finns det två alternativ för exploatering: angriparen kan bestämma värdet på en specifik adress i kärnområdet, och angriparen kan söka efter ett specifikt värde på slumpmässiga adresser i kärnan. Att utföra en attack tar lång tid och utnyttjandet kan ta flera timmar för att slutföra läckan.

Det finns ett problem i Linux-kärnan utslagen genom att ändra logiken för att anropa SWAPGS-instruktionen (blockera spekulativ exekvering), liknande korrigeringen av andra Spectre v1-klasssårbarheter. Det extra skyddet förväntas ha minimal inverkan på prestandan för typiska arbetsbelastningar. Latens inträffar under växlingsfasen mellan användar- och kärnutrymme, vilket kan resultera i dålig prestanda när det till exempel är tunga systemanrop från applikationen eller frekvent generering av NMI och avbrott.

Fixeringen kräver installation av en kärnuppdatering på både värdsystemet och gästmiljön, följt av en omstart av systemet. För att inaktivera skyddet på Linux kan alternativet "nospectre_v1" användas, vilket också inaktiverar åtgärder för att blockera SWAPGS-sårbarheten. Fixeringen är tillgänglig som lappa för Linux-kärnan, som redan ingår i utgåvorna 4.19.65, 5.2.7, 4.14.137, 4.9.188 och 4.4.188. Uppdateringar för Linux-distributioner har ännu inte släppts (Debian, RHEL, fedora, Arch Linux, SUSE/openSUSE, ubuntu). På Windows fixades problemet tyst Juli uppdatering. Google Company beredd fix för kärnan 4.19 som levereras med ChromeOS och Android.

Enligt forskare från Bitdefender informerades Intel om problemet redan i augusti förra året. Det beslutades att åtgärda problemet programmatiskt, för vilket utvecklare från Microsoft, Google och Linux-kärnan var involverade i den samordnade utvecklingen av en fix. Äldre Intel-processorer, pre-Ivy Bridge, är mycket svårare att attackera på grund av bristen på stöd för WRGSBASE-instruktionen som används i exploateringen. ARM-, POWER-, SPARC-, MIPS- och RISC-V-system påverkas inte av problemet eftersom de inte stöder SWAPGS-instruktionen.

Problemet drabbar främst ägare av Intel-processorer -
På AMD-system kunde endast det andra attackscenariot reproduceras, vilket är begränsat till spekulativ bearbetning av basvärdet för GS-registret, som kan användas för att leta efter specifika värden i slumpmässiga minnesområden. För att blockera detta attackalternativ tillräckligt befintliga metoder för skydd mot Spectre v1.

Källa: opennet.ru

Lägg en kommentar