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.