Spectre e Meltdown spiegati facili facili da Angelo Pesce

0

Ho letto un po di cose in giro e ho deciso di scrivere uno spiegone. C’e’ una sezione dedicata ai videogiochi alla fine. Riccardo e’ piu’ esperto di me sulla questione e puo’ smentirmi, ma spero di non aver detto castronerie.

Spectre, Meltdown e soci spiegati in Italiano.

– Che sono?
Nuove tecniche che, in alcune condizioni, permettono di leggere memoria che non dovrebbe essere letta.

Tutti i dispositivi moderni che eseguono programmi hanno un concetto di “isolamento”. Per farla breve (mentendo un po), un programma non puo’ leggere cose che non gli appartengono, dati di altri programmi, e certamente non cose che altri programmi o il sistema operativo vogliono mantenere segreti, solo per loro. Queste tecniche permettono di aggirare questo limite.

E’ un po come copiare dal compagno di banco, senza il suo permesso!

– Sono “bug”?
Difficile chiamarli bug, sono tecniche che sfruttano il fatto che e’ possibile osservare effetti collaterali di come i computer operano. Effetti che non impattano il funzionamento dei programmi, ma che possono essere misurati per scoprire informazioni.

Per semplificare, pensate se fosse possibile misurare la temperatura di una CPU. Di per se il fatto che una CPU quando lavora si riscalda non e’ un bug, e’ normale. Ma un attacco potrebbe usare questa informazione per scoprire quando un computer sta lavorando molto e quando no, e questa informazione, insieme al fatto di poter forzare il computer a fare alcune operazioni (ad esempio, manipolando il codice di un sito web), potrebbe essere sufficiente per rivelare segreti che non si dovrebbe poter sapere.

Queste tecniche non sono nuove in generale, da molto si sa che e’ possibile scoprire tantissime cose da informazioni minime ed all’apparenza insignificanti, il che e’ una delle ragioni per cui fare applicazioni “sicure” e’ difficilissimo. La rilevanza di queste nuove tecniche e’ che rappresentano una classe di attacchi molto generale e che si applica a praticamente tutte le CPU sul mercato oggi, tranne quelle molto poco potenti (lavatrici, commodore 64… 🙂

– Ho sentito che diversi sistemi operativi saranno aggiornati per mitigare questi attacchi, e che cio’ potrebbe rallentare tutto.
Vero. Si tratta di mitigazioni per uno dei due attacchi, il piu’ facile da attuare (meltdown) – e riguarda solo l’isolamento dell’OS e le applicazioni, non tra applicazioni diverse. Quindi, parziale, ma comunque importante perche’ leva una parte grande del problema.

In parole povere, l’idea da “sempre” e’ che il sistema operativo e’ separato dalle applicazioni convenzionali, e quando le due cose devono interagire lo fanno tramite canali “sicuri”. Passare per questi canali ha un costo, la CPU deve cambiare modalita’, passare da applicazione a SO e viceversa. Questi aggiornamenti mirano ad alloranare ancora di piu’ le due componenti, separandoli maggiormente. Questa maggiore separazione implica pero’ che quando i due devono comunicare, c’e’ un costo maggiore.

Quindi, l’impatto di questi aggiornamenti in termini di performance si applica solo a programmi che comunicano molto con il sistema operativo, tipicamente applicazioni che fanno relativamente pochi calcoli e molti accessi a dispositivi (rete, dischi, e cosi’ via). Questo e’ un caso tipico di applicazioni server.

Questi aggiornamenti riguardano solo CPU Intel (almeno per quanto riguarda x86/64) e non AMD, e si potrebbe dire che Intel ha forse un “bug” o meglio, si e’ azzardata a fare cose piu’ ardite e che creano piu’ problemi.
Gli altri tipi di attacchi pero’ riguardano comunque tutti (specre) e non sono mitigati da aggiornamenti al SO.

– Ok, quindi siamo fottuti?
Probabilmente no. E’ un attacco serio, sicuramente, ma in ogni istante sempre ci sono mille attacchi possibili, nessun sistema complesso e’ mai interamente sicuro, specialmente roba casalinga! Il rischio reale e’ una combinazione di fattori, principalmente di opportunita’. E’ piu’ facile oggi sfruttare questo attacco per rubare cose, o fare roba molto piu’ banale?

Questi attacchi per funzionare richiedono il poter eseguire del codice su un computer bersaglio. Una volta che questo e’ possibile, si puo’ con quel codice leggere memoria che non si dovrebbe poter leggere. Non e’ comunque facile.

Sfortunatamente “eseguire codice su un computer bersaglio” oggi non e’ difficile, perche’ tutti i siti web contengono codice che e’ eseguito quando navighiamo, e dato che e’ una tecnica importante ed usata ovunque, i browser web sono anche molto efficienti nell’eseguire questo codice (javascript), il che rende possibile l’attacco (che si basa su misurazioni temporali molto precise).

Fortunatamente pero’ chi fa questi browser non e’ neppure scemo, e quindi gia’ sono pronte contromisure che ad esempio riducono la precisione con la quale codice web puo’ misurare intervalli temporali, impedendo la realizzazione di queste tecniche.

Ci sono altri modi di eseguire codice su computer? Certo! Ad esempio, scaricando applicazioni, o inserendo malware ad esempio in roba all’apparenza innocente, pensiamo all’app store o peggio, al play store di android. Ma malware su cellulare e’ sempre esistito e sempre esistera’, e’ chiaramente una gatta da pelare in piu’ per chi controlla queste applicazioni, ma non e’ una novita’.

Inoltre altre mitigazioni software sono state inventate per difendere programmi importanti, hanno un loro costo e non sono banali, ma se usate bene possono funzionare perfettamente. “usate bene” e’ un casino, ma in informatica tutto lo e’ quando si parla di sicurezza…

– Ok, quindi tutto apposto?
Si e no. Come sempre, non ci sono risposte banali. I ricercatori di google hanno effettivamente scoperto con queste tecniche un attacco molto interessante, e molto ampio. E’ una nuova arma, e non e’ un arma spuntata. Pero’ e’ anche una di mille, e nemmeno la prima ad essere ampiamente applicabile a molti dispositivi diversi (ad esempio un annetto fa si scopri’ “rowhammer”, una tecnica che permette di sfruttare difetti nelle memorie per similmente riuscire ad accedere ad informazioni che non dovrebbero esser scoperte).

La mia “previsione” e’ che per gli utenti comuni, i rischi maggiori saranno sempre di attacchi molto piu’ banali. Password rubate da siti poco sicuri e che l’utente poi ha ri-usato per cose importanti, email di phishing o dispositivi “intelligenti” completamente insicuri. La lavatrice WiFi? Il televisore “Smart”? Tutta roba che un hacker “buca” in due minuti, e non perche’ vuole rubare dati da voi personalmente, ma perche’ prova centinaia di migliaia di indirizzi internet a caso fino a raggiungere qualcuno di vulnerabile…

Il problema e’ maggiore per chi invece deve gestire piattaforme molto sicure, che gia’ impediscono molti degli attacchi piu’ banali. Infrastrutture “cloud” che permettono di eseguire codice qualsiasi, a pagamento, e che sfruttano meccanismi di isolazione per impedire al codice del signor X di spiare quello che Y fa…

– Perche’ ci sono CPU nuove che gia’ si sa saranno affette da questi problemi?
Il design di un chip prende tempi enormi, anni (tre, quattro), quindi non si cambia in corsa. Inoltre purtroppo per la gran parte queste tecniche non sono, come ho detto, “difetti”, ma proprio effetti collaterali intrinsechi nel funzionamento delle CPU moderne. Le soluzioni saranno graduali, e’ un’altra cosa da tener presente quando si sviluppano certi programmi per renderli sicuri. Prima bisognava pensare a 1000 cose. Ora a 1000+1. 🙂

– C’e’ di mezzo l’NSA, la CIA, il KGB?
Penso di no.

– Per i videogiochi?!
Cambia poco o nulla.

In teoria alcuni giochi potrebbero rallentare piu’ di altri per via di questi aggiornamenti di sistema, ma dubito che ci sara’ un impatto grosso.
L’impatto piu’ importante e’ probabilmente dal lato server per giochi multiplayer, ma e’ solo un costo eventuale da pagare per avere piu’ server, non e’ un problema per l’utente.

Un altro “rischio” e’ che queste tecniche vengano usate per bucare hardware sicuro e permettere di piratare giochi. Non credo sia un rischio rilevantissimo, difficile dirlo pero’.
La cosa piu’ rilevante forse e’ che ora il clone cinese di supermario sullo store di android/ios ha una via in piu’ per far danni, se gia’ non e’ dedito semplicemente a fare bitcoin mining 🙂

Poi se qualcuno e’ interessato, posso anche provare a spiegare un po come funzionano, le idee dietro a questi attacchi…

grazie per il post! non credevo che addirittura si basassero su questioni di timing… anni fa lessi che addirittura si riusciva a “rubare” le robe scritte sulla tastiera di un computer non connesso a internet solo vedendo certe oscillazioni sulla rete elettrica a cui era collegato il pc! personalmente cmq sono curioso di saperne di più, se ti va scrivi pure, o anche solo qualche link etc vedi tu 🙂

Provo a farlo in poche parole.

mi accodo a bruno e ringrazio per le delucidazioni a riguardo!

Le CPU moderne, tutte, si portano avanti con il lavoro. Non eseguono solo il codice che immediatamente deve essere eseguito, ma provano a prevedere cosa servira’ in futuro ed a renderlo disponbile. Questa e’ una cosa fondamentale, cruciale, perche’ alcune operazioni prendono tempi enormi. L’analogia piu’ semplice e’ quella di una cucina. Pensa se ogni volta che devi preparare un piatto, ogni ingrediente che serve lo vai a prendere in cantina, uno alla volta. Ora mi serve la cipolla. Scendo in cantina. Olio. Ok, un altro viaggio. Sarebbe una pazzia!

Ovviamente che fai? Metti le cose che ti servono piu’ spesso vicino ai fornelli, olio, sale e cosi’ via, altre magari in qualche cassetto o mensola, e quelle che servono meno spesso le stivi da qualche parte. Bene! Ma ora pensa ad un ristorante. Uno dove ci sono milioni di piatti (programmi!) possibili, che ne sai cosa serve? Una buona soluzione e’ avere degli aiutanti. Non proprio chef, ma gente che ne sa abbastanza per prevedere quello che ti servira’ ed anticipare le mosse!

Cosi’ funzionano le CPU moderne. Gli “ingredienti” sono gli accessi a memoria, che prendono centinaia se non migliaia di cicli di clock. I vari scaffali, a varie distanze dai fornelli e via via piu’ capienti quanto piu’ ci allontaniamo, sono le “cache”. E ci sono in ogni CPU dei sistemi che prevedono cio’ che servira’ in futuro e lo mettono a disposizione sugli scaffali, cosi’ che il cuoco puo’ sempre operare senza fermarsi mai ad aspettare un ingrediente.

Ora, questi attacchi funzionano circa cosi’. Vanno nel ristorante e chiedono un “piatto”/programma particolare. Danno loro una ricetta, un sugo di pomodoro, fatto cosi’:

– Fai il soffritto
– Se il soffritto brucia:
— Prendi l’ingrediente segreto ed assaggialo
— Se e’ amaro, aggiungi nella salsa lo zucchero, se no, aggiungi cannella.
– Se non brucia, aggiungi il pomodoro
– Mescola a fuoco leggero per un ora, fine.

Ora, che succede? Il cuoco e’ bravo, ed il soffritto NON brucia. Inoltre, c’e’ un segreto! Segretissimo! L’ingrediente segreto! Sara’ amaro o dolce? Ovviamente il cuoco non e’ stupido, non te lo dira’ mai. Ma l’aiuto cuoco che fa? Non e’ intelligentissimo, e’ un sempliciotto e cerca di aiutare, non sa che il soffritto non bruciera’, e’ preparato ad ogni evenienza. E quindi, per preparasi al meglio anticipa i tempi. Va a prendere l’ingrediente segreto, nel caso che il soffritto dovesse bruciare. E va ancora piu’ avanti, lo assaggia e a seconda del gusto prende o zucchero o cannella, cosi’ e’ sicuro che ha tutto cio’ che serve.

Fin qui, neppure l’aiuto cuoco ha detto nulla, nulla e’ entrato nel piatto che verra’ servito. Pero’ qui c’e’ la furbizia! Dopo che il sugo e’ pronto, il manigoldo fa un altra richiesta alla cucina. Vorrebbe della cannella. E misura il tempo: se impiega poco ad arrivare, pensa ok, l’aiuto cuoco l’aveva gia’ portata su dalla cantina, era gia’ li in cucina, a disposizione. Quindi l’ingrediente segreto e’ dolce! Se no, significa che era amaro…

E cosi’ senza aver mai chiesto nulla dell’ingrediente segreto, senza averlo nel piatto, hai dedotto una componente. Provaci tante tante volte, e puoi dedurre un sacco di altre cose…

l’esempio con la cucina è fantastico

cmq uno si fa il culo programmando incapsulando T U T T O e poi va a finire così…

ottima spiegazione, grazie! master chef docet!

(l’incapsulazione nel senso di OOP non ti aiuta per niente in questioni di sicurezza – mai – e’ solo una “convenienza” per il programmatore, non e’ una barriera di alcun tipo)

Bruno Barbera per quanto riguarda le oscillazioni elettriche sulla rete domestica sinceramente non penso esistano strumenti tanto precisi, però non ne sono sicuro al 100%

La precisione e’ spesso aggirabile ad esempio facendo la media di molte misurazioni o usando certe assunzioni statistiche, o in congiunzione con il “forzare” alcuni comportamenti – ad esempio si e’ dimostrato di poter leggere una tastiera tramite un cellulare posto sullo stesso tavolo, dalle vibrazioni… Ma di nuovo, in pratica nessuno fa attacchi di fantascienza, semplicemente perche’ quelli semplici funzionano gia’ 🙂

Angelo Pesce una curiosità, le deduzioni sul timing credo derivino anche dalla quantità di cache disponibile. In via del tutto teorica aumentando la dimensione della cache (anche a costo di usare cache più economiche, quindi più lente) aumenterebbe anche la sicurezza?

No, diminuirebbe. Se hai una cache piccola devi chiedere “subito” la cannella, perche’ altrimenti potrebbe esser stata tolta dalla cucina per far spazio ad altro, un altra ricetta, una cucina fa sempre mille piatti in contemporanea. Se invece gli scaffali sono enormi, hai piu’ tempo… Basta che gli ingredienti che metti nella ricetta per fare da oracolo siano cose non usate spesso in altre ricette, il che in pratica per un programma e’ banale. Ci sono altre considerazioni varie ed eventuali ma in soldoni trovare soluzioni hardware non credo sia banale. Inoltre in verita’ le tecniche scoperte sono diverse e bon, non usare questa analogia per ragionarci troppo, e’ solo per spiegare un po, ma i dettagli fanno la differenza e sono complicati.

Scusa Angelo, penso che un so di una console potrebbe fare a meno di patch per Meltdown e Spectre…che software malevolo può un utente fare girare su una console, realisticamente parlando

Il problema maggiore per le console e’ il browser internet, ma non e’ un -grande- problema. Per questo ho detto che il rischio e’ la pirateria, un hacker puo’ usare una console non aggiornata ed ha un arma in piu’ per penetrarne i segreti ed eventualmente aprirla alla pirateria…

quindi secondo te anche i SO delle console saranno patchati?

Gli OS non lo so perche’ conta poco o niente, i browser penso sicuramente si. Perche’ non conta l’OS? Perche’ tanto i software su console sono controllati, e viceversa chi vuole bucarle e rubare segreti per poi aprire alla pirateria semplicemente non le aggiorna, quindi amen. L’unica via su una console per un utente di eseguire codice malevolo in maniera non intenzionale penso sia solo il browser

Bello ,grazie ora è un po più chiaro

Fantastico intervento Angelo, grazie mille!

Tutto perfettissimo. Ci tengo solo a evidenziare, visto che me lo chiedono tutti, che ASSOLUTAMENTE NO, Meltdown e Spectre NON sono backdoor piazzate lì da qualcuno. Sono proprio problemi intrinsechi alla speculative execution. E comunque fare exploit per Spectre è un casino talmente inimmaginabile che siamo a livelli di exploit teorico. Bravo Angelo!

Grazie per la spiegazione

Grande Angelo, grazie davvero.

Comments are closed.