I ricercatori del Massachusetts Institute of Technology hanno identificato la tecnica di attacco TONTOU (Time-of-Neutralization to Time-of-Use), che offre un nuovo modo per sfruttare vulnerabilità microarchitettoniche di tipo Spectre v2. La vulnerabilità consente di determinare il contenuto della memoria del kernel durante l'esecuzione di un exploit nello spazio utente. Il codice per bloccare lo sfruttamento della vulnerabilità è stato integrato nel kernel Linux il 5 agosto ed è incluso nelle versioni 7.1.7, 6.18.43, 6.12.102, 6.6.149, 6.1.181, 5.15.214 e 5.10.263.
I ricercatori hanno dimostrato la possibilità di un attacco da parte di un utente locale non privilegiato per determinare l'hash della password dell'utente root, memorizzata nel file /etc/shadow e caricata in memoria durante l'autenticazione nel sistema. I ricercatori sono riusciti ad ottenere una fuoriuscita di dati dalla memoria del kernel con una velocità di 5,47 byte al secondo e una precisione del 91,97%. Su 10 esecuzioni dell'exploit, durate in media 18 minuti, in metà dei casi è stato possibile identificare con successo la presenza nella memoria del file /etc/shadow ed estrarne il contenuto.
L'exploit è stato dimostrato su sistemi con processori AMD e può essere applicato con CPU AMD delle famiglie Zen 1-4. Su sistemi Intel, l'attacco è comunque realizzabile, ma lo sfruttamento è più complesso. Per proteggere da overflow dello stack degli indirizzi di ritorno e bloccare la vulnerabilità SRSO (Speculative Return Stack Overflow) nei processori AMD viene utilizzato un meccanismo di protezione Safe-RET, che pulisce il buffer di previsione dei salti dopo ogni utilizzo e restringe la finestra di attacco a 2 istruzioni, eseguite in un paio di decine di nanosecondi.
Per aggirare questa protezione e ampliare la finestra di attacco, è stata implementata una tecnica di rallentamento della CPU, che ha permesso di eseguire la sostituzione dell'interruzione al momento giusto per reindirizzare il flusso di esecuzione nel kernel e utilizzare il gestore delle interruzioni per alterare la registrazione nel buffer delle predizioni di salto. Per sfruttare la vulnerabilità SRSO, l'attaccante può creare condizioni in cui il blocco di predizione dei salti esegue speculativamente un gran numero di chiamate CALL errate, sufficienti a sovraccaricare lo stack degli indirizzi di ritorno e sovrascrivere i punti di ritorno correttamente previsti, posizionati all'inizio dello stack. Di conseguenza, gli elementi iniziali dello stack possono essere sovrascritti con valori scelti dall'attaccante, portando all'utilizzo di questi valori sostituiti durante l'esecuzione speculativa dell'istruzione RET nel contesto di un altro processo.
Il processore riconoscerà che la previsione del ramo non si è avverata e annullerà l'operazione allo stato originale, ma i dati elaborati durante l'esecuzione speculativa rimarranno nel cache e nei buffer microarchitettonici. Se il blocco eseguito erroneamente accede alla memoria, la sua esecuzione speculativa porterà all'accumulo nel cache generale e dei dati letti dalla memoria. Per estrarre informazioni dal cache può essere utilizzato uno dei metodi basati sull'analisi delle variazioni dei tempi di accesso ai dati in cache e non in cache.
Fonte: opennet.ru
