Perché l'accesso alla memoria del kernel è un rischio per la sicurezza?

8

Molte delle novità riguardanti la vulnerabilità di Meltdown stanno evidenziando che consente ai programmi di leggere la memoria che dovrebbe essere off limits per l'utente. Mentre capisco che questo non dovrebbe accadere, poche fonti hanno spiegato esattamente come l'accesso alla memoria del kernel sia pericoloso.

Quali informazioni sono memorizzate nella memoria del kernel? Cosa sarebbe in grado di accedere, ma non di modificare, alla memoria del kernel per consentire a un utente malintenzionato di fare?

    
posta Rob Rose 07.01.2018 - 17:41
fonte

3 risposte

9

Per comprendere la minaccia di Meltdown, devi capire come è organizzata la memoria nei computer moderni.

L'ingenua visione della memoria è che ogni indirizzo di memoria corrisponde a un insieme specifico di celle nella RAM. Questo è chiamato "indirizzamento fisico" e fino ai primi anni '90 era il modo più comune di gestire la memoria in un computer. Con l'indirizzamento fisico, se il tuo programma legge un byte dall'indirizzo 17, sta leggendo dallo stesso set di otto celle di memoria ogni volta. Risulta, un modo "solo fisico" di indirizzare la memoria piuttosto limita ciò che si può fare, in particolare per quanto riguarda l'esecuzione di più programmi contemporaneamente.

Immettere "indirizzamento virtuale". Ora, l'indirizzo di memoria 17 del tuo programma non corrisponde più a una parte specifica della memoria fisica. Invece, quando la CPU vuole i dati da quell'indirizzo, chiede un componente chiamato "Memory Management Unit" (MMU) che, in collaborazione con il sistema operativo, scopre come soddisfare tale richiesta.

Ciò consente un certo numero di miglioramenti in termini di efficienza e capacità. Il più noto è probabilmente "swap", comunemente noto come "memoria virtuale": l'indirizzo 17 potrebbe essere temporaneamente memorizzato su disco e la richiesta del programma viene messa in attesa mentre il sistema operativo memorizza il contenuto di una parte della memoria fisica su disco, quindi carica il pezzo che il tuo programma pensa come "indirizzo 17". Poiché la gamma di indirizzi virtuali disponibili è in genere molto più grande della quantità di memoria fisica, ciò consente al sistema operativo di dare l'aspetto di un computer con molta più RAM di quanto non sia in realtà.

Il maggior guadagno derivante dall'indirizzamento virtuale, tuttavia, è del tutto nascosto all'utente tipico: consente al sistema operativo di dare a ciascun programma l'illusione di essere l'unico programma in esecuzione sul computer. L'indirizzo 17 del tuo programma non è lo stesso pezzo di memoria di "indirizzo 17" di un altro programma. Ciò significa che i programmi non devono preoccuparsi di nascondere i segreti gli uni dagli altri: Javascript in esecuzione nel tuo browser web, ad esempio, non può leggere il contenuto della memoria del tuo gestore di password.

Per ragioni di efficienza, il kernel di Linux assegna metà degli indirizzi virtuali disponibili a se stesso nella vista della memoria di ciascun programma e assegna tutta la memoria fisica come parte di tale intervallo di indirizzi (il kernel di Windows fa cose simili, sebbene i dettagli vari) . Ciò consente al kernel di accedere a qualsiasi cosa di cui ha bisogno senza dover regolare la MMU. Il kernel quindi protegge il suo spazio di indirizzamento in modo che un normale programma che tenta di leggere la memoria si bloccherà.

Enter Meltdown: consente a un programma di leggere indirettamente la memoria del kernel senza crash. È molto più lento della lettura diretta (in genere circa 150 kilobyte al secondo, dove la lettura diretta viene misurata in gigabyte al secondo), ma ignora la protezione. Poiché tutta la memoria fisica è mappata nello spazio degli indirizzi del kernel, un malintenzionato che impiega Meltdown può rompere l'illusione del "Io sono l'unico programma".

Un normale utente desktop non ha molti programmi che hanno bisogno di mantenere segreti gli uni dagli altri, e non esegue molto codice non affidabile - l'unica grande minaccia di Meltdown è il Javascript ostile che legge i contenuti del proprio gestore di password, e i dettagli di come Meltdown funziona rendono difficile l'utilizzo da Javascript.

La grande minaccia di Meltdown è il cloud e i provider di hosting condiviso. Questi computer eseguono regolarmente programmi provenienti da utenti non fidati e dipendono dall'illusione di "Io sono l'unico utente" per mantenere le cose al sicuro. Meltdown consente a un utente malintenzionato con un account di rompere questa illusione e fare cose come rubare le chiavi private, i nomi utente e le password SSL di altri utenti, le credenziali di elaborazione dei pagamenti e altre informazioni sensibili.

    
risposta data 07.01.2018 - 21:43
fonte
-1

Ad esempio, puoi leggere la chiave privata ssh del sistema o qualsiasi altro numero di risorse protette.

    
risposta data 07.01.2018 - 18:26
fonte
-2

Dipende tutto dal tipo di sistema di cui stiamo parlando.

Non accadrà nulla se non hai malware sul tuo computer. Se stai usando il tuo desktop o laptop come utente singolo e hai malware, hai perso. Senza alcun accesso alla memoria del kernel. Perché quel malware può leggere i file sul tuo disco rigido, può scoprire tutto sul singolo utente.

Ma su un server, se c'è malware "sul computer", in realtà è installato solo per un utente. Quell'utente ha perso. Ma gli altri 100 utenti sullo stesso server dovrebbero essere sicuri. Ora, se è possibile accedere alla memoria del kernel, è possibile capire come attaccare gli altri 100 utenti sul server.

    
risposta data 07.01.2018 - 20:50
fonte

Leggi altre domande sui tag