jueves, 4 de diciembre de 2014

Borrado de Archivos de Forma Segura Utilizando Gutmann y Python.

Hoy o mas bien dicho ayer por la noche, me entró la curiosidad de saber como borrar un archivo de forma segura. No, no os hablo de buscar un programa y ya está. Si no de buscar algún script en Python que haga lo que quiero, leer y entender el código para aprender. Bueno, estuve rebuscando un poco y encontré un blog que hablaba de archivos de TrueCrypt y del borrado seguro de estos utilizando el método Gutmann. 
"El método Gutmann es un algoritmo para borrar de forma segura el contenido de computación discos duros , tales como archivos . Ideado por Peter Gutmann y Colin Plumb y presentado en el documento Eliminación segura de datos desde magnética y de estado sólido de memoria en julio de 1996, se trataba de escribir una serie de 35 patrones sobre la región que desea borrar."
Este es el método que utiliza:


Aquí tenéis el Script y la fuente de esta entrada: 
Lo único que hace es abrir el archivo que tu le pases y escribir el algoritmo en la parte binaria del mismo. Con lo que se consigue que, aunque se pueda extraer la foto o el documento con herramientas forenses, solo sean un montón de datos hexadecimales randoms con una extensión y nombre curioso.

Solo he añadido un d1=raw_input() un print y un os.remove(d1) al script para que pudiera pasarle cualquier archivo y al acabar de escribir el algoritmo, lo borrase. Os pego el código. 

import os
#constantes
d1 = raw_input("Dame el archivo que he de destrozar: ")
FILE= d1
#Creacion 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 'Borrando fichero'
os.remove(d1)
print 'Done!'

He hecho la prueba con un par de archivos que tenia en una memoria USB. He pasado este script y luego he echado un vistazo con FTK imager, tras hacer una copia bit a bit para ver que pasaba. 


Como es normal, los archivos siguen estando allí una vez borrados pero el contenido en binaro/hexadecimal ha sido cambiado mostrando el patrón haciendo imposible extraer nada de ellos. 

Os aconsejo que lo proveis y mireis a ver si tiene algun fallo, Ponedlo en los comentarios que quiero leerlo. Así aprendo. 

Sed Buenos y espero que os sirva. 

No hay comentarios:

Publicar un comentario