Abrir automáticamente el contenedor LUKS en el arranque del sistema de manera segura

7

Tengo un sistema Linux que se ejecuta en un proveedor en la nube donde creé un contenedor cifrado utilizando LUKS para almacenar datos personales.

El contenedor cifrado se monta manualmente en /srv ; el resto del sistema no está encriptado para que el servidor y especialmente el demonio ssh se inicien automáticamente al iniciar el sistema.

En este momento, si el servidor se reinicia (debido a una actualización que requiere un reinicio o porque el sistema host donde se ejecuta el droplet requirió un reinicio) necesito abrir manualmente el contenedor LUKS e iniciar los servicios que almacenan datos en el partición encriptada (dovecot, mysql etc.). Por supuesto, esta es la consecuencia lógica de tener una partición encriptada. Pero me preguntaba si puedo automatizar esto de manera segura.

No quiero almacenar la frase de contraseña en el servidor por razones obvias. Así que escribí un pequeño script que se ejecuta en una Raspberry Pi en casa: Entra cada 5 minutos en el servidor y comprueba si el dispositivo Loopback está montado. Si no, monta el contenedor (líneas relevantes del script, esto solo se ejecuta si no se monta /srv ):

# Mount Srv Container
ssh root@<ip> "echo -n '*** my passphrase ***' | cryptsetup luksOpen /root/srv_container_file container -"
ssh root@<ip> "mount -t ext4 /dev/mapper/container /srv"

# Start Services that store data on /srv
# ...

El enfoque funciona pero se siente super hacky. No estoy seguro de si las conexiones constantes, también conocidas como comprobación activa, son una buena idea y tampoco estoy seguro de si me estoy abriendo a las vulnerabilidades haciendo eco de mi frase de contraseña en cryptsetup .

Por lo tanto, mi pregunta:

¿Cuál es una manera buena / estándar de abrir automáticamente el contenedor LUKS sin almacenar mi frase de contraseña en el servidor y sin abrir mi sistema a vulnerabilidades (en comparación con abrir el contenedor manualmente)? Las referencias a la documentación oficial son muy bienvenidas.

¿De qué estoy tratando de protegerme?

  • No sé cómo el proveedor de la nube maneja los discos viejos y / o defectuosos. No quiero que nadie lea mis datos de los discos físicos o las copias de seguridad realizadas por mi proveedor de la nube.
  • No sé si la imagen de mi disco se transfiere al almacenamiento físico (según los documentos de mi proveedor, se almacena de forma redundante), por lo que no quiero que nadie que tenga acceso a esos bloques después de mí Ser capaz de restaurar los datos.

  • Sé que una vez que un atacante tiene acceso de shell a mi sistema en ejecución, se termina el juego porque la partición está abierta y no se necesita una frase de contraseña.

pregunta phisch 29.04.2018 - 12:20
fuente

1 respuesta

2

En lugar de hacer que una máquina local consulte periódicamente el servidor y presione la tecla si es necesario, puede hacerlo al revés y hacer que el servidor extraiga la clave de su máquina local. El servidor y el cliente pueden autenticarse mutuamente con SSH, lo que hace que un atacante activo que tenga acceso al almacenamiento de la máquina local o al almacenamiento de la máquina remota sea necesario para robar la clave. Si el atacante es pasivo y solo puede leer el contenido del disco de la máquina remota, pero no puede actuar sobre él (por ejemplo, mediante SSHing al servidor real y backdooring), retirar la contraseña debe ser seguro. La implementación específica depende de usted, pero podría ser:

  1. El servidor se inicia, se conecta a su máquina local y solicita la clave.

  2. El servidor y su máquina local se autentican entre sí a través de SSH.

  3. Opcionalmente, las dos máquinas pueden verificar que la otra se está conectando desde la IP correcta.

  4. Después de la autenticación, el servidor extrae la clave de su máquina local.

Ya que especificó que su modelo de amenaza involucra a un atacante con acceso completo al almacenamiento del servidor remoto, tenga en cuenta que solo puede protegerse de un adversario pasivo, no uno que pueda leer el almacenamiento y MITM su conexión, o SSH directamente usando credenciales robadas.

    
respondido por el forest 29.04.2018 - 13:11
fuente

Lea otras preguntas en las etiquetas