sábado, 12 de diciembre de 2009

Borrado seguro de ficheros TrueCrypt con Python

[Estoy jugando con un script en Python para borrar volúmenes TrueCrypt de manera segura, si te interesa, sigue leyendo]
Crees que estás siendo seguido por el FBI o tienes pruebas sobre la muerte de JFK que implican a Obama, el Dalail Lama i al Monstruo de las galletas o un colección estupenda de películas de dudosa reputación que no quieres que nadie vea?? Pues TrueCrypt es tu programa. Gratis, Open-Source y aplicando un nivel de criptografía prohibido en algunos paises ( EEUU, por ejemplo ) es una de tus mejores opciones para ocultar información en contenedores. How-To de TrueCrypt hay muchos, aquí listo un par:
Voy a explicar un poquito cómo funcionan los volúmenes virtuales para entender luego como podemos hacer un borrado seguro quedando los datos irrecuperables. Vamos al lío.
Cuando creamos un contenedor TrueCrypt ( veeenga, revisar los links anteriooores ), se genera un fichero en nuestro sistema, que contiene todo un sistema de ficheros. Cuando está desmontado, los datos están cifrados pero si montamos el volumen -poniendo el password, claro- , todos estos datos se descifran a medida que se van necesitando, en tiempo real. El caso es que los primeros 65.536 bytes de cada contenedor, son cabezeras de información, que indican a TrueCrypt cómo montar el volumen. Sin esta información TrueCrypt no tiene ni idea de cómo montar el sistema de ficheros. Vale, y? ¬¬

Supongamos que queremos borrar todo un container TrueCrypt, pero que éste tiene un peso de 4.7GB. Si lo borramos de modo seguro con el algorítmo Gutmann, por ejemplo, se harán 35 pasadas. Osea, se sobreescribirá la información 35 vezes, o lo que es lo mismo... escribiremos en disco 164GB de información, para sobreescribir todos los datos. Esto puede tardar un poquito, y podemos hacerlo mucho más rápido tal que así.

Solución. Un pequeño algorítmo en Python que nos machaca la cabezera de un volumen TrueCrypt con el algoritmo Gutmann. Util? no creo. Seguro? Mucho.

#! /bin/python
import os
#constantes
FILE='container'
#Creación de valores aleatorios
rnd = lambda : str(os.urandom(3))
print 'Generando datos de sobreescritura con la secuencia Gutmann...'
data = [ rnd(), rnd(), rnd(), rnd(), '\x55', '\xAA', '\x92\x49\x24', '\x49\x24\x92', '\x24\x92\x49', '\x00', '\x11', '\x22', '\x33', '\x44', '\x55', '\x66', '\x77', '\x88', '\x99', '\xAA', '\xBB', '\xCC', '\xEE', '\xFF', '\x92\x49\x24', '\x49\x24\x92', '\x24\x92\x49', '\x6D\x86\xD8', '\xD6\xDB\x6D', '\xDB\x6D\xB6', rnd(), rnd(), rnd(), rnd(), ]
print 'Abriendo el fichero...'
f = open(FILE, mode='r+b')
print 'Escribiendo datos...'
for loop in data:
>>>>f.seek(0)
>>>>f.write(loop*65536) if len(loop) == 1 else f.write(loop*21845)
print 'Cerrando fichero...'
f.close()
print 'Done!'

Tanta explicación para este cachito de código? Pozí. Pero esto solo es el principio, espero mejorar el algorítmo un poquito. Lo siguiente será crear un fichero protegido que contenga una lista de ficheros que borrar, y quitar así la variable FILE, automatizando el proceso un poquitín más.

5 comentarios:

  1. El borrado seguro de datos es vital para prevenir las fugas de información confidencial.

    ResponderEliminar
  2. Pues si, pero la verdad es que nadie sabe realmente como borrar de manera segura sus ficheros.

    Con este scrip ( y los que vendrán a continuación ) inentaré simplificar, ni que sea un poquito, el proceso de borrado de archivos.

    Saludos.

    ResponderEliminar
  3. Para files uso shred. Nice post!.

    shred -z -u ().

    Slds

    Nicola Rizzi.

    ResponderEliminar
    Respuestas
    1. yo tambien lo uso, pero lo uso de la siguiente manera:
      shred -fvuz
      Salu2

      Eliminar
  4. Gracias por comentar, Nico.

    Si, es cierto que shred va muy bien, pero es muy muy lento. Sobre todo para ficheros grandes. Por esto he creado el programita, para borrar de modo seguro ficheros TrueCrypt.

    Si quieres probar un nuevo comando, te recomiendo srm. Check this out:
    http://inedit00.blogspot.com/2009/10/borrado-seguro-de-ficheros.html

    Saludos!!

    ResponderEliminar