Linux e LUKS, chiavi in memoria dopo la sospensione del sistema

Da Linux 6.9, alcune configurazioni potevano lasciare copie della chiave LUKS in memoria. Il bug riguarda la sospensione del sistema protetto, non la cifratura del disco a sistema spento.

Chi cifra l’unità di memorizzazione del portatile con Linux si aspetta una cosa molto semplice: se qualcuno rubasse il computer, i dati restano al sicuro. E in gran parte è così. Il caso emerso attorno a LUKS (Linux Unified Key Setup), metodo di cifratura dei dischi, mette però in evidenza un potenziale pericolo che non riguarda i dati contenuti in un PC Linux lasciato spento, bensì i sistemi in sospensione, magari chiusi in una borsa o nello zaino con la memoria RAM ancora alimentata.

Ingo Blechschmidt, sviluppatore attivo anche nell’area NixOS, ha raccontato su Mathstodon una scoperta non banale: da Linux 6.9, alcune configurazioni pensate per rendere più sicura la sospensione del portatile possono lasciare in memoria una copia della chiave usata per decifrare i dati. Non si parla della password digitata dall’utente, ma del materiale crittografico che il kernel usa per leggere e scrivere i dati sul volume cifrato.

Sospensione del sistema e protezione crittografica su Linux

Immaginiamo un portatile Linux con disco cifrato. L’utente lavora poi a un certo punto chiude lo schermo sopra la tastiera e il computer entra in sospensione.

Dopo qualche ora lo riapre e, in certe configurazioni più attente alla sicurezza, il sistema chiede di nuovo la passphrase LUKS prima di riprendere. A prima vista sembra tutto perfetto: se viene chiesta la password, vuol dire che la chiave era stata rimossa. Giusto?

Non necessariamente. Quando un sistema entra in suspend-to-RAM, il computer non si spegne davvero: consuma pochissimo, ma mantiene alimentata la memoria RAM, perché lì conserva lo stato dei programmi, del kernel, delle finestre aperte e di tutto ciò che serve per ripartire rapidamente. Il vantaggio è evidente: si riapre il portatile e si continua a lavorare senza attese.

Il rovescio della medaglia, però, è che se qualcosa di “sensibile” resta conservato in RAM, un aggressore con accesso fisico al computer potrebbe provare a recuperarlo.

Non è un attacco da film fatto in pochi secondi, ma nemmeno fantascienza: da anni la ricerca sulla sicurezza studia tecniche come il cold boot, cioè il tentativo di leggere residui  di dati permasti in memoria dopo lo spegnimento del sistema.

Come funziona LUKS e su cosa si basa

LUKS, gestito di solito con cryptsetup, protegge i dati memorizzati sul disco; quando il volume cifrato viene sbloccato, però, Linux deve avere in memoria la chiave necessaria per leggere e scrivere quei dati. A occuparsi della cifratura trasparente è dm-crypt: ogni volta che un’applicazione accede ai file, questo componente cifra i blocchi prima di salvarli sul disco e li decifra quando devono essere letti, senza richiedere interventi all’utente.

Qui entra in gioco cryptsetup luksSuspend, comando che serve a sospendere temporaneamente un volume cifrato: blocca l’I/O, impedisce nuove operazioni sul dispositivo e dovrebbe rimuovere la chiave di cifratura dalla memoria del kernel. Al ritorno dalla sospensione, luksResume richiede la passphrase e ricostruisce la chiave necessaria a sbloccare il volume.

Se chiudo il portatile e qualcuno me lo sottrae mentre è in standby, non voglio che la chiave del disco resti disponibile in RAM. Voglio che il sistema si comporti quasi come se fosse bloccato a un livello più profondo, non solo protetto dalla schermata di login.

A questo proposito, va comunque osservato che luksSuspend non è una cancellazione magica di tutto ciò che il computer ha in memoria. File aperti, cache, frammenti di documenti, dati dei programmi e altre informazioni possono comunque restare nella RAM. Il compito è eliminare la chiave che permette di leggere tutto il disco cifrato dalla memoria volatile.

secure-suspend, il progetto nato per proteggere davvero il portatile in standby

Blechschmidt stava sviluppando secure-suspend, un progetto sperimentale per NixOS pubblicato su Codeberg con un obiettivo preciso: rendere più sicura la sospensione in RAM dei portatili con disco cifrato.

Lo sviluppatore racconta di aver preparato un port di cryptsetup-suspend per NixOS, semplificato rispetto alla soluzione Debian e pensato inizialmente per un singolo container cifrato. Qualche mese dopo lo ha migliorato recuperando una vecchia patch kernel per cancellare le chiavi in modo più affidabile durante la sospensione e aggiungendo anche un controllo per il bug che impediva a cryptsetup luksSuspend di fare davvero il suo lavoro.

È proprio cercando di costruire una sospensione più sicura in ambiente Linux, che Blechschmidt si è accorto che una parte della catena non manteneva la promessa. secure-suspend prova quindi a risolvere un problema concreto che molti utenti ignorano. Chiudere il “coperchio” del portatile non significa spegnerlo; significa lasciare la RAM alimentata. Se il disco è cifrato ma la chiave resta in memoria, un aggressore potrebbe sfruttare la cosa a suo vantaggio.

LUKS resta uno strumento robusto, ma non bisogna attribuirgli poteri che non ha. Il disco cifrato protegge molto bene i dati a riposo; la sospensione, invece, è una zona grigia: comoda, veloce, utile, ma non equivalente allo spegnimento completo.

Ti consigliamo anche

Link copiato negli appunti