BHI è una nuova vulnerabilità della classe Spectre nei processori Intel e ARM

Un gruppo di ricercatori della Vrije Universiteit Amsterdam ha identificato una nuova vulnerabilità nelle strutture microarchitettoniche dei processori Intel e ARM, che è una versione estesa della vulnerabilità Spectre-v2, che consente di aggirare i meccanismi di protezione eIBRS e CSV2 aggiunti ai processori . Alla vulnerabilità sono stati dati diversi nomi: BHI (Branch History Injection, CVE-2022-0001), BHB (Branch History Buffer, CVE-2022-0002) e Spectre-BHB (CVE-2022-23960), che descrivono diverse manifestazioni di lo stesso problema (BHI - un attacco che colpisce diversi livelli di privilegi, ad esempio il processo utente e il kernel, BHB - un attacco allo stesso livello di privilegio, ad esempio eBPF JIT e il kernel).

I ricercatori hanno dimostrato un exploit funzionante che consente di estrarre dati arbitrari dalla memoria del kernel dallo spazio utente. Ad esempio viene mostrato come, utilizzando un exploit predisposto, sia possibile estrarre dai buffer del kernel una stringa con l'hash della password dell'utente root caricata dal file /etc/shadow. L'exploit dimostra la possibilità di sfruttare una vulnerabilità all'interno di un livello di privilegio (attacco kernel-to-kernel) utilizzando un programma eBPF caricato dall'utente. È anche possibile utilizzare al posto dell'eBPF i gadget Spectre esistenti nel codice del kernel, sequenze di comandi che portano all'esecuzione speculativa delle istruzioni.

La vulnerabilità appare nella maggior parte dei processori Intel attuali, ad eccezione dei processori della famiglia Atom. Tra i processori ARM, Cortex-A15, Cortex-A57, Cortex-A7*, Cortex-X1, Cortex-X2, Cortex-A710, Neoverse N1, Neoverse N2, Neoverse V1 e forse alcuni chip Cortex-R sono interessati dal problema. Secondo la ricerca, la vulnerabilità non appare nei processori AMD. Per eliminare il problema, sono stati proposti diversi metodi software per bloccare la vulnerabilità, che possono essere utilizzati prima della comparsa della protezione hardware nei futuri modelli di CPU.

Per bloccare gli attacchi attraverso il sottosistema eBPF, si consiglia di disabilitare per impostazione predefinita la possibilità per gli utenti non privilegiati di scaricare programmi eBPF scrivendo 1 nel file “/proc/sys/kernel/unprivileged_bpf_disabled” o eseguendo il comando “sysctl -w kernel. unprivileged_bpf_disabled=1”. Per bloccare gli attacchi dei gadget, si consiglia di utilizzare l'istruzione LFENCE in aree di codice che potenzialmente portano a un'esecuzione speculativa. È interessante notare che la configurazione predefinita della maggior parte delle distribuzioni Linux contiene già le misure di protezione necessarie sufficienti per bloccare l'attacco eBPF dimostrato dai ricercatori. Anche le raccomandazioni di Intel per disabilitare l'accesso non privilegiato a eBPF sono predefinite a partire dal kernel Linux 5.16 e verranno trasferite ai rami precedenti.

Concettualmente, BHI è una versione estesa dell'attacco Spectre-v2, in cui, per aggirare la protezione aggiuntiva (Intel eIBRS e Arm CSV2) e organizzare la perdita di dati, viene utilizzata la sostituzione del valore nel Branch History Buffer, utilizzato nella CPU per aumentare la previsione ramificazione accurata tenendo conto della storia delle transizioni passate. Durante l'attacco, attraverso manipolazioni con la cronologia delle transizioni, si creano le condizioni per una previsione errata della transizione e per l'esecuzione speculativa delle istruzioni necessarie, il cui risultato finisce nella cache.

Con l'eccezione dell'utilizzo di un Branch History Buffer invece di un Branch Target Buffer, il nuovo attacco è identico a Spectre-v2. Il compito dell'aggressore è creare le condizioni tali che l'indirizzo, quando si esegue un'operazione speculativa, venga prelevato dall'area dei dati definiti. Dopo aver eseguito un salto indiretto speculativo, l'indirizzo di salto letto dalla memoria rimane nella cache, 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 a cache e uncached dati.

Fonte: opennet.ru

Aggiungi un commento