[HACK] Cryptoloop AES + LVM

aramosf aramosf at unsec.net
Thu Jan 29 15:43:25 CET 2004


Hola,

   Siguiendo el consejo de jcea, envio el mail nuevamente, pero en vez de 
adjuntar el archivo, copio su contenido.

   Seguramente el formato sea incorrecto, podreis ver su ultima version en:
http://www.unsec.net/doc/lvm.txt

   Todo comentario al privado sera bienvenido.


  +---------------------------------------------------------------+
  | Guia rapida de Cryptoloop + LVM         aramosf @ unsec . net |
  | 19/Ene/2004 v1.0                     bladi-sec @ novasec . es |
  | http://www.unsec.net                                          | 
  +---------------------------------------------------------------+

  Lo Necesario:
 +-------------+

    El proposito de esta mini guia es crear un volumen logico con LVM2 
(Logical Volume Manager) y este a su vez cifrado con el algoritmo AES-128.
Usando dos discos; uno de ellos de sistema, y el otro completamente. Conside-
ramos que ya se tiene el concepto claro de que es un LVM y Cryptoloop.

   Toda la documentacion y pruebas se han realizado en un Linux Fedora 1,
con kernel 2.6.1 y lvm version 2.

   Partimos de la base de que utilizamos un sistema con un kernel con soporte
loop_aes; 2.6 o 2.4 parcheado, y tiene instalado los paquetes necesarios lvm2
(y su soporte en el kernel). Tambien es necesario la ultima version de mount
y util-linux: 2.12

  Las opciones necesarias para LVM en el kernel son:

  Device Drivers  ---> 
     Multi-device support (RAID and LVM)  ---> 
        [*] Multiple devices driver support (RAID and LVM)
        ...
        <*>   Device mapper support

  Opciones necesarias para CryptoLoop AES:

  Cryptographic options  --->
        <*>   AES cipher algorithms


   En este ejemplo suponemos que hda2 es el directorio raiz, y hdb un disco
duro adicional (ambos tienen un tamaño de 40Gbs):

                  hda                   hdb
               .··---··.             .··---··.
               ·..___..·             ·..___..·
          hda1 | swap  |  ] 256Mb    |       | -+  
               |-------| -+          |       |  |
               |       |  |          |  hdb  |  | 40Gbs
          hda2 |   /   |  | 39Gb     |       |  |   
               |       |  |          |       |  | 
               ·..___..· -+          ·..___..· -+ 


  Configuracion
 +-------------+

    A continuacion, se presentan todos los comandos que son necesarios y su
significado:

   Creamos un archivo de 35gbs para el lvm, el resto se dejara para el sistema
operativo:

# dd if=/dev/zero of=datos1 bs=1M count=35000

   Con este comando se crea un fichero lleno de ceros, de un tamaño de 35000Mb
y de nombre "datos1". Para mayor seguridad se recomienda hacerlo con 
/dev/urandom en vez de /dev/zero.

   Asignamos a /dev/loop1 nuestro fichero:

# losetup /dev/loop1 datos1

   Creamos el PV:

# lvm pvcreate /dev/loop1
  No physical volume label read from /dev/loop1
  Physical volume "/dev/loop1" successfully created

   Ahora vamos con el segundo disco: eliminamos la tabla de particiones de
hdb:

# dd if=/dev/zero of=/dev/hdb bs=1k count=1
# blockdev --rereadpt /dev/hdb

   Un metodo alternativo a este, y mas paranoico seria utilizar:

# shred -n 1 -v /dev/hdb

  Creamos el PV para el disco duro hdb:

# lvm pvcreate /dev/hdb
  No physical volume label read from /dev/hdb
  Physical volume "/dev/hdb" successfully created

  Creamos un volumen llamado "PN":

# lvm vgcreate PN /dev/loop1 /dev/hdb
  Volume group "PN" successfully created

  Comprobamos que vamos bien, y averiguamos el tamaño de nuestro futuro
volumen:

# lvm pvdisplay
  --- Physical volume ---
  PV Name               /dev/loop1
  VG Name               PN
  PV Size               34.17 GB / not usable 0
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              8748
  Free PE               8748
  Allocated PE          0
  PV UUID               SHMmrX-tZy5-2bKV-J2JQ-a6NU-5YOx-xJF1hr

  --- Physical volume ---
  PV Name               /dev/hdb
  VG Name               PN
  PV Size               55.89 GB / not usable 0
  Allocatable           yes
  PE Size (KByte)       4096
  Total PE              14308
  Free PE               14308
  Allocated PE          0
  PV UUID               dDBCGR-swNs-6oS3-Be2t-TGnf-nFxs-hRJkr6


   Creamos el volumen logico de 89G (sumas de los PV SIZE 34.17+55.89)

# lvm lvcreate -n DURO PN -L89G
  Logical volume "DURO" created

   Configuramos con AES a 128 el loop2 con nuestro nuevo volumen:

# losetup -e aes-128 /dev/loop2 /dev/PN/DURO
Password:

   NOTA: pueden usarse otros algoritmos o un tamaño mas grande (256), pero el
rendimiento se vera afectado en torno al 20%. Nos pedira una contraseña que
tendremos que introducir cada vez que montemos el volumen:

   Para añadir mayor seguridad, podemos utilizar la opcion -S xxxxxxxxxx,
donde "xxxxxxxxxx", es un seed al azar tecleado por nosotros mismos, esto
ayudara a preveer ataques de diccionario. 

   Formateamos el volumen:

# mke2fs -j /dev/loop2
mke2fs 1.34 (25-Jul-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
....


  Finalizacion
 +------------+

   YA ESTA TERMINADO !!

   Para montar:

# mount -t ext3 -oencryption=aes-128  /dev/PN/DURO /mnt
Password:

   Si meteis mal la password, mostrara este error:

# mount -t ext3 -oencryption=aes-128  /dev/PN/DURO /mnt
Password:
mount: wrong fs type, bad option, bad superblock on /dev/loop0,
       or too many mounted file systems
       (could this be the IDE device where you in fact use
       ide-scsi so that sr0 or sda or so is needed?)


  Comprobaciones
 +--------------+

# df -h

/dev/mapper/PN-DURO    88G   33M   84G   1% /mnt

   Cada vez que se desmonte, recuerda que hay que hacer "attach" antes de
montar:

# losetup  -e aes-128 /dev/loop2 /dev/PN/DURO
# mount -t ext3 -oencryption=aes-128  /dev/PN/DURO /mnt

	Y si quieres que cuando se reinicie la maquina este todo correcto:

# lvm vgchange -an
# lvm lvchange /dev/TaKe-It/Hard -ay

   Si quereis comprobar la velocidad del volumen creado, lo mejor es utilizar
bonnie++, 
http://www.coker.com.au/bonnie++/.


   Documentacion y referencia
  +--------------------------+

  http://www.ibiblio.org/pub/Linux/docs/HOWTO/other-
formats/html_single/Cryptoloop-HOWTO.html
  http://tldp.org/HOWTO/LVM-HOWTO/
  http://lists.sistina.com/pipermail/linux-lvm/2002-October/012541.html
  http://vware.hypermart.net/howto_filesystem_encryption.htm

 CREDITOS: idea,soporte,guru: bladi / dardhal


--
A. Ramos <aramosf at unsec.net>
http://www.unsec.net




More information about the hacking mailing list