RAM-versleuteling bij AMD en Intel
RAM-versleuteling bij AMD en Intel
De Epyc-processors van AMD voor servers kunnen het RAM versleutelen om veiligheidsrisico's te beperken. Intel komt met een soortgelijke technologie en biedt in ieder geval al versleuteling van bepaalde RAMgebieden met de Software Guard Extensions (SGX).
De meest recente serverprocessors van AMD en Intel hebben nieuwe functies om data te beschermen tegen aanvallen. Ze versleutelen het hele of een deel van het werkgeheugen. Zelfs administrators met fysieke toegang tot de server kunnen geen gevoelige data uitlezen van virtuele machines die erop draaien. De nieuwe cpu-functies SME, SEV, SGX, TME en MKTME helpen bovendien om de gevolgen van softwarematige aanvallen te beperken. Zelfs als een systeem is besmet door malware, moeten vertrouwde bewerkingen uitgevoerd kunnen worden in versleutelde gebieden. Daarmee gaat RAM-versleuteling verder dan de al bekende veiligheidsmaatregelen, zoals gescheiden geheugenadresdelen. De beperkingen daarvan werden pijnlijk duidelijk bij de side-channel-attacks Meltdown en Spectre.
Fysieke aanvallen
Fysieke aanvallen vereisen dat een aanvaller fysiek aanwezig is bij de computer om die lokaal aan te vallen. Een eenvoudig voorbeeld is het uitlezen van een niet-versleutelde harde schijf. In kritieke omgevingen zijn harde schijven dan ook altijd versleuteld. Een aanvaller heeft behalve een kopie van de schijf dan ook nog de sleutel nodig. En die is alleen te achterhalen als het betreffende systeem draait en de sleutel als platte tekst in het geheugen aanwezig is.
Tien jaar geleden liet de cold-bootattack al zien hoe dergelijke sleutels bemachtigd kunnen worden. Als het werkgeheugen (RAM) geen stroomtoevoer meer heeft, verdwijnt de inhoud ervan niet meteen. De geheugencellen keren pas na enkele seconden tot minuten terug naar hun uitgangstoestand. Dat effect kan nog dui-
delijk verlengd worden door de geheugenmodules te koelen met een koudespray. Als een aanvaller dus toegang krijgt tot een draaiend systeem, kan hij mogelijk de inhoud van het werkgeheugen in handen krijgen. Daarvoor zou hij bijvoorbeeld het systeem kunnen herstarten met een speciaal mini-besturingssysteem waarmee de inhoud van het RAM wordt gekopieerd naar een (ander) usb-medium.
Er zijn nog meer manieren om de inhoud van DRAM-chips uit te lezen, bijvoorbeeld via gehackte PCI-Expresskaarten en Thunderbolt-randapparatuur met DMA (Direct Memory Access). Nog een risico zijn niet-vluchtige geheugenmodules, bijvoorbeeld NVDIMM's met Flash-'parachute' tegen stroomuitval of de nieuwe 3D-XPoint-geheugenmodules van Intel. Dergelijk 'niet-vluchtig' geheugen kan in een tweede systeem worden uitgelezen, zelfs als het oorspronkelijke systeem is afgesloten. Bij al deze voorbeelden kan RAM-versleuteling de gegevensbescherming verbeteren.
Aanvallen van binnenuit
De nieuwe hardware-uitbreidingen, met name Intel SGX, moeten ook beschermen tegen potentieel gevaarlijke processen met verhoogde privileges (toegangsrechten) en zelfs tegen een gecompromitteerd besturingssysteem. Twee toepassingen liggen daarbij voor de hand. SGX zou bijvoorbeeld gebruikt kunnen worden bij Digital Rights Management (DRM) om bepaalde data of software voor de gebruiker te verbergen. De tweede toepassing betreft gehuurde clouddiensten, bijvoorbeeld virtuele machines die in een datacenter worden gehuurd, waarbij gevoelige data of geheime programmacode wordt verwerkt.
Voor DRM wordt SGX al ingezet, bijvoorbeeld door Netflix bij het streamen van Ultra-HD-films en door Cyberlink in de software PowerDVD Ultra. Die software speelt ook beveiligde inhoud van Ultra HD blu-rays af. De geheime sleutel voor het filmmateriaal wordt daarbij alleen gebruikt in een versleuteld SGX-geheugengebied. Het besturingssysteem en de actieve programma's kunnen dat niet uitlezen. De gedecodeerde videostream wordt daarna met andere middelen zoals Protected Audio-Video Path (PAVP) en High Definition Content Protection (HDCP) naar het scherm gestuurd. Daardoor kan hij niet worden onderschept, omgeleid of op de harde schijf worden opgeslagen.
Bij cloud-databeveiliging met AMD SEV en Intel SGX ligt de zaak iets anders. Het gaat er daar bij om dat het vertrouwen wordt ingeperkt. Want bij typische clouddiensten als Amazon AWS, Google Cloud en Microsoft Azure hebben de betreffende administrators in principe de mogelijkheid om alle data uit het servergeheugen te lezen. Maar als dit werkgeheugen met de hardwarefuncties van de processor versleuteld is, kan de cloudaanbieder dan oprecht zeggen dat de gebruikersgegevens en programmacode niet gemanipuleerd of uitgelezen kunnen worden. Een klant van de cloudaanbieder hoeft dan niet meer alleen te vertrouwen op diens woord – maar wel op de werking van AMD's en Intels versleuteling.
Oudere maatregelen
Er waren nog geen hardware-extensies voor standaardprocessors om bescherming te bieden tegen fysieke aanvallen of aanvallers met verhoogde privileges. Processors van AMD en Intel beschikken met AES-NI al langer een instructieset om encryptie te implementeren, maar die is vooral bestemd voor het versnellen van AES-algoritmes. Daar bovenop komt de
Trusted Platform Module, een soort vastgesoldeerde smartcard die als vertrouwensanker dient. TPM biedt in wezen drie basisbewerkingen: binding, sealing en remote attestation. Binding maakt het mogelijk om data en code zo te versleutelen dat ze alleen op hetzelfde apparaat ontsleuteld kunnen worden. Sealing werkt vergelijkbaar met binding, maar betrekt daarbij ook de platformconfiguratie, zoals de BIOSinstellingen, het actieve besturingssysteem en geopende programma's. Alleen als alles hetzelfde is als op het moment van sealen, kunnen de data weer ontgrendeld worden. Bij remote attestation kan een derde partij, bijvoorbeeld een softwareproducent, de huidige platformconfiguratie controleren. Code of data worden alleen vrijgegeven als het systeem zich in een goedgekeurde status bevindt. Remote attestation kan bijvoorbeeld gebruikt worden om notebooks alleen toegang te geven tot een bedrijfsVPN als daarop bepaalde (antivirus)software is geïnstalleerd.
Een bekende toepassing van TPM's is ook het beveiligen van het bootproces tegen manipulatie (Measured Launch). Daarbij bewaart de TPM hashwaarden voor de firmware en bootloader in een beveiligd geheugengebied, de Platform Configuration Registers. Bovendien kan de Windows-schijfversleuteling BitLocker een TPM gebruiken om de sleutel te sealen. De gegevens op de harde schijf of ssd kunnen dan niet meer worden ontsleuteld als je de schijf op een ander systeem aansluit.
Een groot nadeel van TPM is echter dat alle bewerkingen vertrouwen op een enkel, onveranderlijk vertrouwensanker. Bovendien moet bij TPM naar de complete configuratie van een systeem worden gekeken om de vertrouwenswaardigheid te bepalen. Behalve de al genoemde Measured Launch gaat het dan ook om hashes voor alle componenten van het besturingssysteem, voor alle drivers en elk geladen programma. TPM is daardoor niet geschikt voor DRM of het scenario met cloudaanbieders omdat of de klant of de fabrikant de complete softwarestack moet beheren. TPM kan ook niet beschermen tegen fysieke aanvallen op het werkgeheugen omdat de actieve programma's en gebruikte gegevens niet-versleuteld in het werkgeheugen aanwezig zijn.
Intel heeft met Trusted Execution Technology (TXT) extra functies aan processors toegevoegd waarmee TPM ook kleine stukken code kan beschermen. Maar TXT wordt zelden toegepast, onder andere omdat voor het overschakelen naar vertrouwde TXT-software in principe een cpu-reset nodig is, wat nadelig is voor de performance.
Cpu-ontwikkelaar ARM heeft een andere aanpak gekozen voor het beveiligen van data op mobiele apparaten zoals smartphones. ARM TrustZone deelt het systeem op in twee zones, de 'Secure World' en de 'Non-Secure World'. Die zijn strikt van elkaar gescheiden, zelfs software met verhoogde privileges in de Non-Secure World of het besturingssysteem hebben geen toegang tot code en data in de Secure World. De verbinding tussen beide werelden verloopt via een zogeheten Monitor Call. Die is net als een systeemaanroep in het besturingssysteem geïntegreerd. De scheiding bij ARM TrustZone is meer dan alleen softwarematig. Een 'secure bit' op de interne bus van de chipset zorgt ervoor dat bepaalde componenten en aanvullende chips alleen vanuit de Secure World bereikbaar zijn. Zo kan een vingerafdruklezer worden gebruikt om het hele aanmeldproces af te handelen in de beveiligde zone.
TrustZone zit in alle vanaf 2014 geïntroduceerde AMD-processors in de vorm
van een ingebedde ARM Cortex A5-core met TrustZone. Daarop draait een minisysteem dat bijvoorbeeld TPM-functies biedt (firmware-TPM 2.0, fTPM 2.0). AMD noemt dat de Platform Security Processor (PSP) oftewel Secure Processor. Samsung gebruikt TrustZone bijvoorbeeld bij zijn Android-smartphones voor de beveiligingsfunctie Samsung Knox.
Afgezien van dat soort toepassingen, waarbij TrustZone wordt ingezet voor propriëtaire software, wordt TrustZone zelden gebruikt. Ten eerste is er geen eenvoudige SDK voor, ten tweede is de werking van TrustZone afhankelijk van de concrete implementatie in de betreffende ARM-SoC. Er is bovendien ook geen mogelijkheid om meerdere Secure Worlds gelijktijdig te gebruiken. Daar is een speciaal besturingssysteem voor vereist dat de verschillende veilige toepassingen beheert. Dat vergroot echter ook de complexiteit van de code en de aanvalsmogelijkheden. Tot slot kan TrustZone niet het hoofdgeheugen versleutelen en daardoor dus niet beschermen tegen fysieke aanvallen.
Intel SGX
Intel-processors vanaf de generatie Skylake (Core-i 6000, Xeon Scalable Processor) beschikken over de functie Software Guard Extensions (SGX). Die moet je bij veel systemen via het BIOS inschakelen. Met SGX is het mogelijk om vertrouwensankers dynamisch in te richten. Bovendien is er niet één enkele veilige wereld, zoals bij TPM en TrustZone, maar meerdere zogeheten enclaves. Die zijn in te richten in de normale adresruimte van een proces en worden desondanks door hardwaremechanismen beschermd tegen software met verhoogde privileges. Code in een SGX-enclave wordt bovendien met hoge performance uitgevoerd.
De processor genereert de geheime sleutel voor de encryptie bij elke systeemstart opnieuw. Die verlaat de cpu niet en is dus ook niet uit te lezen. Elke cpu met SGX heeft twee 'ingebrande' (fused) individuele en willekeurige 128-bit sleutels. Via de Root Provisioning Key, die Intel in een database bewaart, kan worden gecontroleerd dat de processor daadwerkelijk bestaat. En van de Root Seal Key, die Intel niet bewaart, kan een SGX-enclave sealing-sleutels afleiden om versleutelde data buiten de enclave te beveiligen. Een SGX-applicatie bestaat doorgaans uit een onbeveiligd deel en een in de enclave draaiend, beveiligd deel. Voordat een programma een enclave kan gebruiken, moet het die eerst maken. Alle daarvoor benodigde bewerkingen vereisen privileges en kunnen dus alleen in de kernelmodus (Ring 0) worden gebruikt. Daarom is behalve een voor SGX geschikte cpu ook een speciale driver nodig, die vanaf Windows 10 en als Linux-kernelmodule beschikbaar is.
Om een enclave te gebruiken, wordt de lay-out van de enclave eerst opgezet met niet vertrouwenswaardige code. Vervolgens communiceert de applicatie met de driver om de enclave uit te 'meten'. Daarbij worden de geheugenlay-out en de inhoud ervan gehast en de geheugenbescherming geactiveerd.
Daarna kunnen het programma en de software niet met hogere privileges in de enclave kijken – oftewel gegevens uitlezen. Voor communicatie met de code in de enclave moet de applicatie een speciale interface gebruiken. Steeds als wordt gewisseld tussen normale code en code in
de enclave, vindt een soort context-switch plaats. Net als bij een systeemaanroep beveiligt de processor daarbij register- en stackinhoud, zodat geen beschermde gegevens uit de enclave naar de applicatie doorglippen. Een typische enclave biedt een aantal functies en kan vanuit de applicatie met parameters worden aangeroepen om een waarde terug te leveren.
Theoretisch kunnen willekeurige functies worden geïmplementeerd in een SGXenclave. Maar er zijn praktische grenzen aan het programmeren voor enclaves. Zo zijn systeemaanroepen vanuit een enclave verboden, die moeten worden uitgevoerd door het onbeveiligde deel van een applicatie.
De grootte van een enclave is ook beperkt, bij de huidige processors is dat maximaal 128 MB. In het BIOS kan dat vaak nog verder beperkt worden. Door die beperkingen kan bestaande code vaak moeilijk geporteerd worden naar enclaves, maar moet de betreffende functie speciaal voor SGX geschreven worden.
Als een enclave eenmaal gestart is, is hij beschermd tegen toegang van buitenaf – ook door de virusscanner. Om te verhinderen dat schadelijke software zich via SGX in het systeem nestelt, moet een derde vertrouwenswaardige partij de layout van de enclave eerst controleren. Dat kan door externe controle (Remote Attestation) van cryptografische meetwaarden die de hardware bij het initialiseren bepaalt. Daar is een Attestation-server van Intel voor nodig.
Wie SGX-code ontwikkelt, moet die signeren met een door Intel gecertificeerde ontwikkelaarssleutel, zodat de processor de code uitvoert. Alleen bij het debuggen is dat niet vereist. Intel stelt daarbij hoge eisen aan bedrijven, die onder andere aantoonbare maatregelen moeten treffen om hun geheime sleutel te beschermen, bijvoorbeeld met een Hardware Security Module (HSM). Daardoor is het aantal mogelijke ontwikkelaars voor SGX beperkt. Bovendien beslist Intel mee welke software überhaupt mag draaien. Er zijn daarnaast Spectre-aanvallen op SGX-enclaves bekend geworden. Doordat het besturingssysteem nog altijd centrale elementen zoals de lay-out van pagetables of scheduling regelt, is indirect veel af te leiden over het gedrag van enclaves en zijn daar weer aanvalsmogelijkheden.
AMD SME en SEV
AMD bewandelt, wellicht ingegeven door de praktische problemen bij Intels SGX, een andere weg bij het afschermen van het RAM en richt zich op beperktere toepassingsscenario's. Secure Memory Encryption (SME) is beschikbaar op businesspc's en -notebooks met AMD Ryzen Pro en beschermt tegen fysieke aanvallen als de cold-boot-attack. Secure Encrypted Virtualization (SEV) bij serverprocessor AMD Epyc richt zich op cloudproviders, die kunnen voorkomen dat gevoelige klantgegevens uit het RAM gelezen kunnen worden.
SME versleutelt het hele werkgeheugen met een enkele sleutel transparant voor de hardware (AES-128). Dat heeft als voordeel dat zowel het besturingssysteem als een eventuele hypervisor niet aangepast hoeven te worden. Er zijn echter wel maatregelen nodig voor apparaten met DMA-ondersteuning. Dat kan een driver zijn die de toegang tot versleutelde I/Oadressen markeert via het crypto- of c-bit (bit 47) in de betreffende pagetable entry (PTE). Of het wordt geregeld door de I/O Memory Management Unit (IOMMU), bijvoorbeeld voor 32-bit apparaten.
Bij SME ontsleutelt de processor het RAM voor actieve toepassingen transparant, dus ook bij softwarematige aanvallen. Daarmee beschermt SME niet tegen malware op het systeem of toegang door het besturingssysteem. SEV werkt daarentegen met meerdere sleutels, elk voor een bepaald geheugengebied. Met SEV kunnen dus prima meerdere parallel draaiende virtuele machines van elkaar gescheiden worden. Zelfs als malware uit een virtuele machine breekt en het RAM van een andere virtuele machine leest, ziet het alleen versleutelde data.
SEV kan willekeurig grote geheugengebieden indelen. De hypervisor kent daarvoor aan elke virtuele machine een sleutel toe (ASID), waarmee de cpu alle RAM-pagina's versleutelt die bij de virtuele
machine horen. Die sleutel wordt door de al genoemde AMD Secure Processor (PSP) op basis van ARM TrustZone beheerd.
Hoewel de hypervisor veel functies voor de virtuele machine regelt, onder meer apparaatemulatie en scheduling, hoef je die niet volledig te vertrouwen. Als een gemanipuleerde hypervisor een verkeerde sleutel opgeeft, terwijl de virtuele machine met een andere sleutel is gestart, worden bij het ontsleutelen verkeerde data gelezen. De gegevens in de virtuele machine blijven dan beschermd. Om tegenover derden te kunnen garanderen dat de virtuele machine bij de eerste start niet gemanipuleerd is, gebruikt ook AMD een controlemechanisme. Hiervoor moet je dan AMD vertrouwen, net zoals Intel bij SGX.
Intel TME en MKTME
Als antwoord op SME en SEV en misschien ook door de beperkingen van SGX, heeft Intel twee functies op de planning staan. Die zullen echter pas verschijnen in nog onbekende toekomstige processors. Intel Total Memory Encryption (TME) en MultiKey Total Memory Encryption (MKTME) lijken in principe op AMD SME en SEV.
TME gebruikt een normaliter bij het starten van het systeem gegenereerde 128-bit sleutel om het hele geheugen te versleutelen, en wel met AES-XTS. Analoog aan SME helpt TME dus alleen tegen fysieke aanvallen, niet tegen softwarematige. Speciaal voor NVRAM heeft Intel dan ook ondersteuning voor niet-vluchtige sleutels op het programma staan. Net als bij SME staan data in caches en alle data in de processor in platte tekst.
Met MKTME kunnen verschillende sleutels worden beheerd (bijvoorbeeld door een hypervisor) voor het versleutelen van RAM-pages. Anders dan AMD SEV laat MKTME de hypervisor echter niet eenvoudigweg een sleutel toewijzen, maar wordt alleen een Key ID in de pagetable geschreven. Afhankelijk van het aantal bits dat voor de Key ID wordt gereserveerd, is slechts een beperkt aantal sleutels en daarmee tegelijkertijd van elkaar afgeschermde virtuele machines mogelijk. In het huidige ontwerp plant Intel daarvoor zes bits, dat is genoeg voor 64 virtuele machines.
Tot nu toe zijn weinig details bekend over TME en MKTME, bovendien kunnen de specificaties kunnen nog wijzigen. Het lijkt erop dat Intel, anders dan AMD bij SEV, geen extra mogelijkheden wil invoeren voor attestering op afstand. Daarmee maakt MKTME alleen een veilige onderlinge afscherming mogelijk, maar biedt het geen garantie voor het correct functioneren van een virtuele machine op hardware van een niet-betrouwbare clouddienstverlener. Het valt dan ook te verwachten dat TME en MKTME in toekomstige cpu's samen met SGX worden aangeboden, waardoor beide uitbreidingen tegelijk gebruikt kunnen worden.
Systemen vergeleken
De nieuwe versleutelingsfuncties voor het RAM beloven meer veiligheid, maar ze kunnen niet 'even snel' worden toegepast. SGX vereist een registratie bij Intel en specifieke code die is onderworpen aan flinke beperkingen: maximaal 128 MB groot, geen systeemaanroepen. Dat beperkt de toepassingsmogelijkheden flink.
Ook al heeft Intel SGX ontwikkeld voor het scenario van een niet vertrouwenswaardige cloudaanbieder, toch werkt AMD SEV daar beter voor. Met SEV kan bestaande code veel makkelijker verder worden gebruikt omdat alleen de hypervisor en de kernel van het gastsysteem aangepast hoeven te zijn. Recente versies van Linux' KVM ondersteunen SEV al.
SEV gaat echter in tegen het klassieke idee van Trusted Computing, waarbij wordt geprobeerd de Trusted Computing Base (TCB) in een veilige omgeving zo klein mogelijk te houden om het aanvalsoppervlak te minimaliseren. Bij SEV omvat de TCB echter een gehele virtuele machine. Bovendien moet je AMD vertrouwen en biedt het geen bescherming tegen malware die zich in een virtuele machine heeft genesteld.
Het wordt al met al duidelijk dat er zeker nog een lange weg te gaan is voordat RAM-versleuteling breed ingezet kan worden. AMD's SEV en Intels TME/MKTME kunnen vooral interessant zijn voor cloudaanbieders die hun klanten meer zekerheid willen bieden. Privégebruikers zullen niet snel met RAM-versleuteling in aanraking komen, behalve misschien met SGX als DRM-functie of zonder het te merken met SME/TME.