Durante il porting dello strumento cryptsetup-suspend per NixOS è stato rilevato un errore nel sotto-sistema di crittografia del disco LUKS (Linux Unified Key Setup), a causa del quale, a partire dal kernel Linux 6.9 (commit problematico), rilasciato a maggio 2024, la pulizia delle chiavi di crittografia dalla memoria volatile ha smesso di funzionare quando il sistema entra in modalità sospensione.
Lo strumento cryptsetup-suspend è utilizzato in Debian per bloccare automaticamente le partizioni LUKS prima del passaggio in modalità di sospensione. Si presume che in caso di furto di un laptop messo in modalità di sospensione, l'intruso non possa accedere ai dati, poiché al risveglio sarà necessario inserire una password per ripristinare l'accesso ai dati crittografati. A causa di un errore nel kernel di Linux, dopo aver bloccato la partizione LUKS con il comando «cryptsetup luksSuspend», le chiavi non venivano rimosse dalla memoria volatile e rimanevano visibili tramite /proc/keys, consentendo all'attaccante di estrarle, ad esempio, mediante un «cold reboot» e utilizzarle per accedere ai dati.
L'assenza di una pulizia delle chiavi è stata riscontrata durante il debug di uno stato di race, che ha causato problemi nel passaggio alla modalità di attesa. L'errore è emerso dopo il refactoring nel kernel 6.9, che legava le chiavi al thread chiamante e avrebbe dovuto eliminarle al suo completamento, ma in realtà rimanevano in memoria. È stato proposto un patch a una riga da includere nel kernel di Linux, che risolve l'errore riscontrato.
Questo patch non è stato accettato nel kernel, poiché è stata identificata un'incompletezza: il patch funziona solo per i dispositivi di archiviazione fisici, ma non per i dispositivi virtuali loop. Invece di correggere il problema nel kernel, gli sviluppatori dello strumento cryptsetup hanno suggerito una soluzione alternativa per la pulizia delle chiavi. Questa modifica è già stata accettata e entrerà nella versione 2.8.7 di cryptsetup.
In aggiunta, per NixOS è stata creata una propria implementazione di script per bloccare i dischi crittografati prima di passare alla modalità di attesa, utilizzando un vecchio patch al kernel, non accettato nel 2015, che forzatamente pulisce le chiavi dalla memoria prima di andare in sleep.
Fonte: opennet.ru
