lunes, 17 de noviembre de 2014

KALI-LINUX OPCIÓN DE AUTODESTRUCCIÓN

han introducido un módulo que mediante una contraseña maestra elimina todo dato existente en nuestro disco duro. Por lo que si alguien da con dicha contraseña e intenta acceder para ver el contenido de nuestro disco, se encontrará con una flamante unidad inaccesible.
Este módulo llamado "Emergency Self-Destruction of LUKS" lo encontramos dentro del programa cryptsetup, aplicación que usamos para encriptar nuestro disco y establecer una contraseña de desencriptación al encender el equipo. Nos ofrece la posibilidad de establecer una segunda contraseña (la primera sería la que definimos para desencriptar los datos) o una contraseña maestra con la que deshacernos de los datos de nuestro equipo para evitar miradas ajenas.
Sin duda es una opción muy interesante pero más allá de poder destruir los datos, hay una opción que veo más práctica, aunque si es para evitar que nadie vea nada del contenido de nuestro disco, eliminar los datos es sin duda la mejor alternativa.
vamos a ver un caso práctico de cómo encriptar, "brickear" nuestro disco, y luego recuperar los datos. Comencemos:
1. Descargamos e instalamos la última versión de Kali-Linux (1.0.6) con Full Disk Encryption.
2. Procedemos a comprobar la información del disco que nos interesa encriptar abriendo una terminal y escribiendo:
  1. cryptsetup luksDump /dev/sdb1
  2.  
  3. Y deberemos obtener algo como esto:
  4.  
  5. LUKS header information for /dev/sdb1
  6.  
  7. Version: 1
  8. Cipher name: aes
  9. Cipher mode: xts-plain64
  10. Hash spec: sha1
  11. Payload offset: 4096
  12. MK bits: 512
  13. MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
  14. MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
  15. 16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
  16. MK iterations: 65750
  17. UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
  18.  
  19. Key Slot 0: ENABLED
  20. Iterations: 223775
  21. Salt: 7b ee 18 9e 46 77 60 2a f6 e2 a6 13 9f 59 0a 88
  22. 7b b2 db 84 25 98 f3 ae 61 36 3a 7d 96 08 a4 49
  23. Key material offset: 8
  24. AF stripes: 4000
  25. Key Slot 1: DISABLED
  26. Key Slot 2: DISABLED
  27. Key Slot 3: DISABLED
  28. Key Slot 4: DISABLED
  29. Key Slot 5: DISABLED
  30. Key Slot 6: DISABLED
  31. Key Slot 7: DISABLED
3. Como podemos ver, el único slot habilitado es el 0, por lo que pasaremos a añadir nuestra clavetecleando el siguiente comando en nuestra terminal:
  1. cryptsetup luksAddNuke /dev/sdb1
  2.  
  3. Enter any existing passphrase:
  4. Enter new passphrase for key slot:
4. De nuevo mostraremos la cabecera de nuestro LUKS para comprobar que los cambios se han realizado correctamente:
  1. cryptsetup luksDump /dev/sdb1
  2.  
  3. LUKS header information for /dev/sdb1
  4. Version: 1
  5. Cipher name: aes
  6. Cipher mode: xts-plain64
  7. Hash spec: sha1
  8. Payload offset: 4096
  9. MK bits: 512
  10. MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
  11. MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
  12. 16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
  13. MK iterations: 65750
  14. UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
  15.  
  16. Key Slot 0: ENABLED
  17. Iterations: 223775
  18. Salt: 7b ee 18 9e 46 77 60 2a f6 e2 a6 13 9f 59 0a 88
  19. 7b b2 db 84 25 98 f3 ae 61 36 3a 7d 96 08 a4 49
  20. Key material offset: 8
  21. AF stripes: 4000
  22. Key Slot 1: ENABLED
  23. Iterations: 267782
  24. Salt: 8c e5 a2 31 60 2a f5 39 41 e9 52 94 eb 82 b8 c2
  25. b7 a6 6e 4a 7a 0e b1 85 c2 3a 75 d6 a7 6a 76 b3
  26. Key material offset: 512
  27. AF stripes: 4000
  28. Key Slot 2: DISABLED
  29. Key Slot 3: DISABLED
  30. Key Slot 4: DISABLED
  31. Key Slot 5: DISABLED
  32. Key Slot 6: DISABLED
  33. Key Slot 7: DISABLED
5. Perfecto! Ahora podemos ver claramente que el slot 1 contiene nuestra clave, por lo que pasaremos a hacer una copia de seguridad de estos datos con el siguiente comando desde la terminal:
  1. cryptsetup luksHeaderBackup --header-backup-file luksheader.back /dev/sdb1
  2.  
  3. file luksheader.back
  4. luksheader.back: LUKS encrypted file, ver 1 [aes, xts-plain64, sha1] UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
6. Hablando de seguridad, no queremos quedarnos cortos, por lo que cifraremos estos datospara asegurarnos su almacenamiento. Para este menester usaremos openssl (antes de que más de un@ empiece a tirarse de los pelos, más adelante comentaremos acerca de Heartbleed y de que con ese bug el mundo no se ha acabado ^_^) que por defecto viene instalado en la distribución que tenemos instalada:
  1. openssl enc -aes-256-cbc -salt -in luksheader.back -out luksheader.back.enc
  2. enter aes-256-cbc encryption password:
  3. Verifying - enter aes-256-cbc encryption password:
  4.  
  5. ls -lh luksheader.back*
  6. -r-------- 1 root root 2.0M Jan 9 13:42 luksheader.back
  7. -rw-r--r-- 1 root root 2.0M Jan 9 15:50 luksheader.back.enc
  8.  
  9. file luksheader.back*
  10. luksheader.back: LUKS encrypted file, ver 1 [aes, xts-plain64, sha1] UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
  11. luksheader.back.enc: data
7. Ya tenemos el encabezado cifrado y preparado para su almacenamiento, para lo que recomendamos una unidad que sea fácilmente accesible, como una tarjeta de memoria, o mejor aún una unidad USB.
Ahora pongámonos en el supuesto de que tenemos que desplazarnos a ver a un cliente, y necesitamos nuestro equipo para operar correctamente en el lugar de destino, pero desconfiamos de los accidentes que podamos sufrir en dicho viaje, y las manos en las que podría acabar nuestro equipo que está cargado de información sensible, clasificada o algo por el estilo... Procedemos a hacer uso de nuestro cifrado, introduciendo la clave de cifrado y reiniciando el equipo. Vaya! No inicia sin la clave y si intento arrancar desde un live cd de alguna distribución de Linux me dice que la unidad está inaccesible
8. Probemos con un live cd de Kali-Linux, abrimos una terminal y veamos el volcado del encabezado de LUKS:
  1. cryptsetup luksDump /dev/sdb1
  2.  
  3. LUKS header information for /dev/sdb1
  4.  
  5. Version: 1
  6. Cipher name: aes
  7. Cipher mode: xts-plain64
  8. Hash spec: sha1
  9. Payload offset: 4096
  10. MK bits: 512
  11. MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
  12. MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
  13. 16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
  14. MK iterations: 65750
  15. UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
  16.  
  17. Key Slot 0: DISABLED
  18. Key Slot 1: DISABLED
  19. Key Slot 2: DISABLED
  20. Key Slot 3: DISABLED
  21. Key Slot 4: DISABLED
  22. Key Slot 5: DISABLED
  23. Key Slot 6: DISABLED
  24. Key Slot 7: DISABLED
Comprobamos que ninguno de los slots para las claves está siendo usado, por lo que cryptsetup funcionó como se esperaba.
9. Desde esa misma terminal, podemos restaurar la cabecera de LUKS, conectado la unidad donde almacenamos las claves, desencriptando las mismas y recuperando el encabezado desde el archivo de recuperación. O lo que es lo mismo, escribiendo estos comandos en la terminal:
  1. openssl enc -d -aes-256-cbc -in luksheader.back.enc -out luksheader.back
  2.  
  3. enter aes-256-cbc decryption password:
  4.  
  5. cryptsetup luksHeaderRestore --header-backup-file luksheader.back /dev/sdb1
  6.  
  7. WARNING!
  8. ========
  9. Device /dev/sda5 already contains LUKS header. Replacing
  10. header will destroy existing keyslots.
  11.  
  12. Are you sure? (Type uppercase yes): YES
  13.  
  14. cryptsetup luksDump /dev/sdb1
  15.  
  16. LUKS header information for /dev/sdb1
  17.  
  18. Version: 1
  19. Cipher name: aes
  20. Cipher mode: xts-plain64
  21. Hash spec: sha1
  22. Payload offset: 4096
  23. MK bits: 512
  24. MK digest: 04 cd d0 51 bf 57 10 f5 87 08 07 d5 c8 2a 34 24 7a 89 3b db
  25. MK salt: 27 42 e5 a6 b2 53 7f de 00 26 d3 f8 66 fb 9e 48
  26. 16 a2 b0 a9 2c bb cc f6 ea 66 e6 b1 79 08 69 17
  27. MK iterations: 65750
  28. UUID: 126d0121-05e4-4f1d-94d8-bed88e8c246d
  29.  
  30. Key Slot 0: ENABLED
  31. Iterations: 223775
  32. Salt: 7b ee 18 9e 46 77 60 2a f6 e2 a6 13 9f 59 0a 88
  33. 7b b2 db 84 25 98 f3 ae 61 36 3a 7d 96 08 a4 49
  34. Key material offset: 8
  35. AF stripes: 4000
  36. Key Slot 1: ENABLED
  37. Iterations: 267782
  38. Salt: 8c e5 a2 31 60 2a f5 39 41 e9 52 94 eb 82 b8 c2
  39. b7 a6 6e 4a 7a 0e b1 85 c2 3a 75 d6 a7 6a 76 b3
  40. Key material offset: 512
  41. AF stripes: 4000
  42. Key Slot 2: DISABLED
  43. Key Slot 3: DISABLED
  44. Key Slot 4: DISABLED
  45. Key Slot 5: DISABLED
  46. Key Slot 6: DISABLED
  47. Key Slot 7: DISABLED
10. Y con esto ya podremos iniciar de nuevo nuestro equipo, proceder a desencriptar los datos y seguir trabajando en el lugar de destino.
Resumiendo, el procedimiento básicamente es el de encriptar el disco, hacer copia de seguridad de la cabecera de LUKSencriptar el archivo de copia de seguridad, dejar inutilizable el disco durante el viaje y cuando lleguemos a la zona segura de destino, iniciar desde live cd de Kali-Linux, desencriptar el archivo de copia de seguridad y restaurar la configuración que este contiene.

0 comentarios:

Publicar un comentario

Buscar este blog

mrgansomer. Con tecnología de Blogger.