Intel Software Guard Extensions (Intel SGX) är en uppsättning CPU-instruktioner som gör det möjligt för en applikation att skapa enklaver - områden i det virtuella adressutrymmet som är skyddade från läsning och skrivning utanför detta område av andra processer, inklusive operativsystemets kärna . Intel SGX tillhandahåller integriteten och konfidentialiteten hos högsäkerhetsdatorer som utförs på system där privilegierade processer (kärna, hypervisor , etc.) anses opålitliga.
Intel SGX är designad för säker fjärrdator, säker webbsurfning och upphovsrättsskydd . Andra praktiska tillämpningar av denna teknik inkluderar att säkerställa konfidentialitet för proprietära algoritmer och krypteringsnycklar.
Intel SGX-tillägg kom 2015 med den sjätte generationen av Intel-mikroprocessorer baserade på Skylake- mikroarkitekturen . Från och med Skylake har processorn en ny hårdvarumodul som kallas Memory Encryption Engine (MEE), som möjliggör automatisk kryptering av data som överförs från processorn till enklavens minnesområde. Detta gjorde det möjligt att överge antagandet om tillförlitlighet hos RAM och att begränsa säkerhetsperimetern till en central processor, vilket gjorde skapandet av SGX möjligt [1] .
2016 introducerades den andra versionen av SGX-tekniken, kallad SGX2. Den utökade SGX1-instruktionsuppsättningen med dynamisk enklavminneshantering. SGX1 införde restriktioner gällande minnesallokering och återanvändning av enklavminne - utvecklaren var skyldig att allokera allt minne när en enklavinstans skapades. SGX2 introducerade nya instruktioner och programmeringsmodeller för att utöka stödet för dynamisk enklavminneshantering [2] .
Stöds endast på Intel Core 7000, 8000, 9000 och 10000 generationens processorer (SGX-tekniken har tagits bort på 11 och 12 generationens Core-processorer), såväl som 3:e generationens Intel Xeon Scalabale -serverprocessorer. AMD-processorer stöder inte SGX. [3]
Först och främst skapades SGX-tekniken för att möjliggöra säker fjärrdatorn - kör programvara på en fjärrdator som ägs av en opålitlig part, med vissa garantier för integritet och konfidentialitet. I allmänhet är säker fjärrdator ett olöst problem. Fullständigt homomorf kryptering löser problemet för en begränsad familj av beräkningar, men har en opraktisk prestandaoverhead [4] .
Intel SGX-tillägg löser problemet med säker fjärrdator genom att använda pålitlig hårdvara på fjärrdatorn. Utrustningens äkthet fastställs under certifieringsprocessen. Pålitlig hårdvara skapar ett "säkert område" och användaren av fjärrdatortjänsten kan ladda upp nödvändig kod och data till detta "område". Pålitlig hårdvara skyddar datas konfidentialitet och integritet samtidigt som man utför beräkningar på den [5] .
Utvecklingen av Intel SGX följde 8 huvudmål [6] :
SGX allokerar ett minnesområde som kallas Processor Reserved Memory (PRM). Processorn skyddar PRM från alla icke-enklavminnesåtkomster, inklusive kernel-, hypervisor- och System Management Mode (SMM)-åtkomst, såväl som DMA- åtkomst från kringutrustning [5] [7] .
PRM innehåller Enclave Page Cache (EPC), som består av 4-kilobyte sidor som lagrar enklavkod och data. Otillförlitlig systemprogramvara är ansvarig för att tilldela EPC-sidor till enklaver. CPU:n håller reda på tillståndet för varje EPC-sida i metadata för Enclave Page Cache Metadata (EPCM) för att säkerställa att varje EPC-sida endast tillhör en enklav [7] .
Källkoden och data i enklaven laddas av opålitlig systemprogramvara. Under uppstartsfasen ber systemmjukvaran CPU:n att kopiera data från oskyddat minne (utanför PRM) till EPC-sidorna och tilldelar sidorna till den enklav som installeras. Det följer att det initiala tillståndet för enklaven är känt för systemmjukvaran [5] [7] .
Efter att alla sidor i enklaven har laddats in i EPC:n, ber systemmjukvaran CPU:n att markera enklaven som initierad, varefter applikationsmjukvaran kan exekvera koden inuti enklaven. Efter att enklaven har initierats är laddningsmetoden som beskrivs ovan [5] [7] förbjuden .
Medan enklaven laddas beräknas en kryptografisk hash baserat på dess innehåll. Efter att enklaven har initierats slutförs hashprocessen och den resulterande hashen blir enklavens mäthash [8] .
Fjärrparten kan gå igenom en attestationsprocess för att säkerställa att den kommunicerar med en enklav som har en viss verifieringshash och som körs i en säker miljö [9] .
En exekveringstråd kan komma in i enklaven endast genom speciella CPU-instruktioner, som liknar mekanismen för att byta från användarläge till kärnläge. Enklavkörning sker alltid i skyddat läge, på ring 3 , och använder adressöversättningen som ställts in av OS-kärnan och hypervisorn [5] [7] .
För att undvika läckage av känslig data, servar inte CPU:n avbrott (som sidfel ) eller virtuell maskinavslutning (vmexit) medan enklavkoden körs. Istället utför CPU:n först en Asynkron Enclave Exit (AEX) för att byta från enklavkod till ring 3-kod och servar sedan ett avbrott eller en virtuell maskinutgång. CPU:n utför en AEX, lagrar dess tillstånd i ett fördefinierat område inuti enklaven, och överför kontrollen till en fördefinierad instruktion utanför enklaven, och ersätter CPU-registren med syntetiska värden [5] [7] .
Tilldelningen av EPC-sidor för enklaver delegeras till operativsystemets kärna (eller hypervisor). Operativsystemet kommunicerar sina minnesallokeringsbeslut till SGX-implementeringen via speciella CPU-instruktioner ring 0. Operativsystemet kan också byta ut EPC-sidor till opålitligt RAM och sedan ladda tillbaka dem med hjälp av speciella processorinstruktioner [5] .
SGX använder Memory Encryption Engine (MEE) för att säkerställa konfidentialitet, integritet och färskhet hos uppladdade EPC-sidor medan de lagras i opålitligt minne [5] . MME fungerar som en förlängning av minneshanteringsenheten och krypterar automatiskt all data som överförs från processorn till minnet [10] .
Applikationsdesign med Intel SGX kräver att applikationen är uppdelad i två komponenter [9] :
En betrodd böna bör begränsas till endast den data som behöver mest skydd och de operationer som behöver interagera med den. En stor enklav med ett komplext gränssnitt förbrukar inte bara mer skyddat minne, det ökar också attackytan. Enklaver bör också ha minimal interaktion mellan betrodda komponenter. Även om enklaver kan anropa funktioner i en opålitlig komponent (med en speciell instruktion), kommer begränsning av sådana anrop att stärka enklaven från attacker [9] [8] .
I Intel SGX-arkitekturen är verifiering processen för enklavautentisering. Det finns två bestyrkandemekanismer [9] :
Lokalt intyg är användbart när en applikation har mer än en enklav som måste fungera tillsammans, eller när två applikationer måste kommunicera mellan enklaver [9] .
I attesteringsprocessen mellan två enklaver måste varje enklav först se till att den andra är pålitlig. En enklav autentiserar sig till en annan målenklav med hjälp av EREPORT-satsen. Denna SGX-instruktion skapar en attestationsrapport (REPORT) som kryptografiskt associerar ett enklavmeddelande med en identitet baserad på enklavhash och baserat på certifikat. Kryptografisk bindning utförs med hjälp av en speciell tagg som beräknas med en symmetrisk nyckel som endast är tillgänglig för målenklaven och SGX-implementeringen [5] .
Enklaverna kan sedan upprätta en säker session med hjälp av Diffie-Hellman-protokollet för att utbyta sessionsnyckeln. Denna sessionsnyckel kan användas för att kryptera data som ska delas mellan två enklaver [9] .
Eftersom en enklav inte kan komma åt det skyddade minnesutrymmet i en annan enklav, även om de tillhör samma applikation, måste alla pekare avreferens, och data måste skickas direkt mellan enklaver [9] .
Certifieringsprocessen är som följer. En SGX-aktiverad processor beräknar en hash av koden och data i varje enklav. Programvaran inuti enklaven startar processen att beräkna SGX-attestationssignaturen, som inkluderar enklav-hash och enklavmeddelandet [8] .
Den kryptografiska primitiv som används i SGX-attestationssignering är för komplex för att implementeras i hårdvara, så signeringsprocessen utförs av en privilegierad Quoting Enclave som tillhandahålls av Intel med tillgång till SGX-attestationsnyckeln, en asymmetrisk hårdvarunyckel som är unik för varje plattform. SGX-attestationsnyckeln existerade inte vid den tidpunkt då processorn skapades. Den ges ut senare, med hjälp av Provisioning Enclave som tillhandahålls av Intel [5] .
Eftersom signaturen beräknas i Quoting Enclave, finns det ett behov av en säker kommunikationskanal mellan enklaven som genomgår mjukvaruvalidering och Quoting Enclave. Detta problem löses med hjälp av den lokala verifieringsmekanismen [5] .
Om fjärrservern fastställer att enklaven har skapats korrekt och körs på en äkta Intel SGX-kompatibel processor, kan den nu lita på enklaven och skicka hemligheter till den via en betrodd kanal [9] .
I fjärrdatorn laddas innehållet i enklaven ner av systemprogramvaran till datorn och bör därför inte innehålla hemligheter i klartext. Efter initiering finns det en attestationsprocess där enklaven autentiseras mot en fjärrserver. Efter framgångsrik autentisering förväntas fjärrservern avslöja några hemligheter för enklaven via en säker kommunikationskanal. Intel SGX-designen försöker säkerställa att hashen som beräknas under verifieringsprocessen korrekt återspeglar innehållet som laddats upp till enklaven [8] .
SGX erbjuder även ett certifikatbaserat identifieringssystem. Den används för att utbyta hemligheter mellan enklaver som har certifikat utfärdade av samma certifikatutfärdare. Utbytesprocessen går ut på att kryptera hemligheter innan de skickas vidare till opålitlig systemprogramvara, som sedan överför dem till en annan enklav [5] [8] .
Samma mekanism kan användas för att cachelagra hemligheter som erhållits under verifieringsprocessen på opålitliga lagringsmedia som hanteras av systemprogramvaran. Denna cachning kan minska antalet attestationsprocesser i ett distribuerat system [5] .
Den 27 mars 2017 utvecklade forskare vid Graz University of Technology en prototyp som kan erhålla RSA- nycklar från SGX-enklaver som körs på samma system [11] [12] med hjälp av en tidsinställd attack inom fem minuter . En motåtgärd mot denna typ av attack presenterades och publicerades av Daniel Gruss et al. vid USENIX Security Symposium 2017 [13] . Bland andra motåtgärder som publicerades den 28 september 2017 var verktyget DR.SGX. DR.SGX påstås ha överlägsen prestanda samtidigt som den är mycket lättare att implementera än andra föreslagna lösningar [14] .
LSDS-gruppen vid Imperial College London visade att en spekulativ Spectre- säkerhetssårbarhet kunde anpassas för att attackera enklaven [15] . Foreshadow- attacken , som avslöjades i augusti 2018, kombinerar spekulativ exekvering och buffertspill för att kringgå SGX [16] .
Den 8 februari 2019 publicerade forskare från Graz University of Technology forskningsresultat som visade att det i vissa fall är möjligt att köra skadlig kod från själva enklaven [17] . Dokumentet hävdar att på grund av enklavens konfidentiella och skyddade karaktär kan antivirusprogramvara inte upptäcka och ta bort skadlig programvara som finns i den. Men eftersom moderna antiviruslösningar övervakar systemanrop och applikationsinteraktioner med operativsystemet, bör det vara möjligt att identifiera skadliga enklaver genom deras beteende. Intel släppte ett uttalande om att denna attack var utanför SGX-hotmodellen, att de inte kunde garantera att användarexekverad kod kom från betrodda källor, och uppmanade konsumenter att endast använda betrodd kod [18] .
Forskare vid universitetet i Graz i Österrike har upptäckt en ny farlig sårbarhet baserad på mätning av CPU-spänning som gör att AES- och RSA-nycklar kan extraheras från en säker SGX-enklav. Denna funktion har funnits i alla Intel-processorer sedan Sandy Bridge , där northbridge- funktionerna helt har ersatts av en systemagent integrerad i processormatrisen. Sårbarheten utnyttjar förmågan hos RAPL-systemet (Running Average Power Limit), som inte kräver privilegierad åtkomst, för att få detaljerade uppskattningar av strömförbrukningen för kärnan, systemagenten och DRAM [19] . För att bekämpa sårbarheten släppte Intel en mikrokodspatch (INTEL-SA-0389 [20] ).