Encriptando sistemas ya instalados

En este artículo voy a tratar de explicar cómo encriptar todo un sistema Debian (aunque sea fácilmente extraplorable a otros sistemas GNU/Linux o incluso sólo a partes del sistema como /home).

La idea surgió revisando el antiguo contenido de esdebian y en concreto un artículo del blog de BlackRider, éste: https://web.archive.org/web/20151208115748/http://black-rider.esdebian.org/48467/asegurar-datos-criticos-knoppix-o-derrotar-malos-malotes

A través de los siguientes pasos se podría conjugar lo que en el mencionado artículo se denomina LA PROPUESTA DEL SOCIÓPATA con el deseo del usuario de mantener sus customizado sistema Debian. En el artículo no me concentraré en el borrado seguro de datos del sistema inicial, sólo en las operaciones necesarias para obtener el resultado deseado, que decir tiene, que si queremos emular al sociópata debemos borrar datos como el sociopata.

Para hacerlo más divertido y cubrir casi toda la posible problemática vamos a partir de un sistema Debian jessie instalado sin ningún tipo de encriptación en una única partición del disco duro. Esto es, como si utilizásemos la opción de todos los datos en una partición (opción para novatos) del instalador de Debian. Es cierto que esta opción nos crea una partición Swap, pero ésta no es relevante y puede ser o bien eliminada en sistemas con suficiente RAM o encriptada convenientemente (opción que se cubrirá en otro artículo).

 

Problemática:

  • Para encriptar el sistema utilizando LUKS necesitamos una partición separada para /boot, y que además no esté encriptada. Esta es mi opción peferida aunque ahora grub2 pueda manejar particiones encriptadas.
  • Necesitamos pasar los datos a un disco de almacenamiento intermedio, que nos servirá para pasar los datos de la / no encriptada a la / encriptada.
  • Obviamente hay que configurar el sistema para que sea capaz de arrancar bajo esta nueva configuración, para lo cual se necesitará un Live-CD desde el que hacer chroot. Ante la falta de imágenes oficiales en Debian cada cual puede usar la que más le plazca, en este caso SystemRescueCD, pero podrían usarse otras como Porteus.

 

Comenzamos:

Lo primero es arrancar nuestro sistema incial e instalar cryptsetup. (Todos los comandos se ejecutan como root).

apt install cryptsetup

Usando nuestro HDD externo se procede a realizar una copia de seguridad. Hay muchas maneras de llevar a cabo esta operación. Yo apagaría el sistema inicial, arrancaría con un Live-CD y procedería a copiar via rsync todo el sistema en una partición encriptada del HDD y formateada con el mismo sistema de archivos que el del sistema inicial (Ext4 en el ejemplo). Se puede hacer via tarball, pero los acls son un dolor de muelas y aunque está soportados por las versiones modernas de tar yo no he encontrado resultados satisfactorios. En cualquier caso, en un sistema standard sólo afectaría a /media. Detallaré la opción tar, por ser la que pueda dar más problemas, pero más versatil, al necesitar sólo un archivo y no todo un sistema de archivos. Todos los comandos que siguen se hacen desde la Live-CD de elección.

tar --selinux --acls --xattrs -cvf miarchivotar_en_el_HDD.tar /mnt/Donde_este_montado_el_sistema_inicial

getfacl /media/$USER > $USER_acl.acl ## Esto habría que hacerlo para cada usuario en caso de haber varios

En el código se han incluido además del codigo tar, cómo guardar los acls manualmente, ya que tar no parece manejarlos correctamente (por mi experiencia), la posible configuración de selinux (si lo usas este artículo probablemente te parezca un juego de niños). Para los curiosos: https://wiki.debian.org/Permissions#Default_.28inherited.29_ACL

Ahora que ya tenemos nuestro bonito backup (nunca se puede estresar suficientemente esto para todo backup) COMPROBAR SU INTEGRIDAD Y QUE HA SIDO REALIZADO CORRECTAMENTE.

Posteriormente se reformatea el HDD donde se encontraba el sistema inicial. Yo usaría Gparted, que combina funcionalidad y sencillez, pero otras opciones como fdisk son igualmente válidas. Como resultado, suponemos que nos queda una partición de 400MB formateada en Ext2/3/4 que será nuestro /boot y otra partición con el resto del sistema que dejaremos sin formato. Nótese que se ha eliminado completamente la swap, ya que para entornos de máxima seguridad no es aconsejable, en cualquier caso, se cubrirá esta eventualidad en un artículo posterior.

¡A encriptar se ha dicho!

cryptsetup luksFormat /dev/sda2
## Si nuestro CPU es muy lento, tipo Netbook, podemos disminuir el tamaño de la clave de los 256 bit por defecto
cryptsetup --key-size 128 luksFormat /dev/sda2
#Nos pedirá confirmar la contraseña
cryptsetup luksOpen /dev/sda2 root
mkfs.ext4 /dev/mapper/root
mount /dev/mapper/root /mnt

Ahora ya tenemos nuestro nuevo sistema de ficheros ext4 en un contenedor luks montado en /mnt, sólo queda desempaquetar el archivo tar en el susodicho punto de montaje:

cd /mnt ; tar -xvf /ruta_a/miarchivotar_en_el_HDD.tar
#Movemos el contenido de /boot a su partición
mount /dev/sda1 /media
cd /mnt/boot 
cp -r * /media/
rm -r *
cd /
umount /dev/sda1
mount /dev/sda1 /mnt/boot

Esto va tomando forma, ahora solo falta realizar los ajustes necesarios para que el nuevo sistema sea capaz de arrancar, para esto debemos de hacer chroot en el sistema, por esto es importante que nuestro LiveCD sea de la misma arquitectura que el sistema inicial.

cd /mnt
mount -t proc proc proc/
mount --rbind /sys sys/
mount --rbind /dev dev/
mount --rbind /dev/pts dev/pts
cp /etc/resolv.conf etc/resolv.conf
chroot /mnt /bin/bash

#Ahora podríamos restaurar los acls, aunque se puede dejar para cuando tengamos un sistema booteable, que decir tiene que el archivo debe de estar dentro de la estructura del chroot
setfacl --restore=ruta_a_$USER.acl
##Ahora ya estamos en el entorno chroot

blkid #Imporatante conocer el UUID de todas las particiones, output:
/dev/sda1: UUID="uuiddelaparticon_sda1" TYPE="ext2"
/dev/sda2: UUID="uuiddelaparticon_sda2" TYPE="crypto_LUKS"

Pasamos ahora a editar (dentro del chroot) los archivos /etc/fstab y /etc/crypttab, debiendo quedar así respectivamente:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
UUID=uuiddelaparticion_sda1 /boot           ext2    defaults        0       2
/dev/mapper/root /               ext4    errors=remount-ro 0       1
root UUID=uuiddelaparticion_sda2 none luks

Hecho esto, le estamos diciendo al sistema que la partición encriptada root tiene una UUID, que debe desencriptarla para poder montarla como el sistema raiz. Para que estos cambios se hagan efectivos debemos actualizar el initramfs.

update-initramfs -u -k all
#Ya que estamos lo actualizamos todo, aunque no es necesario ni no hemos cambiado la tabla de particiones
grub-install /dev/sda
update-grub 
#Y salimos del chroot
exit

 

¡Hecho! Ya solo queda disfruta de nuestro mismo sistema pero convenientemente encriptado.

 

En otro próximo artículo incluiré variaciones como:

  • Otra distribución de particiones
  • Uso de LVM
  • Swap

 

Fuentes:

Además de los enlaces anteriores, la wike de Arch.

https://wiki.archlinux.org/index.php/Dm-crypt_(Espa%C3%B1ol)

Dax Coppinger
Imagen de Dax Coppinger
Categoría: 
Dom, 11/12/2016 - 15:10
Percontator
Imagen de Percontator
Desconectado/a
colaborador
se unió: 20/03/16

 

 El tema suena interesante, y seguro que da información util, (lo leere en otro momento, ofline, ahora mismo no).

 Solo quiero llamar la atención de que según que pais, "encriptar" no es una palabra reconocida, por mucho que

 la usen locutores y periodistas, (vergüenza deberia darles hacer mal uso de las herramientas de su profesion).

 En España por ejemplo, "encriptar" no está reconocida en el diccionario. Aparece como mucho como vocablo

 extranjero "que corre por ahi". Pero tiene categoria de barbarismo.

 La palabra reconocida y propuesta por la rae es CIFRAR, cifrado, descifrado, etc. Lo cual en el mundo de los ordenadores,

 "really make sense". cheeky  devil

 

 Pues eso, y a pesar de las posibles incorreciones, gracias por la aportación.

 

Mié, 14/12/2016 - 18:06 (Responder a #1)
Dax Coppinger
Imagen de Dax Coppinger
Desconectado/a
colaborador
se unió: 07/12/16

Gracias por la corrección ortográfica Percontator jaja (Nazi-grammars everywhere)

Podríamos iniciar una bonita discusión sobre si los idiomas requieren de instituciones que determinen que palabras son correctas. Yo en este caso soy muy anglosajón. Pero me remito a la propia RAE... http://dle.rae.es/?id=FABu3oz ¿Parece que la realidad ya se ha impuesto?

En todo caso no me gustaría que la cosa deviniese en una discusión ortográfica (que siempre es importante), sino canalizar las energías en la problemática planteada en el artículo y las posibles variaciones. ¡A ver si no me dejo nada en el segundo artículo!

 

Gracias por comentar igualmente ;)

Comfortably numb

te puede interesar

Reportbug NG Reportar un bug nunca fue tan fácil!!!

La idea de este artículo es dar un pantallazo de como funciona este genial programa creado específicamente para el usuario final y como una alternativa del tradicional reportbug. ¿Qué es Reportbug-NG? Reportbug-ng, al igual que su antecesor, es un...