I'm the creeper

Attacchi side-channel: come bypassare la sicurezza dei processori

Probabilmente in molti avranno sentito parlare di Spectre e Meltdown che grazie ad attacchi side-channel hanno messo in crisi la sicurezza dei processori, soprattutto Intel. Ma come mai sono così pericolosi e perché hanno destato tanto scalpore una volta scoperti? Principalmente perché attaccano le fondamenta stesse dell’architettura dei moderni processori e il concetto di esecuzione speculativa, necessario per l’evoluzione della tecnologia delle CPU.

Cosa sfruttano Spectre e Meltdown

Lesecuzione speculativa è una tecnica utilizzata nei processori per aumentare la quantità di dati processati, soprattutto in presenza di istruzioni che richiedono l’utilizzo di altre unità tipicamente più lente. In questi casi, i processori sono in grado di andare avanti nell’esecuzione del codice (fuori ordine, cioè non sequenzialmente), ricostruendo il flusso originario soltanto alla fine. Tuttavia, può accadere a volte che l’esecuzione di una porzione di codice sia subordinata alla valutazione di un’espressione. Ad esempio, un’istruzione di IF può determinare o meno l’esecuzione di una parte del programma. In genere, il processore utilizza un’unità dedicata che prende decisioni sulla possibilità di esecuzione di quel codice. Se la probabilità è alta allora il processore anticipa l’esecuzione nell’attesa della valutazione dell’IF.

Le icone dei due attacchi side-channel Spectre e Meltdown: entrambi sfruttano l’esecuzione speculativa per accedere a porzioni di memoria protette.

Il problema sorge nei casi in cui il codice già caricato non viene più eseguito per una predizione errata: qui si innestano i cosiddetti attacchi side-channel. Infatti, attraverso il timing della cache (una porzione di memoria estremamente importante della CPU che consente di velocizzare le operazioni di I/O) è possibile risalire alla porzione di memoria interessata. Il motivo risiede nella velocità della cache rispetto alla memoria centrale: analizzando l’intero contenuto della memoria si riuscirà ad avere un tempo d’accesso molto basso solo nel caso corrispondente alla pagina di memoria già caricata. In altre parole, il codice già caricato ma poi scartato per via della errata predizione risulterà già nella cache; analizzando i tempi di accesso alla memoria otterremo un cache hit (ovvero presenza del contenuto nella cache) con una riduzione evidente dei tempi d’accesso.

Spazi di indirizzamento (non più) isolati

Spectre agisce sugli spazi di indirizzamento delle applicazioni: ogni programma, infatti, ha un proprio spazio di indirizzamento che non coincide con quello di altri eseguibili. In questo modo si assicura l’isolamento dei programmi in modo che ognuno non interferisca nell’esecuzione degli altri. Ma Spectre è in grado di rompere la divisione ben ideata dai produttori di processori, inducendo i programmi ad accedere a porzioni di memoria a loro non dedicate. L’impatto è molto alto dal momento che è possibile lavorare con dati di altri programmi e potenzialmente molto personali.

L’architettura stessa del processore moderno dovrebbe essere ripensata per garantire maggiore sicurezza da questo tipo di attacchi.

Al contrario Meltdown agisce sulla divisione tra spazio utente e spazio del kernel del sistema operativo. Per accedere infatti a questa seconda area di memoria è necessario che il processore lavori in modalità privilegiata. Infatti, le istruzioni da eseguire nello spazio del kernel possono avere un impatto sull’operatività del sistema intero. Meltdown riesce, grazie all’esecuzione speculativa, a ottenere un dump completo della memoria del kernel, dove per altro sono salvate anche molte delle password che usiamo. L’insidia più grande sta proprio nelle modalità di questi attacchi che sfruttano altri canali (side-channel) per minare la sicurezza dei processori.

Come proteggerci

Naturalmente i principali produttori di processori sono subito corsi al riparo, rilasciando delle patch di sicurezza che correggono questi comportamenti inaspettati. Tuttavia, è bene sottolineare come in realtà il problema non venga risolto, poiché è l’intera architettura dei processori ad essere messa in crisi. Ecco che allora iniziano a svilupparsi filoni di ricerca alternativi, che cercano di risolvere il problema alla radice. Parliamo del confidential computing, una branca della sicurezza nata dall’omonimo consorzio di Linux Foundation che vuole creare un’ambiente di esecuzione protetto. Infatti, l’idea è garantire l’accesso al processore e alla memoria soltanto al codice autorizzato, grazie a un sistema di accesso interamente basato su hardware.

La tecnologia è ancora embrionale ma si presta a molti utilizzi e a mettere in sicurezza soprattutto i sistemi di grandi aziende che lavorano con dati estremamente confidenziali. Certamente l’intera questione andrà monitorata nel tempo per capire sia se potranno sorgere nuovi modi di sfruttare l’architettura della CPU in modo diverso, sia se il confidential computing prenderà piede e ci garantirà maggiore sicurezza.

Published by
Nicola Fioranelli