Vulnerabilità nel sottosistema eBPF che consentono di eludere la protezione contro gli attacchi di tipo Spectre.

Nel kernel di Linux è stata rilevata una vulnerabilità (CVE-2021-33624) che consente di utilizzare la sottosistema eBPF per eludere le protezioni contro le vulnerabilità di tipo Spectre, permettendo di determinare il contenuto della memoria a causa della creazione di condizioni per l'esecuzione speculativa di determinate operazioni. Per un attacco di tipo Spectre è necessaria una sequenza specifica di istruzioni nel codice privilegiato che porta all'esecuzione speculativa delle istruzioni. Attraverso la manipolazione dei programmi BPF trasmessi per l'esecuzione, è possibile generare istruzioni simili in eBPF e ottenere perdite di contenuti della memoria del kernel e di aree fisiche di memoria arbitraria.

La vulnerabilità è causata da lacune nel verificatore, utilizzato per rilevare errori e attività non valide nei programmi BPF. Il verificatore esplora i possibili percorsi di esecuzione del codice, ma ignora le ramificazioni che non sono valide secondo la semantica dell'architettura dell'istruzione. Durante l'esecuzione di un programma BPF, tali ramificazioni non considerate dal verificatore possono essere previste erroneamente dal processore ed eseguite in modalità speculativa. Ad esempio, analizzando l'operazione "load", il verificatore presume che l'istruzione utilizzi un registro con un indirizzo il cui valore è sempre compreso nei limiti definiti, ma un attaccante può creare condizioni in cui il processore tenterà di eseguire speculativamente l'operazione con un indirizzo che non soddisfa i requisiti di verifica.

Il problema si presenta a partire dalla versione 4.15 del kernel ed è stato corretto tramite patch (1, 2, 3, 4). Nei sistemi operativi, la vulnerabilità resta ancora irrisolta (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Si può anche notare un'osservazione sull'impatto sulle prestazioni delle misure di protezione contro le vulnerabilità di tipo Spectre. Nella nota vengono riassunti i risultati dell'ottimizzazione del debugger rr (Record and Replay), creato in Mozilla per il debug di errori difficili da riprodurre in Firefox. La memorizzazione delle chiamate di sistema utilizzate per verificare l'esistenza delle directory ha permesso di ridurre il tempo di esecuzione dell'operazione "rr sources" per un progetto di test da 3 minuti e 19 secondi a 36 secondi.

L'autore dell'ottimizzazione ha deciso di verificare quanto sarebbe cambiata la prestazione dopo aver disabilitato che le misure di protezione contro Spectre. Dopo l'avvio del sistema con il parametro "mitigations=off", il tempo di esecuzione di "rr sources" senza ottimizzazione è stato di 2 minuti e 5 secondi (1,6 volte più veloce), mentre con l'ottimizzazione è stato di 33 secondi (il 9% più veloce). È interessante notare che la disattivazione della protezione contro Spectre ha ridotto non solo di 1,4 volte il tempo di esecuzione del codice a livello di kernel (da 2m9s a 1m32s), ma ha anche dimezzato il tempo di esecuzione nello spazio utente (da 1m9s a 0m33s), presumibilmente a causa della diminuzione dell'efficacia del cache della CPU e dei reset TLB con la protezione contro Spectre attivata.

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