Attackera Intel SGX för att extrahera känslig data eller exekvera kod i en enklav

Forskare från People's Liberation Army Defense Science and Technology University, National University of Singapore och ETH Zürich har utvecklat en ny metod för att attackera isolerade enklaver Intel SGX (Software Guard eXtensions). Attacken kallas SmashEx och orsakas av problem med återinträde vid hantering av undantagssituationer under drift av runtime-komponenter för Intel SGX. Den föreslagna attackmetoden gör det möjligt, om du har kontroll över operativsystemet, att fastställa konfidentiell data som finns i enklaven, eller att organisera kopieringen av din kod till enklavens minne och dess exekvering.

Exploitprototyper har förberetts för enklaver med körtid baserad på Intel SGX SDK (CVE-2021-0186) och Microsoft Open Enclave (CVE-2021-33767). I det första fallet demonstrerades möjligheten att extrahera en RSA-nyckel som används på en webbserver för HTTPS, och i det andra var det möjligt att bestämma innehållet som erhölls av cURL-verktyget som kördes inuti enklaven. Sårbarheten har redan åtgärdats programmatiskt i versionerna av Intel SGX SDK 2.13 och Open Enclave 0.17.1. Förutom Intel SGX SDK och Microsoft Open Enclave förekommer sårbarheten även i Google Asylo SDK, EdgelessRT, Apache Teaclave, Rust SGX SDK, SGX-LKL, CoSMIX och Veracruz.

Låt oss komma ihåg att SGX (Software Guard Extensions)-teknologi dök upp i sjätte generationens Intel Core-processorer (Skylake) och erbjuder en serie instruktioner som gör det möjligt för applikationer på användarnivå att allokera slutna minnesområden - enklaver, vars innehåll inte kan läsas och modifierad även av kärnan och koden som exekveras i lägen ring0, SMM och VMM. Det är omöjligt att överföra kontrollen till koden i enklaven med hjälp av traditionella hoppfunktioner och manipulationer med register och stacken - speciellt skapade nya instruktioner EENTER, EEXIT och ERESUME används för att överföra kontrollen till enklaven, som utför auktoritetskontroller. I det här fallet kan koden som placeras i enklaven använda klassiska anropsmetoder för att komma åt funktioner inuti enklaven och speciella instruktioner för att anropa externa funktioner. Enklavminneskryptering används för att skydda mot hårdvarattacker som att ansluta till en DRAM-modul.

Attackera Intel SGX för att extrahera känslig data eller exekvera kod i en enklav

Problemet är att SGX-tekniken tillåter operativsystemet att avbryta en enklav genom att kasta ett hårdvaruundantag, och enklaver implementerar inte korrekt primitiver för atomär hantering av sådana undantag. Till skillnad från operativsystemets kärna och vanliga applikationer, har kod inuti enklaver inte tillgång till primitiver för att organisera atomära åtgärder vid hantering av asynkront kastade undantag. Utan de specificerade atomprimitiven kan enklaven när som helst avbrytas och återgå till exekvering, även vid tillfällen då enklaven exekverar kritiska sektioner och är i ett osäkert tillstånd (till exempel när CPU-register inte sparas/återställs).

Attackera Intel SGX för att extrahera känslig data eller exekvera kod i en enklav

För normal drift tillåter SGX-teknik att exekveringen av enklaven avbryts av konfigurerbara hårdvaruundantag. Den här funktionen tillåter enklavkörningsmiljöer att implementera intra-enklavundantagshantering eller signalbehandling, men den kan också orsaka återkommande fel. SmashEx-attacken är baserad på utnyttjande av brister i SDK:n på grund av vilka situationen att återanropa undantagshanteraren inte hanteras korrekt. Det är viktigt att för att utnyttja sårbarheten måste angriparen kunna avbryta exekveringen av enklaven, d.v.s. måste kontrollera driften av systemmiljön.

Efter att ha kastat ett undantag får angriparen ett litet tidsfönster under vilket exekveringstråden kan fångas upp genom manipulering av inmatningsparametrarna. I synnerhet, om du har tillgång till systemet (miljö utanför enklaven), kan du skapa ett nytt undantag omedelbart efter att ha kört instruktionen för enklavinmatning (EENTER), vilket kommer att återföra kontrollen till systemet i ett skede när stackinställningen för enklaven har ännu inte slutförts, där tillståndet för CPU-registren också sparas.

Systemet kan sedan returnera kontrollen tillbaka till enklaven, men eftersom enklavens stack inte var konfigurerad vid tidpunkten för avbrottet, kommer enklaven att köras med stacken som finns i systemminnet, vilket kan användas för att använda returorienterad programmering (ROP ) exploateringstekniker. Orienterad programmering). När man använder ROP-tekniken försöker angriparen inte placera sin kod i minnet, utan arbetar på delar av maskininstruktioner som redan finns tillgängliga i laddade bibliotek, som slutar med en kontrollreturinstruktion (som regel är detta slutet på biblioteksfunktioner) . Arbetet med exploateringen handlar om att bygga en kedja av anrop till liknande block ("prylar") för att få önskad funktionalitet.

Attackera Intel SGX för att extrahera känslig data eller exekvera kod i en enklav
Attackera Intel SGX för att extrahera känslig data eller exekvera kod i en enklav


Källa: opennet.ru

Lägg en kommentar