¿Cómo implementar un sistema de datos cifrado?

Aprender Certificado Fundación Linux en España contenido Técnicos desde Cero en CiberED

La seguridad no solo depende de controlar accesos y permisos; también es fundamental proteger los datos si el medio de almacenamiento cae en manos equivocadas (robo, pérdida, decomiso).

26.1. Introducción al cifrado de datos en reposo

El cifrado de datos en reposo garantiza que la información sea ilegible sin una clave secreta, incluso si se extrae el disco.

Linux ofrece un potente subsistema de cifrado a nivel de bloques llamado dm-crypt, integrado en el kernel a través del mapeador de dispositivos (Device Mapper). Sobre dm-crypt se construye LUKS (Linux Unified Key Setup), un formato estándar que facilita la gestión de claves, múltiples contraseñas y metadatos.

En este capítulo aprenderás a:

  • Crear particiones cifradas con LUKS.
  • Abrir, montar, desmontar y cerrar dispositivos cifrados.
  • Configurar el montaje automático mediante /etc/fstab y archivos de claves.
  • Cifrar el espacio de intercambio (swap), tanto particiones como archivos.
  • Aplicar buenas prácticas de seguridad.

26.2. Conceptos y herramientas

26.2.1. dm-crypt y LUKS

  • dm-crypt: módulo del kernel que proporciona cifrado transparente de dispositivos de bloque.
  • LUKS: formato en disco que almacena metadatos (algoritmo, claves, UUID) y permite múltiples claves de acceso. Es el estándar de facto.
  • cryptsetup: herramienta de espacio de usuario para gestionar dispositivos LUKS y dm-crypt.

26.2.2. Dispositivos mapeados

Cuando se abre un dispositivo LUKS, se crea un dispositivo virtual en /dev/mapper/ (ej. /dev/mapper/mi_cifrado). Todas las operaciones se realizan sobre este dispositivo mapeado, que descifra y cifra los datos sobre la marcha.

26.2.3. Instalación de cryptsetup

Si no está instalado:

sudo apt install cryptsetup   # Debian/Ubuntu
sudo yum install cryptsetup   # RHEL/CentOS

26.3. Creación de un sistema de archivos cifrado con LUKS

26.3.1. Paso 1: Preparar la partición

Supongamos que queremos cifrar la partición /dev/sdb1. Primero, verificar que no está montada y que no tiene datos importantes (se van a sobrescribir).

26.3.2. Paso 2: Formatear con LUKS

sudo cryptsetup luksFormat /dev/sdb1

Se pedirá confirmación (escribir YES) y una frase de contraseña (passphrase). Esta frase se puede cambiar después y se pueden añadir múltiples frases.

Opciones útiles:

  • --cipher aes-xts-plain64 : algoritmo por defecto (AES-XTS).
  • --key-size 512 : tamaño de clave (depende del algoritmo).
  • --hash sha256 : hash para derivar la clave.
  • --iter-time 2000 : milisegundos para la derivación de clave (anti fuerza bruta).

26.3.3. Paso 3: Abrir el dispositivo LUKS

sudo cryptsetup luksOpen /dev/sdb1 mi_cifrado

Esto crea /dev/mapper/mi_cifrado. Se pide la passphrase.

26.3.4. Paso 4: Crear un sistema de archivos y montar

sudo mkfs.ext4 /dev/mapper/mi_cifrado
sudo mkdir -p /mnt/cifrado
sudo mount /dev/mapper/mi_cifrado /mnt/cifrado

Ahora puedes usar /mnt/cifrado como cualquier directorio, pero los datos se cifran automáticamente al escribir en disco.

26.4. Desmontar y cerrar el dispositivo

Al terminar de trabajar, se debe desmontar y cerrar el dispositivo mapeado para que los datos queden inaccesibles.

sudo umount /mnt/cifrado
sudo cryptsetup luksClose mi_cifrado

Luego de cerrar, el dispositivo /dev/mapper/mi_cifrado desaparece y los datos quedan cifrados en /dev/sdb1.

26.5. Configuración para montaje automático

Para montar el sistema de archivos cifrado en el arranque, se necesitan dos cosas:

  1. Que el dispositivo LUKS se abra automáticamente (normalmente pidiendo la passphrase durante el arranque).
  2. Una entrada en /etc/fstab para montar el dispositivo mapeado.

26.5.1. Archivo /etc/crypttab

El archivo /etc/crypttab define los dispositivos cifrados que deben abrirse durante el arranque. Formato:

nombre_mapeado   dispositivo_origen   clave   opciones

Ejemplo:

mi_cifrado   /dev/sdb1   none   luks
  • none indica que se pedirá la passphrase interactivamente durante el arranque.
  • También se puede especificar un archivo de clave, por ejemplo /etc/luks-keys/mi_cifrado.key.

Opciones comunes: luks, timeout=0, noauto, discard, nofail.

26.5.2. Entrada en /etc/fstab

Una vez abierto el dispositivo mapeado, se monta con fstab:

/dev/mapper/mi_cifrado   /mnt/cifrado   ext4   defaults   0   2

Con estas dos configuraciones, el sistema pedirá la passphrase al arrancar y montará automáticamente.

26.5.3. Usar un archivo de claves

Para evitar pedir la passphrase en cada arranque (por ejemplo, en servidores), se puede usar un archivo de claves almacenado en un lugar seguro (ej. en un pendrive o en el initramfs, aunque este último reduce seguridad).

Crear clave aleatoria:

sudo dd if=/dev/urandom of=/etc/luks-keys/mi_cifrado.key bs=4096 count=1
sudo chmod 400 /etc/luks-keys/mi_cifrado.key

Añadir la clave al dispositivo LUKS:

sudo cryptsetup luksAddKey /dev/sdb1 /etc/luks-keys/mi_cifrado.key

Luego en /etc/crypttab:

mi_cifrado   /dev/sdb1   /etc/luks-keys/mi_cifrado.key   luks

Precaución: si el archivo de clave está en el mismo disco y el sistema arranca, un atacante con acceso físico podría leerlo. Es mejor guardarlo en un medio externo o cifrar el sistema completo.

26.6. Cifrado del espacio de intercambio (swap)

El swap puede contener datos sensibles (contraseñas, claves) que permanecen en disco. Es esencial cifrarlo, especialmente en portátiles o servidores con datos críticos.

26.6.1. Cifrado de una partición swap

  1. Primero, desactivar el swap existente si lo hay:
sudo swapoff /dev/sdb2
  1. Formatear la partición con LUKS:
sudo cryptsetup luksFormat /dev/sdb2
  1. Abrir el dispositivo:
sudo cryptsetup luksOpen /dev/sdb2 swap_cifrado
  1. Crear el área de swap en el dispositivo mapeado:
sudo mkswap /dev/mapper/swap_cifrado
  1. Activar el swap:
sudo swapon /dev/mapper/swap_cifrado
  1. Para persistencia, añadir a /etc/crypttab:
swap_cifrado   /dev/sdb2   none   luks

Y en /etc/fstab:

/dev/mapper/swap_cifrado   none   swap   sw   0   0

26.6.2. Cifrado de un archivo swap

Alternativa sin partición dedicada:

  1. Crear un archivo swap cifrado con dd y LUKS:
sudo dd if=/dev/zero of=/swapfile bs=1M count=512
sudo cryptsetup luksFormat /swapfile
sudo cryptsetup luksOpen /swapfile swapfile_cifrado
sudo mkswap /dev/mapper/swapfile_cifrado
  1. Activar:
sudo swapon /dev/mapper/swapfile_cifrado
  1. Para persistencia, añadir a /etc/crypttab:
swapfile_cifrado   /swapfile   none   luks

Y en fstab:

/dev/mapper/swapfile_cifrado   none   swap   sw   0   0

Nota: En algunas distribuciones, el swap cifrado se maneja con el paquete cryptsetup y scripts especiales en el initramfs. Para el examen, basta con entender el flujo.

26.7. Buenas prácticas de seguridad

  • Passphrase robusta: usar frases largas y complejas.
  • Almacenamiento seguro de claves: si se usan archivos de claves, protegerlos con permisos 400 y colocarlos en un medio separado o en un sistema de archivos cifrado.
  • Cifrado completo del sistema: en entornos críticos, cifrar todas las particiones, incluyendo /, /home, /var, /tmp y swap.
  • Desactivar hibernación si el swap no está cifrado, o asegurar su cifrado.
  • Actualizar initramfs después de modificar /etc/crypttab para que el sistema pueda desbloquear en el arranque:
sudo update-initramfs -u   # Debian/Ubuntu
sudo dracut --force        # RHEL/CentOS

26.8. Solución de problemas comunes

ProblemaPosible causaSolución
“No key available with this passphrase”Contraseña incorrecta o dispositivo no es LUKSVerificar con cryptsetup luksDump, probar de nuevo
Dispositivo mapeado no apareceNo se abrió con luksOpenEjecutar cryptsetup luksOpen
Error al montar en el arranqueFalta entrada en /etc/crypttab o clave incorrectaRevisar configuración, usar cryptdisks_start para depurar
swapoff no funcionaSwap en usoVerificar procesos con fuser -vm /swapfile
Pérdida de datos al formatearSe usó luksFormat sobre partición con datosIrreversible, siempre respaldar antes

26.9. Ejercicios prácticos

  1. Crear un volumen cifrado básico: 1.1. Crea una partición de prueba y formatéala con LUKS. 1.2. Abre el dispositivo, crea un sistema de archivos ext4 y móntalo en /mnt/secreto. 1.3. Crea archivos, desmonta y cierra. Verifica que el contenido no es legible sin abrir.

  2. Montaje automático: Configura /etc/crypttab y /etc/fstab para que el volumen se abra y monte automáticamente pidiendo passphrase. 2.1. Reinicia y comprueba que solicita la contraseña y monta.

  3. Archivo de claves: Añade una clave secundaria desde un archivo. Configura para que use ese archivo. Verifica que ya no pide contraseña en el arranque.

  4. Swap cifrado (partición): Cifra una partición swap siguiendo los pasos. Actívala y verifica con swapon --show. Configura persistencia y reinicia.

  5. Swap cifrado (archivo): Crea un archivo swap cifrado, actívalo. Asegúrate de que /etc/crypttab y fstab lo reconozcan. Prueba el reinicio.

  6. Recuperación de un volumen: Simula olvidar la passphrase: intenta abrir con una incorrecta. Luego añade una nueva clave con cryptsetup luksAddKey usando la correcta. Muestra las ranuras de claves con cryptsetup luksDump.

26.10. Resumen y consejos para LFCS

  • El comando cryptsetup es la base: luksFormat, luksOpen, luksClose, luksAddKey, luksDump.
  • La persistencia se logra con /etc/crypttab y /etc/fstab.
  • El swap debe cifrarse siempre que sea posible.
  • Actualiza el initramfs tras cambios en crypttab.
  • Practica el ciclo completo: crear, abrir, formatear, montar, desmontar, cerrar. En el examen, es probable que pidan cifrar una partición y configurarla para que se monte automáticamente.

Con este capítulo has aprendido a proteger los datos en reposo. En el siguiente tema nos adentraremos en el uso del sistema, utilización y resolución de problemas, donde integraremos las herramientas de monitoreo y diagnóstico que vimos en capítulos anteriores.

Vistas: 0

Descubre más desde CIBERED

Suscríbete y recibe las últimas entradas en tu correo electrónico.

Scroll al inicio