Un gruppo di ricercatori dell'Università libera di Amsterdam ha pubblicato lo strumento Kasper, progettato per identificare nel kernel Linux frammenti di codice che possono essere utilizzati per sfruttare vulnerabilità di classe Spectre, causate dall'esecuzione speculativa del codice da parte del processore. I codici sorgente dello strumento sono distribuiti sotto la licenza Apache 2.0.
Ricordiamo che per eseguire attacchi come Spectre v1, che consentono di determinare il contenuto della memoria, è necessaria una determinata sequenza di istruzioni (gadget) nel codice privilegiato, che porta all'esecuzione speculativa delle istruzioni. A scopo di ottimizzazione, il processore inizia a eseguire tali gadget in modalità speculativa, poi determina che la previsione delle diramazioni non si è avverata e ripristina le operazioni allo stato iniziale, ma i dati elaborati durante l'esecuzione speculativa rimangono nella cache e nei buffer microarchitettonici e possono essere estratti utilizzando vari metodi di rilevamento dei dati residui attraverso canali esterni.
Gli strumenti precedentemente disponibili per la scansione dei gadget per la vulnerabilità Spectre, basati sulla ricerca di modelli tipici, mostrano un tasso molto elevato di falsi positivi, trascurando molti gadget reali (esperimenti hanno dimostrato che il 99% dei gadget identificati da tali strumenti non potevano essere utilizzati per attacchi, e il 33% dei gadget funzionanti, in grado di portare a un attacco, non sono stati notati).
Per migliorare la qualità dell'identificazione dei gadget problematici, Kasper modella le vulnerabilità che l'attaccante può sfruttare ad ogni passo nell'attuazione di attacchi di classe Spectre - vengono modellati problemi che consentono di controllare i dati (ad esempio, l'inserimento di dati dell'attaccante nelle strutture microarchitettoniche per influenzare le successive esecuzioni speculative attraverso attacchi di classe LVI), accedere a informazioni riservate (ad esempio, superando i limiti del buffer o utilizzando la memoria dopo la sua liberazione) e organizzare la fuga di informazioni riservate (ad esempio, analizzando lo stato della cache del processore o utilizzando il metodo MDS).

Durante il test, il kernel si collega alle librerie runtime di Kasper e ai controlli che operano a livello LLVM. Durante il processo di verifica, viene effettuata un'emulazione dell'esecuzione speculativa del codice, realizzata tramite il meccanismo checkpoint-restore, che esegue specificamente il ramo di codice errato previsto, per poi tornare allo stato iniziale prima dell'inizio del branching. Kasper cerca anche di modellare diverse vulnerabilità software e hardware, analizzando l'impatto degli effetti architettonici e microarchitettonici, e conduce test di fuzzing su possibili azioni dell'attaccante. Per l'analisi dei flussi di esecuzione, viene utilizzato il port di DataFlowSanitizer per il kernel Linux, mentre per i test di fuzzing viene utilizzata una versione modificata del pacchetto syzkaller.

Durante la scansione del kernel Linux tramite Kasper sono stati individuati 1379 gadget precedentemente sconosciuti, che potrebbero portare a fughe di dati durante l'esecuzione speculativa delle istruzioni. Si sottolinea che forse solo una parte di essi potrebbe rappresentare veri problemi, ma per dimostrare che c'è una reale pericolo e non solo una questione teorica, è stato sviluppato un prototipo operativo di exploit per uno dei frammenti di codice problematici, che porta a una fuga di informazioni dalla memoria del kernel.
Fonte: opennet.ru
