One (Thread) Can Keep a (PRNG) Secret, but not Two
Questo articolo presenta il primo attacco criptanalitico che sfrutta una race condition nel PRNG dell'IPv6 Fragment ID del kernel XNU per prevedere i numeri di sequenza e consentire lo spoofing off-path del traffico TCP e UDP, una vulnerabilità ora corretta da Apple come CVE-2024-27823.
Articolo originale sotto licenza CC BY 4.0 (http://creativecommons.org/licenses/by/4.0/). Questa è una spiegazione generata dall'IA dell'articolo qui sotto. Non è stata scritta né approvata dagli autori. Per precisione tecnica, consulta l'articolo originale. Leggi il disclaimer completo
Immagina di stare inviando una lettera grande e importante a un amico. Poiché la lettera è troppo grande per una singola busta, l'ufficio postale (la rete) la divide in pezzi più piccoli, ovvero dei frammenti. Per assicurarsi che i pezzi vengano rimessi insieme nel giusto ordine, a ogni pezzo viene assegnato un numero di biglietto unico (chiamato ID del frammento).
Il documento che hai chiesto descrive un modo ingegnoso in cui un hacker può indovinare questi numeri di biglietto in anticipo, permettendogli di sostituire un pezzo della tua lettera con uno falso senza che tu o il tuo amico ve ne accorgiate.
Ecco la scomposizione dell'attacco, spiegata in modo semplice:
1. La Macchina dei Biglietti Segreti (Il PRNG)
I computer Apple (macOS e iOS) utilizzano una speciale "macchina dei biglietti" all'interno del loro cervello (il kernel) per generare questi numeri di biglietto casuali. La macchina dovrebbe essere imprevedibile, come lanciare un dado. Se i numeri sono veramente casuali, nessuno può indovinare il prossimo biglietto.
Tuttavia, i ricercatori hanno trovato un difetto nel modo in cui questa macchina funziona quando è molto impegnata.
2. Il Problema "Due Persone, Una Macchina" (La Race Condition)
Immagina un bancone dei biglietti molto affollato dove due persone (due thread del computer) cercano di prendere un biglietto nello stesso identico millisecondo.
- Normalmente: La macchina dà un biglietto alla Persona A, poi alla Persona B, un numero diverso.
- Il Glitch: Poiché la macchina non è "thread-safe" (non ha un blocco per impedire a due persone di afferrare il biglietto contemporaneamente), entrambi potrebbero prendere lo stesso numero di partenza. Entrambi eseguono il calcolo, ma poiché sono partiti dallo stesso numero e hanno compiuto passi leggermente diversi, finiscono per produrre un modello strano.
Il Modello: I ricercatori hanno scoperto che, se si innesca questa "corsa" (race), la macchina produce una sequenza specifica di numeri che appare così: A, B, C, B.
Nota che B appare due volte, separato da C. Questo "B-C-B" è la prova schiacciante. Dice all'attaccante: "Ehi! La macchina ha appena subito una race condition! Ora posso vedere come girano gli ingranaggi interni della macchina".
3. Decifrare il Codice (Crittanalisi)
Una volta che l'attaccante vede abbastanza di questi modelli "B-C-B", può fare l'ingegneria inversa della macchina.
- Pensa alla macchina come a una combinazione di una cassaforte. Il modello "B-C-B" fornisce all'attaccante un indizio sulla posizione attuale dei dischi all'interno della combinazione.
- Raccogliendo abbastanza di questi indizi, l'attaccante può scoprire l'intero stato interno della macchina.
- Una volta noto lo stato interno, può prevedere esattamente quali saranno i prossimi numeri di biglietto.
4. Lo Scambio (L'Attacco)
Ora che l'attaccante può prevedere i numeri dei biglietti, può eseguire un trucco "man-in-the-middle", ma senza trovarsi in mezzo.
- Lo Scenario: Stai inviando un file grande (come un backup del tuo codice) a un server. Il file viene diviso in pezzi.
- La Protezione: Il primo pezzo del file contiene la tua password e la tua firma (autenticazione). Il server controlla prima questo primo pezzo per verificare chi sei veramente.
- Il Trucco: L'attaccante aspetta che arrivi il primo pezzo. Poi, usa la sua previsione per indovinare il numero del biglietto per il secondo pezzo. Invia rapidamente un secondo pezzo falso con un messaggio malevolo (come un virus o un file modificato) che ha il numero di biglietto corretto.
- Il Risultato: Il server riceve il primo pezzo genuino (con la password valida) e il secondo pezzo falso (con il virus). Li mette insieme, pensa che tutto sia a posto, e salva il file infetto. L'attaccante ha aggirato il controllo di sicurezza perché il controllo è avvenuto solo sul primo pezzo.
Esempi del Mondo Reale dal Documento
I ricercatori hanno testato questo su due cose specifiche:
- NFS (Network File System): Hanno dimostrato come un attaccante possa modificare un file che viene salvato su un server. Ad esempio, potrebbero iniettare un "Trojan horse" in un normale file di codice informatico. Quando uno sviluppatore compila successivamente quel codice, il virus viene eseguito.
- HTTP (Navigazione Web): Hanno dimostrato come un attaccante possa modificare una richiesta web (come un login o l'invio di un modulo) mentre viaggia sulla rete.
Perché Questo è Importante
- È Nuovo: Questa è la prima volta che qualcuno utilizza una "race condition" (un glitch di temporizzazione) per violare un generatore di numeri casuali. Di solito, le race condition causano solo crash; qui, sono state usate per rubare segreti.
- È Pratico: L'attacco funziona su veri dispositivi Apple (chip M1, M2, Mac Intel) che eseguono varie versioni di macOS e iOS.
- La Soluzione: Apple ha già corretto il problema. Hanno assegnato l'ID CVE-2024-27823. La correzione consiste nel rendere la macchina dei biglietti "thread-safe", in modo che due processi non possano afferrare il numero di partenza nello stesso momento.
In breve: Il documento mostra che se il generatore di numeri casuali di un computer si confonde a causa di due cose che accadono contemporaneamente, un hacker può usare quella confusione per prevedere il futuro, scambiare parti dei tuoi dati e far passare malware oltre i tuoi controlli di sicurezza.
Sommerso dagli articoli nel tuo campo?
Ricevi digest giornalieri degli articoli più recenti corrispondenti alle tue parole chiave di ricerca — con riassunti tecnici, nella tua lingua.