SWAPGS - en ny sårbarhed i den spekulative CPU-udførelsesmekanisme

Forskere fra Bitdefender afsløret ny sårbarhed (CVE-2019-1125) i den spekulative instruktionsudførelsesmekanisme for moderne CPU'er, som hedder SWAPGS, hvilket svarer til navnet på den processorinstruktion, der forårsager problemet. Sårbarhed Det gør det muligt en uprivilegeret angriber kan bestemme indholdet af kernehukommelsesområder eller kørende virtuelle maskiner. Problem bekræftet i Intel-processorer (x86_64) og delvist påvirker AMD-processorer, for hvilke hovedangrebsvektoren ikke vises. Tidligere implementerede metoder til at modvirke Spectre- og Meltdown-sårbarhederne beskytter ikke mod SWAPGS-angrebet ved brug af Intel-processorer, men der er allerede foreslået rettelser til Linux, ChromeOS, Android og Windows.

Sårbarheden tilhører Spectre v1-klassen og er baseret på ideen om at gendanne data fra processorcachen, der er tilbage efter spekulativ udførelse af instruktioner. For at forbedre ydeevnen bruger grenforudsigelsesenheder af moderne CPU'er forebyggende eksekvering af nogle instruktioner, der højst sandsynligt vil blive udført, men uden at vente på beregningen af ​​alle de faktorer, der bestemmer deres eksekvering (f.eks. når grenbetingelser eller adgangsparametre ikke har endnu beregnet). Hvis forudsigelsen ikke bekræftes, kasserer processoren resultatet af den spekulative eksekvering, men de data, der behandles under den, forbliver i processorcachen og kan gendannes ved hjælp af metoder til at bestemme indholdet af cachen gennem sidekanaler, analysere ændringen i adgang tid til cachelagrede og ikke-cachelagrede data.

Det særlige ved det nye angreb er brugen af ​​et læk, der opstår under den spekulative udførelse af SWAPGS-instruktionen, som bruges i operativsystemer til at erstatte værdien af ​​GS-registeret, når kontrollen går fra brugerplads til OS-kernen (GS-kernen) værdi, der bruges i brugerrummet, erstattes med den værdi, der bruges under operationer i kernen ). I Linux-kernen gemmer GS en per_cpu-pointer, der bruges til at få adgang til kernedata, og brugerplads gemmer pointere til TLS (Thread Local Storage).

For at undgå at kalde SWAPGS-instruktionen to gange, når du får adgang til kernen igen fra kerneplads, eller når du udfører kode, der ikke kræver en GS-registerændring, udføres en kontrol og en betinget gren før instruktionen. Den spekulative eksekveringsmotor fortsætter proaktivt med at udføre kode med SWAPGS-instruktionen uden at vente på resultatet af kontrollen, og hvis den valgte gren ikke bekræftes, kasserer den resultatet. Der kan således opstå en situation, når en gren, der ikke involverer SWAPGS-udførelse, er spekulativt udvalgt, men under spekulativ eksekvering vil værdien af ​​GS-registeret blive ændret af SWAPGS-instruktionen og brugt i afhængige hukommelsesoperationer, der ender i CPU-cachen.

Forskere har foreslået to angrebsscenarier, for hvilke der er udarbejdet udnyttelsesprototyper. Det første scenarie er baseret på situationen, hvor SWAPGS-instruktionen ikke udføres spekulativt, selvom den faktisk bruges i udførelsen, og det andet er det modsatte, når SWAPGS-instruktionen udføres spekulativt, selvom den faktisk ikke burde udføres. For hvert scenarie er der to muligheder for udnyttelse: Angriberen kan bestemme værdien på en specifik adresse i kerneområdet, og angriberen kan søge efter en specifik værdi på tilfældige adresser i kernen. Det tager lang tid at udføre et angreb, og udnyttelsen kan tage flere timer at fuldføre lækagen.

Der er et problem i Linux-kernen elimineret ved at ændre logikken i at kalde SWAPGS-instruktionen (blokering af spekulativ udførelse), svarende til rettelsen af ​​andre Spectre v1-klassesårbarheder. Den ekstra beskyttelse forventes at have minimal indvirkning på udførelsen af ​​typiske arbejdsbelastninger. Latency opstår i skiftfasen mellem bruger- og kerneplads, hvilket kan resultere i dårlig ydeevne, når der for eksempel er tunge systemkald fra applikationen eller hyppig generering af NMI'er og afbrydelser.

Rettelsen kræver installation af en kerneopdatering på både værtssystemet og gæstemiljøer, efterfulgt af en systemgenstart. For at deaktivere beskyttelse på Linux kan "nospectre_v1"-indstillingen bruges, som også deaktiverer foranstaltninger til at blokere SWAPGS-sårbarheden. Rettelsen er tilgængelig som lappe til Linux-kernen, som allerede er inkluderet i udgivelserne 4.19.65, 5.2.7, 4.14.137, 4.9.188 og 4.4.188. Opdateringer til Linux-distributioner er endnu ikke blevet frigivet (Debian, RHEL, Fedora, Arch Linux, SUSE/openSUSE, Ubuntu). På Windows blev problemet stille og roligt løst i juli opdatering. Google Company forberedt rettelse til kerne 4.19 leveret med ChromeOS og Android.

Ifølge forskere fra Bitdefender blev Intel informeret om problemet tilbage i august sidste år. Det blev besluttet at løse problemet programmatisk, for hvilket udviklere fra Microsoft, Google og Linux-kernen var involveret i den koordinerede udvikling af en rettelse. Ældre Intel-processorer, præ-Ivy Bridge, er meget sværere at angribe på grund af manglen på understøttelse af WRGSBASE-instruktionen, der bruges i udnyttelsen. ARM-, POWER-, SPARC-, MIPS- og RISC-V-systemer er ikke berørt af problemet, fordi de ikke understøtter SWAPGS-instruktionen.

Problemet rammer hovedsageligt ejere af Intel-processorer -
På AMD-systemer var kun det andet angrebsscenarie i stand til at blive reproduceret, hvilket er begrænset til spekulativ behandling af basisværdien af ​​GS-registret, som kan bruges til at lede efter specifikke værdier i tilfældige hukommelsesområder. For at blokere denne angrebsmulighed er tilstrækkelig eksisterende metoder til beskyttelse mod Spectre v1.

Kilde: opennet.ru

Tilføj en kommentar