Todos los sistemas operativos modernos disponen de soporte kernel-space para cifrado de datos: Linux (cryptoloop para 2.4, dm-crypt en 2.6, loop-aes 2.4/2.6), FreeBSD (GEOM_BDE, o a partir de 6.0 el nuevo GEOM_ELI), Mac OS X (FileVault), etc, aunque últimamente se han popularizado sistemas user-space por su facilidad como TrueCrypt, algunos siendo además multiplataforma.
Sobre algunos de ellos me gustaría hablar aquí, en concreto sobre loop-aes y GEOM_ELI, pero llevo queriendo hablar de estos temas desde que abrí el blog, así que tiempo al tiempo.
Hoy el tema que nos ocupa es el cifrado de datos en OpenBSD, esta sistema operativo de tipo Unix está basado en BSD4.4 y es descendiente directo de NetBSD, pero con un enfoque especial hacia la seguridad y criptografía.
Actualmente la última versión disponible es la versión 4.3 y su slogan “Free, Functional & Secure” destaca sus mayores virtudes: libre, funcional y seguro. Está liberada bajo licenia BSD, al igual que sus hermanas (FreeBSD, NetBSD…).
Para poder usar este soporte de cifrado no es necesario recompilar el kernel (a diferencia de FreeBSD por ejemplo) y se puede hacer de manera muy sencilla.
Podemos realizar el proceso de dos maneras diferentes, creando una partición del disco duro y cifrandola, o bien creando un fichero y usandolo como una partición virtual, gracias a vnconfig el cual nos permite configurar dispositivos para swapping y pseudo sistemas de ficheros.
En esta pequeña guía voy a utilizar la segunda aproximación por ser más sencilla para alguién que empieza y no tener que tocar el disco físicamente, de esta manera cualquier problema será mucho menos doloroso.
Empezamos, en primer lugar vamos a crear un fichero con contenido aleatorio del tamaño que queramos para nuestra partición cifrada, en este ejemplo voy a poner 100 MB. Crearemos el fichero con este comando:
dd if=/dev/prandom of=/path/to/file bs=1048576 count=100
El parámetro count indica el número de MB que tendrá la partición, el parametro of indica el path y fichero de destino.
Vereis algo similar a esto:
# dd if=/dev/prandom of=/path/to/file bs=1048576 count=100
100+0 records in
100+0 records out
104857600 bytes transferred in 73.364 secs (1429262 bytes/sec)
Bien, ya tenemos el primer paso hecho, ahora vamos a crear el dispositivo especial, más concretamente, lo que vamos a hacer es asociar el dispositivo vnodo encriptado al fichero recién creado, esto lo haremos así:
/usr/sbin/vnconfig -ck -v svnd0 /path/to/file
Nos pedirá la clave de cifrado,
Encryption key:
svnd0: 104857600 bytes on /path/to/file
Cuidado: Debereis teclear la clave conscientemente puesto que sólo la pedirá una vez, si no estais seguros deberéis repetir el proceso, podeis usar svnd1 en adelante, si os indica que svnd0 está ocupado, al igual si creais más de una partición virtual, tendreis que usar distintos dispositivos.
Cuando escribais la clave vereis el mensaje de arriba svnd0: 104857600 bytes on /path/to/file
Una vez linkado el dispositivo cifrado al fichero, pasamos a darle un formato válido para OpenBSD:
# newfs /dev/rsvnd0c
/dev/rsvnd0c: 204800 sectors in 2048 cylinders of 1 tracks, 100 sectors
100.0MB in 2 cyl groups (1568 c/g, 76.56MB/g, 9856 i/g)
super-block backups (for fsck -b #) at:
32, 156832,
#
Nota para usuarios avanzados: Antes de realizar el newfs comprobar que el sistema no se encuentra en securelevel 2, lo podeis hacer mediante:
# sysctl -a|grep kern.securelevel
Si está en ese nivel tendreis que bajar al menos a securelevel 1, de otra manera el sistema no os dejará.
Este aviso es para usuarios que vean un inquietante Operation not permitted siendo root, en ese caso debereis ir a /etc/rc.securelevel
y bajar el valor de la etiqueta securelevel a 1, seguido de un reboot.
Seguimos, ya tenemos un formato válido, sólo queda montarlo:
mount /dev/svnd0d /punto/de/montaje
Con df podemos comprobar que se ha montado correctamente, por ejemplo lo podemos montar en /mnt y veremos algo similar a:
# df -h|egrep "Size|svnd"
Filesystem Size Used Avail Capacity Mounted on
/dev/svnd0c 97.5M 2.0K 92.6M 0% /mnt
Ya tenemos nuestros datos cifrados, vnconfig usa el cipher Blowfish antes de escribir en el disco, para más información podeis acceder a la página man de vnconfig: man vnconfig.
Ahora una pequeña chuleta:
Para montar la partición cifrada:
/usr/sbin/vnconfig -ck -v svnd0 /path/to/encrypted/file
mount /dev/svnd0d /punto/montaje
Para desmontarla:
umount /punto/montaje
vnconfig -u -v /dev/svnd0d
Para analiazar la partición:
/usr/sbin/vnconfig -ck -v svnd0 /path/to/encrypted/file
fsck /dev/svnd0c
Error “vnconfig: VNDIOCSET: Device busy”
Si ponemos mal el password, al usar el comando vnconfig, cuando montemos la partición veremos un error como este:
mount_ffs: /dev/svnd0c on /mnt: Invalid argument
Al volver a realizar un vnconfig, veremos
# /usr/sbin/vnconfig -ck -v svnd0 /data/datos/cru
Encryption key:
vnconfig: VNDIOCSET: Device busy
Para solucionarlo tendremos que limpiar ese dispositivo:
# vnconfig -u -v vnd0
vnd0: cleared
Y ya podremos volver a usar vnconfig, otra opción es usar otro dispositivo por ej: svnd1 y svnd1c
Eso es todo amigos.
3 replies on “Cifrar particiones y datos en OpenBSD”
Cual es el maximo tamaña que puede terner un disco cifrado?
Si la maquina se cae por cualquier razon y no se desmonta el disco bien, se dañaria esa particio cifrada?
En el siguiente enlace pueden encontrar varios manuales para OpenBSD:
http://www.fencus.net/foros/-indice-manuales-para-openbsd-t-552.html