Il confidential computing è un insieme di tecniche e tecnologie mirate alla protezione dei data in use (dati in uso), cioè durante la loro elaborazione, ed elaborate dal Confidential Computing Consortium, un consorzio composto da membri quali Microsoft, Google, Red Hat, Intel, Huawei, Facebook, Accenture, ARM, e Ant Group.
In particolare, il Consorzio si riferisce ai dati processati come dati in uso e li definisce, più precisamente, come tutti quei dati che si trovano nella RAM (Random Access Memory, la “memoria” di un sistema di elaborazione) e che sono soggetti a computazioni di qualsiasi tipo.
Data in use è in antitesi con data at rest, ovvero dati stoccati in basi di dati, e data in transit, ovvero dati trasmessi attraverso un network (il più delle volte via internet). Per queste due tipologie di dati la crittografia, grazie ad algoritmi di cifratura e firma, offre già soluzioni per proteggerne la confidenzialità e l’integrità.
Una nuova frontiera è invece quella dei dati in uso, dal momento che attualmente non ci sono vere e proprie soluzioni in uso su larga scala.
Indice degli argomenti
Perché il confidential computing è al centro dell’attenzione
Negli ultimi anni l’attenzione alla protezione dei data in use si è fatta sempre più forte, compatibilmente con la crescente attenzione di aziende e organizzazioni e del largo pubblico verso la cyber sicurezza in generale.
Questo principalmente per due motivi. Da un lato il General Data Protection Regulation (GDPR), almeno qui in Europa, mette al centro della protezione dei dati personali sensibili proprio una forte regolamentazione dei processi sui dati (data processing), ovvero dei data in use. In particolare, diventa proprio il personale che protegge i dati e che, eventualmente, li processa, ad essere il diretto responsabile nel caso ci siano fughe di dati (data leak).
D’altro canto, quella branca della cyber sicurezza che si occupa dei così detti side-channel attack (attacchi side-channel) è riuscita a mostrare attacchi sempre più efficaci e sempre più generali.
Gli attacchi side-channel sono quegli attacchi che sfruttano informazioni rilasciate naturalmente da server e computer di ogni tipo proprio mentre i dati sono processati. A seconda della quantità di elettricità consumata, o dal rumore e dal calore emessi dai server, un attaccante riesce a capire che tipo di operazione si sta facendo sui dati e anche la composizione della stringa di dati stessi.
Si arriva fino all’estrazione delle chiavi crittografiche usate per la protezione dei dati, raggirando completamente la sicurezza degli algoritmi crittografici stessi.
Come detto sopra, con le regolamentazioni sulla protezione dei dati che diventano sempre più stringenti da una parte e con la ricerca (sia accademica che non) sui side-channel attack che diventa sempre più sofisticata e che attacca proprio i dati in uso, ecco che il problema del confidential computing diventa e diventerà sempre più centrale per i CISO di tutto il mondo.
Spectre e Meltdown: i due attacchi side-channel più pericolosi
Il primo giugno 2017, alcuni ricercatori di Google (in particolare di Project Zero), Rambus e di altre università tra cui l’università di Graz, della Pennsylvania, del Maryland e di Adelaide hanno annunciato due attacchi chiamati Spectre e Meltdown. Tali attacchi sfruttano le vulnerabilità intrinseche dei processori moderni che operano all’interno di computer, tablet, portatili e Smart TV di tutto il mondo per accedere alla memoria dei dispositivi stessi.
In particolare, tutti i processori Intel prodotti dal 1995 in poi sono vulnerabili a questi attacchi. Anche se sui processori AMD e sulle architetture ARM questi due attacchi non sono ancora stati empiricamente sperimentati, con tutta probabilità anche questi non ne sarebbero immuni.
Grazie a Spectre e Meltdown, un attaccante riesce ad avere accesso alla memoria kernel e quindi a dati sensibili a cui normalmente non potrebbe avere accesso, come password e chiavi crittografiche. Spectre agisce facendo venire meno l’isolamento tra diverse applicazioni nello stesso host, mentre Meltdown agisce facendo venir meno l’isolamento tra l’applicazione utente e il sistema operativo.
La peculiarità e, dunque, la pericolosità di Spectre e Meltdown sta nel fatto che queste vulnerabilità non sono causate da piccoli bug all’interno del codice di un programma o di un sistema operativo. Non è possibile, dunque, come nel caso degli altri attacchi side-channel, scrivere il software per processare i dati in modo che le varie operazioni risultino il più uniformi possibili dal punto di vista del tempo impiegato, del calore rilasciato, dell’elettricità consumata etc.
Un normale software update non può quindi nulla contro questi due attacchi proprio perché le vulnerabilità sfruttate sono intrinseche all’hardware.
Memoria e CPU: le componenti su cui si basano gli attacchi
Per meglio capire come funzionano questi due attacchi e, quindi, come è davvero possibile rubare i dati in uso, mentre vengono processati, è necessario fare un passo indietro e comprendere appieno quali sono le caratteristiche dei moderni processor che vengono sfruttate come vere e proprie vulnerabilità dagli attacchi Spectre e Meltdown.
Per farlo, abbiamo bisogno di descrivere sommariamente il funzionamento della memoria e del processore di un computer.
Per prima cosa è bene ricordare il fatto che, per quanto riguarda la memoria, i sistemi informatici utilizzano due tipi di memoria per i processi in esecuzione. Una è la RAM, la memoria principale, l’altra è la CPU cache, ovvero la cache memory nel processore.
La CPU deve continuamente leggere e scrivere dalla RAM, che è molto più lenta se paragonata ad una CPU. Infatti, un dato viene recuperato dalla RAM in un tempo che viaggia nell’ordine dei millisecondi, che in questo contesto è un lasso di tempo non indifferente. Fin dalla metà degli anni Novanta in tutti i normali processori commerciali si può dunque trovare, al fine di rendere più efficiente il recupero dei dati da processare, una memoria cache sul processore, grazie al quale è possibile accedere ai dati e iniziare a processarli nel giro di nanosecondi, quindi in un lasso di tempo esponenzialmente più breve rispetto alla RAM.
D’altro canto, per quanto riguarda un processore, questo è responsabile dell’esecuzione di tutte le istruzioni che un sistema operativo gli assegna.
Il numero di operazioni eseguite dipende strettamente dal clock: più alto è il clock e più alto è la quantità di lavoro che il processore riesce a fare in un secondo. La velocità di un clock si misura in gigahertz (GHz).
Per i produttori di processori come Intel e AMD la competizione stava, fino a qualche tempo fa, nel riuscire a costruire un processore con la più alta frequenza di clock. Questo fino a quando non si è arrivati a 3-4 GHz, cioè ad una frequenza di clock pari a 3-4 miliardi al secondo. Andare oltre un processore di 4 GHz è impossibile, quindi per aumentare la capacità computazionale dei processori si sono adottate altre strategie, in particolare l’esecuzione speculativa e l’esecuzione out-of-order.
Le vulnerabilità delle CPU sfruttate da Spectre e Meltdown
Con esecuzione speculativa (speculative execution, in inglese) si intende che, per velocizzarne l’esecuzione, il processore cerca di indovinare quali saranno i risultati di un’istruzione ed esegue di conseguenza tutti gli step seguenti in anticipo, prima ancora che l’istruzione venga di fatto lanciata.
Ad esempio, ammettiamo che una certa istruzione abbia bisogno di soddisfare una certa condizione per essere eseguita, ad esempio che la lunghezza di un certo dato sia inferiore ad una certa soglia.
Se il dato non è ancora stato utilizzato, allora questo si trova nella RAM. Pertanto, tale dato verrà recuperato lentamente. Nel caso in cui ci sia un’alta probabilità (calcolata dal branch prediction unit della CPU) che l’istruzione che si dovrebbe eseguire solo se la condizione è valida debba essere effettivamente eseguita, il processore la esegue comunque e salva il risultato in cache.
Una volta che il dato viene recuperato dalla RAM, solo allora, se la condizione è verificata, si utilizza il risultato corrispondente già calcolato. Altrimenti, la CPU viene ripristinata ai registri precedenti mentre la cache considerata vuota.
Ed è questo il punto fondamentale: che la cache non viene ripristinata del tutto e dunque tale dato (se sensibili) si trova ancora in cache. Questa è infatti la vulnerabilità che Spectre usa per rubare i dati sensibili inducendo il branch prediction unit a fare eseguire del codice che normalmente non dovrebbe essere eseguito su dati che normalmente non dovrebbero essere recuperati.
L’esecuzione out-of-order significa che le istruzioni non vengono eseguite in maniera sequenziale, così come sono descritte nel codice. Per ottimizzare i tempi, le istruzioni vengono invece raggruppate per similitudine (ad esempio somme con somme e moltiplicazioni con moltiplicazioni) ed eseguite prima quelle assegnate ad un gruppo e poi quelle assegnate ad un altro gruppo.
Questo modo di eseguire le istruzione non tiene dunque più conto dell’ordine in cui essere erano state comandate alla CPU.
Quello che Meltdown sfrutta è il fatto che, per quanto riguarda i processori Intel, le esecuzioni fuori ordine vengono eseguite senza controllare la memory protection, cioè la CPU non controlla che effettivamente una certa operazione legge fuori dall’indirizzo di memoria che dovrebbe essere di riferimento.
L’attaccante che utilizza Meltdown deve solo trovare il cambiamento nello stato della cache per recuperare il dato segreto mentre è in esecuzione.
Differenze e scenari d’attacco di Spectre e Meltdown
Le maggiori differenze tra questi due attacchi stanno proprio nella vulnerabilità (o caratteristica) che Spectre e Meltdown sfruttano per recuperare dati sensibili a cui non avrebbero normalmente accesso.
Per via dell’esecuzione speculativa delle istruzioni, Spectre rompe l’isolamento della memoria delle singole applicazioni. E per applicazioni si intendono anche i javascript della pagine web che vengono (anche in condizioni normali) eseguite dai browser dei nostri laptop.
Un attacco Spectre riuscirebbe a fare eseguire del codice maligno dal nostro browser che accede ai dati nella cache sensibili che vengono processati dal browser per un’altra pagina web che stiamo visualizzando contemporaneamente. Inclusa la nostra pagina home banking, con quindi tutte le relative password del nostro conto corrente!
Per via dell’esecuzione out-of-order, Meltdown accede a parti di memoria fisica arbitraria, inclusa la memoria del kernel, dove vengono salvate tutte le password e gli altri dati sensibili utili al sistema operativo. In particolare, Meltdown riesce ad accedere alla memoria kernel condivisa tra i container e l’host kernel in contesti di virtualizzazione (inclusi i container Docker), permettendo dunque all’attaccante di far fuoriuscire informazione dai container stessi.
Confidential computing: contromisure per proteggere i dati in uso
L’unica e vera contromisura contri Spectre e Meltdown sarebbe quella di un completo re-design dell’architettura dei normali processori.
Ovviamente questo non è ancora successo, anche perché un ripensamento completo dei processori richiede ingenti e dispendiose risorse da parte delle aziende manifatturiere e almeno 5-7 anni di ricerca e sviluppo, persino per colossi come Intel.
Quello che è promettente nel mondo delle architetture hardware, come riportato da Rambus (una delle aziende che hanno portato alla luce questi due attacchi), è che la tendenza sarà quella di adattare i processori alle specifiche esigenze e funzionalità per cui saranno adoperati.
Ad esempio, per quei processi considerati critici si parla di avere almeno uno dei 16 core presenti nei chip ottimizzato per la sicurezza e di mantenere i restanti 15 ottimizzati per l’efficienza come lo sono quelli in commercio tuttora.
In accordo con quanto detto sopra, quello che viene suggerito dal Consorzio per il Confidential Computing è quello di avere un hardware dedicato per le operazioni e i dati sensibili chiamato Trusted Execution Environment (TEE).
In particolare, un TEE esegue applicazioni e protegge dati in maniera più sicura che i normali computer perché si basa su un hardware security module (HSM) proprietario che è tamper-proof secondo alcune certificazioni particolare e che viene usato esclusivamente per la generazione e lo stoccaggio di chiavi crittografiche e l’esecuzione sicura di algoritmi critrografici.
Software patch sono già presenti per Meltdown per i maggiori cloud provider pubblici (AWS, Google, Azure) prima ancora che Spectre e Meltdown venissero annunciati pubblicamente.
Questo perché, vista la gravità degli attacchi, si preferì tenerli segreti e aspettare che questi software patch venissero prima scritti e adottati su larga scala, quindi anche dalle versioni più recenti dei sistemi operativi Linux, Windows e MacOS. Questo perlomeno per Meltdown.
Per quanto riguarda Spectre, al momento sembrerebbe che software patch non siano ancora stati usati su larga scala. Quello che c’è da notare è che questi software non risolvono il problema, che risiede nel design dell’hardware, ma lo rendono più difficile per Spectre e Meltdown da sfruttare.
Inoltre, si deve notare che per istanze di cloud privato o ibrido, qui non esiste nessun patch che viene automaticamente inclusi negli aggiornamenti e adottarlo è a carico di chi si occupa ti tali infrastrutture private e semi-private.
Cosa possiamo fare noi utenti per proteggere i dati in uso
Quello che noi utenti possiamo fare dal nostro canto è tenere i nostri sistemi operativi sempre aggiornati, in modo che eventuali bug nei software patch possano essere risolti.
Inoltre, è buon uso fare il logout delle nostre pagine web che trattano dati sensibili (ad esempio le pagine di home banking) per evitare che un’altra pagina aperta maligna possa accedere alle nostre password.
Addirittura, Chrome permette di isolare le pagine web caricandole su un suo proprio processo singolarmente.
Usare Chrome piuttosto che altri browser non è comunque da considerarsi sicuro al 100% visto che non c’è comunque nessuna certezza che i dati in cache siano effettivamente stati eliminati.