Secure Boot è una tecnologia progettata per garantire che un dispositivo si avvii solo utilizzando software di cui si possa verificare l’autenticità e l’integrità. Tuttavia, non è considerata pienamente sicura. Ne è una testimonianza evidente la scelta draconiana di Microsoft che ha deciso di revocare il certificato sinora usato per firmare i bootloader di Windows compatibili con Secure Boot. Entro ottobre 2024 tanti sistemi potrebbero non avviarsi più: la modifica a livello di sistema operativo deve infatti necessariamente corrispondere con un aggiornamento del firmware (UEFI). Ne parliamo nell’articolo sul disastro Secure Boot che in molti hanno preannunciato.
Il meccanismo alla base del funzionamento di Secure Boot poggia su una catena di certificati e chiavi crittografiche. Se una delle chiavi private utilizzate per firmare il software viene compromessa, un attaccante potrebbe firmare software malevolo che verrebbe quindi accettato come legittimo durante il processo di avvio.
La configurazione errata di Secure Boot può introdurre vulnerabilità. Ad esempio, se le chiavi di firma non sono gestite correttamente, o se sono caricate chiavi di terze parti non fidate, il sistema può essere esposto a software non autorizzato.
Ancora, se il firmware che implementa Secure Boot può essere aggiornato senza adeguate verifiche di sicurezza, un attaccante potrebbe sostituirlo con una versione compromessa. Questa tecnica facilita l’aggiramento della protezione offerta da Secure Boot.
In un attacco di tipo cold boot, un attaccante riavvia il dispositivo e sfrutta la disponibilità fisica dello stesso per estrarre chiavi crittografiche o altri dati sensibili dalla memoria volatile.
Il problema della sicurezza della memoria e Secure Boot
Un gruppo di ricercatori dell’Università di Manchester ha dimostrato che il livello di protezione garantito da Secure Boot può essere significativamente migliorato. La sicurezza della memoria è una problematica comune in ambito software. Implementare controlli di sicurezza a runtime può essere molto dispendioso in termini computazionali, rendendo i linguaggi di programmazione che li utilizzano incompatibili con il software di sistema.
Le vulnerabilità legate alla sicurezza della memoria possono portare a una miriade di problemi: sottrazione di dati, attacchi Denial of Service (DoS) ed esecuzione di codice arbitrario. Fino a poco tempo fa, non esisteva un’alternativa sicura rispetto all’utilizzo di C/C++/Assembly. Il linguaggio Rust, che esegue analisi statiche durante la compilazione, rappresenta oggi la soluzione definitiva e per questo è sempre più utilizzato per modernizzare e rafforzare le aree più critiche dei sistemi operativi (kernel di Windows compreso).
SentinelBoot: sicurezza crittografica in fase di avvio
Il team di esperti accademici ha presentato SentinelBoot, un bootloader dimostrativo e crittograficamente sicuro per le architetture RISC-V, interamente sviluppato in Rust. Sponsorizzato da Codethink, il progetto migliora significativamente la sicurezza di Secure Boot sottolineando quanto sia ormai fondamentale allontanarsi dall’approccio storicamente utilizzato ed aggiornare una tecnologia che sente ormai il peso degli anni.
SentinelBoot migliorare la sicurezza del flusso di avvio attraverso principi di sicurezza della memoria, utilizzando principalmente il linguaggio Rust con le sue caratteristiche di ownership, borrowing e lifetimes. Utilizza inoltre la crittografia a chiave pubblica per verificare l’integrità del kernel avviato (firma digitale), attraverso l’uso dell’estensione RISC-V Vector Cryptography.
La soluzione proposta dai ricercatori universitari si concentra sulla difesa da una sottoclasse di attacchi di social engineering e attacchi Evil Maid, il cui obiettivo consiste nell’alterazione della cosiddetta root of trust, oltre che contro gli attacchi Man-in-the-Middle (MITM).
L’articolo tecnico incentrato su SentinelBoot descrive tutti i dettagli del meccanismo di sicurezza proposto. Lo sviluppo di SentinelBoot ha dimostrato l’utilizzo del linguaggio di programmazione Rust (e dei principi di sicurezza della memoria) per migliorare la sicurezza della memoria del flusso di avvio di RISC-V, implementando al contempo un meccanismo di Secure Boot crittografico.
SentinelBoot è in grado di funzionare sia direttamente su hardware sia in ambienti virtualizzati ed emulati. Inoltre, nonostante le funzionalità aggiuntive e la sicurezza garantita, rispetto ad esempio a un esempio di binario U-Boot, SentinelBoot è un decimo della dimensione con un overhead prestazionale pari soltanto al 20,1%.