Escribiendo un destructor de archivos

2

Quiero escribir una destructora de archivos simple en c ++, es decir, un programa que elimine un archivo para que no se pueda recuperar. ¿Lo siguiente sería una forma segura y correcta de hacer eso?

(1) Abra el archivo con

ofstream myfile;
myfile.open ("deleteme.txt", ios::out | ios::binary); 

(2) A continuación, ejecute 10 rondas de algo como

unsigned int x = 0;
for (int i =0; i <= filesize -1; i++)
    {
    myfile.seekg (i, ios::beg);
    myfile << (char)x;
       [put new random character in x]
        }

(3) Luego simplemente elimine el archivo

  if( remove( "deleteme.txt" ) != 0 ) {
       cout << "Error deleting file";
       }
  else {cout << "File successfully deleted";
       }

(Supongo que también se podría simplemente eliminar el archivo en una consola).

¿Agregaría seguridad adicional para cambiar el nombre del archivo antes de eliminarlo?

¿Se debe hacer algo más para eliminar completamente un archivo para que no se pueda recuperar o es suficiente?

EDIT1 : Solo para aclarar, el código anterior es simple-pseudo. Mi principal preocupación es si sobrescribir un byte a byte de un archivo y eliminar el archivo será una buena manera de hacerlo irrecuperable.

EDIT2 : solo me interesa la mejor manera de hacerlo utilizando solo el software.

Edit3 : agregando una cosa más: estoy más interesado en un nivel de seguridad que impide la recuperación mediante métodos de software.

    
pregunta Thomas 07.06.2012 - 05:01
fuente

4 respuestas

6

Suena como un proyecto divertido. Sé que dijiste "simple", pero aquí están mis pensamientos de todos modos.

Los datos con los que está escribiendo el archivo no son aleatorios, y una pasada dejará rastros de los datos originales. Depende del medio de almacenamiento. Por ejemplo, con los dispositivos magnéticos, hay microscopía de fuerza magnética . Incluso después de diez rondas de la misma cosa, no estoy seguro de que esté agregando beneficios adicionales.

Cambiar el nombre y eliminar archivos no agregará una protección sólida porque, en la mayoría de los sistemas de archivos, simplemente cambia el puntero a la ubicación en el disco donde se encuentran los datos. La eliminación de un archivo solo elimina el puntero, por lo que el disco ve los bloques como "disponibles" aunque el archivo esté realmente allí. (Esta es la razón por la cual el software de recuperación funciona.)

Las eliminaciones completas y seguras tienen las siguientes características (basadas en software, sin considerar soluciones de hardware):

  • PRNG ( generador de números pseudoaleatorios ) que genera valores aleatorios para escribir en cada byte del espacio asignado del archivo (También vea la función de cifrado a continuación).

  • Pases múltiples (cuidado aquí, depende del medio)

  • Una carrera con todos los 0s y todos los 1s tampoco podría hacer daño. Puede ayudar a interrumpir un patrón predecible, pero sutil, de aleatoriedad (porque las computadoras no son realmente aleatorias).

  • Algunos sistemas de archivos son "Copia en escritura", que es como un tipo de "control de revisión". Estos intentan evitar sobrescribir los datos ya existentes. Esa protección tendría que ser eludida.

  • Los dispositivos RAID duplican los cambios en un disco en otro disco.

  • Los archivos fragmentados pueden comenzar en un sector y terminar en otra parte del disco. Alternativamente, las funciones anti-fragmentación pueden mantener copias redundantes de los datos o reubicarlos en tiempo real.

  • Las unidades de estado sólido administran el espacio en disco de manera diferente a las unidades magnéticas. Junto con la nivelación del desgaste, hay razones técnicas que hacen que la limpieza segura sea un poco difícil. (Ver enlace de Wikipedia a continuación)

  • Encriptar un archivo antes de borrarlo ayudará a rellenarlo con bits "aleatorios" ... pero en realidad la mejor respuesta para una trituración segura es cifrarlo antes de que llegue al disco.

No te pierdas esta gran pregunta que habla sobre la eliminación de información en unidades de estado sólido, en particular unidades flash. Recuerde que los SSD se desgastan después de haber sido escritos suficientes veces.

Consulte este artículo en Wikipedia para obtener información más detallada sobre los antecedentes.

Por cierto ...

Realmente me gustaría ver una trituradora que otorgue alguna posibilidad de negación plausible. Borraría el archivo de forma segura, luego plop remanente de un archivo de señuelo en su lugar, tal vez un archivo elegido por el usuario que existe en otro lugar en el disco duro. Parecería ser los remanentes de una copia de ese archivo que una vez fue apuntada por el sistema de archivos, fue eliminada por el usuario y, dependiendo del tamaño, fue potencialmente sobrescrita por el uso regular.

Si un agente forense examinara la parte de un disco donde se ejecutó una trituradora normal, es fácil decir que se eliminó con datos aleatorios. Pero si se colocara un archivo de señuelo en su lugar, me imagino que sería más difícil saberlo.

    
respondido por el Matt 07.06.2012 - 06:06
fuente
3

La eliminación segura de archivos es más un factor del sistema de archivos en lugar de la aplicación. Varios sistemas de archivos utilizan mecanismos de copia en escritura, incluidos los más famosos ZFS y BTRFS, pero también hasta cierto punto incluso NTFS con instantáneas. Así que sobrescribir un archivo con datos aleatorios solo asigna un espacio previamente en blanco y lo llena con aleatoriedad. Algo inútil en todo sentido práctico.

Un programa de eliminación segura tendría que ser consciente del sistema de archivos, o incluso de un controlador del sistema de archivos, para buscar y sobrescribir directamente los bloques relevantes. E incluso entonces existe la posibilidad de que incluso el sistema de archivos no tenga la última palabra sobre si los datos se sobrescriben. Por ejemplo, las instantáneas de LVM y la nivelación de desgaste de SSD pueden evitar que en realidad sobrescriba sus datos, de nuevo, simplemente asigne sectores en blanco y escriba sus datos aleatorios allí.

Estás mucho mejor, mucho más seguro, borrando todo el disco de una vez utilizando DBAN o algo similar.

Además, aunque técnicamente, teóricamente, puede recuperar bits sobrescritos previamente utilizando un microscopio de fuerza magnética o lo que sea, las posibilidades de que incluso sea una posibilidad, incluso en las circunstancias más extremas, son aproximadamente cero. Cada bit debería ser reconstruido manualmente, individualmente a una tasa de éxito comparativamente baja y un costo por bit extremadamente alto si es posible, , que con las unidades de alta densidad de área de hoy en día, parece imposible. Las huellas magnéticas originales, incluso antes de ser sobrescritas, son tan débiles que las unidades modernas dependen en gran medida de los bits ECC para recuperar sus datos de manera confiable.

Ver también: enlace

    
respondido por el tylerl 08.06.2012 - 19:52
fuente
2

No debes escribir tu propio programador de trituradora. En su lugar, toma una trituradora bien vetada existente.

  • Para la destrucción de discos duros, recomiendo ATA Secure Erase o DBAN (busque detalles en este sitio). DBAN es de código abierto, por lo que puede ver su fuente.

  • Para la eliminación de archivos, recomiendo el programa shred de GNU (viene con Coreutils). shred es de código abierto, por lo que también puede ver su fuente.

Comprenda que la destrucción a nivel de archivo es intrínsecamente insegura en muchas circunstancias, sin importar cuán cuidadosamente esté escrito el programa. Dado que los sistemas de archivos son modernos, sobrescribir un archivo con bytes diferentes no significa que todas las copias de los datos originales en el disco se sobrescriban necesariamente. En algunos casos, la sobrescritura de un archivo puede hacer que el sistema de archivos haga una copia y modifique la copia, dejando los datos originales almacenados en otra parte del disco duro (en "espacio libre") donde un destructor de archivos no puede eliminarlos. En otros casos, los restos de los datos antiguos pueden quedar en el disco duro por otras razones.

    
respondido por el D.W. 08.06.2012 - 19:02
fuente
1

Como usted sabe, simplemente eliminar un archivo deja datos en el sistema de archivos, que luego se pueden sobrescribir o no.

Sin embargo, una sola sobrescritura de un archivo impide recuperar los datos en la práctica, aunque existe una pequeña amenaza teórica de recuperación parcial de datos al analizar bit a bit con un microscopio electrónico. En la práctica, nunca se ha demostrado que esta amenaza recupere una cantidad significativa de datos (por ejemplo, 1 kb + ~ 8192 bits) de datos, a diferencia de unos pocos bits en condiciones idealizadas. Consulte [1] , [2] .

El principal problema con la eliminación segura al sobrescribir no es el número de borrados, es que no sabe exactamente cómo su sistema operativo / hardware está manejando sus datos. Por ejemplo, es posible que inicialmente haya guardado un archivo en un sector determinado, pero luego se determinó que ese bloque era malo, por lo que asignó los datos a un sector diferente. El problema se agrava con las unidades de estado sólido (SSD) que, debido a las limitaciones de la tecnología flash (la sobrescritura limitada de un bloque dado; primero debe poner a cero el bloque completo antes de escribir; luego se vuelve a escribir el bloque completo). para un funcionamiento óptimo.

Solución: si sus datos deben mantenerse en secreto, utilice el cifrado completo del disco. Si la clave de cifrado se ve comprometida, escriba sobre todo el disco (aunque los datos puedan existir en sectores defectuosos) o destruya físicamente el disco.

    
respondido por el dr jimbob 08.06.2012 - 19:44
fuente

Lea otras preguntas en las etiquetas