Martello di fila - Row hammer

Row Hammer (scritto anche come rowhammer ) è un exploit di sicurezza che sfrutta un effetto collaterale non intenzionale e indesiderabile nella memoria dinamica ad accesso casuale (DRAM) in cui le celle di memoria interagiscono elettricamente tra loro perdendo le loro cariche, eventualmente modificando il contenuto della vicina righe di memoria che non sono state indirizzate nell'accesso alla memoria originale. Questa elusione dell'isolamento tra le celle di memoria DRAM deriva dall'elevata densità di celle nelle moderne DRAM e può essere innescata da schemi di accesso alla memoria appositamente predisposti che attivano rapidamente le stesse righe di memoria numerose volte.

L'effetto row hammer è stato utilizzato in alcuni exploit di sicurezza informatica di escalation dei privilegi e teoricamente sono possibili anche attacchi basati sulla rete.

Esistono diverse tecniche basate sull'hardware per prevenire il verificarsi dell'effetto martello di riga, incluso il supporto richiesto in alcuni processori e tipi di moduli di memoria DRAM .

Sfondo

Un'illustrazione di alto livello dell'organizzazione DRAM, che include celle di memoria (quadrati blu), decodificatori di indirizzi (rettangoli verdi) e amplificatori di rilevamento (quadrati rossi)

Nella RAM dinamica (DRAM), ogni bit di dati memorizzati occupa una cella di memoria separata che è implementata elettricamente con un condensatore e un transistor . Lo stato di carica di un condensatore (caricato o scaricato) è ciò che determina se una cella DRAM memorizza "1" o "0" come valore binario . Un numero enorme di celle di memoria DRAM è impacchettato in circuiti integrati , insieme ad una logica aggiuntiva che organizza le celle ai fini della lettura, scrittura e aggiornamento dei dati.

Le celle di memoria (quadrati blu in entrambe le illustrazioni) sono ulteriormente organizzate in matrici e indirizzate tramite righe e colonne. Un indirizzo di memoria applicato a una matrice viene suddiviso nell'indirizzo di riga e nell'indirizzo di colonna, che vengono elaborati dai decodificatori di indirizzo di riga e di colonna (in entrambe le illustrazioni, rispettivamente, rettangoli verdi verticali e orizzontali). Dopo che un indirizzo di riga seleziona la riga per un'operazione di lettura (la selezione è anche nota come attivazione di riga ), i bit di tutte le celle della riga vengono trasferiti negli amplificatori di rilevamento che formano il buffer di riga (quadrati rossi in entrambe le illustrazioni), da cui il bit esatto viene selezionato utilizzando l'indirizzo di colonna. Di conseguenza, le operazioni di lettura sono di natura distruttiva perché la progettazione della DRAM richiede che le celle di memoria vengano riscritte dopo che i loro valori sono stati letti trasferendo le cariche della cella nel buffer di riga. Le operazioni di scrittura decodificano gli indirizzi in modo simile, ma a causa della progettazione è necessario riscrivere intere righe affinché il valore di un singolo bit venga modificato.​

Come risultato della memorizzazione di bit di dati utilizzando condensatori che hanno una velocità di scarica naturale, le celle di memoria DRAM perdono il loro stato nel tempo e richiedono la riscrittura periodica di tutte le celle di memoria, che è un processo noto come aggiornamento. Come un altro risultato del design, DRAM la memoria è suscettibile di cambiamenti casuali nei dati memorizzati, noti come errori di memoria soft e attribuiti ai raggi cosmici e ad altre cause. Esistono diverse tecniche che contrastano gli errori di memoria soft e migliorano l'affidabilità della DRAM, di cui la memoria con codice di correzione degli errori (ECC) e le sue varianti avanzate (come la memoria lockstep ) sono più comunemente utilizzate.

Panoramica

Le attivazioni rapide delle righe (righe gialle) possono modificare i valori dei bit memorizzati nella riga della vittima (riga viola).​

L'aumento della densità dei circuiti integrati DRAM ha portato a celle di memoria fisicamente più piccole contenenti meno carica , con conseguente riduzione dei margini di rumore operativo , aumento delle velocità di interazione elettromagnetica tra le celle di memoria e maggiore possibilità di perdita di dati. Di conseguenza, sono stati osservati errori di disturbo , causati da celle che interferiscono l'una con l'altra e si manifestano come cambiamenti casuali nei valori dei bit memorizzati nelle celle di memoria interessate. La consapevolezza degli errori di disturbo risale ai primi anni '70 e Intel 1103 come i primi circuiti integrati DRAM disponibili in commercio; da allora, i produttori di DRAM hanno impiegato varie tecniche di mitigazione per contrastare gli errori di disturbo, come il miglioramento dell'isolamento tra le celle e l'esecuzione di test di produzione. Tuttavia, i ricercatori hanno dimostrato in un'analisi del 2014 che i chip DDR3 SDRAM disponibili in commercio prodotti nel 2012 e nel 2013 sono suscettibili di errori di disturbo, mentre usano il termine martello di riga per denominare l'effetto collaterale associato che ha portato ai salti di bit osservati .

L'opportunità che l'effetto martello di riga si verifichi nella memoria DDR3 è principalmente attribuita all'elevata densità di celle di memoria di DDR3 e ai risultati delle interazioni associate tra le celle, mentre le attivazioni rapide delle righe DRAM sono state determinate come la causa principale. Frequenti attivazioni di riga causano fluttuazioni di tensione sulle linee di selezione di riga associate, che sono state osservate per indurre velocità di scarica superiori al naturale in condensatori appartenenti a righe di memoria vicine (adiacenti, nella maggior parte dei casi), che sono chiamate righe di vittima ; se le celle di memoria interessate non vengono aggiornate prima che perdano troppa carica, si verificano errori di disturbo. I test mostrano che si può osservare un errore di disturbo dopo aver eseguito circa 139.000 accessi successivi alle righe di memoria (con cache flush ) e che fino a una cella di memoria ogni 1.700 celle può essere suscettibile. Questi test mostrano anche che il tasso di errori di disturbo non è sostanzialmente influenzato dall'aumento della temperatura ambiente, mentre dipende dal contenuto effettivo della DRAM perché alcuni schemi di bit determinano tassi di errore di disturbo significativamente più elevati.

Una variante chiamata double-sided martellamento prevede attivazioni mirate di due file DRAM che circondano una fila vittima: nell'illustrazione fornita in questa sezione, questa variante attiverebbe entrambe le file gialle con l'obiettivo di indurre bit flip nella fila viola, che in questo caso sarebbe la fila della vittima. I test mostrano che questo approccio può comportare un tasso significativamente più elevato di errori di disturbo, rispetto alla variante che attiva solo una delle righe DRAM adiacenti della riga vittima.​

Mitigazione

Esistono diversi metodi per il rilevamento, la prevenzione, la correzione o l'attenuazione più o meno efficaci dell'effetto del martello pneumatico. I test mostrano che un semplice codice di correzione degli errori , che fornisce funzionalità di correzione dell'errore singolo e rilevamento del doppio errore (SECDED), non è in grado di correggere o rilevare tutti gli errori di disturbo osservati perché alcuni di essi includono più di due bit capovolti per parola di memoria . Inoltre, la ricerca mostra che i colpi di martello di fila a tre bit mirati con precisione impediscono alla memoria ECC di notare le modifiche.

Una soluzione meno efficace consiste nell'introdurre un refresh della memoria più frequente, con intervalli di refresh più brevi dei soliti 64 ms, ma questa tecnica si traduce in un maggiore consumo di energia e un maggiore sovraccarico di elaborazione; alcuni fornitori forniscono aggiornamenti del firmware che implementano questo tipo di mitigazione. Una delle misure di prevenzione più complesse esegue l' identificazione basata su contatore delle righe di memoria a cui si accede di frequente e aggiorna in modo proattivo le righe adiacenti; un altro metodo emette aggiornamenti casuali aggiuntivi non frequenti delle righe di memoria vicine alle righe a cui si accede indipendentemente dalla loro frequenza di accesso. La ricerca mostra che queste due misure di prevenzione causano impatti trascurabili sulle prestazioni.​

Dal rilascio della microarchitettura Ivy Bridge , i processori Intel Xeon supportano il cosiddetto pseudo target row refresh (pTRR) che può essere utilizzato in combinazione con moduli di memoria dual in-line DDR3 (DIMM) conformi a pTRR per mitigare l'effetto row hammer aggiornando automaticamente le possibili righe della vittima, senza alcun impatto negativo sulle prestazioni o sul consumo energetico. Se utilizzati con moduli DIMM non conformi a pTRR, questi processori Xeon per impostazione predefinita ricorrono all'esecuzione di aggiornamenti DRAM a una frequenza doppia rispetto a quella normale, il che si traduce in una latenza di accesso alla memoria leggermente superiore e può ridurre la larghezza di banda della memoria fino al 2-4%.

Lo standard di memoria mobile LPDDR4 pubblicato da JEDEC include il supporto hardware opzionale per il cosiddetto target row refresh (TRR) che previene l'effetto row hammer senza influire negativamente sulle prestazioni o sul consumo energetico. Inoltre, alcuni produttori implementano TRR nei loro prodotti DDR4 , sebbene non faccia parte dello standard di memoria DDR4 pubblicato da JEDEC. Internamente, TRR identifica le possibili righe della vittima, contando il numero di attivazioni di riga e confrontandolo con i valori predefiniti di conteggio massimo di attivazione (MAC) e finestra di attivazione massima ( tMAW ) specifici del chip e aggiorna queste righe per evitare capovolgimenti di bit. Il valore MAC è il numero totale massimo di attivazioni di riga che possono essere incontrate su una particolare riga DRAM in un intervallo di tempo uguale o inferiore alla quantità di tempo t MAW prima che le righe adiacenti vengano identificate come righe vittime; TRR può anche contrassegnare una riga come riga vittima se la somma delle attivazioni di riga per le sue due righe adiacenti raggiunge il limite MAC all'interno della finestra temporale t MAW .

A causa della necessità di un numero enorme di attivazioni di righe DRAM eseguite rapidamente, gli exploit del martello di riga emettono un numero elevato di accessi alla memoria non memorizzati nella cache che causano errori di cache , che possono essere rilevati monitorando il tasso di errori di cache per picchi insoliti utilizzando i contatori delle prestazioni hardware .

La versione 5.0 del software di diagnostica della memoria MemTest86 , rilasciata il 3 dicembre 2013, ha aggiunto un test del martello di fila che controlla se la RAM del computer è suscettibile di errori di disturbo, ma funziona solo se il computer avvia UEFI ; senza UEFI, avvia una versione precedente senza test del martello.

Implicazioni

La protezione della memoria , come modo per impedire ai processi di accedere alla memoria che non è stata assegnata a ciascuno di essi, è uno dei concetti alla base della maggior parte dei sistemi operativi moderni . Utilizzando la protezione della memoria in combinazione con altri meccanismi legati alla sicurezza come gli anelli di protezione , è possibile ottenere la separazione dei privilegi tra i processi, in cui i programmi e i sistemi informatici in generale sono suddivisi in parti limitate ai privilegi specifici che richiedono per eseguire un particolare compito. L'utilizzo della separazione dei privilegi può anche ridurre l'entità dei potenziali danni causati da attacchi alla sicurezza informatica limitando i loro effetti a parti specifiche del sistema.

Gli errori di disturbo (spiegati nella sezione precedente ) sconfiggono efficacemente vari livelli di protezione della memoria " cortocircuitandoli " a un livello hardware molto basso, creando praticamente un tipo di vettore di attacco unico che consente ai processi di alterare il contenuto di parti arbitrarie della memoria principale manipolando direttamente l'hardware di memoria sottostante. In confronto, i vettori di attacco "convenzionali" come i buffer overflow mirano ad eludere i meccanismi di protezione a livello software, sfruttando vari errori di programmazione per ottenere alterazioni dei contenuti della memoria principale altrimenti inaccessibili.

exploit

code1a:
  mov (X), %eax  // read from address X
  mov (Y), %ebx  // read from address Y
  clflush (X)    // flush cache for address X
  clflush (Y)    // flush cache for address Y
  mfence
  jmp code1a
Un frammento di codice assembly x86 che induce l'effetto row hammer (indirizzi di memoria Xe Ydevono essere mappati su diverse righe DRAM nello stesso banco di memoria )

La ricerca iniziale sull'effetto martello di fila, pubblicata nel giugno 2014, descriveva la natura degli errori di disturbo e indicava il potenziale per costruire un attacco, ma non ha fornito alcun esempio di un exploit di sicurezza funzionante. Un successivo documento di ricerca dell'ottobre 2014 non implicava l'esistenza di problemi relativi alla sicurezza derivanti dall'effetto martello.

Il 9 marzo, 2015, Google 's Project Zero ha rivelato due di lavoro escalation dei privilegi sfrutta basato sull'effetto fila martello, che stabilisce la sua natura sfruttabili sul x86-64 architettura. Uno degli exploit rivelati prende di mira il meccanismo di Google Native Client (NaCl) per l'esecuzione di un sottoinsieme limitato di istruzioni macchina x86-64 all'interno di una sandbox , sfruttando l'effetto del martello di fila per uscire dalla sandbox e ottenere la capacità di emettere chiamate di sistema direttamente. Questa vulnerabilità NaCl , tracciata come CVE - 2015-0565 , è stata mitigata modificando NaCl in modo da non consentire l'esecuzione dell'istruzione della macchina clflush( cache line flush), che in precedenza si riteneva fosse necessaria per costruire un efficace attacco row hammer.

Il secondo exploit rivelato da Project Zero viene eseguito come un processo Linux non privilegiato sull'architettura x86-64, sfruttando l'effetto row hammer per ottenere l'accesso illimitato a tutta la memoria fisica installata in un computer. Combinando gli errori di disturbo con memoria spruzzatura , questo exploit è in grado di alterare voci della tabella pagine utilizzate dal memoria virtuale di sistema per la mappatura indirizzi virtuali a indirizzi fisici , che determina l'exploit accedere memoria senza restrizioni. Grazie alla sua natura e la incapacità dell'architettura x86-64 di creare clflushun'istruzione macchina privilegiata, questo exploit difficilmente può essere mitigato su computer che non utilizzano hardware con meccanismi di prevenzione del martello di fila incorporati. Durante il test della fattibilità degli exploit, Project Zero ha scoperto che circa la metà dei 29 laptop testati ha riscontrato errori di disturbo, alcuni dei quali si sono verificati su laptop vulnerabili in meno di cinque minuti di esecuzione di codice che induceva a rotture; i laptop testati sono stati prodotti tra il 2010 e il 2014 e utilizzavano memoria DDR3 non ECC.

Nel luglio 2015, un gruppo di ricercatori sulla sicurezza ha pubblicato un documento che descrive un modo indipendente dall'architettura e dal set di istruzioni per sfruttare l'effetto martello. Invece di fare affidamento clflushsull'istruzione per eseguire lo svuotamento della cache, questo approccio ottiene accessi alla memoria non memorizzati causando un tasso molto elevato di rimozione della cache utilizzando modelli di accesso alla memoria accuratamente selezionati. Anche se le politiche di sostituzione della cache differiscono tra i processori, questo approccio supera le differenze di architettura impiegando una strategia di sfratto di cache adattiva algoritmo . Il proof of concept per questo approccio è fornito sia come codice nativo implementazione, e come un puro JavaScript implementazione che gira su Firefox  39. L'implementazione JavaScript, chiamata Rowhammer.js , utilizza grandi array tipizzati e si basa sulla loro allocazione interna utilizzando pagine di grandi dimensioni ; di conseguenza, dimostra un exploit di altissimo livello di una vulnerabilità di livello molto basso.

Nell'ottobre 2016, i ricercatori hanno pubblicato DRAMMER, un'applicazione Android che utilizza Row Hammer, insieme ad altri metodi, per ottenere in modo affidabile l'accesso root su diversi smartphone popolari. La vulnerabilità è stata riconosciuta come CVE - 2016-6728 e Google ha rilasciato una mitigazione entro un mese. Tuttavia, a causa della natura generale delle possibili implementazioni dell'attacco, è difficile implementare in modo affidabile una patch software efficace. A giugno 2018, la maggior parte delle proposte di patch avanzate dal mondo accademico e dall'industria erano poco pratiche da implementare o insufficienti nel fermare tutti gli attacchi. Come mitigazione, i ricercatori hanno proposto una difesa leggera che previene gli attacchi basati sull'accesso diretto alla memoria (DMA) isolando i buffer DMA con righe di guardia.

Guarda anche

  • Rimescolamento della  memoria: funzione del controller di memoria che trasforma i dati dell'utente scritti nella memoria in schemi pseudo-casuali
  • Indurimento da radiazioni  : l'atto di rendere i componenti elettronici resistenti a danni o malfunzionamenti causati dalle radiazioni ionizzanti
  • Singolo evento sconvolto  : un cambiamento di stato causato da ioni o radiazioni elettromagnetiche che colpiscono un nodo sensibile in un dispositivo elettronico
  • Errore morbido  : un tipo di errore che comporta modifiche errate a segnali o dati ma nessuna modifica al dispositivo o al circuito sottostante

Appunti

Riferimenti

link esterno