Intel mikrokodeoppdatering som fikser (CVE-2019-14607) gjennom manipulering av den dynamiske spennings- og frekvenskontrollmekanismen i CPU, initier skade på innholdet i dataceller, inkludert i områder som brukes til beregninger i isolerte Intel SGX-enklaver. Angrepet kalles Plundervolt, og lar potensielt en lokal bruker eskalere privilegiene sine på systemet, forårsake tjenestenekt og få tilgang til sensitive data.
Angrepet er farlig bare i sammenheng med manipulasjoner med beregninger i SGX-enklaver, siden det krever rotrettigheter i systemet for å utføre. I det enkleste tilfellet kan en angriper oppnå forvrengning av informasjonen som behandles i enklaven, men i mer komplekse scenarier er ikke muligheten for å gjenskape de private nøklene lagret i enklaven som brukes til kryptering ved hjelp av RSA-CRT og AES-NI algoritmene. ekskludert. Teknikken kan også brukes til å generere feil i innledningsvis korrekte algoritmer for å provosere frem sårbarheter ved arbeid med minne, for eksempel for å organisere tilgang til et område utenfor grensen til den tildelte bufferen.
Prototypekode for å utføre et angrep på GitHub
Essensen av metoden er å skape forhold for forekomsten av uventede datakorrupsjoner under beregninger i SGX, som bruken av kryptering og minneautentisering i enklaven ikke beskytter mot. For å introdusere forvrengning, viste det seg at det var mulig å bruke standard programvaregrensesnitt for å kontrollere frekvens og spenning, vanligvis brukt for å redusere strømforbruket under systemets tomgangstid og aktivere maksimal ytelse under intensivt arbeid. Frekvens- og spenningsegenskaper spenner over hele brikken, inkludert virkningen av databehandling i en isolert enklave.
Ved å endre spenningen kan du skape forhold der ladningen ikke er nok til å regenerere en minnecelle inne i CPUen, og verdien endres. Hovedforskjell fra angrep er at RowHammer lar deg endre innholdet av individuelle biter i DRAM-minnet ved å syklisk lese data fra naboceller, mens Plundervolt lar deg endre biter inne i CPU-en når dataene allerede er lastet inn fra minnet for beregning. Denne funksjonen lar deg omgå integritetskontrollen og krypteringsmekanismene som brukes i SGX for data i minnet, siden verdiene i minnet forblir korrekte, men kan bli forvrengt under operasjoner med dem før resultatet skrives til minnet.
Hvis denne modifiserte verdien brukes i multiplikasjonsprosessen av krypteringsprosessen, blir utdataene avvist med feil chiffertekst. Ved å ha muligheten til å kontakte en behandler i SGX for å kryptere dataene sine, kan en angriper, forårsake feil, akkumulere statistikk om endringer i utdatachifferteksten og på noen få minutter gjenopprette verdien av nøkkelen som er lagret i enklaven. Den opprinnelige inndatateksten og den riktige utgående chifferteksten er kjent, nøkkelen endres ikke, og utdata fra en feil chiffertekst indikerer at en bit har blitt forvrengt til motsatt verdi.
Etter å ha analysert verdiparene til korrekte og korrupte chiffertekster akkumulert under forskjellige feil, ved bruk av metoder for differensiell feilanalyse (DFA, ) Kan sannsynlige nøkler som brukes til AES symmetrisk kryptering, og deretter, ved å analysere skjæringspunktene mellom nøkler i forskjellige sett, bestemme ønsket nøkkel.

Ulike modeller av Intel-prosessorer er berørt av problemet, inkludert Intel Core CPUer med 6
10. generasjon, samt femte og sjette generasjon av Xeon E3, første og andre generasjon av Intel Xeon Scalable, Xeon D,
Xeon W og Xeon E.
La oss minne deg på at SGX-teknologi () dukket opp i sjette generasjon Intel Core-prosessorer (Skylake) og en serie instruksjoner som lar applikasjoner på brukernivå tildele lukkede minneområder - enklaver, hvis innhold ikke kan leses eller modifiseres selv av kjernen og koden som kjører i ring0-, SMM- og VMM-modus. Det er umulig å overføre kontroll til koden i enklaven ved hjelp av tradisjonelle hoppfunksjoner og manipulasjoner med registre og stabelen; for å overføre kontroll til enklaven brukes en spesiallaget ny instruksjon som utfører en autoritetssjekk. I dette tilfellet kan koden plassert i enklaven bruke klassiske kallemetoder for å få tilgang til funksjoner inne i enklaven og spesielle instruksjoner for å kalle eksterne funksjoner. Enklave-minnekryptering brukes til å beskytte mot maskinvareangrep som for eksempel tilkobling til en DRAM-modul.
Kilde: opennet.ru
