¿Borrar claves de cifrado (LUKS) antes de suspender a RAM?

6

Hace poco me preguntaba si habría una manera de borrar mis claves LUKS de la RAM antes de suspender mi dispositivo (generalmente una computadora portátil) al modo S3. Estoy interesado en una solución que funcione para mi partición / . De la forma en que me imagino esto, me gustaría que mi sistema me vuelva a pedir la contraseña cuando la reanude.

Si tal solución no existe, me pregunto si funcionaría una basada en VM. Antes de suspender, la máquina virtual también se suspendería (en otra forma de pausa), un depurador buscaría la clave privada LUKS, la guardaría en alguna ubicación segura, borraría todas sus apariciones de la memoria RAM y reanudaría la alimentación, descifraría el secreto usando La contraseña del usuario y restaurarla a todas las compensaciones guardadas. Probablemente se podría hacer lo mismo con las claves GPG / SSH / Bitcoin. ¿Sería este un enfoque seguro? Si no, ¿por qué?

    
pregunta d33tah 21.01.2014 - 00:11
fuente

2 respuestas

3

La solución se llama "Hibernar" o suspender en disco.

Por diseño, suspender a la memoria RAM se activa instantáneamente, y está concebido más como un modo de ahorro de energía que como una versión de "apagado".

El software puede recibir notificaciones de que la suspensión a RAM está a punto de ocurrir, y cosas como los programas Password Safe deberían, y normalmente lo hacen, borrar sus claves automáticamente. Usted podría alterar fácilmente por ej. Los clientes de SSH harán lo mismo, si no lo hacen ya.

Sin embargo, los programas de cifrado de disco no pueden hacer esto necesariamente, ya que los archivos abiertos en esos discos pueden necesitar acceso como parte del proceso de reanudación.

    
respondido por el Ben 21.01.2014 - 11:52
fuente
3

Partición no del sistema

Para las particiones distintas que no sean la partición del sistema, puede usar la siguiente unidad de sistema:

[Unit]
Description=Wipe Keys before <target>
After=<target>

[Service]
Type=oneshot
ExecStart=/path/to/wipe

[Install]
WantedBy=<target>

<target> es el objetivo correspondiente de tu modo deseado. De la página de manual de systemd-suspend.service : suspend.target , hibernate.target o hybrid-sleep.target

Y el script wipe :

dmsetup suspend "$name"
dmsetup message "$name" 0 key wipe

o si usas LUKS

cryptsetup luksSuspend <name>

Después de reanudar su sistema, debe emitir:

dmsetup message "$name" 0 key set  "$key"
dmsetup resume  "$name"

o

cryptsetup luksResume <name>

Máquina virtual

Si coloca toda su máquina virtual en un disco cifrado del host, puede utilizar el mismo método, pero debe detener al invitado con "Guardar el estado del sistema" y asegurarse de que este estado también se guarde en El disco encriptado. Debería anteponer algo así como los siguientes comandos a su secuencia de comandos wipe :

VBoxManage controlvm "$vboxname" savestate

y para reanudar

VBoxManage controlvm "$vboxname" resume

Tenga en cuenta que si no detiene realmente al invitado, no expondrá sus claves de cifrado. Solo dejaría la RAM del invitado sin cifrar en su RAM o swap.

Cifrado completo del sistema

Hay una solución para la hibernación (guardar RAM en la unidad) con todo el cifrado del sistema. Básicamente también tienes que cifrar tu swap. Consulte aquí y here Esto no le ayuda cuando suspende a RAM.

    
respondido por el JSG 03.04.2014 - 20:01
fuente

Lea otras preguntas en las etiquetas