Az Intel Software Guard Extensions (Intel SGX) olyan CPU-utasítások készlete, amelyek lehetővé teszik az alkalmazások számára, hogy enklávékat hozzanak létre a virtuális címtérben, amelyeket más folyamatok, köztük az operációs rendszer kernel védenek a területen kívülről érkező olvasástól és írástól . Az Intel SGX biztosítja a nagy biztonságú számítástechnika integritását és bizalmas kezelését olyan rendszereken, ahol a privilegizált folyamatok (kernel, hypervisor stb.) megbízhatatlannak minősülnek.
Az Intel SGX-et biztonságos távoli számítástechnikára, biztonságos webböngészésre és szerzői jogvédelemre tervezték . A technológia további gyakorlati alkalmazásai közé tartozik a védett algoritmusok és titkosítási kulcsok titkosságának biztosítása.
Az Intel SGX bővítmények 2015-ben érkeztek meg a Skylake mikroarchitektúrán alapuló Intel mikroprocesszorok hatodik generációjával . A Skylake-től kezdve a processzor egy új hardvermodullal rendelkezik, a Memory Encryption Engine (MEE) néven, amely lehetővé teszi a processzorból az enklávé memóriaterületére átvitt adatok automatikus titkosítását. Ez lehetővé tette a RAM megbízhatóságának feltételezését, és a biztonsági perem egy központi processzorra való korlátozását, ami lehetővé tette az SGX létrehozását [1] .
2016-ban bemutatták az SGX technológia második változatát, az SGX2-t. Az SGX1 utasításkészletet dinamikus enklávé memóriakezeléssel bővítette. Az SGX1 korlátozásokat írt elő a memóriafoglalás és az enklávé memória újrafelhasználása tekintetében – a fejlesztőnek az összes memóriát le kellett foglalnia egy enklávépéldány létrehozásakor. Az SGX2 új utasításokat és programozási modelleket vezetett be a dinamikus enklávé memóriakezelés támogatásának bővítése érdekében [2] .
Csak Intel Core 7000, 8000, 9000 és 10000 generációs processzorokon támogatott (az SGX technológiát eltávolították a 11 és 12 generációs Core processzorokon), valamint a 3. generációs Intel Xeon Scalabale szerverprocesszorokon. Az AMD processzorok nem támogatják az SGX-et. [3]
Mindenekelőtt az SGX technológiát azért hozták létre, hogy lehetővé tegye a biztonságos távoli számítástechnikát – a szoftver futtatását egy nem megbízható fél tulajdonában lévő távoli számítógépen, az integritás és a titoktartás bizonyos garanciái mellett. Általánosságban elmondható, hogy a biztonságos távoli számítástechnika megoldatlan probléma. A teljesen homomorf titkosítás megoldja a problémát egy korlátozott számítási család esetében, de nem praktikus teljesítménye [4] .
Az Intel SGX bővítmények a távoli számítógép megbízható hardverének használatával megoldják a biztonságos távoli számítástechnika problémáját. A berendezés eredetiségét a tanúsítási folyamat során állapítják meg. A megbízható hardver „biztonságos területet” hoz létre, és erre a „területre” töltheti fel a távoli számítástechnikai szolgáltatás felhasználója a szükséges kódot és adatokat. Megbízható hardver védi az adatok titkosságát és integritását, miközben számításokat végez rajtuk [5] .
Az Intel SGX fejlesztése 8 fő célt követett [6] :
Az SGX egy processzor fenntartott memória (PRM) nevű memóriaterületet foglal le. A processzor megvédi a PRM-et minden nem enklávé memória-hozzáféréstől, beleértve a kernel-, hypervisor- és System Management Mode (SMM) hozzáférést, valamint a perifériás eszközök DMA -hozzáférését [5] [7] .
A PRM tartalmazza az Enclave Page Cache-t (EPC), amely 4 kilobyte-os oldalakból áll, amelyek enklávé kódot és adatokat tárolnak. A megbízhatatlan rendszerszoftver felelős az EPC-oldalak enklávékhoz való hozzárendeléséért. A CPU nyomon követi az egyes EPC-oldalak állapotát az Enclave Page Cache Metadata (EPCM) metaadataiban, így biztosítva, hogy minden EPC-oldal csak egy enklávéhoz tartozik [7] .
Az enklávéban lévő forráskódot és adatokat nem megbízható rendszerszoftver tölti be. A rendszerindítási fázis során a rendszerszoftver megkéri a CPU-t, hogy másolja át az adatokat a nem védett memóriából (a PRM-en kívül) az EPC oldalakra, és hozzárendeli az oldalakat a telepített enklávéhoz. Ebből következik, hogy az enklávé kezdeti állapotát a rendszerszoftver ismeri [5] [7] .
Miután az enklávé összes oldala be van töltve az EPC-be, a rendszerszoftver megkéri a CPU-t, hogy jelölje meg inicializáltként az enklávéot, majd az alkalmazási szoftver végrehajthatja a kódot az enklávéban. Az enklávé inicializálása után a fent [5] [7] leírt betöltési módszer tilos .
Amíg az enklávé betöltődik, a kriptográfiai hash kiszámítása a tartalma alapján történik. Az enklávé inicializálása után a kivonatolási folyamat befejeződik, és az eredményül kapott hash lesz az enklávé mérési hash-je [8] .
A távoli fél áteshet egy tanúsítási folyamaton, hogy megbizonyosodjon arról, hogy egy bizonyos ellenőrző kivonattal rendelkező enklávéval kommunikál, és biztonságos környezetben fut [9] .
Egy végrehajtási szál csak speciális CPU-utasításokon keresztül léphet be az enklávéba, amelyek hasonlóak a felhasználói módból kernel módba váltás mechanizmusához. Az Enclave végrehajtása mindig védett módban, a 3-as gyűrűn történik , és az OS kernel és a hypervisor által beállított címfordítást használja [5] [7] .
Az érzékeny adatok kiszivárgásának elkerülése érdekében a CPU nem hajtja végre a szolgáltatás megszakításait (például oldalhiba ) vagy a virtuális gép kilépését (vmexit), miközben az enklávé kód fut. Ehelyett a CPU először végrehajt egy Asynchronous Enclave Exit (AEX) műveletet, hogy átváltson az enklávé kódról a ring 3 kódra, majd kiszolgál egy megszakítást vagy a virtuális gép kilépését. A CPU végrehajt egy AEX-et, eltárolja állapotát egy előre meghatározott területen az enklávéban, és átadja a vezérlést egy előre meghatározott utasításnak az enklávén kívül, a CPU regisztereit szintetikus értékekkel helyettesítve [5] [7] .
Az enklávékhoz tartozó EPC-oldalak kiosztása az operációs rendszer kernelére (vagy hypervisorra) van delegálva. Az operációs rendszer speciális gyűrűs 0 CPU utasításokon keresztül közli a memóriafoglalási döntéseit az SGX implementációval.Az operációs rendszer az EPC oldalakat is kicserélheti a megbízhatatlan RAM-ra, majd speciális processzorutasítások segítségével visszatöltheti azokat [5] .
Az SGX a memóriatitkosítási motort (MEE) használja, hogy biztosítsa a feltöltött EPC-oldalak titkosságát, integritását és frissességét, miközben azokat nem megbízható memóriában tárolják [5] . Az MME a memóriakezelő egység kiterjesztéseként működik, és automatikusan titkosítja a processzorból a memóriába átvitt összes adatot [10] .
Az Intel SGX-szel történő alkalmazástervezés megköveteli, hogy az alkalmazást két részre kell osztani [9] :
A megbízható komponenst csak azokra az adatokra kell korlátozni, amelyek a legnagyobb védelmet igénylik, és azokra a műveletekre, amelyeknek interakcióra van szükségük. Egy összetett interfésszel rendelkező nagy enklávé nemcsak több védett memóriát fogyaszt, hanem a támadási felületet is növeli. Az enklávéknak minimális interakciót kell folytatniuk a megbízható összetevők között. Bár az enklávék meghívhatnak függvényeket egy nem megbízható komponensben (egy speciális utasítással), az ilyen hívások korlátozása megerősíti az enklávét a támadásoktól [9] [8] .
Az Intel SGX architektúrában a tanúsítás az enklávé hitelesítés folyamata. Két tanúsítási mechanizmus létezik [9] :
A helyi tanúsítás akkor hasznos, ha egy alkalmazásnak több enklávéja van, amelyeknek együtt kell működniük, vagy ha két alkalmazásnak kommunikálnia kell az enklávék között [9] .
A két enklávé közötti tanúsítási folyamat során először mindegyik enklávénak meg kell győződnie a másik megbízhatóságáról. Egy enklávé az EREPORT utasítás használatával hitelesíti magát egy másik cél enklávéhoz. Ez az SGX utasítás egy tanúsítási jelentést (REPORT) hoz létre, amely kriptográfiailag társítja az enklávé üzenetet az enklávé hash alapján és a tanúsítványokon alapuló identitáshoz. A kriptográfiai kötés egy speciális címkével történik, amelyet szimmetrikus kulcs segítségével számítanak ki, amely csak a cél enklávé és az SGX implementáció számára érhető el [5] .
Az enklávék ezután biztonságos munkamenetet hozhatnak létre a Diffie-Hellman protokoll segítségével a munkamenetkulcs cseréjéhez. Ez a munkamenetkulcs használható két enklávé között megosztandó adatok titkosításához [9] .
Mivel az egyik enklávé nem férhet hozzá egy másik enklávé védett memóriateréhez, még akkor sem, ha ugyanahhoz az alkalmazáshoz tartoznak, minden mutatót meg kell szüntetni, és az adatokat közvetlenül kell átadni az enklávék között [9] .
A tanúsítási folyamat a következő. Egy SGX-kompatibilis processzor kiszámítja a kód és az adatok kivonatát az egyes enklávékban. Az enklávé belsejében található szoftver elindítja az SGX tanúsító aláírás kiszámításának folyamatát, amely tartalmazza az enklávé hash-t és az enklávé üzenetet [8] .
Az SGX tanúsítvány-aláírásban használt kriptográfiai primitív túl bonyolult ahhoz, hogy hardverben megvalósítható legyen, ezért az aláírási folyamatot az Intel által biztosított privilegizált Qoting Enclave végzi, amely hozzáférést biztosít az SGX tanúsítási kulcshoz, amely minden platformon egyedi hardveres aszimmetrikus kulcs. Az SGX tanúsító kulcs nem létezett a processzor létrehozásakor. Később adják ki, az Intel által biztosított Provisioning Enclave [5] segítségével .
Mivel az aláírást a Qoting Enclave számítja ki, biztonságos kommunikációs csatornára van szükség a szoftverellenőrzés alatt álló enklávé és az idéző enklávé között. Ezt a problémát a helyi tanúsítási mechanizmus [5] segítségével oldják meg .
Ha a távoli kiszolgáló megállapítja, hogy az enklávé megfelelően lett létrehozva, és eredeti Intel SGX-képes processzoron fut, most megbízhat az enklávéban, és átadhatja neki a titkokat egy megbízható csatornán [9] .
Távoli számítástechnikában az enklávé tartalmát a rendszerszoftver letölti a számítógépre, ezért nem tartalmazhat titkokat. Az inicializálás után van egy tanúsítási folyamat, amelynek során az enklávé hitelesítése egy távoli szerverrel szemben történik. A sikeres hitelesítés után a távoli kiszolgálónak bizonyos titkokat kell felfednie az enklávé számára egy biztonságos kommunikációs csatornán keresztül. Az Intel SGX kialakítása megpróbálja biztosítani, hogy a tanúsítási folyamat során kiszámított hash pontosan tükrözze az enklávéba feltöltött tartalmat [8] .
Az SGX tanúsítvány alapú azonosítási rendszert is kínál. Titkok cseréjére szolgál azon enklávék között, amelyeknek ugyanaz a tanúsító hatósága által kiadott tanúsítványa van. A cserefolyamat magában foglalja a titkok titkosítását, mielőtt átadnák azokat egy nem megbízható rendszerszoftvernek, amely aztán egy másik enklávéba továbbítja [5] [8] .
Ugyanez a mechanizmus használható a tanúsítási folyamat során megszerzett titkok gyorsítótárazására a rendszerszoftver által kezelt nem megbízható adathordozókon. Ez a gyorsítótárazás csökkentheti a tanúsítási folyamatok számát egy elosztott rendszerben [5] .
2017. március 27-én a Grazi Műszaki Egyetem kutatói kifejlesztettek egy prototípust, amely képes RSA -kulcsokat megszerezni az ugyanazon a rendszeren futó SGX-enklávékból [11] [12] egy időzített támadás segítségével öt percen belül . Az ilyen típusú támadások elleni egyik ellenintézkedést Daniel Gruss és munkatársai ismertették és publikálták. a USENIX Security Symposiumon 2017-ben [13] . A 2017. szeptember 28-án közzétett egyéb ellenintézkedések között szerepelt a DR.SGX segédprogram is. A DR.SGX állítólag kiváló teljesítményt nyújt, miközben sokkal könnyebben megvalósítható, mint a többi javasolt megoldás [14] .
Az Imperial College London LSDS csoportja bebizonyította, hogy a Spectre spekulatív biztonsági rése adaptálható az enklávé megtámadására [15] . A 2018 augusztusában feltárt Foreshadow támadás a spekulatív végrehajtást és a puffer túlcsordulást kombinálja az SGX megkerülésére [16] .
2019. február 8-án a Grazi Műszaki Egyetem kutatói olyan kutatási eredményeket tettek közzé, amelyek azt mutatták, hogy bizonyos esetekben magából az enklávéból is lehet rosszindulatú kódot futtatni [17] . A dokumentum azt állítja, hogy az enklávé bizalmas és védett jellege miatt a víruskereső szoftverek nem képesek észlelni és eltávolítani a benne található rosszindulatú programokat. Mivel azonban a modern víruskereső megoldások figyelik a rendszerhívásokat és az alkalmazások operációs rendszerrel való interakcióit, lehetővé kell tenni a rosszindulatú enklávék viselkedésük alapján történő azonosítását. Az Intel közleményt adott ki, amelyben kijelentette, hogy ez a támadás az SGX fenyegetési modellen kívül történt, és nem tudják garantálni, hogy a felhasználó által végrehajtott kód megbízható forrásból származik, és arra buzdította a fogyasztókat, hogy csak megbízható kódot használjanak [18] .
Az ausztriai Grazi Egyetem kutatói a CPU-feszültség mérésén alapuló új veszélyes sérülékenységet fedeztek fel, amely lehetővé teszi AES és RSA kulcsok kinyerését egy biztonságos SGX enklávéból. Ez a funkció minden Intel processzorban megtalálható a Sandy Bridge óta , amelyben az északi híd funkcióit teljesen felváltotta a processzorlapba integrált rendszerügynök. A sérülékenység a RAPL (Running Average Power Limit) rendszer azon képességét használja ki, amely nem igényel privilegizált hozzáférést, hogy részletes becsléseket kapjon a mag, a rendszerügynök és a DRAM energiafogyasztásáról [19] . A sérülékenység leküzdésére az Intel mikrokódos javítást adott ki (INTEL-SA-0389 [20] ).