Cómo crear un USB encriptado para proteger datos sensibles

Método manual de encriptación de pendrive con nuestros datos

Posted by     "David Guillermo" on Sunday, December 4, 2011

Como bien dije ayer en twitter, hoy voy a explicar el método que uso para proteger algunos de los datos más sensibles que manejo en mi entorno de trabajo, navegador, ssh keys y datos varios. Hago referencia al script que uso,que fue hecho por Rafael Gawenda y también fue su idea, yo modifique el script para mis necesidades.

Bueno, lo primero que tenemos que hacer es generar un archivo para después encriptarlo. Así creamos un archivo llamado “key” en el pendrive que tendrá una partición de 2.9GB (esto tardará un rato).

$ kaiser ~ # dd if=/dev/urandom of=/media/dguillermo/key bs=1024k count=2950

Ok, ahora que tenemos nuestro archivo, sólo nos quedaría encriptarlo, (yo compilo el Kernel Linux específico para mi máquina y sus características específicas, no comparto esa idea de usar un Kernel genérico con “20 drivers de sonido” cuando tengo una sola tarjeta de sonido). AES, Blowfish, Twofish, RC5, RC6, Serpent.

losetup -e Blowfish /dev/loop0 /media/dguillermo/key

Esto nos pedirá una clave, la cual será la que usaremos para montar nuestra partición, una vez hayamos introducido la clave, tendremos que formatear esa partición, aquí lo mismo de antes depende de lo que tu kernel soporte, yo uso XFS,y llevo tiempo usándolo en la partición donde tengo los ficheros multimedia y “noto” que me va mejor que EXT4, para gustos Sistemas de Archivos ;-Þ

kaiser ~ # mkfs.xfs -f /dev/loop0 **(**en mi caso **)**
kaiser ~ # mkfs.ext4 -f /dev/loop0 **(** si te decantas por este sistema de archivos **)**

Bien, ahora desmontamos /dev/loop0

kaiser ~ # losetup -d /dev/loop0

Ok, ahora les cuento el detalle para tener controlado el pendrive y añadimos una línea a udev, pero primero tenemos que saber qué modelo de USB y su Serial, lo cual descubrimos de la siguiente manera:

kaiser ~ # lsusb (vemos donde está nuestro pendrive) y después hacemos:
kaiser ~ # lsusb -v -s 009 (en mi caso) ahora añadimos el serial a /etc/udev/rules.d/97-usbkey.rules
kaiser ~ # echo "ATTRS{serial}=="AA0000000000XXXX", SYMLINK+="key" " ; /etc/udev/rules.d/97-usbkey.rules

Ahora viene la parte más bonita y detalles curiosos. Añadimos a /etc/fstab:

/media/dguillermo/key /media/j0d3/key xfs defaults,noauto,loop,encryption=blowfish,user 0 0

Bueno, le damos permiso para que nuestro usuario pueda usar ese path y si no existe lo creamos

kaiser ~ # mkdir -p /media/j0d3/key
kaiser ~ # chown user:user -R /media/j0d3/*

Ok, ahora pasteo el código del script hecho Rafael Gawenda y modificado para mis necesidades ;-Ð

#!/bin/bash
media=( "" /media/dguillermo/{/,key} )
umedia=( "" /media/j0d3/key /media/dguillermo/ )

case ${0##*/} in
xkey+ )
for fs in & do
	mount /media/j0d3/key
done

xkey- )
keychain --agents ssh --stop all
for fs in 1 2
do
/bin/umount ${umedia[$fs]}
done
;;
xkey )
[[ $(/bin/mount|/bin/grep -c "/media/j0d3/key/" ) -eq 1 ]] {noticia}- || {noticia}+ ;; * )  ;; esac

De está manera ya montamos y desmontamos nuestra partición de una forma fácil, sólo le damos permiso de ejecución, hacemos un link a xkey xkey+ xkey-

kaiser ~ # chmod +xkey
kaiser ~ # ln -s xkey xkey+
kaiser ~ # ln -s xkey xkey-

Para no tener que tirar de /usr/bin/, podemos crear un directorio en nuestro home y meterlo ~/bin, esto lo añadimos al path en ~/.bashrc.

kaiser ~ # vim ~/.bashrc (y añadimos el directorio en la linea del Path);

Si no estás familiarizado con este formato, te aconsejo que lo pongas de primero Path="~/bin:……" (guardamos los cambios)

source .bashrc

y ahora cuando ejecutemos xkey+ nos pedirá la clave que metimos cuando encriptamos la partición. No voy a explicar cómo compartir claves ssh, sólo ciertos detalles que me parecen curiosos.

movemos todo el contenido de ~/.ssh/ a /media/j0d3/key y hacemos un link.

kaiser ~ #mv ~/.ssh/ /media/j0d3/key/
kaiser ~ #ln -s /media/j0d3/key/.ssh ~/.ssh/

hasta aquí todo fácil, ahora bien en el pendrive también meto el perfil de Chromium el cual se guarda en ~/.config/chromium/Default, misma operación movemos todo.

kaiser ~ # mv ~/.config/chromium/Default /media/j0d3/key/ (está demás decir, que hay que tener el navegador cerrado para realizar está operación) ;-Ð
kaiser ~ # ln -s /media/j0d3/key/.config/chromium/Default ~/.config/chromium/Default;

Ok, ahora tenemos nuestras claves todas seguras en nuestra partición encriptada, así que todo perfecto (yo copio el ~/.ssh/config a un path diferente) para que cuando no tenga montado el pendrive me mantenga esa configuración, ya que al tener varios servers en puertos diferentes, es más cómodo. Ok, ahora desmontamos el pendrive…

kaiser ~ # xkey-

Bien, ahora vamos /media/j0d3/key/, hacemos un ls -alh y está vacío evidentemente… Pues creamos algunos directorios…

kaiser ~ # cd /media/j0d3/key/
kaiser ~ # mkdir .ssh ; cp ~/path/config/que/copiamos/del/~/.ssh/
kaiser ~ # ln -s /media/j0d3/key/.ssh ~/.ssh

Abrimos el chromium, para que cree un perfil nuevo y limpio y misma operación…

kaiser ~ # mkdir -p .config/chromium/
kaiser ~ # mv ~/.config/chromium/Default /media/j0d3/key/.config/chromium/

Y de ésta manera, tendremos un navegador limpio y vacío por si alguien usa nuestra computadora. Esta semana probaré a meter una aplicación de Wine que uso con relativa frecuencia para tener la misma configuración tanto en el trabajo como en la casa. Espero que esto les sea tan útil y cómodo como lo es para mí.