Torvalds cestina una patch-proposal per Linux 5.8: "Va oltre la stupidità"
Linus Torvalds ha cestinato una patch-proposal per il kernel Linux 5.8 definendola, di fatto, una stupidata. Lo scopo della patch consisteva nel fornire un’ulteriore mitigazione agli attacchi contro la cache dei dati L1 (L1D). La cache L1D è stata introdotta nell’architettura x86 nel 1993 ed è pensata per i dati. Le cosiddette Snoop-assisted L1 data sampling sono vulnerabilità note presenti nei processori Intel e un malware molto complesso può riuscire a leggere informazioni sensibili dalla cache.
La patch dell’ingegnere AWS Balbir Singh consisteva nel fornire un meccanismo opt-in (prctl driven) per svuotare la cache L1D al verificarsi di un context-switch. Supponiamo che un processo memorizzi informazioni su un core fisico e un secondo processo salvi altri dati su un altro core fisico. Se un cybercriminale riesce a interagire con i core della CPU può intercettare l’operazione di snoop che avviene tra i core fisici causando un errore noto come “TSX Asynchronous Abort”. A causa di questo errore alcune operazioni che non sono state ancora completate leggono informazioni in cache trasferendole a processi dipendenti. In questo modo i dati sono facilmente accessibili da chiunque.
Linux 5.8 e la patch della discordia
L’idea di Balbir Singh per risolvere il problema consisteva nello svuotare la cache L1D ad ogni context-switch. L’operazione di cancellazione della cache è anche nota come cache flushing (flush della cache). La commutazione di contesto o context switch, invece, consiste nel cambio del processo correntemente in esecuzione su una delle CPU con relativo salvataggio dello stato delle attività dei core (Program Counter, contenuto dei registri, etc). Questo permette a più processi di condividere una CPU, ed è utile quindi sia nei sistemi con un solo processore, perché consente di eseguire più programmi contemporaneamente, sia nell’ambito del calcolo parallelo, perché garantisce un migliore bilanciamento del carico.
Torvalds però ritiene che questa operazione sia troppo onerosa e comporterebbe un calo prestazionale enorme. Andrebbe a rallentare tutti i processi dipendenti da quello compromesso, così come il processo che gira sull’altro core logico. Per essere ulteriormenti chiari: svuotare la cache ogni volta che il processo attivo si spegne va effettivamente a mitigare questa e altre potenziali minacce, ma danneggia enormemente le prestazioni. Il codice ne risulterebbe appesantito e l’operazione sarebbe molto onerosa e quasi impraticabile.
I do not want the kernel to do things that seem to be “beyond stupid”.
queste le parole di Linus Torvalds, padre di Linux, che non necessitano di traduzione. Inoltre, se SMT (multi-threading simultaneo o “hyper-threading”) è abilitato, svuotare la cache “è folle, dal momento che un malintenzionato porterebbe a termine l’attacco ben prima del context switch“.
Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.