Intel Software Guard Extensions (Intel SGX) er et sæt CPU-instruktioner , der gør det muligt for et program at skabe enklaver - områder i det virtuelle adresserum, der er beskyttet mod læsning og skrivning uden for dette område af andre processer, inklusive operativsystemkernen . Intel SGX leverer integriteten og fortroligheden af højsikkerhedsdatabehandling udført på systemer, hvor privilegerede processer (kerne, hypervisor osv.) anses for utroværdige.
Intel SGX er designet til sikker fjerndatabehandling, sikker web-browsing og ophavsretsbeskyttelse . Andre praktiske anvendelser af denne teknologi omfatter at sikre fortroligheden af proprietære algoritmer og krypteringsnøgler.
Intel SGX-udvidelser ankom i 2015 med den sjette generation af Intel-mikroprocessorer baseret på Skylake- mikroarkitekturen . Startende med Skylake har processoren et nyt hardwaremodul kaldet Memory Encryption Engine (MEE), som tillader automatisk kryptering af data, der overføres fra processoren til enklavens hukommelsesområde. Dette gjorde det muligt at opgive antagelsen om pålidelighed af RAM og at begrænse sikkerhedsomkredsen til én central processor, hvilket gjorde oprettelsen af SGX mulig [1] .
I 2016 blev den anden version af SGX-teknologien introduceret, kaldet SGX2. Det udvidede SGX1-instruktionssættet med dynamisk enklavehukommelsesstyring. SGX1 pålagde restriktioner vedrørende hukommelsesallokering og genbrug af enklavehukommelse - udvikleren var forpligtet til at allokere al hukommelse ved oprettelse af en enklaveinstans. SGX2 introducerede nye instruktioner og programmeringsmodeller for at udvide understøttelsen af dynamisk enklavehukommelsesstyring [2] .
Kun understøttet på Intel Core 7000, 8000, 9000 og 10000 generationsprocessorer (SGX-teknologi er blevet fjernet på 11 og 12 generations Core-processorer), samt 3. generation Intel Xeon Scalabale -serverprocessorer. AMD-processorer understøtter ikke SGX. [3]
Først og fremmest blev SGX-teknologien skabt for at muliggøre sikker remote computing - at køre software på en fjerncomputer, der ejes af en upålidelig part, med nogle garantier for integritet og fortrolighed. Generelt er sikker remote computing et uløst problem. Fuldstændig homomorf kryptering løser problemet for en begrænset familie af beregninger, men har en upraktisk ydeevne overhead [4] .
Intel SGX-udvidelser løser problemet med sikker fjerndatabehandling ved at bruge pålidelig hardware på fjerncomputeren. Udstyrets ægthed fastslås under certificeringsprocessen. Betroet hardware opretter et "sikkert område", og brugeren af fjerncomputertjenesten kan uploade den nødvendige kode og data til dette "område". Pålidelig hardware beskytter dataens fortrolighed og integritet, mens der udføres beregninger på dem [5] .
Udviklingen af Intel SGX fulgte 8 hovedmål [6] :
SGX tildeler et hukommelsesområde kaldet Processor Reserved Memory (PRM). Processoren beskytter PRM'en mod alle ikke-enklave-hukommelsesadgange, inklusive kerne-, hypervisor- og System Management Mode (SMM)-adgang, samt DMA -adgang fra periferiudstyr [5] [7] .
PRM indeholder Enclave Page Cache (EPC), som består af 4-kilobyte sider, der gemmer enklavekode og data. Upålidelig systemsoftware er ansvarlig for at tildele EPC-sider til enklaver. CPU'en holder styr på tilstanden af hver EPC-side i Enclave Page Cache Metadata (EPCM) metadata for at sikre, at hver EPC-side kun tilhører én enklave [7] .
Kildekoden og dataene i enklaven indlæses af systemsoftware, der ikke er tillid til. Under opstartsfasen beder systemsoftwaren CPU'en om at kopiere data fra ikke-beskyttet hukommelse (uden for PRM'en) til EPC-siderne og tildeler siderne til den enklave, der installeres. Det følger heraf, at enklavens begyndelsestilstand er kendt af systemsoftwaren [5] [7] .
Efter at alle siderne i enklaven er indlæst i EPC'en, beder systemsoftwaren CPU'en om at markere enklaven som initialiseret, hvorefter applikationssoftwaren kan udføre koden inde i enklaven. Efter at enklaven er initialiseret, er indlæsningsmetoden beskrevet ovenfor [5] [7] forbudt .
Mens enklaven indlæses, beregnes en kryptografisk hash baseret på dens indhold. Efter at enklaven er initialiseret, afsluttes hashprocessen, og den resulterende hash bliver enklavens målehash [8] .
Fjernparten kan gennemgå en attestationsproces for at sikre, at den kommunikerer med en enklave, der har en vis verifikationshash og kører i et sikkert miljø [9] .
En udførelsestråd kan kun komme ind i enklaven gennem specielle CPU-instruktioner, som ligner mekanismen til at skifte fra brugertilstand til kernetilstand. Enklave-udførelse sker altid i beskyttet tilstand, på ring 3 , og bruger adresseoversættelsen indstillet af OS-kernen og hypervisor [5] [7] .
For at undgå lækage af følsomme data udfører CPU'en ikke serviceafbrydelser (såsom sidefejl ) eller virtuel maskinafslutning ( vmexit ), mens enklavekoden udføres. I stedet udfører CPU'en først en Asynchronous Enclave Exit (AEX) for at skifte fra enklavekode til ring 3-kode og servicerer derefter en interrupt eller virtuel maskine-exit. CPU'en udfører en AEX, lagrer dens tilstand i et foruddefineret område inde i enklaven og overfører kontrol til en foruddefineret instruktion uden for enklaven, og erstatter CPU-registrene med syntetiske værdier [5] [7] .
Tildelingen af EPC-sider til enklaver er delegeret til operativsystemets kerne (eller hypervisor). Operativsystemet kommunikerer sine beslutninger om hukommelsesallokering til SGX-implementeringen via særlige ring 0 CPU-instruktioner. Operativsystemet kan også udskifte EPC-sider til upålidelig RAM og derefter indlæse dem tilbage ved hjælp af specielle processorinstruktioner [5] .
SGX bruger Memory Encryption Engine (MEE) til at sikre fortroligheden, integriteten og friskheden af uploadede EPC-sider, mens de er gemt i ikke-pålidelig hukommelse [5] . MME fungerer som en udvidelse af hukommelsesstyringsenheden og krypterer automatisk alle data, der overføres fra processoren til hukommelsen [10] .
Applikationsdesign med Intel SGX kræver, at applikationen er opdelt i to komponenter [9] :
En betroet bean bør kun være begrænset til de data, der har brug for mest beskyttelse, og de operationer, der skal interagere med dem. En stor enklave med en kompleks grænseflade bruger ikke kun mere beskyttet hukommelse, den øger også angrebsoverfladen. Enklaver bør også have minimal interaktion mellem pålidelige komponenter. Selvom enklaver kan kalde funktioner i en upålidelig komponent (ved hjælp af en speciel instruktion), vil begrænsning af sådanne opkald styrke enklaven mod angreb [9] [8] .
I Intel SGX-arkitekturen er attestation processen med enklave-godkendelse. Der er to attesteringsmekanismer [9] :
Lokal attestation er nyttig, når en applikation har mere end én enklave, der skal arbejde sammen, eller når to applikationer skal kommunikere mellem enklaver [9] .
I attestationsprocessen mellem to enklaver skal hver enklave først sikre, at den anden er troværdig. En enklave autentificerer sig selv til en anden målenklave ved hjælp af EREPORT-sætningen. Denne SGX-instruktion opretter en attestationsrapport (REPORT), der kryptografisk forbinder en enklavemeddelelse med en identitet baseret på enklave-hashen og baseret på certifikater. Kryptografisk binding udføres ved hjælp af en speciel tag beregnet ved hjælp af en symmetrisk nøgle, der kun er tilgængelig for målenklaven og SGX-implementeringen [5] .
Enklaverne kan derefter etablere en sikker session ved hjælp af Diffie-Hellman-protokollen for at udveksle sessionsnøglen. Denne sessionsnøgle kan bruges til at kryptere data, der skal deles mellem to enklaver [9] .
Da en enklave ikke kan få adgang til det beskyttede hukommelsesrum i en anden enklave, selvom de tilhører den samme applikation, skal alle pointere dereferences, og data skal sendes direkte mellem enklaver [9] .
Certificeringsprocessen er som følger. En SGX-aktiveret processor beregner en hash af koden og dataene i hver enklave. Softwaren inde i enklaven starter processen med at beregne SGX attestationssignaturen, som inkluderer enklavehashen og enklavemeddelelsen [8] .
Den kryptografiske primitiv, der bruges i SGX-attestationssignering, er for kompleks til at blive implementeret i hardware, så signeringsprocessen udføres af en privilegeret Quoting Enclave leveret af Intel med adgang til SGX-attestationsnøglen, en hardwareasymmetrisk nøgle, der er unik for hver platform. SGX-attestationsnøglen eksisterer ikke på det tidspunkt, hvor processoren blev oprettet. Den udgives senere ved hjælp af Provisioning Enclave leveret af Intel [5] .
Fordi signaturen er beregnet i Quoting Enclave, er der behov for en sikker kommunikationskanal mellem den enklave, der gennemgår softwarevalidering, og Quoting Enclave. Dette problem er løst ved hjælp af den lokale attestationsmekanisme [5] .
Hvis fjernserveren fastslår, at enklaven er oprettet korrekt og kører på en ægte Intel SGX-kompatibel processor, kan den nu stole på enklaven og videregive hemmeligheder til den via en betroet kanal [9] .
Ved remote computing downloades indholdet af enklaven af systemsoftwaren til computeren og bør derfor ikke indeholde hemmeligheder i det klare. Efter initialisering er der en attestationsproces, hvor enklaven autentificeres mod en ekstern server. Efter vellykket godkendelse forventes fjernserveren at afsløre nogle hemmeligheder til enklaven over en sikker kommunikationskanal. Intel SGX-designet forsøger at sikre, at hashen, der er beregnet under attestationsprocessen, nøjagtigt afspejler indholdet, der er uploadet til enklaven [8] .
SGX tilbyder også et certifikatbaseret identifikationssystem. Det bruges til at udveksle hemmeligheder mellem enklaver, der har certifikater udstedt af den samme certifikatmyndighed. Udvekslingsprocessen involverer kryptering af hemmeligheder, før de videregives til upålidelig systemsoftware, som derefter overfører dem til en anden enklave [5] [8] .
Den samme mekanisme kan bruges til at cache hemmeligheder opnået under attestationsprocessen på ikke-pålidelige lagermedier, der administreres af systemsoftwaren. Denne caching kan reducere antallet af attestationsprocesser i et distribueret system [5] .
Den 27. marts 2017 udviklede forskere ved Graz University of Technology en prototype, der er i stand til at opnå RSA -nøgler fra SGX-enklaver, der kører på det samme system [11] [12] ved hjælp af et tidsindstillet angreb inden for fem minutter . En modforanstaltning mod denne type angreb blev præsenteret og offentliggjort af Daniel Gruss et al. på USENIX Security Symposium i 2017 [13] . Blandt andre modforanstaltninger offentliggjort den 28. september 2017 var DR.SGX-værktøjet. DR.SGX hævdes at have overlegen ydeevne, samtidig med at den er meget nemmere at implementere end andre foreslåede løsninger [14] .
LSDS-gruppen ved Imperial College London demonstrerede, at en spekulativ Spectre -sikkerhedssårbarhed kunne tilpasses til at angribe enklaven [15] . Foreshadow- angrebet , der blev afsløret i august 2018, kombinerer spekulativ udførelse og bufferoverløb for at omgå SGX [16] .
Den 8. februar 2019 offentliggjorde forskere fra Graz University of Technology forskningsresultater, der viste, at det i nogle tilfælde er muligt at køre ondsindet kode fra selve enklaven [17] . Dokumentet hævder, at på grund af enklavens fortrolige og beskyttede karakter, kan antivirussoftware ikke opdage og fjerne malware, der findes i den. Men da moderne antivirusløsninger overvåger systemopkald og applikationsinteraktioner med operativsystemet, bør det være muligt at identificere ondsindede enklaver ved deres adfærd. Intel udgav en erklæring om, at dette angreb var uden for SGX-trusselsmodellen, at de ikke kunne garantere, at brugerudført kode kom fra betroede kilder, og opfordrede forbrugerne til kun at bruge betroet kode [18] .
Forskere ved universitetet i Graz i Østrig har opdaget en ny farlig sårbarhed baseret på måling af CPU-spænding, der gør det muligt at udtrække AES- og RSA-nøgler fra en sikker SGX-enklave. Denne funktion har været til stede i alle Intel-processorer siden Sandy Bridge , hvor northbridge -funktionerne er blevet fuldstændig erstattet af en systemagent integreret i processormatricen. Sårbarheden udnytter RAPL-systemet (Running Average Power Limit), som ikke kræver privilegeret adgang, til at opnå detaljerede estimater af strømforbruget for kernen, systemagenten og DRAM'en [19] . For at bekæmpe sårbarheden udgav Intel en mikrokodepatch (INTEL-SA-0389 [20] ).