18.15. Cifrado de particiones de disco

Escrito por Lucky Green.

FreeBSD ofrece un alto grado de protección contra el acceso no autorizado a los datos. Los Permisos de fichero y MAC (Mandatory Access Control, controles de acceso obligatorio, consulte el Capítulo 16) ayudan a evitar que otros tengan acceso no autorizado a los datos mientras el sistema operativo está funcionando y la computadora está encendida. Sin embargo los permisos impuestos por el sistema operativo son irrelevantes si un atacante tiene acceso físico al sistema y puede simplemente mover el disco duro de la computadora a otro sistema para copiar y analizar datos sensibles.

Independientemente de cómo un atacante pueda conseguir acceso a un disco duro a a un sistema apagado, el cifrado de disco basado en GEOM (GEOM Based Disk Encryption, gbde) puede proteger los datos de los sistemas de ficheros del sistema incluso contra atacantes muy decididos y con recursos adecuados a su disposición. A diferencia de otros métodos de cifrado más difíciles de usar, que cifran únicamente ficheos individuales, gbde cifra sistemas de ficheros completos de forma transparente. Ni un solo texto en limpio llega a tocar el disco duro.

18.15.1. Habilitar gbde en el kernel

  1. Conviértase en root

    La configuración de gbde requiere privilegios de superusuario.

    % su -
    Password:
    
  2. Verifique la versión del sistema operativo

    gbde(4) requiere FreeBSD 5.0 o posterior.

    # uname -r
    5.0-RELEASE
    
  3. Añada soporte de gbde(4) al fichero de configuración de su kernel

    Añada la siguiente línea al fichero de configuración de su kernel con el editor que prefiera:

    options GEOM_BDE

    Configure, recompile e instale el kernel de FreeBSD. Este proceso se detalla en el Capítulo 8.

    Reinicie con el nuevo kernel.

18.15.2. Preparación del disco duro cifrado

El siguiente ejemplo asume que añade a su sistema un disco duro nuevo que contendrá una sola partición cifrada. Esta partición se montará como /private. gbde puede usarse también para cifrar /home y /var/mail, pero esto requeriría instrucciones más complejas que las que se pretenden dar en esta introducción.

  1. Añada el nuevo disco

    Instale el nuevo disco en el sistema como se explicó en la Sección 18.3. En nuestro ejemplo hemos añadido una nueva partición de disco como /dev/ad4s1c. Los dispositivos /dev/ad0s1* representan particiones FreeBSD estándar que i existían previamente en el sistema.

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4
    
  2. Crée un directorio para los ficheros “lock” de gbde

    # mkdir /etc/gbde
    

    Los ficheros “lock” de gbde contienen información que gbde requiere para acceder a las particiones cifradas. Sin el acceso a los ficheros “lock” gbde no podrá descifrar los datos alojados en la partición cifrada sin una cantidad significativa de trabajo, tarea para la que además no le resultará de ayuda este software. Cada partición cifrada utiliza un fichero “lock” separado.

  3. Inicialice la partición gbde

    Una partición gbde debe inicializarse antes de que pueda utilizarse. Esta inicialización sólo debe hacerse una vez:

    # gbde init /dev/ad4s1c -i -L /etc/gbde/ad4s1c
    

    gbde(8) abrirá su editor para que pueda configurar las opciones de configuración que se le presentarán en una plantilla. Para utilizar UFS1 o UFS2, ponga el sector_size a 2048:

    $FreeBSD: src/sbin/gbde/template.txt,v 1.1 2002/10/20 11:16:13 phk Exp $
    #
    # El tamaño de sector (sector size) es la unidad de datos más
    # pequeña que podrá leer o escribir.  Si la elige demasiado
    # pequeña reducirá el rendimiento y la cantidad de espacio
    # útil.  Si la elige demasiado grande puede hacer que los sistemas
    # de ficheros no funcionen.  512 es el tamaño mínimo y
    # siempre funciona.  Si va a usar UFS utilice
    #
    sector_size     =       2048
    [...]
    

    gbde(8) le pedirá dos veces que escriba la contraseña que debe usarse para asegurar los datos. La contraseña debe ser la misma las dos veces. La capacidad de gbde de proteger sus datos depende íntegramente de la calidad de la contraseña que elija. [1]

    El fichero gbde init crea un fichero “lock” para su partición gbde, que en nuestro ejemplo está en /etc/gbde/ad4s1c.

    AtenciónEs imprescindible que los ficheros “lock” de gbde deben respaldarse junto con el contenido de cualquier partición cifrada. Aunque la sola acció de borrar un fichero “lock” no puede evitar que un atacante motivado descifre una partición gbde sin el fichero “lock”, el propietario legítimo no podrá acceder a los datos en la partición cifrada sin una cantidad notable de trabajo, que es necesario señalar que no entra dentro de las funciones de gbde(8) ni de su diseñador.

  4. Conecte al kernel la partición cifrada

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    Se le pedirá la contraseña que elijió al inicializar la partición cifrada. El nuevo dispositivo cifrado aparecerá en /dev como /dev/nombre_de_dispositivo.bde:

    # ls /dev/ad*
    /dev/ad0        /dev/ad0s1b     /dev/ad0s1e     /dev/ad4s1
    /dev/ad0s1      /dev/ad0s1c     /dev/ad0s1f     /dev/ad4s1c
    /dev/ad0s1a     /dev/ad0s1d     /dev/ad4        /dev/ad4s1c.bde
    
  5. Crée un sistema de ficheros en el dispositivo cifrado

    Una vez el dispositivo cifrado está conectado al kernel puede crear un sistema de ficheros en el dispositivo con newfs(8). Dado que es más rápido inicializar un sistema de ficheros del nuevo UFS2 que un sistema de ficheros del tradicional UFS1, le recomendamos encarecidamente usar newfs(8) con la opción -O2.

    Nota: La opción -O2 es el valor por defecto en FreeBSD 5.1-RELEASE y siguientes.

    # newfs -U -O2 /dev/ad4s1c.bde
    

    Nota: newfs(8) debe ejecutarse en una partición gbde conectada, que podrá identificar por la extensión *.bde del nombre del dispositivo.

  6. Montar la partición cifrada

    Crée un punto de montaje para el sistema cifrado de ficheros.

    # mkdir /private
    

    Montar el sistema cifrado de ficheros.

    # mount /dev/ad4s1c.bde /private
    
  7. Verificar que el sistema cifrado de ficheros esté disponible

    el sistema cifrado de ficheros debería ser visible para df(1) y estar listo para su uso.

    % df -H
    Filesystem        Size   Used  Avail Capacity  Mounted on
    /dev/ad0s1a      1037M    72M   883M     8%    /
    /devfs            1.0K   1.0K     0B   100%    /dev
    /dev/ad0s1f       8.1G    55K   7.5G     0%    /home
    /dev/ad0s1e      1037M   1.1M   953M     0%    /tmp
    /dev/ad0s1d       6.1G   1.9G   3.7G    35%    /usr
    /dev/ad4s1c.bde   150G   4.1K   138G     0%    /private
    

18.15.3. Montaje de sistemas cifrados de ficheros

Todos los sistemas cifrados de ficheros deben reconectarse al kernel después de cada arranque. Además, antes de poder utilizarlo debe revisarlo por si contuviera errores y montarlo. Todo el proceso debe ser ejecutado por el usuario root.

  1. Conectar la partición gbde al kernel

    # gbde attach /dev/ad4s1c -l /etc/gbde/ad4s1c
    

    Se le pedirá la contraseña que elijió en la inicialización de la partición cifrada gbde.

  2. Revisión de errores en el sistema de ficheros

    Como que los sistemas cifrados de ficheros no pueden aparecer en /etc/fstab (lo que haría que fueran montados automáticamente), los sistemas de ficheros deben revisarse manualmente mediante fsck(8) antes de montarlos.

    # fsck -p -t ffs /dev/ad4s1c.bde
    
  3. Montar los sistemas cifrados de ficheros

    # mount /dev/ad4s1c.bde /private
    

    El sistema cifrado de ficheros está listo para su uso.

18.15.3.1. Montar automáticamente particiones cifradas

Es posible usar un “script” para automatizar la conexión, revisión y el montaje de una partición cifrada, pero por razones de seguridad el “script” no debe contener la contraseña de gbde(8). Se recomienda ejecutar esos “scripts” se ejecuten de forma manual proporcionando la contraseña vía consola o ssh(1).

18.15.4. Protección criptográfica que usa gbde

gbde(8) cifra el XXX sector payload usando AES de 128 bits en modo CBC. Cada sector en el disco se cifra con una clave AES diferente. Para más información sobre el diseño criptográfico de gbde, incluyendo cómo se derivan las claves de sector a partir de la contraseña consulte gbde(4).

18.15.5. Problemas de compatibilidad

sysinstall(8) es incompatible con dispositivos gbde cifrados. Todos los dispositivos *.bde deben desconectarse del kernel antes de iniciar sysinstall(8) o se “congelará” durante la prueba inicial de dispositivos. Para desconectar el el dispositivo cifrado de nuestro ejemplo haga lo siguiente:

# gbde detach /dev/ad4s1c

Tenga en cuenta también que, como vinum(4) no utiliza el subsistema geom(4), no es posible usar gbde en volúmenes vinum.

Notas

[1]

Si quiere ayuda para seleccionar una contraseña segura que además sea fácil de recordar visite el sitio web Diceware Passphrase.

Puede descargar éste y muchos otros documentos desde ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Si tiene dudas sobre FreeBSD consulte la documentación antes de escribir a la lista <questions@FreeBSD.org>.
Envíe sus preguntas sobre la documentación a <doc@FreeBSD.org>.