Mejorar la seguridad de archivos de Dropbox con tomb

2018/11/14

En lo que sigue se intenta mejorar la seguridad de los archivos descargados mediante Dropbox a un PC, de tal forma que si un adversario tiene acceso al disco duro los archivos no son accesibles.

Se supone que se tiene permisos de administrador en el PC y que el disco no posee una encriptación completa.

Programa tomb

tomb es un programa utilizado para encriptar archivos en linux.

De la página del manual:

Tomb generates encrypted storage files to be opened and closed using their associated keys, which are also protected with a password chosen by the user.

También en la página del manual se indica, en los ejemplos, como utilizarlo.

Hay que notar que tomb tiene dos tipos de hooks: bind-hooks y exec-hooks.

Los bind-hooks, como su nombre lo indica, son utilizados para montar (utilizando la opción bind de mount) en el directorio $HOME del usuario archivos y directorios al abrir el archivo tomb. Los directorios a montar se indican mediante el archivo bind-hooks que se encuentra en la raiz del tomb. Con abrir el archivo tomb se hace referencia a montar el archivo encriptado en un directorio para que se accesible.

Por otro lado, los exec-hooks son scripts que deben ser ejecutables y en contrarse en la raíz del tomb y que reciben el parámetro open o close, según se esté montando o desmontando el archivo encriptado.

Uso con Dropbox

Para proteger los archivos descargados mediante Dropbox se debe configurar adecuadamente tomb. Para ello se debe crear un archivo contenedor mediante los comandos dig, forge y lock de tomb como se indica en el manual.

NOTA: Para realizar los pasos siguientes se supone que se tiene instalado el cliente de Dropbox mediante el paquete nautilus-dropbox o caja-dropbox y que ya hay archivos sincronizados en el disco.

  1. Se crea el archivo a utilizar con tomb y se le asocia una clave. Se elige como tamaño de archivo 6GB ya que es el tamaño máximo de una cuenta gratuita (por defecto) de Dropbox:

    $ mkdir -p ~/graveyard
    $ tomb dig -s 6144 ~/graveyard/dropbox.tomb
    $ tomb forge -f ~/dropbox.tomb.key
    $ tomb lock -k ~/dropbox.tomb.key ~/graveyard/dropbox.tomb
    

    NOTA: Se utiliza la opción -f para forzar la operación, ya que al no tener una partición (o archivo) swap encriptado, tomb lanza warnings respecto a la falta de seguridad de la configuración.

    En mi caso particular practicamente no se está utilizando la swap (free -h) y estoy en duda de encriptar la partición swap ya que utilizo un disco SSD, por lo que por ahora se ignora el aviso de tomb.

  2. Se copian los archivos de Dropbox al tomb.

    Primeramente se detiene el cliente de Dropbox para evitar problemas al mover los archivos:

    $ dropbox stop
    

    Luego se mueven los archivos y directorios relacionados a Dropbox:

    $ tomb open -f -k ~/dropbox.tomb.key ~/graveyard/dropbox.tomb /run/media/$USER/dropbox
    $ mv ~/Dropbox /media/dropbox/
    $ mv ~/.dropbox /media/dropbox/_dropbox
    $ mv ~/.dropbox-dist /media/dropbox/_dropbox-dist
    

    NOTA: No se desea copiar los directorios ocultos utilizados como tales dentro del tomb, sinó que se los quiere hacer visibles por defecto utilizando _ en lugar de . como prefijo del nombre.

    Es necesario volver a crear los directorios movidos para utilizar como puntos de montaje al abrir el archivo tomb:

    $ mkdir ~/Dropbox ~/.dropbox ~/.dropbox-dist
    
  3. Configurar Dropbox para que no inicie cuando se loguea un usuario, ya que hasta no abrir el archivo tomb no se tiene acceso a los archivos utilizados por Dropbox:

    Mediante la interfaz gráfica del cliente de Dropbox, deshabilitar en Preferencias… la opción Start Dropbox on system startup para evitar que se inicie el cliente de Dropbox y muestre un diálogo sugiriendo que nos logueemos para sincronizar los datos.

  4. Se crean los hooks a utilizar por tomb:

    Primero el bind-hooks para montar automaticamente mediante bind mount los directorios utilizados por el cliente de Dropbox en el $HOME.

    $ cat > /media/dropbox/bind-hooks <<END
    Dropbox Dropbox
    _dropbox .dropbox
    _dropbox-dist .dropbox-dist
    END
    

    Luego el exec-hooks para iniciar o terminar el cliente de Dropbox cuando se abre o cierra el archivo tomb:

    $ cat > /media/dropbox/exec-hooks <<END
    #!/bin/sh
    if [ "$1" = open ]; then
        dropbox start 1>/dev/null 2>&1
    elif [ "$1" = close ]; then
        dropbox stop
    fi
    END
    $ chmod +x /media/dropbox/exec-hooks
    

Conclusiones

tomb es útil para encriptar datos particulares de programas y almacenarlos en dispositivos usb o archivos en el filesystem como alternativa a utilizar una partición totalmente encriptada.

Lo que no me da buen olfato es agregar permisos de sudo mediante una linea de la forma:

username ALL=NOPASSWD: /usr/bin/tomb

en /etc/sudoers como se indica en el manual, por lo que solo le encuentro utilidad en sistemas en los que se tengan priviliegios de administrador utilizando sudo - digase la PC personal y con suerte la PC del trabajo.

También es de hacer notar que los datos no están ocultos:

  1. Se puede encontrar en la historia del shell los parámetros de los comandos utilizados por tomb. Si bien es cierto que anteponiendo un espacio el comando no se guarda en el historial, es posible que por error se hayan omitido alguna vez y no se haya borrado ese comando del historial.

  2. El tipo de archivo utilizado por tomb no está oculto:

    $ file ~/graveyard/dropbox.tomb
    /home/<user>/graveyard/dropbox.tomb: LUKS encrypted file, ver 1 [aes, xts-plain64:sha256, sha256] UUID: 2126e723-ee60-4a9b-a9c6-fab1d7bb895c
    

    o sea, si se ordenan de forma decreciente los archivos por tamaño y se aplica el comando file a los primeros es posible encontrar fácilmente los archivos tomb.