È stata scoperta una vulnerabilità di classe Meltdown nei processori AMD basati sulle microarchitetture Zen+ e Zen 2

Un gruppo di ricercatori dell'Università Tecnica di Dresda ha individuato una vulnerabilità (CVE-2020-12965) nei processori AMD basati sulle microarchitetture Zen+ e Zen 2, che consente un attacco di classe Meltdown. Inizialmente si presumeva che i processori AMD Zen+ e Zen 2 non fossero sensibili alla vulnerabilità Meltdown, ma i ricercatori hanno identificato una caratteristica che porta ad un accesso speculativo ad aree di memoria protette quando si utilizzano indirizzi virtuali non canonici.

L'architettura AMD64 utilizza solo i primi 48 bit dell'indirizzo virtuale e ignora i restanti 16 bit. Si precisa che i bit da 48 a 63 devono sempre copiare il valore del bit 47 (estensione bit di segno). Se questa condizione viene violata e si tenta di accedere ad un indirizzo con valori arbitrari dei bit superiori, il processore genera un'eccezione. Riempiendo ripetutamente i bit superiori, lo spazio degli indirizzi disponibile viene diviso in due blocchi: uno inferiore (da 0 a 00007FFFFFFFFFFFFFF), in cui i bit superiori sono impostati a 800000000000, e uno superiore (da FFFF1 a FFFFFFFFFFFFFFFF), in cui tutti i bit superiori sono impostati su XNUMX.

Gli indirizzi che rientrano nei blocchi specificati sono detti canonici, mentre gli indirizzi errati con contenuto arbitrario dei bit superiori sono detti non canonici. L'intervallo inferiore di indirizzi canonici viene generalmente allocato per i dati di processo e l'intervallo superiore viene utilizzato per i dati del kernel (l'accesso a questi indirizzi dallo spazio utente è bloccato a livello di separazione dei privilegi).

La classica vulnerabilità Meltdown si basa sul fatto che durante l'esecuzione speculativa delle istruzioni, il processore può accedere ad un'area dati privata e quindi scartare il risultato perché i privilegi impostati vietano tale accesso al processo dell'utente. Nel programma, il blocco eseguito speculativamente è separato dal codice principale da un ramo condizionale, che in condizioni reali si attiva sempre, ma a causa del fatto che l'istruzione condizionale utilizza un valore calcolato che il processore non conosce durante l'esecuzione preventiva di il codice, tutte le opzioni di ramo vengono eseguite in modo speculativo.

Poiché le operazioni eseguite speculativamente utilizzano la stessa cache delle istruzioni eseguite normalmente, è possibile durante l'esecuzione speculativa impostare dei marcatori nella cache che riflettono il contenuto dei singoli bit in un'area di memoria privata, e quindi nel codice eseguito normalmente determinare il loro valore attraverso la temporizzazione. l'analisi accede ai dati memorizzati nella cache e non nella cache.

Una caratteristica della nuova vulnerabilità che colpisce i processori AMD Zen+ e Zen 2 è che le CPU consentono operazioni speculative di lettura e scrittura che accedono alla memoria utilizzando indirizzi non canonici non validi, semplicemente ignorando i 16 bit superiori. Pertanto, durante l'esecuzione speculativa del codice, il processore utilizza sempre solo i 48 bit inferiori e la validità dell'indirizzo viene controllata separatamente. Se, durante la traduzione di un indirizzo virtuale non canonico in un indirizzo fisico nel buffer di traduzione associativo (TLB), viene rilevata una corrispondenza nella parte canonica dell'indirizzo, l'operazione di caricamento speculativo restituirà il valore senza tenere conto del contenuto dei 16 bit superiori, che consente di bypassare la condivisione della memoria tra thread. Successivamente l'operazione verrà considerata non valida e scartata, ma l'accesso alla memoria verrà completato e i dati finiranno nella cache.

Durante l'esperimento, utilizzando la tecnica di determinazione del contenuto della cache FLUSH+RELOAD, i ricercatori sono riusciti a organizzare un canale per il trasferimento nascosto dei dati ad una velocità di 125 byte al secondo. Oltre ai chip AMD, il problema riguarda anche tutti i processori Intel, che sono soggetti alla classica vulnerabilità Meltdown. Le stesse tecniche che aiutano a bloccare gli attacchi Meltdown, come l’utilizzo delle istruzioni LFENCE, possono essere utilizzate per proteggersi da questo nuovo tipo di attacco. Ad esempio, se un processore Intel include la protezione hardware contro Meltdown o se il sistema ha la protezione software abilitata, tali configurazioni non sono suscettibili alla nuova variante di attacco.

Allo stesso tempo, i ricercatori notano che, rispetto ai processori Intel, l'architettura dei processori AMD limita la possibilità di effettuare attacchi reali, ma non esclude l'uso di un nuovo metodo in combinazione con altri attacchi microarchitettonici per aumentarne l'efficacia. In particolare, l'attacco proposto non consente di determinare il contenuto delle aree di memoria del kernel e di altri processi, ma si limita alla possibilità di accedere ad altri thread dello stesso programma in esecuzione nello stesso spazio di memoria virtuale.

Poiché un programma senza vulnerabilità ha la capacità di accedere ai propri thread, da un punto di vista pratico il metodo è interessante per aggirare l'isolamento sandbox e organizzare l'interferenza con il lavoro di altri thread in programmi che consentono l'esecuzione di file di terze parti codice, come browser Web e motori JIT. I ricercatori hanno esaminato la vulnerabilità del motore JavaScript SpiderMonkey e del kernel Linux agli attacchi, ma non hanno trovato sequenze di codice vulnerabili che potrebbero essere utilizzate per sferrare un attacco. Oltre ad attaccare le applicazioni, il metodo può essere utilizzato anche per forzare flussi di dati inaccettabili tra gli elementi della microarchitettura del processore sfruttando altre vulnerabilità della microarchitettura.

Fonte: opennet.ru

Aggiungi un commento