Sistema de Ficheros Virtual y Encriptado

manuales - Linux

Este es un ejercicio interesante. A nivel práctico habrá quien le saque partido y habrá quien no, pero no por ello deja de una oportunidad de aprender y experimentar con nuestro sistema.

El objetivo es conseguir un fichero encriptado, que si se monta y se introduce la password correcta, se convierte en un sistema de ficheros donde podemos guardar datos confidenciales: cuentas del banco, tarjetas de crédito, datos personales de clientes, fotos de nuestra vecina en la ducha, la lista NOC de los mejores agentes de la CIA... y esas cosas que tenemos en nuestro disco duro y que no queremos que nadie vea. Y si se desmonta, es solo un fichero inocente lleno de basurilla informática completamente ilegible.

¿Mola o no mola?

Pues empecemos con un poco de teoría, vamos a hablar del dispositivo loop.

El dispositivo loop
Es un seudo-dispositivo que hace que un archivo se comporte y sea accesible como un dispositivo de bloque (un HD, CD-ROM, etc...).

Antes de utilizarse, un dispositivo loop debe asociarse a un fichero existente en nuestro sistema de ficheros. La asociación permite que el archivo se comporte como un bloque 'especial' de ficheros, y si el archivo contiene un sistema de ficheros completo, este puede ser montado como si fuera un dispositivo de disco.

El ejemplo más fiel a lo que pretendemos hacer es el de una imagen ISO.

Los dispositivos /dev/zero y /dev/urandom:

/dev/zero es un archivo especial que provee tantos caracteres null como se lean desde él.

Uno de los usos típicos es proveer un flujo de caracteres para sobreescribir información. Otro uso puede ser para generar un archivo "limpio" de un determinado tamaño.

/dev/urandom es lo mismo, solo que en lugar de null provee basurilla informática, es decir, caracteres aleatorios. En lugar de generar un archivo "limpio" generará un archivo lleno de mierda ilegible.

Para lo que pretendemos hacer es mejor utilizar /dev/urandom

El comando dd (duplicate disk)

El comando dd se utiliza para copiar un archivo de un origen a un destino, de acuerdo a determinadas opciones, alguno lo habréis usado para crear un diskete de arranque a partir de una imagen... ¿no os suena eso a cómo se copia una ISO? :P

Aquí (http://linux.die.net/man/1/dd) tenéis una lista de las opciones de dd, nosotros vamos a usarlo de la siguiente manera:

dd if=dispositivo de entrada of=dispositivo de salida bs=tamaño del bloque count=nº de bloques (cada bloque será del tamaño especificado con 'bs')

El comando losetup

losetup se utiliza para asociar dispositivos loop a ficheros o dispositivos de bloque, para desasociarlos y para chequear su estado. Además, entre sus opciones encontramos la opción '-e encryption', lo que nos va a permitir la encriptación de nuestro fichero.

Bueno, pues vamos allá!!

Lo primero que vamos a hacer es cargar en el kernel las herramientas que necesitamos:

uno:~# modprobe cryptoloop << para poder usar dispositivos loop
uno:~# modprobe aes << para poder usar la encriptación aes

uno:~# dd if=/dev/urandom of=secretfile bs=1M count=20 << estamos creando un fichero llamado secretfile de 20M (20 bloques de 1M cada bloque) y que va a estar lleno de basurilla informática jejeje Podéis crearlo del tamaño que queráis.

uno:~# losetup -e aes /dev/loop0 secretfile << ahora estamos asociando nuestro fichero secretfile con el dispotivo /dev/loop0 y además indicándole que queremos que nos lo encripte usando 'aes', de manera que nos pedirá una contraseña que usará para la encriptación, y es la que nos hará falta cuando después queramos montar nuestro sistema de ficheros (así que más nos vale acordarnos de qué contraseña le damos).

mkfs -t ext3 /dev/loop0 << ahora damos formato a nuestro dispositivo, en este caso ext3

uno:~# losetup -d /dev/loop0 << con esto desasociamos el dispositivo de nuestro fichero, ya que no nos hace más falta.

Ahora vamos a crear un directorio para montar nuestro sistema de archivos, fijaos en las opciones de mount:
uno:~# mkdir /mnt/secret
uno:~# mount -o loop,encryption=aes secretfile /mnt/secret/ << nos pedirá contraseña para montarlo ¿os acordáis de cual era?

Y este es el resultado:
uno:~# cd /mnt/secret/
uno:/mnt/secret# df -h .
Filesystem            Size  Used Avail Use% Mounted on
/root/secretfile       20M  172K   19M   1% /mnt/secret


Si lo desmontáis, igual que cualquier otro dispositivo, solo veréis un fichero lleno de cosas ilegibles.
Y recordad: en el mundo existen dos tipos de personas, los que dividen al mundo en dos tipos de personas, y el resto.
Usar puntuación: / 1
MaloBueno