jueves, 22 de septiembre de 2011

La paranoia a full: Encriptando discos (LVM + dm-crypt)


Hoy empezamos con una nueva serie de artículos, que os intruducirán en el mundo de la encriptación, empezamos encriptando discos, lo que se conoce como "Full Disk Encryption (FDE)", lo que vamos a explicar, es como encriptar una partición entera, la de tu sistema de archivos, de forma de que nadie pueda acceder a ella sin poseer la clave ("passphrase"), tanto desde el interior del mismo sistema de archivos, como del exterior. Este proceso es conveniente (es mucho mas sencillo) realizarlo durante la instalación de la distribución que escojamos.

Pongamonos en situación, nos gusta la seguridad informática, proteger nuestra información y demás, por lo tanto decidimos encriptar nuestros discos, y la manera mas sencilla, según vemos, es encriptar las particiones durante el proceso de instalación de nuestra distribución, por ahora todo claro. Pues continuemos explicando lo que vamos a hacer con nuestras particiones para encriptarlas , supongamos que tenemos 2 particiones en uso, ocupadas por un sistema operativo linux o diferente, entonces tenemos un problema ya que si decidimos encriptar partición por partición, necesitariamos una para "/boot", sin encriptar, ya que no sepuede arrancar en particiones encriptadas, necesitariamos otra para la swap, y otra para el sistema raíz, e aquí el problema, necesitariamos partir en 5 el disco, y Linux solo permite 4 particiones. ¿Entonces como hacemos? Usaremos LVM de forma que solo necesitemos 2 particiones mas, a mayores, expliquemoslo con más detalle:


LVM

LVM es la abreviatura de Logical Volume Manager, Administrador de Volumenes Lógicos, LVM nos permite crear volumenes lógicos, que realizarian las funciones de una partición, con la ventaja de que podemos redimensionarlos a nuestro antojo, sin destruir datos y son de muy fácil administración. Imaginemonos que tenemos un armario grande, pero no tiene cajones ni ningún compartimento, que nos permita almazenar de forma ordenada cosas, ese armario funcionaría como una partición. Ahora pensemos en un gran armario, también, esta sería la parte física, que vamos a llamar volumen físico, el armario tiene multitud de cajones que podemos redimensionar para guardar diferentes cosas, joder con lo que inventan, dirás, bueno cada uno de esos cajones actuaría como un volumen lógico y el conjunto, grupo, de todos lo cajones pasaría a llamarse grupo de volumenes, así es mas o menos como actua LVM. Una partición o conjunto de particiones, actuan como volumen físico, en ellas podemos constituir un grupo de volumenes, y en el crear volumenes lógicos, por ejemplo un volumen para almazenar la swap y otro para el sistema raíz.

Hagamos un repaso, por ahora tenemos una forma de poner todo el sistema de archivos en las dos particiones que poseemos, pondremos "/boot", en una partición separada como recordamos, para que el sistema pueda arrancar y en la partición restante crearemos un LVM, para poner nuestra swap y nuestro sistema de archivos. Pues solo nos falta la manera de encriptar nuestro LVM, y lo haremos con dm-crypt.


Dm-crypt

La definición de dm-crypt, no es una cosa demasiado sencilla de entender, si estas, además iniciandote en la criptografía, así que poco a poco intentaré explicarla, empecemos con la deficinición compleja: "dm-crypt es un device-mapper, que permite la encriptación transparente de dispositivos en bloque". Vamos punto por punto, "..es un device-mapper...", nos referimos que pertence al conjunto de device-mappers (permiten mappear un block device (dispositivos en bloque), disco con una etructura de un tamaño determinado en bloques, sectores y clusters, en otro, no nos centraremos en los devices mapper, así que esto vale para hacernos una idea), si sabeis lo que es un snapshot sabeis lo que es un device-mapper. Bueno sigamos "...encriptación transparente de dispositivos.." esto se conoce también como TDE (Transparent Data Encryption) se trata de un tipo de encriptación OTF (On-the-fly, tiene un significado similar "Al vuelo" en español), OTF es encriptación en tiempo real, es decir cuando pasemos nuestra clave, el disco, y todos sus archivos, serán totalmente accesibles y el disco será montado como un disco normal. De esto todo lo que nos tiene que quedar claro es que dm-crypt, nos va a permitir a encriptar nuestro disco, y una vez que le entregemos nuetra clave, sera desencriptado y podremos acceder a el con toda normalidad.  Bueno dejémonos de tanta chapa y vamos a hacer esto real.


La práctica

A continuación van tres métodos, para encriptar nuestros discos con lo aprendido arriba, van de más sencillo a más complejo.




Usando una GUI gráfica, de instalación. (Fedora, Suse...)



Las más modernas distribuciones, que cuentan con una GUI gráfica,(nos referimos a una GUI gráfica, a una GUI que toma uso de imágenes), nos permiten realizar estre proceso de una manera realmente sencilla, bueno pos venga arrancamos el instalador y seguimos lo pasos, hasta que nos pregunte sobre los discos y el particionado,
os apareceran opciones como "Use all espace","Replace current Linux Systems", "Use free space", etc. Pues nosotros selecionaremos la opción manual os puede aparecer como , "Crear esquema de particionado", "Create custom layout" o algo así, lo seleccionamos, debes tener espacio suficiente para "/boot"(200MB), swap(~ram*1.5) y para el sistema. Seguiremos los siguientes diez pasos:
  1. Click en el espacio libre, presionar "crear".
  2. Seleccionar "Partición Standart" y botón "crear".
  3. Seleccionar montaje en "/boot", sistema de archivos ext4 (el que querais), marcamos la opción de "fixed size", y ponemos encima 200MB, forzamos para que sea una partición primaria. (marcar) y le damos a crear.
  4. Click en el espacio libre, selecionar LVM physical volume" y crear.
  5. Marcamos para que ocupe todo es espacio, y marcamos la casilla Encrypt, y creamos.
  6. Hacemos click en el LVM, creamos un LVM volume group.
  7. Penemos un nombre al grupo LVM, y abajo presionamos en add.
  8. Seleccionamos como filesystem swap, ponemos swap de nombre y le damos el tamaño de nuestra ram en MB multiplicado por 1.5, no marcamos la candilla de encriptar, le damos a crear.
  9. Hacemos lo mismo para la partción root, ponemos filesystem ext4, (reiser sería mas sencillo, pero parece que la gente prefiere ext4), de nombre root, de tamaño todo el sobrante, y creamos.
  10. Le damos a Ok, y Next, si nos dice de formatear lo hacemos, y acabamos la intalación
Usando una GUI, gráfica en modo de texto (Arch Linux)


Así como antes, explicamos de una manera más básica como encriptar discos, vamos a hacerlo ahora de una manera un poco más compleja, voy a poner de ejemplo a Arch Linux es una distribución fácil de configurar y altamente configurable, aunque puede resultar un poco confusa para gente iniciandose en el mundo de linux, por este motivo voy a pensar en el usuario de arch linux como un usuario con alguna experiencia en el ámbito de las distribuciones, y esta sección no será tan simple como la anterior. Instalar arch linux en LVM, como lo hecho arriba es sencillo, cuando llegemos al monento de particionar los discos, seleccionamos, partición manual, y simplemente copiaremos el siguiente esquema de partición, para nuestras particiones "/boot" y el LVM.

/dev/sda1   raw->ext4;yes;/boot;no_opts;no_label;no_params
/dev/sda2   raw->dm_crypt;yes;no_mountpoint;no_opts;sda2crypt;-c_aes-xts-plain_-y_-s_512
/dev/mapper/sda2crypt   dm_crypt->lvm-vg;yes;no_mountpoint;no_opts;no_label;no_params
/dev/mapper/sda2crypt+  lvm-pv->lvm-vg;yes;no_mountpoint;no_opts;cryptpool;no_params
/dev/mapper/cryptpool   lvm-vg(cryptpool)->lvm-lv;yes;no_mountpoint;no_opts;cryptroot;10000M|lvm-lv;yes;no_mountpoint;no_opts;cryptswap;2000M
/dev/mapper/cryptpool-cryptroot   lvm-lv(cryptroot)->ext4;yes;/;no_opts;cryptroot;no_params
/dev/mapper/cryptpoll-cryptswap   lvm-lv(cryptswap)->swap;swap  
 
Este es un esquema de la tabla de particiones, en los nuevos instaladores todo se configura automaticamente sino debeis poner.
  • USELVM="yes" en /etc/rc.conf
  • Añadir a /etc/mkinitcpio.conf en la sección HOOKS, encrypt y lvm2, en ese orden antes de filesystems.
 Encriptando en sistemas sin instalador. 

Este es el último método y sirve para aquellas distros sin instalador, o que no os gusta usarlos, el método esta descrito por encima ya que cada distribución usa sus propias opciones de configuración. Aún así la cosa no es tan compleja como suena, para un administrador de sistemas resulta más bien sencilla. Cabe obviar ya que deben existir dos particiones (las vamos a nombrar sda1 y 2 para el ejemplo), podeis crearlas con fdisk o lo que querais. Lo que debemos hacer es lo siguiente:

  • El borrado seguro de datos:
     
    dd if=/dev/urandom of=/dev/sda1
    dd if=/dev/urandom of=/dev/sda2
  1. Creación del lvm volumen físico, grupo de volumenes y volumenes:
    lvm pvcreate /dev/sda2
    lvm vgcreate lvm /dev/sda2
    lvm lvcreate -L swapsizeM -n swap lvm
    lvm lvcreate -l 100%FREE -n root lvm


  2. Encriptando los datos:
    cryptsetup luksFormat -c aes-xts-plain -s 512 /dev/lvm/root
    cryptsetup -d /dev/random create swap /dev/lvm/swap
    cryptsetup luksOpen /dev/lvm/root root
  3. Creando los sistemas de archivos:
    mkswap /dev/mapper/swap
    mkreiserfs /dev/mapper/root
    mkreiserfs /dev/sda1
    
Ahora solo quedaría reconstruír la imagen del kernel, para que arranque con lo necesario (buscad como hacerlo para cada vuestra distribución) y configurar fstab, tal que así:
/dev/mapper/root        /       reiserfs        defaults        0       1
/dev/sda1               /boot   reiserfs        defaults        0       2
/dev/mapper/tmp         /tmp    tmpfs           defaults        0       0
/dev/mapper/swap        none    swap            sw              0       0
Bueno señoras y señoras, esto ha sido todo sobre LVM, pretendía hacer un artículo más o menos para todos los públicos, espero que pueda servir se ayuda. 5412X

2 comentarios:

Wow, genial, habrá que probarlo :D

Encantado de que che guste o post, gracias. Jajaja

Publicar un comentario en la entrada