Forskere fra Forsknings- og Teknologiinstituttet for Folkets Befrielseshær i Kina, National University of Singapore og ETH Zürich har udviklet en ny angrebsmetode mod isolerede enclaves i Intel SGX (Software Guard eXtensions). Angrebet kaldes SmashEx og er forårsaget af problemer med genindkaldelighed ved behandling af undtagelsessituationer i runtime-komponenter for Intel SGX. Den foreslåede angrebsmetode gør det muligt, ved kontrol over operativsystemet, at identificere fortrolige data placeret i en enclave eller at organisere kopiering af sin egen kode til enclave-memorien og udføre den.
Prototyper af exploits er blevet forberedt til enclaves med runtime baseret på Intel SGX SDK (CVE-2021-0186) og Microsoft Open Enclave (CVE-2021-33767). I det første tilfælde blev muligheden for at udtrække RSA-nøglen, der anvendes på webserveren til HTTPS, demonstreret, mens det i det andet tilfælde lykkedes at bestemme indholdet, der blev modtaget fra cURL-værktøjet, der blev kørt inden i enclave. Sårbarheden er allerede blevet rettet via software i udgivelserne af Intel SGX SDK 2.13 og Open Enclave 0.17.1. Udover pakkerne Intel SGX SDK og Microsoft Open Enclave viser sårbarheden sig også i SDK'er som Google Asylo, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX og Veracruz.
Vi minder om, at teknologien SGX (Software Guard Extensions) blev introduceret i Intel Core-processorer af sjette generation (Skylake) og tilbyder en serie af instruktioner, der gør det muligt at allokere lukkede hukommelsesområder — enclaves — til applikationer på bruger niveau, hvis indhold ikke kan læses eller ændres selv af kernen og kode, der kører i ring0, SMM og VMM tilstande. Det er umuligt at overføre kontrol til koden i en enclave ved hjælp af traditionelle overførselsfunktioner eller manipulationer med registre og stakke — for at overføre kontrol til en enclave anvendes specialdesignede nye instruktioner EENTER, EEXIT og ERESUME, der udfører tilladelseskontrol. Den kode, der placeres i en enclave, kan anvende klassiske metodeopkald for at tilgå funktioner indeni enclave samt en specialinstruktion til at kalde eksterne funktioner. For at beskytte mod hardwareangreb, såsom tilslutning til DRAM-modulet, anvendes kryptering af enclave-hukommelsen.

Problemet er relateret til, at SGX-teknologien tillader operativsystemet at afbryde udførelsen af et enclave ved at generere en hardwarefejl, og i enclaves er primitive ikke korrekt implementeret til atomisk håndtering af sådanne undtagelser. I modsætning til operativsystemets kerne og almindelige applikationer har koden inden for enclaves ikke adgang til primitivene for at organisere atomære handlinger under behandlingen af asynkront opståede undtagelser. Uden de nævnte atomære primitiv har enclave'en mulighed for at blive afbrudt når som helst og genoptages, selv når der udføres kritiske sektioner, og den befinder sig i en usikker tilstand (f.eks. når CPU-registre ikke er gemt/genoprettet).

For at SGX-teknologien skal fungere korrekt, gør den det muligt at afbryde udførelsen af en enclave med konfigurerbare hardwarefejl. Denne egenskab gør det muligt for runtime-miljøer for enclaves at implementere håndtering af interne enclave-undtagelser eller signalhåndtering, men det kan også medføre reentrancy-fejl. SmashEx-angrebet er baseret på at udnytte mangler i SDK'er, som fører til, at situationen med gentagne opkald af undtagelseshåndtereren ikke håndteres korrekt. Det er vigtigt, at for at udnytte sårbarheden skal angriberen have mulighed for at afbryde udførelsen af enclave'en, dvs. de skal kontrollere det systemmæssige miljø.
Efter genereringen af en undtagelse får angriberen et lille tidsvindue, hvor de kan interceptere udførelsestråden ved at manipulere indgangsparametrene. Især hvis man har adgang til systemet (miljøet uden for enclave'en), kan man oprette en ny undtagelse umiddelbart efter udførelsen af indgangsinstruktionen til enclave'en (EENTER), hvilket fører til, at kontrollen returneres til systemet på et tidspunkt, hvor konfigurationen af stakken til enclave'en endnu ikke er afsluttet, hvilket også inkluderer opbevaring af tilstanden for CPU-registre.
Systemet kan derefter returnere kontrollen til enclave'en, men da enclaavens stack ikke blev indstillet under afbrydelsen, vil enclave'en blive kørt med den stack, der er i systemets hukommelse, hvilket kan bruges til at anvende udnyttelsesmetoder baseret på return-orienteret programmering (ROP — Return-Oriented Programming). Når teknikken ROP anvendes, forsøger angriberen ikke at placere sin kode i hukommelsen, men arbejder med allerede eksisterende stykker maskinkode i de indlæste biblioteker, der slutter med en returkontrolinstruktion (normalt slutninger af biblioteksfunktioner). Exploitens funktionalitet reduceres til at bygge en kæde af opkald til sådanne blokke («gadgets») for at opnå den ønskede funktionalitet.


Kilde: opennet.ru
