Spectre e Meltdown

di il
9 risposte

Spectre e Meltdown

Salve a tutti,

ma a qualcuno di voi è chiaro i risvolti di queste due falle ?

Cioè, devo dirvi la verità, da quando è cominciata questa storia, ogni volta che mi collego al conto corrente mi faccio mille domande.

E mi chiedo ma gli indirizzi https non dovrebbero non memorizzare da nessuna parte una password ?

9 Risposte

  • Re: Spectre e Meltdown

    ??? Se trovo il tempo e se interessa a qualcuno sarà il caso di spiegare qualche dettaglio tecnico. Diciamo che sotto il profilo concreto di rischio meltdown ci sono i container docker e cugini vari. Essenzialmente su alcuni server web vengono fatti girare tanti sistemi virtuali 'leggeri' (VPS Linux nella gran maggioranza). Questi sono target : io affitto un VPS su un certo server e da lì riesco ad accedere ai dati degli altri server virtuali, in sostanza bypassando i meccanismi che dovrebbero rendere ogni VPS 'sicuramente' indipendente dagli altri.
    Google usa praticamente ovunque questa tecnica su scala enorme e quindi è tra i più vulnerabili
    Spectre è leggermente diverso ma ora vado da un cliente
  • Re: Spectre e Meltdown

    Onestamente a me non è chiaro.

    Da come ne parli sembra solo un problema di server dove più VM girano, ed allora non capisco perché i dispositivi personali potrebbero avere problemi.

    E altra cosa stranissima è che nonostante la falla sembra enorme, anche se difficilmente utilizzabile, ad oggi non sento allarmi, ne leggo di attacchi su larga scala, mediante l'utilizzo di questi buchi
  • Re: Spectre e Meltdown

    Dipende dal livello di dettaglio tecnico che vuoi.

    Inizio mantenendolo basso, poi magari si potrebbe alzare, magari con qualche exploit.
    Perderò un po' di precisione, pazienza.

    Il "dramma" nasce da due funzionalità dei processori, cioè l'esecuzione speculativa e la mancata pulizia della cache, e da scelte progettuali dei sistemi operativi per il mapping degli indirizzi che non ne tengono conto (mi sto riferendo a meltdown, magari prima o poi il pippone su spectre)

    La funzionalità dei processori in gioco si chiama "esecuzione speculativa", nel senso che la CPU, quando sta eseguendo un flusso di istruzioni, si trova ad affrontare situazioni nelle quali ci potrebbero essere strade diverse.
    Supponiamo di avere qualcosa del tipo (EDIT: questo esempio ripensandoci in realtà è più adatto per spectre, avendo un jump, vabbè pazienza, contentatevi, rimedierà qualche informatico o meglio ancora ingegnere informatico )
    
    if QUALCOSA then FAI_QUESTO
    else
    FAI_QUELLO
    Le CPU moderne (cioè praticamente tutte quelle degli ultimi 20 anni) eseguono sia QUESTO che QUELLO, a prescindere di QUALCOSA (sto banalizzando, sennò parto con uno spiegone serio, non da forum).

    Poi, a un certo punto, quando si "capisce" se QUALCOSA è vero e quindi se bisogna fare QUESTO oppure QUELLO, la CPU "butta via" il risultato che non serve, tenendo quello "giusto".

    Sembra uno spreco di forze, invece è il contrario. Dato il parallelismo interno e il meccanismo (*cuttone) il processore esegue in PARALLELO (*per modo di dire non faccio più queste precisazioni) QUESTO e QUELLO.

    esempio scemo. supponiamo che per valutare QUALCOSA ci vogliano 10 cicli, per eseguire QUESTO 5 e per eseguire QUELLO 7.
    Una CPU "vecchia" fa così: supponiamo che QUALCOSA sia vero, quanto tempo serve per eseguire il codice?

    10 cicli (elabora QUALCOSA) => capisce che deve fare QUESTO =>
    5 cicli (elabora QUESTO)
    Totale: 15 cicli

    Una CPU "nuova" lavora in parallelo (esecuzione speculativa)
    10 cicli (elabora in parallelo QUALCOSA, elabora in parallelo QUESTO, elabora il parallelo QUELLO)
    => capisce che QUALCOSA è vero =>ritorna il risultato di QUESTO (che è già pronto), scarta QUELLO
    Totale: 10 cicli

    Chi ha dimestichezza con gli script Bourne, & e wait avrà già capito (quasi) tutto quello che c'è da capire


    Essenzialmente quindi "tiene occupato" il più possibile le sue unità di elaborazione parallele (che sono numerose), fregandosene se fa del lavoro in più (il silicio non si stanca)

    Tutto chiaro? In altri termini la CPU esegue PIU' istruzioni di quelle che, effettivamente, il programma richiederebbe. Questi "rami fantasma" di esecuzione servono per aumentare le prestazioni (in certi casi anche sensibilmente).
    Bon, fino a qui era "ieri"
    ---
    Inciso sui sistemi operativi.
    Praticamente per tutti esistono due tipi di memoria (*cuttone), quella dell'utente - cioè dei programmi che l'utente fa funzionare - e quella del sistema operativo (kernel o quello che è).
    Nella memoria del sistema operativo ci sono tante belle cose, informazioni riservate e chi più ne ha ne metta.

    I programmi utente NON SONO in grado di leggere la memoria del sistema operativo (per inciso è quanto avveniva con l'Amiga e la sua CPU68000 e il SO multitasking privo di memoria virtuale fine cuttone storico).

    Chiaro?
    IO sistema operativo Linux, Windows, Sticazzi ho dei miei dati "segreti", che vedo solo IO (sistema operativo).
    I vari programmi (Word, Firefox, ... sticazzi) non sono in grado di accedere a questa memoria "privilegiata".

    Come avviene questa protezione? In sostanza (*...) la memoria viene suddivisa in "pacchetti" (pagine) e ognuna di loro viene marcata come leggibile dai programmi utenti, oppure no.

    Se "oppure no" allora il programma utente NON POTRA' leggere (men che meno scrivere) nella memoria del sistema operativo: se ha un problema, o s'incasina o fa quello che vuole -alla peggio- riuscirà a fare "danni" dentro la sua (del processo utente, Firefox, Word, sticazzi) memoria.

    ---
    Chiaro? I programmi utenti non possono leggere la memoria che il sistema operativo dichiara "privata" o "segreta", e bon
    ---
    Ora arriviamo a cosa succede quando un programma utente cerca di leggere la memoria del sistema operativo.
    Non ci riesce, e si causa (*cuttone) una eccezione.

    La CPU si accorge di questo tentativo di accesso "malandrino", ABORTISCE (cioè il programma utente NON legge la memoria "segreta") avvisa il sistema operativo, il quale dirà qualcosa tipo "ti termino il programma perchè ha cercato di accere alla memoria segreta" o qualsiasi cosa
    ---
    Bene, il "dramma" nasce mettendo insieme i mattoncini, con qualcosa del tipo
    
      1) leggi la memoria X
      2) se c'è una eccezione (cioè se non ci riesco)
      3) ->ADOTTA UN SISTEMA FURBO PER LEGGERLA DALLA CACHE
    
    Adesso lasciamo stare un minuto cosa sia il "sistema furbo", magari lo descrivo nel pomeriggio.

    Quello che accade è che quando si esegue (1), cioè leggi la memoria del sistema operativo noi sappiamo che la CPU "s'incazza" e parte l'eccezione...
    ... MA ...
    sappiamo anche che viene seguito COMUNQUE la porzione di codice successiva, cioè quella (2) che, in teoria, non dovrebbe mai essere eseguita.

    Viene eseguita perchè, come sopra spiegato, la CPU esegue porzioni di codice "fantasma", che mano ma mano scarta quando risulta che l'esecuzione speculativa è andata "troppo avanti"

    ---
    In sostanza quello che accade dopo (1), che si supponeva mettere un "tappo" su tutto, in realtà MODIFICA alcune aree della CPU (in particolare la cache) che viene "sporcata" col CONTENUTO della cella X (* cuttone in realtà qui c'è un meccanismo complicato a bit, vabbè magari lo vedremo)

    Il codice "furbo" (3) LEGGE (con metodi furbi) la cache e "indovina" il valore della cella X, la quale è DEL SISTEMA OPERATIVO e quindi "riservata".

    Ripetendo il procedimento tante volte si può "dumpare", un byte / bit alla volta, tutta la memoria del sistema operativo.
    Anzi meglio, tutta la memoria fisica del computer (* dipende al design dei sistemi operativi magari poi lo spiego)

    Chiaramente il programma malevolo ha il controllo pressochè totale di tutti i "segreti" del computer
    ---
    Prima di assentarmi rispondo alla seconda parte della domanda.
    Che succede?
    Praticamente nulla.

    SE il mio computer è infetto, da uno di questi programmi malevoli, ALLORA leggerà tutta la memoria e sarà un disastro.

    SE non è infetto, cioè non funziona sopra un malwaresticazzi che usa meltdown, NON avrò problemi
    ---
    Fin qui chiaro?

    Qual'è allora il dramma? E' duplice

    (1) i telefonini. scarico la mia app "fotochebelchebel", che contiene il "virus", e questa mi legge tutto il telefono.
    Nota: quello che fa l'applicazione virus non è un vero virus, nel senso che funziona come un qualsiasi programma.
    Sono IO che installo una delle millemila app, e mi becco la "sorpresina".

    (1)bis: il "dramma" diventa davvero drammatico qualora si riesca ad utilizzare JavaScript con meltdown (più probabilmente spectre in questo scenario)
    Siccome praticamente il 100% dei siti lo usa, il 100% dei browser (anche dei cellulari) lo elabora.
    Quindi vado sul sito http://www.tantilinuxcani.co, il browser mi scarica il meraviglioso JavaScript, lo esegue, e PUFF mi legge tutto il sistema (ho un po' tagliato in breve, ma in teoria è possibile), bypassando le varie sandbox, sistemi Chrome eccetera.
    Stessa cosa (attenuata) per Java.

    (2) i container, docker o come li si vuol chiamare, diciamo virtualizzazione leggera, il mondo cloud
    Il dramma è enorme per il mondo internet, nel quale è normalissimo affitare uno spazio-web per pochi euro,
    CONDIVISO.

    Su un server Aruba, OVH, o sticazzi è normalissimo avere magari 100 siti di 100 utenti diversi, ognuno dei quali "compartimentato".
    Il "mio" sitarello sui gatti non va a interferire col "tuo" sitarello sui cani.

    Quando affitto il mio "spazio" (*cuttone sul perchè e percome, magari nel pomeriggio) suppongo che TU non potrai leggere le MIE cose (e viceversa).

    Ebbene con meltdown questo è a rischio: dato il server sticazzi con 100 siti sopra, ci affitto il 101-esimo, il mio, e LI' ci faccio girare il programma "birichino". Esso leggerà i dati di TUTTI gli altri 100 siti!

    La situazione è pessima anche nel caso delle VPS, o della virtualizzazione leggera.
    I sistemi operativi (tipicamente Linux) - con opportuni accorgimenti - sono in grado di creare una sorta di "minimacchinavirtuale" che gira su un server fisico.
    Essa funziona tipicamente con lo stesso sistema operativo della macchina fisica, ma appare "singola".

    In altri termini sulla macchina fisica ho Linux Cane 12.3, e lì ci faccio girare 100 istanze VPS Linux Cane 12.3, che vendo a 100 persone diverse [ho semplificato, ma questo accade per i server google su scala milionaria, cioè ci sono milioni di istanze fatte così nel mondo]

    Questo meccanismo è estramemente "leggero", cioè sulla macchina fisica ci metto tante "macchine virtuali-finte-leggere", quindi mi costa poco, posso affittarle per pochi euro.

    E vedi amazon cloud e cugini vari.

    ---
    Bene, io mi affitto la mia VPS con Linux Cane 12.3, a 4 euro al mese, ci faccio girare sopra il mio programmello, et voilà "demolisco" l'intera infrastruttura di amazon cloud, oracle e magari pure google, un server alla volta.
    ---
    In sostanza: i programmi utente, che si pensava fossero "compartimentati", cioè impossibilitati del tutto a "sfuggire" dalle loro gabbie, non lo sono affatto.
    Questo implica che, a seconda della "fantasia" dei creatori di virus, vedremo di tutto e di più, perchè viene proprio minato alla base il meccanismo alla base della sicurezza dei sistemi operativi intesi come oggi sono fatti.
    Un po' come avere un telecomando universale in grado di aprire qualsiasi automobile.
    ---
    Ti basta, o continuo?
  • Re: Spectre e Meltdown

    Devo dire che sta diventando interessante ... continua.

    Da quello che leggo però sui dispositivi personali se si riesce a controllare i malware, non dovrebbero esserci problemi. Il che implica che l'antivirus sia efficace. O non basta ?

    Ed inoltre c'è un interrogativo che mi affligge (Penso che tutti qui usiamo l'home banking), quando mi collego al sito della banca (o in generale ad indirizzo che utilizza il protocollo HTTPS), il mio pin non dovrebbe essere memorizzato da nessuna parte, a differenza della varie PWD che ad esempio crome memorizza.O sbaglio ?

    Inoltre il processo speculativo (banalizzo) dovrebbe prendere una "strada", ma questa strada alla fine dovrebbe avere una "porta", la cui chiave non è conservata da nessuna parte.
  • Re: Spectre e Meltdown

    Leggi

    https://meltdownattack.com/meltdown.pd

    e

    https://spectreattack.com/spectre.pd
  • Re: Spectre e Meltdown

    Magari gli do una letta domani, 16 pagine in Inglese di un argomento del genere, non mi farebbe digerire "o Ragù"
  • Re: Spectre e Meltdown

    Crash72 ha scritto:


    Da quello che leggo però sui dispositivi personali se si riesce a controllare i malware, non dovrebbero esserci problemi. Il che implica che l'antivirus sia efficace. O non basta ?
    Cosa intendi per "dispositivi personali"?
    Come accennato il "dramma drammatico" riguarda JavaScript, più tutti i problemi "normali" dei virus.
    Ed inoltre c'è un interrogativo che mi affligge (Penso che tutti qui usiamo l'home banking), quando mi collego al sito della banca (o in generale ad indirizzo che utilizza il protocollo HTTPS), il mio pin non dovrebbe essere memorizzato da nessuna parte, a differenza della varie PWD che ad esempio crome memorizza.O sbaglio ?
    Sbagli, ovviamente (non c'entra nulla https in questo caso).
    Quando inserisci una password, un pin, o sticazzi, all'interno del programma c'è qualcosa del tipo
    
    (1) password=leggi-in-qualche-modo
    (2) oscura la password in qualche modo (tipicamente hash)
    (3) invia la password oscurata (o meno) al sito
    
    Il passo (1) c'è sempre; il (2) è opzionale (siti scritti male, ma anche protocolli insicuri come quelli della posta elettronica, possono spedire la password in chiaro. ma anche no)

    normalmente (cioè quasi sempre) la password rimane in chiaro, memorizzata nella memoria del processo in una qualche variabile.
    In certi casi (software ad alta sicurezza) essa viene pressochè subito "sovrascritta", ma DA QUALCHE PARTE la password (il pin o sticazzi) in chiaro sarà inserita.
    E lì andrà a finire (nella RAM).
    Anche i software ad alta sicurezza, comunque, devono tenere "da qualche parte" (2) - o il rispettivo cookie, o i dati di sessione, o quello che si vuole - altrimenti per ogni operazione che fai sul sito dovresti ri-autenticarti (reinviando la password e così via).

    Per la verità mi basta intercettare (2), cioè la password oscurata (hash o quello che è), perchè per accedere mi serve quella, non (1).

    Insomma tranquillo: lascia "lavorare" la fantasia e vedrai che salteranno fuori decine di attacchi più o meno evoluti.
    Inoltre il processo speculativo (banalizzo) dovrebbe prendere una "strada", ma questa strada alla fine dovrebbe avere una "porta", la cui chiave non è conservata da nessuna parte.
    ???
    L'esecuzione speculativa, come accennato, è quella metodologia che fa eseguire porzioni di codice che non dovrebbero esserlo.
    Il problema è più sottile.
    L'esecuzione di questo codice "fantasma", di nuovo per ragioni di efficienza, CAMBIA lo stato interno della CPU, in modo (purtroppo) misurabile.

    Quando il microprocessore conclude "il pezzo di codice non era da eseguire, butto via i risultati" NON (ed ecco "l'inghippo") "resetta" completamente la situazione iniziale, "piallando" tutto quanto.

    Non c'è una sorta di "tana libera tutti", sia perchè è difficile capire cosa è stato fatto (*cuttone sulle difficoltà) sia per ragioni di velocità.

    Pulisce QUASI tutto, ma quello che resta è sufficiente.
    A mero titolo informativo la tecnica usata è quella di misurare il tempo che trascorre tra la richiesta di una informazione e quando viene ritornata.
    In sostanza quando i dati vengono letti dalla RAM impiegano un tempo X, quando NON vengono letti dalla RAM (perchè la CPU lo vieta) un tempo Y, quando vengono letti dalla cache (estremamente più veloce della RAM) in un tempo diciamo X/10.
    Essenzialmente il programma ripete tot volte (un centinaio grosso modo) la lettura, cercando di capire quando essa è inaspettatamente più veloce della media.
    In questo caso posso concludere che ragionevolmente è stata caricata dalla cache, ed è quindi ora di attivare un meccanismo per acquisire questa "informazione fantasma" (risultante dall'esecuzione di codice speculativo e buttato via).

    ---
    Come analogia "banale" supponiamo di annotare a MATITA degli appunti su carta, per poi cancellarli con la gomma, ma SENZA triturarla o incenerirla.

    Sulla base delle tracce lasciate sulla carta qualcuno può recuperare cosa c'era inizialmente scritto.
    ---
    In realtà per meltdown la situazione è mitigabile, in quanto il "dramma" è aggravato da un'abitudine diciamo così "incauta" dei sistemi operativi, che mappano nel pool di indirizzi dei processi una buona parte (o anche tutta) la memoria del kernel, confidando in questo meccanismo per non farla leggere.

    Lo spazio di indirizzi (supponiamo di 4GB per processi a 32bit) viene suddivisa in due parti: da una parte quella dell'applicazione, dall'altra quella del sistema operativo.
    Siccome l'applicazione non può leggere la memoria del sistema operativo, questo era il metodo diciamo così "canonico".
    Si fa per ragioni di comodità (le routine del sistema operativo, tipicamente le API, hanno a disposizione tutta la memoria in un colpo solo, sia applicazione che kernel. vabbè mi fermo qui).

    Eliminando questo comportamento, cioè facendo "vedere" ai processi utenti solo la memoria utente, PIU' qualche strutturina del sistema operativo, la questione si può mitigare.
    Scegliendo opportunamente la quantità minima di dati da rendere "a rischio" è possibile (quasi) azzerare l'utilità di un attacco del genere.

    E' qualcosa che si può fare lato software, quindi - sia pure complicato, molto complicato, per ragioni di compatibilità - ragionevolmente implementabile.

    Ci sono altre alternative, già in uso da anni, ma meno efficaci (spostare in maniera randomica il pool degli indirizzi, che però non serve a molto, visto che la struttura è fissa e quindi si possono fare "spazzolatura" per individuarne la posizione modulo dimensione).

    ---
    Manca spectre, che è simile ma non identico, magari prossimo pippone.
    ---
    Vabbuò non mi intendo molto di queste cose, in realtà sono un esperto di gatti, magari arriveranno gli esperti di sicurezza informatica (ovviamente laureati) a dar man forte.
  • Re: Spectre e Meltdown

    "Quando il microprocessore conclude "il pezzo di codice non era da eseguire, butto via i risultati" NON (ed ecco "l'inghippo") "resetta" completamente la situazione iniziale, "piallando" tutto quanto.
    Non c'è una sorta di "tana libera tutti", sia perchè è difficile capire cosa è stato fatto (*cuttone sulle difficoltà) sia per ragioni di velocità."

    Però, ed è qui che vorrei capire bene, o il problema delle PWD è avulso dalla problematica emersa o non vedo in che modo possa esserne influenzato.

    Cerco di spiegarmi meglio, l'esecuzione del codice speculativo non prevede già PWD incluse (giusto ?) quindi quando viene buttato via, non credo che ve ne siano memorizzate da qualche parte e che non vengano piallate (in definitiva non dovrebbero essercene da piallare)

    Oggi mi sono collegato al mio conto corrente, i miei soldi (pochi quattrini erano ancora li. Forse all'hacker gli faceva schifo rubarmeli ?

    "Vabbuò non mi intendo molto di queste cose, in realtà sono un esperto di gatti, magari arriveranno gli esperti di sicurezza informatica (ovviamente laureati) a dar man forte."

    Comunque come esperto di gatti, non te la cavi male, hai mai pensato di darti all' informatica ?
  • Re: Spectre e Meltdown

    Crash72 ha scritto:


    Cerco di spiegarmi meglio, l'esecuzione del codice speculativo non prevede già PWD incluse (giusto ?) quindi quando viene buttato via, non credo che ve ne siano memorizzate da qualche parte e che non vengano piallate (in definitiva non dovrebbero essercene da piallare)
    mmhhh... provo a riformulare.
    Quando inserisci da tastiera qualcosa, qualsiasi cosa, in un computer, esso viene memorizzato nella RAM.
    Che sia una password, il post che sto scrivendo ora, quello che vuoi, esso finirà nella RAM.
    Verrà poi elaborato, ma il punto è che si trova nella RAM del computer.

    Se il mio programma malevolo è in grado di leggere TUTTA la RAM fisica del computer allora può accedere a qualsiasi informazione ivi presente.
    Dal momento che si suppone che le password vengano inserite in chiaro, cioè tu sulla tastiera scriverai "pippo", da qualche parte nella memoria ci saranno proprio i caratteri "pippo".

    In questo momento il virus potrebbe (sapendo la locazione di memoria ove vengono mantenuti, non ti faccio il pippone su come si trova, è simile alla tecnica che si usava una 30ina di anni fa per i cheat nei videogiochi del commodore 64 ) carpirlo.

    Anche se - come accennato - normalmente non vengono spedite in chiaro le password, cioè invece di spedire materialmente "pippo" dal tuo PC alla banca manderà qualcosa del genere "oiQurVXJTD3rfPI0C/751bysoi3+ZuZGdF7kNxxjP8g=", il virus può benissimo carpire direttamente "oiQurVXJTD3rfPI0C/751bysoi3+ZuZGdF7kNxxjP8g=" (e non la password in chiaro pippo), perchè... non gli frega nulla, gli basta quello (in realtà le password in chiaro sono utilissime per accedere a tutti i vari account, ove spesso sono le medesime).

    E' come se io, stringendoti la mano, potessi conoscere il PIN del tuo bancomat che magari hai annotato in un foglietto nel portafogli.

    Orbene tutto cioè è concretamente fattibile?
    Sì, è stato provato che è fattibile, sia in teoria, sia in pratica.

    Come ci si protegge? E' praticamente impossibile perchè (qui ci starebbe il pippone con spectre, che adotta la tecnica dell'infinocchiamento del previsore dei salti ) codice malevolo JavaScript è, a sua volta, praticamente impossibile da bloccare.

    Nel senso che puoi disattivarlo facilmente, ma perderesti tutti i siti odierni, che sono stati fatti "migrare" da Java e Flash, a JavaScript, animazioni, jquery, ajax che più ne ha ne metta.

    Niente youtube, niente gmail, niente forum, si torna indietro all'internet ~1990 dove ci sono pagine statiche che si vedono senza animazioni e interazioni.

    Ecco il motivo del panico.

    E' la fine del mondo? Mah... dipende... potrebbe diventare un problema estramente grave, in particolare per spectre si potrà cercare di fare antivirus javascript (???) di efficacia tutta da verificare.

    Si potrebbe "demolire" un pezzo di javascript, cioè renderlo molto più "stupido" di come è ora, cioè assai meno "potente".

    Non so, vedremo.
    Comunque come esperto di gatti, non te la cavi male, hai mai pensato di darti all' informatica ?
    Talvolta, ma purtroppo trovo gli studi universitari troppo difficili.
Devi accedere o registrarti per scrivere nel forum
9 risposte