Vulnerabilità nel sottosistema eBPF che consentono di aggirare la protezione contro gli attacchi Spectre

È stata individuata una vulnerabilità nel kernel Linux (CVE-2021-33624) che consente di utilizzare il sottosistema eBPF per aggirare la protezione contro le vulnerabilità della classe Spectre, che consentono di determinare il contenuto della memoria come risultato della creazione delle condizioni per il esecuzione speculativa di alcune operazioni. L'attacco Spectre richiede la presenza di una determinata sequenza di comandi in un codice privilegiato che porta all'esecuzione speculativa delle istruzioni. Manipolando i programmi BPF trasmessi per l'esecuzione, è possibile generare istruzioni simili in eBPF e far trapelare il contenuto della memoria del kernel e aree arbitrarie della memoria fisica attraverso canali laterali.

La vulnerabilità è causata da difetti nel verificatore, utilizzato per rilevare errori e attività inaccettabili nei programmi BPF. Il verificatore enumera i possibili percorsi di esecuzione del codice, ma salta le opzioni di ramificazione che sono inaccettabili dal punto di vista della semantica dell'architettura del set di istruzioni. Quando si esegue un programma BPF, tali opzioni di ramificazione che non vengono prese in considerazione dal verificatore possono essere previste in modo errato dal processore ed eseguite in modalità speculativa. Ad esempio, quando si analizza l'operazione di "caricamento", il verificatore si aspetta che l'istruzione utilizzi un registro con un indirizzo il cui valore è sempre entro i limiti specificati, ma un utente malintenzionato può creare condizioni in cui il processore tenterà di eseguire speculativamente un'operazione con un indirizzo che non soddisfa le condizioni di verifica.

Il problema si presenta dal rilascio del kernel 4.15 ed è stato risolto sotto forma di patch (1, 2, 3, 4). La vulnerabilità rimane non risolta nelle distribuzioni (Debian, RHEL, Ubuntu, Fedora, SUSE, Arch).

Inoltre, puoi notare la nota sull'impatto sulle prestazioni degli strumenti per la protezione dalle vulnerabilità di Spectre. La nota riassume i risultati dell'ottimizzazione del debugger rr (Record and Replay), creato una volta in Mozilla per eseguire il debug di errori difficili da ripetere in Firefox. La memorizzazione nella cache delle chiamate di sistema utilizzate per verificare l'esistenza delle directory ha ridotto l'operazione "rr source" per il progetto di test da 3 minuti e 19 secondi a 36 secondi.

L'autore dell'ottimizzazione ha deciso di verificare come cambierebbero le prestazioni dopo aver disabilitato la protezione Spectre. Dopo aver avviato il sistema con il parametro "mitigations=off", il tempo di esecuzione di "rr source" senza ottimizzazione è stato di 2 minuti e 5 secondi (1.6 volte più veloce) e con l'ottimizzazione è stato di 33 secondi (9% più veloce). È interessante notare che la disabilitazione della protezione Spectre non solo ha ridotto il tempo di esecuzione del codice a livello di kernel di 1.4 volte (da 2 minuti a 9 minuto e 1 secondi), ma ha anche dimezzato il tempo di esecuzione nello spazio utente (da 32 minuto a 1 minuti e 9 secondi), presumibilmente a causa della ridotta efficienza del funzionamento della cache della CPU e del TLB. si reimposta quando la protezione Spettro è abilitata.

Fonte: opennet.ru

Aggiungi un commento