Intel Software Guard Extensions (Intel SGX) on joukko suorittimen ohjeita , joiden avulla sovellus voi luoda enklaaveja - alueita virtuaaliseen osoiteavaruuteen, joita muut prosessit, mukaan lukien käyttöjärjestelmän ydin , suojaavat tämän alueen ulkopuolelta tulevalta lukemiselta ja kirjoittamiselta . Intel SGX tarjoaa eheyden ja luottamuksellisuuden korkean turvatason tietojenkäsittelylle järjestelmissä, joissa etuoikeutettujen prosessien (ydin, hypervisor jne.) katsotaan olevan epäluotettavia.
Intel SGX on suunniteltu suojattuun etätietokoneeseen, turvalliseen verkkoselailuun ja tekijänoikeussuojaukseen . Muita tämän tekniikan käytännön sovelluksia ovat patentoitujen algoritmien ja salausavainten luottamuksellisuuden varmistaminen.
Intel SGX -laajennukset saapuivat vuonna 2015 kuudennen sukupolven Intelin mikroprosessoreilla, jotka perustuvat Skylake -mikroarkkitehtuuriin . Skylakesta alkaen prosessorissa on uusi laitteistomoduuli nimeltään Memory Encryption Engine (MEE), joka mahdollistaa prosessorista erillisalueen muistialueelle siirretyn tiedon automaattisen salauksen. Tämä mahdollisti RAM-muistin luotettavuuden oletuksen luopumisen ja suojapiirin rajoittamisen yhteen keskusprosessoriin, mikä mahdollisti SGX:n luomisen [1] .
Vuonna 2016 esiteltiin SGX-tekniikan toinen versio, nimeltään SGX2. Se laajensi SGX1-käskysarjaa dynaamisella erillismuistin hallinnalla. SGX1 asetti rajoituksia muistin varaamiseen ja erillismuistin uudelleenkäyttöön - kehittäjä vaadittiin varaamaan kaikki muisti enklaaviinstanssia luodessaan. SGX2 esitteli uusia ohjeita ja ohjelmointimalleja laajentaakseen dynaamisen erillismuistin hallinnan tukea [2] .
Tuettu vain Intel Core 7000-, 8000-, 9000- ja 10000-sukupolven prosessoreissa (SGX-tekniikka on poistettu 11 ja 12 sukupolven Core-prosessoreista) sekä 3. sukupolven Intel Xeon Scalabale -palvelinprosessoreissa. AMD-prosessorit eivät tue SGX:tä. [3]
Ensinnäkin SGX-tekniikka luotiin mahdollistamaan suojattu etälaskenta – ohjelmistojen käyttäminen epäluotettavan osapuolen omistamassa etätietokoneessa, jossa on tiettyjä eheyden ja luottamuksellisuuden takuita. Yleensä suojattu etälaskenta on ratkaisematon ongelma. Täysin homomorfinen salaus ratkaisee ongelman rajoitetulle laskentaperheelle, mutta sen suorituskyky on epäkäytännöllinen [4] .
Intel SGX -laajennukset ratkaisevat suojatun etätietokoneen ongelman käyttämällä etätietokoneen luotettavaa laitteistoa. Laitteen aitous varmistetaan sertifiointiprosessin aikana. Luotettu laitteisto luo "suojatun alueen" ja etälaskentapalvelun käyttäjä voi ladata tarvittavan koodin ja datan tälle "alueelle". Luotettava laitteisto suojaa tietojen luottamuksellisuutta ja eheyttä suoritettaessa sille laskelmia [5] .
Intel SGX:n kehitys noudatti 8 päätavoitetta [6] :
SGX varaa muistialueen, jota kutsutaan prosessorin varatuksi muistiksi (PRM). Prosessori suojaa PRM:ää kaikilta ei-enklaavimuistin käytöiltä, mukaan lukien ytimen, hypervisorin ja System Management Mode (SMM) -pääsy sekä oheislaitteiden DMA -käyttö [5] [7] .
PRM sisältää Enclave Page Cache (EPC) -välimuistin, joka koostuu 4 kilotavun sivuista, jotka tallentavat enclave-koodia ja dataa. Epäluotettava järjestelmäohjelmisto on vastuussa EPC-sivujen osoittamisesta erillisalueille. CPU seuraa kunkin EPC-sivun tilaa Enclave Page Cache Metadata (EPCM) -metadatassa varmistaakseen, että jokainen EPC-sivu kuuluu vain yhteen erillisalueeseen [7] .
Enklaaven lähdekoodi ja tiedot ladataan epäluotettavalla järjestelmäohjelmistolla. Käynnistysvaiheen aikana järjestelmäohjelmisto pyytää CPU:ta kopioimaan tiedot suojaamattomasta muistista (PRM:n ulkopuolelta) EPC-sivuille ja määrittää sivut asennettavalle erillisalueelle. Tästä seuraa, että enklaavin alkutila on järjestelmäohjelmiston tiedossa [5] [7] .
Kun kaikki erillisalueen sivut on ladattu EPC:hen, järjestelmäohjelmisto pyytää CPU:ta merkitsemään erillisalueen alustetuksi, minkä jälkeen sovellusohjelmisto voi suorittaa koodin erillisalueen sisällä. Kun erillisalue on alustettu, edellä kuvattu latausmenetelmä [5] [7] on kielletty .
Kun erillisalue latautuu, salaustiiviste lasketaan sen sisällön perusteella. Kun erillisalue on alustettu, hajautusprosessi on valmis ja tuloksena olevasta hashista tulee erillisalueen mittaustiiviste [8] .
Etäosapuoli voi käydä läpi todistusprosessin varmistaakseen, että se kommunikoi erillisalueen kanssa, jolla on tietty varmennushajautus ja joka toimii suojatussa ympäristössä [9] .
Suoritussäie voi päästä enklaaviin vain erityisten CPU-käskyjen kautta, jotka ovat samanlaisia kuin mekanismi, jolla vaihdetaan käyttäjätilasta ydintilaan. Enclave-suoritus tapahtuu aina suojatussa tilassa, renkaalla 3 ja käyttää käyttöjärjestelmän ytimen ja hypervisorin määrittämää osoitekäännöstä [5] [7] .
Arkaluontoisten tietojen vuotamisen välttämiseksi suoritin ei tarjoa palvelukeskeytyksiä (kuten sivuvirhe ) tai virtuaalikoneen poistumista ( vmexit ), kun enklaavikoodia suoritetaan. Sen sijaan suoritin suorittaa ensin AEX (Asynchronous Enclave Exit) -toiminnon vaihtaakseen enklaavikoodista soittokoodiin ja palvelee sitten keskeytyksen tai virtuaalikoneen poistumisen. CPU suorittaa AEX:n, tallentaa tilansa ennalta määrätylle alueelle erillisalueen sisällä ja siirtää ohjauksen ennalta määrättyyn ohjeeseen erillisalueen ulkopuolella korvaamalla CPU-rekisterit synteettisillä arvoilla [5] [7] .
EPC-sivujen varaaminen erillisalueille on delegoitu käyttöjärjestelmän ytimelle (tai hypervisorille). Käyttöjärjestelmä välittää muistinvarauspäätöksensä SGX-toteutukseen erityisten CPU-käskyjen avulla.Käyttöjärjestelmä voi myös vaihtaa EPC-sivuja epäluotettavaan RAM-muistiin ja ladata ne sitten takaisin erityisten prosessoriohjeiden avulla [5] .
SGX käyttää Memory Encryption Engine (MEE) -salausta varmistaakseen ladattujen EPC-sivujen luottamuksellisuuden, eheyden ja tuoreuden, kun ne on tallennettu epäluotettavaan muistiin [5] . MME toimii muistinhallintayksikön laajennuksena ja salaa automaattisesti kaiken prosessorista muistiin siirretyn tiedon [10] .
Sovellussuunnittelu Intel SGX:llä edellyttää, että sovellus jaetaan kahteen osaan [9] :
Luotettu bean tulisi rajoittaa vain tietoihin, jotka tarvitsevat eniten suojaa, ja toimintoihin, jotka tarvitsevat vuorovaikutusta sen kanssa. Suuri erillisalue, jossa on monimutkainen käyttöliittymä, ei vain kuluta enemmän suojattua muistia, vaan se myös lisää hyökkäyspintaa. Enklaaveilla tulisi myös olla mahdollisimman vähän vuorovaikutusta luotettujen komponenttien välillä. Vaikka erillisalueet voivat kutsua toimintoja epäluotetussa komponentissa (käyttäen erityistä ohjetta), tällaisten kutsujen rajoittaminen vahvistaa erillisaluetta hyökkäyksiltä [9] [8] .
Intel SGX -arkkitehtuurissa todistus on enklaavitodennusprosessi. On olemassa kaksi todistusmekanismia [9] :
Paikallinen todistus on hyödyllinen, kun sovelluksessa on useampi kuin yksi erillisalue, joiden on toimittava yhdessä, tai kun kahden sovelluksen on kommunikoitava erillisalueiden välillä [9] .
Kahden erillisalueen välisessä todistusprosessissa kunkin erillisalueen on ensin varmistettava, että toinen on luotettava. Enklaavi todentaa itsensä toiselle kohdealueelle EREPORT-käskyn avulla. Tämä SGX-käsky luo todistusraportin (REPORT), joka yhdistää salaussanoman salaustietoihin enklaavin tiivisteen ja varmenteiden perusteella. Kryptografinen sidonta suoritetaan käyttämällä erityistä tunnistetta, joka on laskettu käyttämällä symmetristä avainta, joka on vain kohdeenklaavin ja SGX-toteutuksen käytettävissä [5] .
Enklaavit voivat sitten muodostaa suojatun istunnon käyttämällä Diffie-Hellman-protokollaa istuntoavaimen vaihtamiseksi. Tätä istuntoavainta voidaan käyttää kahden erillisalueen välillä jaettavien tietojen salaamiseen [9] .
Koska yksi erillisalue ei pääse käsiksi toisen erillisalueen suojattuun muistitilaan, vaikka ne kuuluisivat samaan sovellukseen, kaikkien osoittimien viittaukset on poistettava ja tiedot on siirrettävä suoraan erillisalueiden välillä [9] .
Sertifiointiprosessi on seuraava. SGX-yhteensopiva prosessori laskee tiivisteen koodista ja tiedoista jokaisessa erillisalueessa. Enklaaven sisällä oleva ohjelmisto aloittaa SGX-todistusallekirjoituksen laskemisen, joka sisältää erillisalueen hashin ja erillissanoman [8] .
SGX-todistuksen allekirjoituksessa käytetty kryptografinen primitiivi on liian monimutkainen laitteistossa toteutettavaksi, joten allekirjoitusprosessi suoritetaan etuoikeutetulla lainausselvityksellä, jonka Intel tarjoaa pääsyn SGX-todistusavaimeen, joka on jokaiselle alustalle ainutlaatuinen laitteiston epäsymmetrinen avain. SGX-todistusavainta ei ollut olemassa, kun prosessori luotiin. Se julkaistaan myöhemmin käyttämällä Intelin tarjoamaa Provisioning Enclavea [5] .
Koska allekirjoitus lasketaan Qoting Enclavessa, ohjelmistotarkistuksen kohteena olevan erillisalueen ja lainausenklaaven välillä tarvitaan suojattu viestintäkanava. Tämä ongelma ratkaistaan käyttämällä paikallista todistusmekanismia [5] .
Jos etäpalvelin toteaa, että erillisalue on luotu oikein ja että se toimii aidolla Intel SGX -yhteensopivalla prosessorilla, se voi nyt luottaa erillisalueeseen ja välittää salaisuudet sille luotettavan kanavan kautta [9] .
Etälaskennassa järjestelmäohjelmisto lataa erillisen sisällön tietokoneelle, joten se ei saa sisältää salaisuuksia selkeästi. Alustamisen jälkeen suoritetaan todistusprosessi, jossa erillisalue todennetaan etäpalvelinta vastaan. Onnistuneen todennuksen jälkeen etäpalvelimen odotetaan paljastavan joitain salaisuuksia erillisalueelle suojatun viestintäkanavan kautta. Intel SGX -suunnittelu pyrkii varmistamaan, että todistusprosessin aikana laskettu hash kuvastaa tarkasti erillisalueelle ladattua sisältöä [8] .
SGX tarjoaa myös varmenteisiin perustuvan tunnistusjärjestelmän. Sitä käytetään salaisuuksien vaihtamiseen erillisalueiden välillä, joilla on saman varmenteen myöntäjän myöntämät sertifikaatit. Vaihtoprosessi sisältää salaisuuksien salaamisen ennen niiden välittämistä epäluotettavalle järjestelmäohjelmistolle, joka sitten siirtää ne toiseen erillisalueeseen [5] [8] .
Samaa mekanismia voidaan käyttää välimuistiin todennusprosessin aikana hankituille salaisuuksille epäluotettaville tallennusvälineille, joita järjestelmäohjelmisto hallitsee. Tämä välimuisti voi vähentää todistusprosessien määrää hajautetussa järjestelmässä [5] .
Grazin teknillisen yliopiston tutkijat kehittivät 27. maaliskuuta 2017 prototyypin, joka pystyy hankkimaan RSA -avaimia samassa järjestelmässä toimivista SGX-enklaaveista [11] [12] ajastetun hyökkäyksen avulla viiden minuutin sisällä . Daniel Gruss et al. esitteli ja julkaisi yhden vastatoimenpiteen tämäntyyppistä hyökkäystä vastaan. USENIX Security Symposiumissa vuonna 2017 [13] . Muiden 28. syyskuuta 2017 julkaistujen vastatoimien joukossa oli DR.SGX-apuohjelma. DR.SGX:n väitetään olevan ylivoimainen suorituskyky, vaikka se on paljon helpompi toteuttaa kuin muut ehdotetut ratkaisut [14] .
Lontoon Imperial Collegen LSDS-ryhmä osoitti, että spekulatiivista Spectre -tietoturvahaavoittuvuutta voitaisiin mukauttaa hyökkäämään erillisaluetta vastaan [15] . Foreshadow - hyökkäys , joka paljastettiin elokuussa 2018, yhdistää spekulatiivisen toteutuksen ja puskurin ylivuodon SGX:n ohittamiseksi [16] .
Grazin teknillisen yliopiston tutkijat julkaisivat 8. helmikuuta 2019 tutkimustuloksia, jotka osoittivat, että joissakin tapauksissa on mahdollista ajaa haitallista koodia erillisalueelta [17] . Asiakirja väittää, että erillisalueen luottamuksellisen ja suojatun luonteen vuoksi virustorjuntaohjelmisto ei pysty havaitsemaan ja poistamaan siinä olevia haittaohjelmia. Koska nykyaikaiset virustorjuntaratkaisut kuitenkin valvovat järjestelmäkutsuja ja sovellusten vuorovaikutusta käyttöjärjestelmän kanssa, haitalliset erillisalueet pitäisi olla mahdollista tunnistaa niiden käyttäytymisen perusteella. Intel julkaisi lausunnon, jossa todettiin, että tämä hyökkäys oli SGX-uhkamallin ulkopuolella, että he eivät voineet taata, että käyttäjän suorittama koodi tulee luotettavista lähteistä, ja kehotti kuluttajia käyttämään vain luotettua koodia [18] .
Grazin yliopiston tutkijat Itävallassa ovat havainneet uuden vaarallisen haavoittuvuuden, joka perustuu CPU-jännitteen mittaamiseen ja jonka avulla AES- ja RSA-avaimet voidaan poimia suojatusta SGX-alueesta. Tämä ominaisuus on ollut kaikissa Intel-prosessoreissa Sandy Bridgestä lähtien, jossa Northbridge -toiminnot on korvattu kokonaan prosessorin suuttimeen integroidulla järjestelmäagentilla. Haavoittuvuus hyödyntää RAPL (Running Average Power Limit) -järjestelmän kykyä hankkia yksityiskohtaisia arvioita ytimen, järjestelmäagentin ja DRAM:n virrankulutuksesta, joka ei vaadi etuoikeutettua pääsyä [19] . Haavoittuvuuden torjumiseksi Intel julkaisi mikrokoodikorjauksen (INTEL-SA-0389 [20] ).