Disco cifrado

De HackLab
Saltar a: navegación, buscar


La idea de esta guía es que todo todo lo que pase por nuestro disco quede cifrado o encriptado, manteniendo la posibilidad de suspender al disco, o sea hibernar, la máquina. Para eso es necesario que la swap esté encriptada también. La forma más simple es hacer una partición para la swap dentro de un volumen LVM creado sobre una partición encriptada completamente.

Llenar el disco de ruido

¿Por qué llenar el disco de ruido o datos aleatorios? Si nuestro disco está en blanco (o sea en ceros) un análisis a bajo nivel puede mostrarlo así:

0000000000000000000000000000000000000000000000000000000000000

Si creamos una partición cifrada y guardamos datos, estos pueden verse, dependiendo de en qué parte del disco se guardan, así:

h572hdasDAsdaudaDWadwdd33ahdCas000000000000000000000000000000

de esta forma se puede identificar claramente qué parte del disco contiene datos cifrados y qué parte no, lo que reduce el esfuerzo necesario para recuperar los datos. Asique llenamos el disco de ruido para impedir esta identificación.

Con haveged

El demonio haveged sirve para generar datos aleatorios (entropía, en realidad) muy rápido. Si estamos instalando arch, el instalador de arch ya lo trae y por default está corriendo, asique está listo para usar.

Esos datos aleatorios se acceden desde /dev/random. Para llenar el disco rígido (por ejemplo /dev/sda) con bloques de 4 megas (para aumentar un poco el tamaño de bloque default que es de 512 bytes, aunque lo ideal sería usar el mismo tamaño que el cache del disco rígido que vamos a llenar) usamos

dd bs=4M if=/dev/random of=/dev/sda

Desde otra fuente de ruido

Una solución más rápida es copiar datos "aleatorios" ya generados desde otro lado, como por ejemplo otro disco cifrado. Para copiar desde un disco conectado por usb identificado como /dev/sdc

dd bs=4M if=/dev/sdc of=/dev/sda skip=256

skip=n salta n bloques de tamaño bs (en este caso 4MB * 254 = 1GB) para evitar la cabecera del disco cifrado. Sin cabecera no hay forma de recuperar los datos, lo que los convierte de hecho en ruido.

Para copiar por la red local, podemos usar netcat (el comando nc) que también viene instalado y listo para usar desde el instalador de arch. También podríamos usar ssh pero sería más lento por el cifrado/descifrado que implica para transmitir los datos. Ponemos netcat a escuchar en un puerto cualquiera (9000 en este caso) y redirigimos los datos a dd en la máquina que estamos instalando

nc -l -p 9000 | dd bs=4M of=/dev/sda

Y desde una máquina que pueda acceder por red a la otra (por ejemplo, con la IP 10.0.0.2) enviamos los datos desde el disco cifrado propio (acá /dev/sdb)

dd if=/dev/sdb bs=4M skip=256 | nc 10.0.0.2 9000

Particionar

Hacer 2 particiones (sda1 para boot, sda2 para el lvm)

fdisk /dev/sda

ambas de tipo linux (lvm no mira el tipo de partición)

Cifrar

Encriptamos sda2:

cryptsetup --key-size 512 --use-random luksFormat /dev/sda2

Chequeamos que esté todo bien:

cryptsetup luksDump /dev/sda2

Abrimos la partición encriptada:

cryptsetup open --type luks /dev/sda2 sarasa

Crear los contenedores LVM

  1. Crear un volumen físico (physical volume) pvcreate /dev/mapper/sarasa
  2. Crear un grupo de volúmenes (volume group) vgcreate fafafa /dev/mapper/sarasa En este ejemplo el volume group se llama fafafa.
  3. Crear volúmenes lógicos (logical volumes)
    1. Uno especial para la swap lvcreate -C y -L 8G fafafa -n swap Debe ser del mismo tamaño que la RAM de la computadora, para poder hibernar.
    2. Todos los demás lvcreate -L 50G fafafa -n root para poner el resto en el home podemos fijarnos el total disponible con vgdisplay | grep Free y especificarlo: lvcreate -L 870G fafafa -n home o le decimos a lvcreate que lo calcule directamente: lvcreate -L -l +100%FREE fafafa -n home (nótese la l (ele) minúscula)

Formatear