Intel Software Guard Extensions (Intel SGX) je sada instrukcí CPU , která umožňuje aplikaci vytvářet enklávy – oblasti ve virtuálním adresovém prostoru, které jsou chráněny před čtením a zápisem z vnějšku této oblasti jinými procesy, včetně jádra operačního systému . Intel SGX poskytuje integritu a důvěrnost vysoce zabezpečených výpočtů prováděných na systémech, kde jsou privilegované procesy (kernel, hypervisor atd.) považovány za nedůvěryhodné.
Intel SGX je navržen pro zabezpečený vzdálený počítač, bezpečné procházení webu a ochranu autorských práv . Mezi další praktické aplikace této technologie patří zajištění důvěrnosti proprietárních algoritmů a šifrovacích klíčů.
Rozšíření Intel SGX přišla v roce 2015 s šestou generací mikroprocesorů Intel založených na mikroarchitektuře Skylake . Počínaje Skylake má procesor nový hardwarový modul nazvaný Memory Encryption Engine (MEE), který umožňuje automatické šifrování dat přenášených z procesoru do paměťové oblasti enklávy. To umožnilo opustit předpoklad spolehlivosti RAM a omezit bezpečnostní perimetr na jeden centrální procesor, což umožnilo vytvoření SGX [1] .
V roce 2016 byla představena druhá verze technologie SGX s názvem SGX2. Rozšířil instrukční sadu SGX1 o dynamickou správu paměti enklávy. SGX1 zavedl omezení týkající se alokace paměti a opětovného použití paměti enklávy – vývojář musel při vytváření instance enklávy alokovat veškerou paměť. SGX2 představil nové instrukce a programovací modely pro rozšíření podpory pro dynamickou správu paměti enklávy [2] .
Podporováno pouze na procesorech Intel Core 7000, 8000, 9000 a 10000 generace (technologie SGX byla odstraněna z 11. a 12. generace Core procesorů), stejně jako na serverových procesorech Intel Xeon Scalabale 3. generace . Procesory AMD nepodporují SGX. [3]
Za prvé, technologie SGX byla vytvořena, aby umožnila bezpečný vzdálený výpočet - spouštění softwaru na vzdáleném počítači vlastněném nedůvěryhodnou stranou, s určitými zárukami integrity a důvěrnosti. Obecně platí, že bezpečný vzdálený počítač je nevyřešeným problémem. Plně homomorfní šifrování řeší problém pro omezenou rodinu výpočtů, ale má nepraktickou výkonnostní režii [4] .
Rozšíření Intel SGX řeší problém bezpečného vzdáleného počítače pomocí spolehlivého hardwaru na vzdáleném počítači. Autenticita zařízení je stanovena během certifikačního procesu. Důvěryhodný hardware vytváří „zabezpečenou oblast“ a uživatel vzdálené výpočetní služby může do této „oblasti“ nahrát potřebný kód a data. Spolehlivý hardware chrání důvěrnost a integritu dat při provádění výpočtů na nich [5] .
Vývoj Intel SGX sledoval 8 hlavních cílů [6] :
SGX alokuje oblast paměti nazvanou Processor Reserved Memory (PRM). Procesor chrání PRM před všemi neenklávovými přístupy do paměti, včetně přístupu k jádru, hypervizoru a režimu správy systému (SMM) a také před přístupem DMA z periferií [5] [7] .
PRM obsahuje Enclave Page Cache (EPC), která se skládá ze 4kilobajtových stránek, které ukládají kód a data enklávy. Za přiřazení stránek EPC k enklávám je zodpovědný nespolehlivý systémový software. CPU sleduje stav každé stránky EPC v metadatech Enclave Page Cache Metadata (EPCM), aby bylo zajištěno, že každá stránka EPC patří pouze do jedné enklávy [7] .
Zdrojový kód a data v enklávě jsou načteny nedůvěryhodným systémovým softwarem. Během spouštěcí fáze systémový software požádá CPU, aby zkopírovala data z nechráněné paměti (mimo PRM) na stránky EPC a přiřadí stránky instalované enklávě. Z toho plyne, že počáteční stav enklávy zná systémový software [5] [7] .
Po načtení všech stránek enklávy do EPC systémový software požádá CPU, aby označilo enklávu jako inicializovanou, načež aplikační software může spustit kód uvnitř enklávy. Po inicializaci enklávy je výše popsaná metoda zatížení [5] [7] zakázána .
Zatímco se enkláva načítá, je na základě jejího obsahu vypočítán kryptografický hash. Po inicializaci enklávy je proces hašování dokončen a výsledný hash se stává hashem měření enklávy [8] .
Vzdálená strana může projít atestačním procesem, aby bylo zajištěno, že komunikuje s enklávou, která má určitý ověřovací hash a běží v zabezpečeném prostředí [9] .
Prováděcí vlákno může vstoupit do enklávy pouze prostřednictvím speciálních instrukcí CPU, které jsou podobné mechanismu přepínání z uživatelského režimu do režimu jádra. Provádění enklávy vždy probíhá v chráněném režimu, na kruhu 3 , a používá překlad adres nastavený jádrem OS a hypervizorem [5] [7] .
Aby se zabránilo úniku citlivých dat, CPU během provádění kódu enklávy neobsluhuje přerušení (jako je chyba stránky ) ani ukončení virtuálního stroje (vmexit). Místo toho CPU nejprve provede asynchronní ukončení enklávy (AEX) pro přepnutí z kódu enklávy na kód ring 3 a poté obsluhuje přerušení nebo ukončení virtuálního stroje. CPU provede AEX, uloží svůj stav do předem definované oblasti uvnitř enklávy a přenese řízení na předdefinovanou instrukci mimo enklávu, přičemž nahradí registry CPU syntetickými hodnotami [5] [7] .
Přidělování EPC stránek pro enklávy je delegováno na jádro operačního systému (nebo hypervizor). Operační systém sděluje svá rozhodnutí o alokaci paměti implementaci SGX prostřednictvím speciálních instrukcí CPU ring 0. Operační systém může také zaměnit EPC stránky na nespolehlivou RAM a poté je načíst zpět pomocí speciálních instrukcí procesoru [5] .
SGX používá Memory Encryption Engine (MEE) k zajištění důvěrnosti, integrity a čerstvosti nahraných stránek EPC, když jsou uloženy v nedůvěryhodné paměti [5] . MME funguje jako rozšíření jednotky pro správu paměti a automaticky šifruje všechna data přenášená z procesoru do paměti [10] .
Návrh aplikace s Intel SGX vyžaduje, aby byla aplikace rozdělena do dvou komponent [9] :
Důvěryhodný bean by měl být omezen pouze na data, která potřebují největší ochranu, a operace, které s nimi potřebují interakci. Velká enkláva se složitým rozhraním nejen že spotřebovává více chráněné paměti, ale také zvyšuje útočnou plochu. Enklávy by také měly mít minimální interakci mezi důvěryhodnými složkami. Přestože enklávy mohou volat funkce v nedůvěryhodné komponentě (pomocí speciální instrukce), omezení takových volání posílí enklávu před útoky [9] [8] .
V architektuře Intel SGX je atestace procesem enklávové autentizace. Existují dva atestační mechanismy [9] :
Místní atestace je užitečná, když má aplikace více než jednu enklávu, které musí spolupracovat, nebo když mezi enklávami musí komunikovat dvě aplikace [9] .
V atestačním procesu mezi dvěma enklávami se musí každá enkláva nejprve ujistit, že ta druhá je důvěryhodná. Enkláva se autentizuje k jiné cílové enklávě pomocí příkazu EREPORT. Tato instrukce SGX vytváří atestační zprávu (REPORT), která kryptograficky spojuje zprávu enklávy s identitou založenou na hash enklávy a na základě certifikátů. Kryptografická vazba se provádí pomocí speciálního tagu počítaného pomocí symetrického klíče, který je dostupný pouze pro cílovou enklávu a implementaci SGX [5] .
Enklávy pak mohou vytvořit zabezpečenou relaci pomocí protokolu Diffie-Hellman k výměně klíče relace. Tento klíč relace lze použít k šifrování dat, která mají být sdílena mezi dvěma enklávami [9] .
Protože jedna enkláva nemůže přistupovat do chráněného paměťového prostoru jiné enklávy, i když patří do stejné aplikace, musí být všechny ukazatele dereferencovány a data musí být předávána přímo mezi enklávami [9] .
Proces certifikace je následující. Procesor s podporou SGX počítá hash kódu a dat v každé enklávě. Software uvnitř enklávy zahájí proces výpočtu atestačního podpisu SGX, který obsahuje hash enklávy a zprávu o enklávě [8] .
Kryptografické primitivum používané při podepisování atestací SGX je příliš složité na to, aby se dalo implementovat do hardwaru, takže proces podepisování provádí privilegovaná Quoting Enclave poskytovaná společností Intel s přístupem k atestačnímu klíči SGX, hardwarovému asymetrickému klíči jedinečnému pro každou platformu. Atestační klíč SGX v době vytvoření procesoru neexistuje. Vydává se později pomocí Provisioning Enclave poskytované společností Intel [5] .
Vzhledem k tomu, že podpis je vypočítáván v kotující enklávě, je potřeba bezpečný komunikační kanál mezi enklávou procházející validací softwaru a kotující enklávou. Tento problém je řešen pomocí lokálního atestačního mechanismu [5] .
Pokud vzdálený server zjistí, že enkláva byla správně vytvořena a běží na skutečném procesoru Intel SGX, může nyní enklávě důvěřovat a předat jí tajemství prostřednictvím důvěryhodného kanálu [9] .
Při vzdáleném počítání je obsah enklávy stažen systémovým softwarem do počítače, a proto by neměl obsahovat tajemství. Po inicializaci následuje atestační proces, kdy je enkláva autentizována vůči vzdálenému serveru. Po úspěšné autentizaci se očekává, že vzdálený server odhalí enklávě některá tajemství prostřednictvím zabezpečeného komunikačního kanálu. Návrh Intel SGX se snaží zajistit, aby hash vypočítaný během procesu atestace přesně odrážel obsah nahraný do enklávy [8] .
SGX také nabízí identifikační systém založený na certifikátu. Používá se k výměně tajemství mezi enklávami, které mají certifikáty vydané stejnou certifikační autoritou. Proces výměny zahrnuje šifrování tajemství před jejich předáním nedůvěryhodnému systémovému softwaru, který je poté přenese do jiné enklávy [5] [8] .
Stejný mechanismus lze použít k ukládání tajných informací získaných během procesu ověřování do mezipaměti na nedůvěryhodná paměťová média spravovaná systémovým softwarem. Toto ukládání do mezipaměti může snížit počet atestačních procesů v distribuovaném systému [5] .
27. března 2017 vyvinuli vědci z Technické univerzity v Grazu prototyp schopný získat klíče RSA z enkláv SGX běžících na stejném systému [11] [12] pomocí časovaného útoku během pěti minut . Jedno protiopatření proti tomuto typu útoku představili a publikovali Daniel Gruss et al. na USENIX Security Symposium v roce 2017 [13] . Mezi další protiopatření zveřejněná 28. září 2017 patřila utilita DR.SGX. DR.SGX je prohlašoval, že má vynikající výkon zatímco je hodně snadnější implementovat než jiná navrhovaná řešení [14] .
Skupina LSDS na Imperial College London demonstrovala, že spekulativní bezpečnostní zranitelnost Spectre by mohla být přizpůsobena k útoku na enklávu [15] . Útok Foreshadow , odhalený v srpnu 2018, kombinuje spekulativní provádění a přetečení bufferu, aby obešel SGX [16] .
8. února 2019 zveřejnili vědci z Technické univerzity ve Štýrském Hradci výsledky výzkumu, které ukázaly, že v některých případech je možné spustit škodlivý kód ze samotné enklávy [17] . Dokument tvrdí, že kvůli důvěrné a chráněné povaze enklávy nemůže antivirový software detekovat a odstranit malware, který se v ní nachází. Jelikož však moderní antivirová řešení monitorují systémová volání a interakce aplikací s operačním systémem, mělo by být možné identifikovat škodlivé enklávy podle jejich chování. Společnost Intel vydala prohlášení, že tento útok byl mimo model hrozby SGX, že nemůže zaručit, že uživatelsky spouštěný kód pochází z důvěryhodných zdrojů, a vyzval spotřebitele, aby používali pouze důvěryhodný kód [18] .
Vědci z univerzity v rakouském Grazu objevili novou nebezpečnou zranitelnost založenou na měření napětí CPU, která umožňuje extrahovat klíče AES a RSA ze zabezpečené enklávy SGX. Tato funkce je přítomna ve všech procesorech Intel od dob Sandy Bridge , u nichž byly funkce northbridge zcela nahrazeny systémovým agentem integrovaným do matrice procesoru. Tato chyba zabezpečení využívá schopnost systému RAPL (Running Average Power Limit), který nevyžaduje privilegovaný přístup, získat podrobné odhady spotřeby energie jádra, systémového agenta a DRAM [19] . V boji proti této zranitelnosti společnost Intel vydala opravu mikrokódu (INTEL-SA-0389 [20] ).