2011-10-13 21 views
5

segura de archivos Borrado de en CSecure File Delete en C

que necesito para eliminar de forma segura un archivo en C, esto es lo que hago:

  1. uso fopen para obtener un identificador del archivo
  2. calcular el tamaño usando lseek/ftell
  3. obtener semilla aleatoria en función de la hora actual/o tamaño de archivo
  4. escritura (tamaño) bytes en el fichero de un ingenio de bucle h 256 bytes escritos cada iteración mango
  5. fflush/fclose el archivo
  6. vuelven a abrir el archivo y re-hacer los pasos 3-6 para 10 ~ 15 veces
  7. cambiar el nombre del archivo y luego lo elimina

Es ¿cómo se hace? Porque leí el nombre "Gutmann 25 passes" en Eraser, así que supongo que 25 es la cantidad de veces que se sobreescribe el archivo y "Gutmann" es el algoritmo de aleatorización.

+0

Tenga en cuenta que, como mínimo, debe abrir el archivo para la actualización. Pero incluso entonces no tiene garantía de que los sectores actualizados se escriban nuevamente en la misma ubicación. (De hecho, casi con certeza no está en SSD.) –

Respuesta

8

No se puede hacer esto de forma segura sin la cooperación del sistema operativo, y muchas veces ni siquiera así.

Cuando abre un archivo y escribe en él, no hay garantía de que el sistema operativo vaya a poner el nuevo archivo en el mismo fragmento de óxido que el anterior. Incluso si lo hace, no sabe si la nueva escritura usará la misma cadena de clústeres que antes.

Incluso entonces no está seguro de que el disco no haya trazado el bloque de disco debido a alguna falla, lo que deja sus planes para dominar el mundo en un bloque que está marcado como malo pero aún legible.

ps - la sobrescritura de 25x ya no es necesaria, era necesaria en unidades MFM antiguas de baja densidad con un mal seguimiento de la cabeza. En las unidades GMR modernas sobrescribir una vez es suficiente.

+0

que mató mi imaginación sobre cómo funciona el disco duro: S, totalmente!, Entonces ¿cuál crees que será la solución, si hay alguna? – killercode

+0

@killercode para la parte dependiente del sistema operativo de la cual los bloques de discos son utilizados por un archivo; a continuación, puede hacerlo con una función de sistema operativo que le indica qué bloques de discos se utilizan y puede sobrescribirlos. Para el mapeo de bloques defectuosos en el disco, y especialmente en un SSD con nivelación de desgaste, ¡la única eliminación segura es un martillo muy grande! –

+0

@ Habilité mi imaginación sobre cómo funciona el disco duro: es correcto en términos simples, pero los sistemas de archivos y los discos pueden hacer muchas optimizaciones detrás de escena. –

1

Sí, de hecho, es sobrescribir n patrones diferentes en un archivo

Lo hace por escrito una serie de 35 patrones sobre la región que desea borrar.

La selección de patrones supone que el usuario no conoce el mecanismo de codificación utilizado por el disco, y por lo tanto incluye los patrones diseñados específicamente para tres tipos diferentes de unidades. Un usuario que sabe qué tipo de codificación utiliza el disco puede elegir solo los patrones destinados a su unidad. Una unidad con un mecanismo de codificación diferente necesitaría diferentes patrones.

Más información es here.

1

@Martin Beckett es correcto; existe tal cosa como "eliminación segura" a menos que sepa todo lo que el hardware está haciendo hasta llegar al disco. (Y aun así, no haría ninguna apuesta sobre lo que un atacante suficientemente bien financiado podría recuperar dado el acceso a los medios físicos.)

Pero suponiendo que el sistema operativo y el disco reutilicen los mismos bloques, su esquema no funciona por una razón más básica: fflush generalmente no escribe nada en el disco.

En la mayoría de los sistemas operativos multitarea (incluidos Windows, Linux y OS X), fflush simplemente fuerza los datos del búfer de espacio de usuario en el kernel. El kernel hará su propio almacenamiento en búfer, solo escribiendo en el disco cuando lo desee.

En Linux, por ejemplo, necesita llamar al fsync(fileno(handle)). (O simplemente use los descriptores de archivos en primer lugar.) OS X es similar. Windows tiene FlushFileBuffers.

En pocas palabras: El bucle que describe es muy probable que simplemente sobrescriba un búfer del kernel 10-15 veces en lugar del archivo en el disco. No hay una forma portátil en C o C++ para forzar los datos al disco. Para eso, necesitas usar una interfaz dependiente de la plataforma.

0

El método Gutmann funcionó bien para esquemas de codificación de tecnología de disco más antiguos, y el esquema de borrado de 35 pasadas del método Gutmann ya no es necesario, lo que incluso reconoce Gutmann. Ver: Método de Gutmann en: https://en.wikipedia.org/wiki/Gutmann_method en la sección de Crítica en la que Gutmann discute las diferencias.

Por lo general, basta con hacer, a lo sumo, unas pocas pasadas aleatorias para eliminar de forma segura un archivo (posiblemente con un pase de cero adicional).

El paquete secure-delete de thc.org contiene el comando sfill para limpiar de forma segura el disco y el espacio de inodo en un disco duro.

+0

"Ninguna compañía de recuperación de datos privada actualmente afirma que puede reconstruir datos completamente sobrescritos". - Trabajé en una empresa de recuperación de datos y, aunque nunca diríamos que podríamos recuperar un archivo hasta que se recuperara, hubo momentos en los que pudimos recuperar archivos parciales y ocasionalmente todo el archivo. El proceso requirió mucho tiempo, pero teníamos programas que ayudaban con algunas permutaciones de alta probabilidad del archivo. Admito que no pudimos recuperar nada de uso, probablemente el 90% del tiempo, si se sobrescribió o cuando hubo corrupción por colisiones. – Chad

0

MFT (tabla maestra de archivos) similar a FAT (File Allocation Table), MFT mantiene registros: archivos de compensaciones en el disco, nombre de archivo, fecha/hora, identificación, tamaño de archivo, e incluso presentar datos si los datos del archivo se ajustan dentro del espacio vacío del registro, que es de aproximadamente 512 bytes, 1 tamaño de registro es 1 KB.

Nota: Los nuevos datos del disco duro fijan en 0x00 (solo que lo sepan)

Digamos que usted quiere sobrescribir file1.txt OS MFT encuentra este desplazamiento en el interior de registro de archivo.. comienza a sobrescribir archivo1.txt con binario (00000000) en modo binario.

Va a sobrescribir los datos del archivo en el disco 100% es por eso que MFT tienen desplazamiento de archivos en el disco. después de cambiarle el nombre y eliminar.

NOTA: MFT marcará el archivo como eliminado, pero aún puede obtener algunos datos sobre este archivo, es decir, fecha/hora: creado, modificado, accedido. offset de archivo, atributos, banderas.

1- create folder in c:\ and move file and in same time rename in to folder(use rename function) rename file to 0000000000 or any another without extention 

2- overwrite file with 0x00 and check if file was overwrited 

3- change date/time 

4- make without attributes 

5- leave file size untouched OS faster reuse empty space. 

6- delete file 

7- repeat all files (1-6) 

8- delete folder 

or 

(1, 2, 6, 7, 8) 

9- find files in MFT remove records of these files.