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?