domingo, 14 de febrero de 2010

Borrado seguro de ficheros TrueCrypt con Python [II]

Jugando, he ido mejorando el cachito de codigo que había creado hace poco. De las 15 lineas y aparente inutilidad, ahora tenemos 10 vezes más líenas y es igual de inútil. Pero hace más cosas!! =)

Para ver mas o menos para que sirve el programa, revisar el el primer link, aún así hago un poquito de resumen: Tenemos ficheros TrueCrypt con datos cifrados. Si queremos borrar todos los datos del volúmen, no hace falta sobreescribir todo el volumen varias veces, solo necesitamos borrar los primeros 65.536 bytes de manera segura para dejar inútil el volumen. Os muestro un poquito como funciona el programilla, que por cierto lo he llamado tcrm (TrueCryptReMover). Original? no. Facil de recordar? si ;)

Para descargar programa, click aqui.

Primero tenemos que crear un fichero donde guardaremos las rutas de nuestros containers truecrypt. Cuando ejecutemos el programa tcrm, estos ficheros serán borrados. El fichero, llamado "lista.list" puede ser como el siguiente:
# Check
./tc_container
./tc_container2
./tc_con
./tc_con1
Vale, tenemos lo siguiente. La primera línea "# Check", sirve como control del programa para ver si está cifrado o los datos están en claro. Siempre se debe incluir en el fichero. La palabra en cuestión es facilmente configurable desde el programa tcrm.

Después hay un listado de volúmenes TrueCrypt. Les he puesto estos nombres, pero podrían ser cualquier otros. Aqui puede venir una ruta absoluta o relativa, como se desee. Estos ficheros serán machacados, si se ejecuta el programa. (si algún usuario "windows" me lee, aquí no hay un Control+Z... cuando digo que se borran, no bromeo :P)

Ahora ya tenemos creado nuestro ficherito que apunta a cada uno de los volúmenes que queremos borrar de manera segura. Vamos a ver el ejecutable:
$ ./tcrm --help
-h --help Imprime esta ayuda
-c --cipher Cifra el fichero pasado como parámetro
-d --decipher Descifra el fichero pasado como parámetro
-t --try Comprueba que los volúmenes especificados pueden borrarse
-k --kill Ejecuta el algoritmo de borrado

Pues básicamente tenemos 4 opciones:
  • --cipher: para cifrar el fichero "lista.list", de modo que no se vea la ruta donde nosotros guardamos cada uno de nuestros ficheros TrueCrypt
  • --decipher: para descifrar un fichero ya cifrado. Por si queremos añadir volúmenes adicionales o quitar volúmenes ya existentes en la lista.
  • --kill: abre la "lista.list" y por cada ruta de volúmen, le aplica un borrado Gutmann sobre los primeros 65.536 bytes. Los volúmenes serán imposibles de recuperar.
  • --try: hace un simulacro de borrado. Descifra el fichero "lista.list" y intenta leer cada uno de los volúmenes. Útil para comprobar tema de permisos, etc...
Un ejemplo: Imaginemos que tenemos el fichero "lista.list de antes.
$ ./tcrm --decipher lista.list
> Password: [ponemos nuestra password]

Así ya tenemos nuestra lista cifrada y nadie puede saber dónde guardamos nuestros volúmenes TrueCrypt. Ahora vamos a borrar:
$ ./tcrm --kill lista.list
> Password: [ponemos el password anterior]
> Procesando el fichero "./tc_container"...
> Procesando el fichero "./tc_container2"...
> Procesando el fichero "./tc_con"...
> Procesando el fichero "./tc_con1"...

Amén. Nadie volverá a acceder a los datos de los containers.

Seguridad? Si, dejadme que os cuente un poco.
Cuando introducimos nuestra clave, hacemos un hash SHA512. Diez mil vezes. Para que? Bueeeno, tiene una explicación. Esto no hace más seguro nuestro sistema, sinó que simplemente dificulta 10.000 veces, el posible ataque por fuerza bruta, que serviría para descifrar nuestro fichero y conocer la clave con la que lo hemos cifrado. Para poner un ejemplo fácil: si en un ataque de fuerza bruta se pudiese sacar el password en 10 segundos, con este "inventito" retrasaríamos el ataque hasta 27 horas, para conseguir lo mismo. Una ataque de una hora, ahora duraría un año y un par de meses. Hay que decir que para romer un solo hash de 512 bits se pueden necesitar varios miles de años.

Y después está el cifrado del fichero, que se hace con criptografía simétrica, utilizando el algorítmo AES con una clave de 256 bits (clave resultante de la función de hash mencionada). Para poner otro ejemplo AES256 es el nivel de seguridad que utilizan deteminados gobiernos para sus documentos clasificados y top-secret. Si es bueno para ellos, también lo será para nosotros ^^

Un fallo tremendamente grande, es que el programa está hecho en python, y en texto claro. Por esto es facilmente modificable. Pero bueno, así ya se que tengo que ir mejorando para la próxima entrega del algorítmo.

Nota: sería estupendo recibir críticas a saco: buenas o malas. Si me he dejado algo en la seguridad del programa, si la implementación no es buena, si las notas en inglés estan demasiado mal o cualquier cosa que os parezca que se tiene que cambiar/mejorar.

Saludos!

2 comentarios:

  1. Es muy importante hacer borrado seguro de los dispositivos antes de desecharlos, ya que en caso contrario pueden darse fugas de información confidencial.

    ResponderEliminar
  2. Muy interesante. Me voy a mirar ese código. Pero yo ampliaría hasta los 131.071 bytes para que inutilice también un posible volúmen oculto.

    ResponderEliminar