storage_securityr

Para la protección de datos de tarjetas de pago durante su almacenamiento, PCI DSS permite el uso de cifrado de disco. A diferencia del cifrado a nivel de archivo o el cifrado a nivel de columna en bases de datos, en este modelo se emplea un cifrado completo de una unidad lógica o física, de tal forma que si un potencial atacante tiene acceso al medio de almacenamiento no podrá acceder a los datos guardados allí. Esta opción es particularmente útil cuando se almacenan datos de tarjetas de pago en medios removibles o en equipos móviles (ordenadores portátiles) para evitar incidentes asociados con el robo de equipos (ver un ejemplo aquí).

En esta oportunidad, Ariel Vásquez (experto en la implementación de controles de PCI DSS y colaborador de PCI Hispano) ha escrito un interesante artículo acerca de la gestión del cifrado en unidades LVM en Ubuntu 14 (aunque la técnica es extrapolable a otras distribuciones de GNU/Linux), concepto que se puede aplicar en el cumplimiento de PCI DSS enfocado al requerimiento 3.4.1:

 “… Si se utiliza cifrado de disco (en lugar de un cifrado de base de datos por archivo o columna), se debe administrar un acceso lógico independientemente de los mecanismos de control de acceso del sistema operativo nativo (por ejemplo, no se deben utilizar bases de datos de cuentas de usuarios locales). Las claves de descifrado no deben estar vinculadas a cuentas de usuarios…”

La versión original del artículo se puede encontrar en inglés y en español en el sitio web del autor http://arich-notes.arich-net.com:8080/?lang=en. Se reproduce con su permiso.

Gestión de cifrado de unidades LVM

La unidades lógicas LVM nos permiten utilizar discos de almacenamiento de una forma más flexible en grupos de volúmenes, al gestionarlos de esta forma será posible el incrementarlos o reducirlos dinámicamente.

Crear las particiones LVM – Ubuntu 14

En este experimento, agregaremos un nuevo disco a un servidor, lo configuraremos en un LVM, y luego cifraremos la nueva partición creada. Este experimento será útil para particiones /home, /tmp o /swap. Luego guardaremos la llave en una memoria USB para descifrar la información desde y como método alternativo una contraseña maestra.

Nota: Toda la configuración generada se ejecuta en un entorno de root, lo propio y mas seguro sería agregar el prefijo de “sudo”.

Instalar los paquetes de soporte a LVM en el sistema

Agregar el disco al sistema

Esto se puede conseguir agregando un disco a una máquina virtual con VirtualBox por ejemplo:

AddDiskVirtualBox

Verificamos que el kernel de linux ha detectado el nuevo disco utilizando dmesg:

Dar formato a la nueva partición LVM

Configurar la nueva estructura LVM

  • Volumen Físico
  • Grupo de Volúmenes Físicos
  • Unidades Lógicas LVM (se creará del tamaño de 1GB)

Configurar el cifrado de LVM

En este punto ya tenemos creada la Unidad Lógica para la partición de Home, lo que haremos en cifrar el disco y configurarlo para ser montado durante el inicio del Sistema Operativo.

Instalar la utilidad de cryptsetup

Escribir datos aleatorios en el LVM creado

Crear una llave aleatoria de 256 bits

Presionar la teclas “shift” y “space” unas cuantas veces para añadir entropía al sistema:

Preparar el dispositivo cifrado utilizando luksFormat

Abrir el dispositivo creado LUKS

Agregar una frase a la partición LUKS

Agregamos una frase secreta en caso que la llave se pierda:

Cargar la partición LVM cifrada durante inicio del sistema

Hasta este punto se tiene la partición cifrada LVM, los siguientes pasos configurarán la mencionada partición para cargarse y montarse durante el inicio del Sistema Operativo.

Crear el script que exporte a “stdout” la llave

En este caso se exportará la llave del Sistema de Archivos local de la máquina, más tarde crearemos un script que exporte esta información desde una llave USB.

Configurar /etc/crypttab

Incluimos dos líneas, en la primera recuperamos el dispositivo LUKS utilizando el script y en la segunda línea utilizando una frase secreta.

Configurar /etc/fstab

Configurar /etc/fstab para montar la partición cifrada en /home

Tareas de operación con particiones cifradas LVM

Cambiar el tamaño de un LVM cifrado

Una de las mejores razones de utilizar una partición LVM cifrada es que se pueden re-dimensionar de manera flexible. Los LVM cifrados deberían cumplir con este mismo requerimiento, a continuación explicamos cómo se realiza:

Estado de /home en el sistema de ficheros antes de la operación

Incrementar el tamaño del disco físico

En el caso de máquinas virtuales se puede hacer a través de una consola de gestión, o también se podría incrementar este tamaño agregando un nuevo dispositivo al Grupo de Volúmenes. Después de agregar o incrementar el disco forzamos al Sistema Operativo a re-escanear el bus SCSI.

Incrementar la unidad lógica con el tamaño deseado

Re-dimensionar la partición cifrada

Re-dimensionar la estructura de ficheros

Estado de /home en el sistema de ficheros después de la operación

Descifrar el LVM desde una llave USB

A continuación encontramos el script para extraer la llave desde una llave USB. Es importante obtener el valor UUID del dispositivo USB donde se encuentre la llave. El script se podría colocar en la partición de /boot que es donde se encuentran los archivos que se ejecutan en primeras instancias de ejecución del Sistema Operativo.