Vulnerabilità in eBPF che potrebbero aggirare la protezione dagli attacchi Spectre 4

Sono state identificate due vulnerabilità nel kernel Linux che consentono di utilizzare il sottosistema eBPF per aggirare la protezione contro l'attacco Spectre v4 (SSB, Speculative Store Bypass). Utilizzando un programma BPF non privilegiato, un utente malintenzionato può creare condizioni per l'esecuzione speculativa di determinate operazioni e determinare il contenuto di aree arbitrarie della memoria del kernel. I manutentori dei sottosistemi eBPF nel kernel hanno avuto accesso a un prototipo di exploit che dimostra nella pratica la capacità di sferrare attacchi. I problemi sono stati risolti sotto forma di patch (1, 2), che saranno incluse nel prossimo aggiornamento del kernel Linux. Non sono ancora stati creati aggiornamenti nei kit di distribuzione (Debian, RHEL, SUSE, Arch, Fedora, Ubuntu).

Il metodo di attacco Spectre 4 si basa sul ripristino dei dati archiviati nella cache del processore dopo aver scartato il risultato dell'esecuzione speculativa delle operazioni durante l'elaborazione di operazioni di scrittura e lettura alternate utilizzando l'indirizzamento indiretto. Quando un'operazione di lettura segue un'operazione di scrittura (ad esempio, mov [rbx + rcx], 0x0; mov rax, [rdx + rsi]), l'offset dell'indirizzo di lettura potrebbe essere già noto a causa di operazioni simili eseguite (le operazioni di lettura sono eseguita molto più frequentemente e le letture possono essere eseguite dalla cache) e il processore può speculativamente eseguire letture prima delle scritture senza attendere il calcolo dell'offset indiretto della scrittura.

Se, dopo aver calcolato l'offset, viene rilevata un'intersezione di aree di memoria per la scrittura e la lettura, il processore scarterà semplicemente il risultato di lettura già ottenuto in modo speculativo e ripeterà questa operazione. Questa funzionalità consente a un'istruzione di lettura di accedere a un vecchio valore in un indirizzo mentre l'operazione di memorizzazione non è ancora completata. Dopo aver scartato un'operazione speculativa non riuscita, nella cache rimangono tracce della sua esecuzione, dopodiché è possibile utilizzare uno dei metodi per determinare il contenuto della cache per recuperarlo sulla base di un'analisi delle modifiche nel tempo di accesso ai dati memorizzati nella cache e non memorizzati nella cache.

La prima vulnerabilità (CVE-2021-35477) è causata da un difetto nel meccanismo di verifica del programma BPF. Per proteggersi da un attacco Spectre 4, il verificatore aggiunge un'istruzione aggiuntiva dopo aver archiviato in memoria un valore potenzialmente problematico che memorizza un valore null per spostare le tracce dell'operazione precedente. Ci si aspettava che l'operazione di scrittura nulla fosse molto veloce e bloccasse l'esecuzione speculativa perché dipende solo da un puntatore allo stack frame BPF. Ma in realtà è stato possibile creare le condizioni in cui un'istruzione che porta all'esecuzione speculativa riesce ad essere eseguita prima dell'operazione di memorizzazione preventiva.

La seconda vulnerabilità (CVE-2021-3455) è dovuta al fatto che quando il verificatore BPF identifica operazioni di salvataggio della memoria potenzialmente pericolose, non tiene conto delle aree non inizializzate dello stack BPF, la prima operazione di scrittura su cui non è protetta. Questa caratteristica porta alla possibilità di eseguire un'operazione di lettura speculativa, dipendente da un'area di memoria non inizializzata, prima di eseguire l'istruzione di memorizzazione. La nuova memoria per lo stack BPF viene allocata senza controllare il contenuto già nella memoria allocata ed esiste un modo prima dell'esecuzione del programma BPF per manipolare il contenuto dell'area di memoria che verrà quindi allocata per lo stack BPF.

Fonte: opennet.ru

Aggiungi un commento