Angrep på Intel SGX for å trekke ut sensitive data eller kjøre kode i en enklave

Forskere fra People's Liberation Army Defense Science and Technology University, National University of Singapore og ETH Zurich har utviklet en ny metode for å angripe isolerte enklaver Intel SGX (Software Guard eXtensions). Angrepet kalles SmashEx og er forårsaket av problemer med reentrance ved håndtering av unntakssituasjoner under drift av kjøretidskomponenter for Intel SGX. Den foreslåtte angrepsmetoden gjør det mulig, hvis du har kontroll over operativsystemet, å finne konfidensielle data som ligger i enklaven, eller å organisere kopieringen av koden din inn i enklavens minne og dens utførelse.

Utnyttelsesprototyper er utarbeidet for enklaver med kjøretid basert på Intel SGX SDK (CVE-2021-0186) og Microsoft Open Enclave (CVE-2021-33767). I det første tilfellet ble muligheten til å trekke ut en RSA-nøkkel brukt på en webserver for HTTPS demonstrert, og i det andre var det mulig å bestemme innholdet som ble oppnådd av cURL-verktøyet som kjørte inne i enklaven. Sårbarheten er allerede løst programmatisk i utgivelsene av Intel SGX SDK 2.13 og Open Enclave 0.17.1. I tillegg til Intel SGX SDK og Microsoft Open Enclave, vises sårbarheten også i Google Asylo SDK, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX og Veracruz.

La oss huske at SGX (Software Guard Extensions)-teknologi dukket opp i sjette generasjons Intel Core-prosessorer (Skylake) og tilbyr en serie instruksjoner som lar applikasjoner på brukernivå tildele lukkede minneområder - enklaver, hvis innhold ikke kan leses og modifisert selv av kjernen og koden utført 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 - spesiallagde nye instruksjoner EENTER, EEXIT og ERESUME brukes til å overføre kontroll til enklaven, som utfører autoritetskontroller. 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.

Angrep på Intel SGX for å trekke ut sensitive data eller kjøre kode i en enklave

Problemet er at SGX-teknologi tillater operativsystemet å avbryte en enklave ved å kaste et maskinvareunntak, og enklaver implementerer ikke riktige primitiver for atomisk håndtering av slike unntak. I motsetning til operativsystemkjernen og vanlige applikasjoner, har ikke kode inne i enklaver tilgang til primitiver for organisering av atomiske handlinger ved håndtering av asynkront kastede unntak. Uten de spesifiserte atomprimitivene kan enklaven avbrytes når som helst og returneres til utførelse, selv på tidspunkter når enklaven utfører kritiske seksjoner og er i en usikker tilstand (for eksempel når CPU-registre ikke lagres/gjenopprettes).

Angrep på Intel SGX for å trekke ut sensitive data eller kjøre kode i en enklave

For normal drift tillater SGX-teknologi at utførelse av enklaven avbrytes av konfigurerbare maskinvareunntak. Denne funksjonen lar enklave-runtime-miljøer implementere intra-enklave-unntakshåndtering eller signalbehandling, men den kan også forårsake reentrant-feil. SmashEx-angrepet er basert på utnyttelse av feil i SDK-en som gjør at situasjonen med å gjenkalle unntaksbehandleren ikke blir håndtert på riktig måte. Det er viktig at for å utnytte sårbarheten må angriperen kunne avbryte utførelsen av enklaven, dvs. må kontrollere driften av systemmiljøet.

Etter å ha kastet et unntak, mottar angriperen et lite tidsvindu der utførelsestråden kan avskjæres gjennom manipulering av inngangsparametrene. Spesielt, hvis du har tilgang til systemet (miljø utenfor enklaven), kan du opprette et nytt unntak umiddelbart etter å ha utført enklaveinnføringsinstruksjonen (EENTER), som vil returnere kontrollen til systemet på et tidspunkt da stabeloppsettet for enklaven er ennå ikke fullført, hvor tilstanden til CPU-registrene også er lagret.

Systemet kan deretter returnere kontrollen tilbake til enklaven, men siden enklavens stabel ikke var konfigurert på tidspunktet for avbruddet, vil enklaven kjøres med stabelen som ligger i systemminnet, som kan brukes til å bruke returorientert programmering (ROP ) utnyttelsesteknikker. Orientert programmering). Når du bruker ROP-teknikken, prøver ikke angriperen å plassere koden sin i minnet, men opererer på deler av maskininstruksjoner som allerede er tilgjengelige i lastede biblioteker, og slutter med en kontrollreturinstruksjon (som regel er dette slutten av bibliotekfunksjoner) . Arbeidet med utnyttelsen kommer ned til å bygge en kjede av anrop til lignende blokker («gadgets») for å oppnå ønsket funksjonalitet.

Angrep på Intel SGX for å trekke ut sensitive data eller kjøre kode i en enklave
Angrep på Intel SGX for å trekke ut sensitive data eller kjøre kode i en enklave


Kilde: opennet.ru

Legg til en kommentar