Retbleed — un nuovo attacco al meccanismo di esecuzione speculativa delle CPU Intel e AMD

Un gruppo di ricercatori dell'ETH di Zurigo ha identificato una nuova variante di attacco al meccanismo di esecuzione speculativa delle transizioni indirette nella CPU, che consente di estrarre informazioni dalla memoria del kernel o di organizzare un attacco al sistema host da macchine virtuali. Le vulnerabilità hanno ricevuto il nome in codice Retbleed (CVE-2022-29900, CVE-2022-29901) e sono simili negli aspetti fondamentali agli attacchi Spectre-v2. La differenza risiede nell'organizzazione dell'esecuzione speculativa di codice arbitrario durante l'elaborazione dell'istruzione "ret" (return), che estrae l'indirizzo per il salto dallo stack, anziché utilizzare un salto indiretto tramite l'istruzione "jmp" caricando l'indirizzo dalla memoria o dal registro CPU.

Un attaccante può creare condizioni per una previsione errata del salto e organizzare un salto speculativo mirato su un blocco di codice non previsto dalla logica di esecuzione del programma. Alla fine, il processore determinerà che la previsione del ramo è risultata errata e ripristinerà l'operazione allo stato iniziale, ma i dati elaborati durante l'esecuzione speculativa rimarranno nella cache e nei buffer microarchitetturali. Se il blocco eseguito erroneamente accede alla memoria, la sua esecuzione speculativa porterà all'insediamento nella cache generale e ai dati letti dalla memoria.

Per determinare i dati rimasti nella cache dopo l'esecuzione speculativa delle operazioni, un aggressore può utilizzare metodi per identificare i dati residui tramite canali alternativi, ad esempio analizzando le variazioni nei tempi di accesso ai dati in cache e a quelli non in cache. Per un'estrazione mirata delle informazioni da aree con un diverso livello di privilegi (ad esempio, dalla memoria del kernel), vengono utilizzati "gadget" — sequenze di istruzioni presenti nel kernel, adatte per la lettura speculativa dei dati dalla memoria in base a condizioni esterne che possono essere influenzate dall'aggressore.

Per proteggere contro gli attacchi classici della classe Spectre, che sfruttano le istruzioni di salto condizionale e indiretto, la maggior parte dei sistemi operativi utilizza la tecnica "retpoline", che si basa sulla sostituzione delle operazioni di salto indiretto con l'istruzione "ret", per la quale i processori utilizzano un blocco separato di previsione dello stato dello stack, non impiegando il blocco di previsione dei salti. Quando è stata introdotta la retpoline nel 2018, si credeva che manipolazioni simili a Spectre degli indirizzi non fossero applicabili in pratica per il salto speculativo tramite l'istruzione "ret".

I ricercatori che hanno sviluppato il metodo di attacco Retbleed hanno dimostrato la possibilità di creare condizioni microarchitetturali per avviare un salto speculativo utilizzando l'istruzione "ret" e hanno pubblicato un toolkit pronto per identificare nel kernel Linux le sequenze di istruzioni vulnerabili (gadget) adatte per l'esploitazione, in cui si manifestano tali condizioni.

Durante la ricerca è stato sviluppato un exploit funzionante che consente, su sistemi con CPU Intel, di estrarre dati arbitrari dalla memoria del kernel con una velocità di 219 byte al secondo e un'accuratezza del 98% partendo da un processo non privilegiato nello spazio utente. Su processori AMD, l'efficacia dell'exploit è molto superiore: la velocità di perdita di dati raggiunge i 3,9 KB al secondo. Come esempio pratico, viene mostrato come, utilizzando l'exploit proposto, sia possibile determinare il contenuto del file /etc/shadow. Su sistemi con CPU Intel, l'attacco per determinare l'hash della password dell'utente root è stato completato in 28 minuti, mentre su sistemi con CPU AMD ci sono voluti solo 6 minuti.

Riproduci video

La possibilità di eseguire l'attacco è stata confermata per le generazioni 6-8 di processori Intel, prodotti fino al terzo trimestre del 2019 (incluso Skylake), e per i processori AMD basati sulle microarchitetture Zen 1, Zen 1+ e Zen 2, prodotti fino al secondo trimestre del 2021. Nei modelli più recenti di processori, come AMD Zen3 e Intel Alder Lake, nonché nei processori ARM, il problema è mitigato dai meccanismi di protezione esistenti. Ad esempio, l'uso delle istruzioni IBRS (Indirect Branch Restricted Speculation) aiuta a difendersi dall'attacco.

Per il kernel Linux e l'ipervisore Xen è stato preparato un pacchetto di modifiche per i vecchi CPU, risolvendo il problema a livello software. La patch proposta per il kernel Linux modifica 68 file, aggiunge 1783 righe e ne elimina 387. Sfortunatamente, la protezione comporta notevoli sovraccosti — nei test condotti su processori AMD e Intel, la diminuzione delle prestazioni è stimata tra il 14% e il 39%. È preferibile applicare una protezione basata su istruzioni IBRS, disponibili nelle nuove generazioni di CPU Intel e supportate a partire dal kernel Linux 4.19.

Sui processori Intel, la sostituzione dell'indirizzo per i salti indiretti speculativi avviene grazie a una caratteristica che si manifesta durante il sottoflusso nel buffer di previsione del contenuto dello stack (Return Stack Buffer). In presenza di tali condizioni, per l'istruzione «ret» inizia ad applicarsi una logica di selezione dell'indirizzo simile a quella utilizzata nei normali salti indiretti. Nel kernel Linux sono stati trovati più di mille punti che creano condizioni per l'inizio di tale sottoflusso e sono accessibili tramite chiamate di sistema.

Sui processori AMD, l'esecuzione speculativa dell'istruzione «ret» avviene senza legame con il buffer specifico per lo stack (Return Address Stack) e il blocco di previsione dei salti considera l'istruzione «ret» non come un ritorno al controllo, ma come un salto indiretto, e di conseguenza utilizza per la previsione i dati per i salti indiretti. In tali condizioni, praticamente qualsiasi operazione «ret», raggiungibile tramite una chiamata di sistema, può essere sfruttata per l'exploitation.

In aggiunta, nel CPU AMD è stata identificata un'altra vulnerabilità (CVE-2022-23825, Branch Type Confusion), legata all'esecuzione di salti fasulli: le condizioni per la previsione dei salti possono verificarsi anche in assenza delle necessarie istruzioni di branching, permettendo di influenzare il buffer di previsione dei salti senza l'istruzione «ret». Questa caratteristica complica notevolmente l'implementazione di misure di protezione e richiede una pulizia più attiva del buffer di previsione dei salti. Si prevede che l'aggiunta di una protezione completa nel kernel porterà ad un incremento dei costi del 209%.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster