Durante el portado de la herramienta cryptsetup-suspend para NixOS se identificó un error en el subsistema de cifrado de disco LUKS (Linux Unified Key Setup), que causó que a partir del núcleo de Linux 6.9 (commit problemático), lanzado en mayo de 2024, la limpieza de las claves de cifrado de la memoria RAM dejara de funcionar al poner el sistema en modo de suspensión.
La herramienta cryptsetup-suspend se utiliza en Debian para bloquear automáticamente las particiones LUKS antes de entrar en modo de suspensión. Se supone que en caso de robo de un portátil puesto en suspensión, el atacante no podrá acceder a los datos, ya que al salir de la suspensión se requerirá introducir una contraseña para recuperar el acceso a los datos cifrados. Debido a un error en el núcleo de Linux, después de bloquear la partición LUKS con el comando «cryptsetup luksSuspend», las claves no se limpiaban de la memoria RAM y seguían visibles a través de /proc/keys, lo que permitía al atacante extraerlas, por ejemplo, mediante un «cold reboot», y utilizarlas para acceder a los datos.
La falta de limpieza de las claves se identificó durante la depuración de una condición de carrera, que causaba problemas al cambiar a modo de suspensión. El error se produjo después de una reestructuración en el núcleo 6.9, que ligaba las claves al hilo que hacía la llamada y que debían eliminarse al finalizar, pero en realidad permanecían en la memoria. Se ha propuesto un parche de una sola línea para incluir en el núcleo de Linux que corrige el error cometido.
Este parche no fue aceptado en el núcleo, ya que se identificó un defecto: el parche solo funciona para dispositivos de almacenamiento físicos, pero no para dispositivos virtuales loop. En lugar de corregir el problema en el lado del núcleo, los desarrolladores de la herramienta cryptsetup propusieron una solución alternativa para limpiar las claves. Este cambio ya ha sido aceptado y formará parte de la versión cryptsetup 2.8.7.
Además, se creó una implementación propia de scripts para NixOS que bloquean los discos cifrados antes de entrar en modo de suspensión, en la que se utiliza un viejo parche para el núcleo que no fue aceptado en 2015, que fuerza la limpieza de las claves de la memoria antes de entrar en modo de suspensión.
Fuente: opennet.ru
