Lors du portage de l'outil cryptsetup-suspend pour NixOS, une erreur a été identifiée dans le sous-système de chiffrement des disques LUKS (Linux Unified Key Setup), ce qui a entraîné, à partir du noyau Linux 6.9 (commit problématique), publié en mai 2024, l'incapacité à effacer les clés de chiffrement de la mémoire vive lors de la mise en veille du système.
L'outil cryptsetup-suspend est utilisé dans Debian pour verrouiller automatiquement les partitions LUKS avant de passer en mode veille. Il est supposé qu'en cas de vol d'un ordinateur portable mis en veille, l'attaquant ne pourra pas accéder aux données, car un mot de passe sera requis pour restaurer l'accès aux informations chiffrées à la sortie de la veille. À cause d'un bug dans le noyau Linux, après le verrouillage de la partition LUKS avec la commande « cryptsetup luksSuspend », les clés n'étaient pas nettoyées de la mémoire vive et demeuraient visibles via /proc/keys, ce qui permettait à un attaquant de les extraire, par exemple par une méthode de « cold reboot », et de les utiliser pour accéder aux données.
L'absence de nettoyage des clés a été identifiée lors du débogage d'une condition de concurrence, ce qui a causé des problèmes lors de la mise en veille. L'erreur est survenue après un refactoring dans le noyau 6.9, où les clés étaient liées au thread appelant et devaient être supprimées à sa terminaison, mais en réalité, elles restaient en mémoire. Un patch en une ligne a été proposé pour la correction dans le noyau Linux, éliminant l'erreur commise.
Ce patch n'a pas été accepté dans le noyau car une lacune a été détectée – le patch n'agit que pour les disques physiques, mais ne fonctionne pas pour les dispositifs virtuels loop. Plutôt que de corriger le problème du côté du noyau, les développeurs de l'outil cryptsetup ont proposé une solution de contournement pour le nettoyage des clés. Ce changement a déjà été accepté et fera partie de la version cryptsetup 2.8.7.
De plus, pour NixOS, une implémentation propre des scripts pour le verrouillage des disques chiffrés avant de passer en mode veille a été créée, dans laquelle un ancien patch du noyau, non accepté en 2015, est utilisé pour forcer le nettoyage des clés de la mémoire avant de passer en mode veille.
Source : opennet.ru
