Almacenamos datos confidenciales en GNU/Linux
El manual es complementario al artículo Almacenamos datos confidenciales en GNU/Linux (Hakin9 01/2005). Supongamos que los ejercicios descritos se realizarán con Hakin9 Live que acompana a la revista.
!Nota! No recomendamos cifrar los datos reales que tengan valor con el sistema Hakin9 Live – esto puede provocar su pérdida después de reiniciar el ordenador.
Objetivo: Después de realizar los ejercicios descritos, el Lector:
sabrá cifrar de forma simétrica y asimétrica archivos separados usando el paquete GnuPG,
sabrá crear y usar la carpeta cifrada con la herramienta EncFS,
sabrá crear y montar una partición cifrada (real o virtual) con el uso de la herramienta cryptoloop.
Cifrado simétrico de archivos – paquete GnuPG
En el primer ejercicio vamos a emplear el paquete GnuPG para cifrar un archivo separado. En nuestro caso será el archivo HK1204.pdf.
[01] En el manual vamos a emplear el algoritmo AES (tiene la mejor relación del rendimiento a la calidad). Vamos a empezar por cargar el módulo del núcleo responsable de su soporte:
$ su -
# modprobe aes
# exit
[02] Creamos el directorio /home/haking/encrypted, en el cual vamos a almacenar nuestros datos cifrados:
$ mkdir ~/encrypted
En él guardamos el archivo HK1204.pdf.
[03] Ya es la hora de cifrar. Damos el siguiente comando:
$ gpg --output ~/encrypted/cyph1 --symmetric --cipher-algo AES192 ~/encrypted/HK2104.pdf
El comando mencionado nos obliga a cifrar de forma simétrica el archivo HK2104.pdf al archivo de salida ~/encrypted/cyph1 con el uso del algoritmo AES con la clave de 192-bits.
[04] Para cifrar es necesario dar una contrasena. Vamos a pensar un momento la frase que no tiene sentido pero que sea fácil de memorizar – por ejemplo – Por las noches los enanos y el elefante con su nariz tocan rumba. Así se divierten, 666. Así será la contrasena.
[05] El archivo ha sido cifrado. Ahora tenemos que quitar con seguridad el original:
$ shred -n 35 -z -u ~/encrypted/HK2104.pdf
[06] Para descifrar el archivo y recuperar los datos vamos a usar el siguiente comando:
$ gpg --output HK2104.pdf --decrypt ~/encrypted/cyph1
Directorios cifrados – EncFS
[07] Antes de usar la aplicación EncFS tenemos que crear dos directorios. En uno (en nuestro caso ~/.crypto) vamos a almacenar nuestros datos en forma cifrada (no vamos a emplearlo directamente), en cambio en el otro (~/secret) se montarán y descifrarán en el vuelo a cualquier solicitud de acceso. El montaje puede tener lugar tan sólo al dar la contrasena correcta.
$ mkdir ~/.crypto
$ mkdir ~/secret
[08] El siguiente paso activará el mecanismo EncFS:
$ su -; insmod fuse; exit
$ encfs ~/.crypto ~/secret
Al pulsar la tecla [Enter] se nos pedirá el modo de selección de la configuración. Vamos a decidirnos por el modo predeterminado paranoico.
Es la hora de fijar la contrasena para nuestro archivo. Después de darla y confirmar nuestro sistema virtual de archivos está preparado a usar.
[09] Copiamos en él unos archivos (echo, ls, telnet):
$ cp /bin/echo /bin/ls /bin/telnet ~/secret/
Comprobamos qué es lo que se encuentra en los directorios ~/secret y ~/.crypto:
$ ls ~/secret
$ ls ~/.crypto
Como podemos ver, en el primero se encuentran nuestros archivos mientras que en el segundo está su versión cifrada. Para que nadie pueda leer su contenido, ahora podemos desmontar el sistema virtual de archivos, con el siguiente comando:
$fusermount -u ~/crypto
!Éxito! Nuestros datos ya son seguros.
[10] Ahora vamos a tratar de montarlos otra vez – con una protección adicional la cual, de forma automática, va a desmontar después de pasar unos minutos de inactividad (10 minutos):
$ encfs --idle=10 ~/.crypto ~/secret
Nuestros archivos son accesibles de nuevo en el directorio ~/secret. Cuando esperemos 10 minutos, nos convenceremos de que se desmontará automáticamente.
Sistema de archivos cifrado – cryptoloop
Nos ha quedado tan sólo una herramienta que nos ayudará proteger los archivos confidenciales. Es la aplicación cryptoloop incluida en el kernel de Linux.
[11] Suponemos que no tenemos actualmente ninguna partición que esté libre (así es en el caso de Hakin9 Live), vamos a emplear un cómodo rasgo del mecanismo de retorno &ndash loopback – que permitirá emplear como sistema de archivos un archivo ordinario. Vamos a prepararlo:
$ dd if=/dev/urandom of=~/crypto.raw bs=1k count=10000
Esto hace que creemos un archivo de 10 megabytes, lleno de valores aleatorios (basura).
[12] La siguiente acción es asociar el archivo creado con un dispositivo libre loop y cifrarlo con el método que nosotros seleccionemos:
$ su -
# losetup -e aes-192 /dev/loop1 /home/haking/crypto.raw
La aplicación nos pedirá la contrasena de 20 caracteres como mínimo.
[13] Como ya tenemos espacio preparado, tenemos que ordenarlo un poco, es decir, crear un sistema de archivos. Por ejemplo ext2:
# mkfs.ext2 /dev/loop1
[14]Después de realizar la operación podemos ya soltar (opción -d) el dispositivo
loop1:
# losetup -d /dev/loop1
# exit
[15] Nuestro sistema de archivos cifrado ya está preparado para montarlo y usarlo de igual forma como cualquier otro sistema de archivos. Vamos a montarlo y veremos como funciona:
$ mkdir ~/encrypted_disk
$ mount -t ext2 ~/crypto.raw ~/encrypted_disk -oencryption=aes-192
mount, al dar la contrasena correcta, por si mismo va a asociar el archivo con el primer dispositivo libre loop.
[16] Vamos a copiar nuestros archivos a un contenedor seguro:
$ cp /bin/echo /bin/ls /bin/telnet ~/encrypted_disk
Es todo – ya podemos montar y desmontar nuestro nuevo disco cifrado sin ninguna limitación. Nadie sin conocer la contrasena de acceso tendrá la posibilidad de mirar su interior.