¿Por qué sobrescribir un archivo más de una vez para eliminar de forma segura todos los rastros de un archivo?

StackOverflow https://stackoverflow.com/questions/59656

  •  09-06-2019
  •  | 
  •  

Pregunta

Los programas de borrado como Eraser recomiendan sobrescribir los datos quizás 36 veces.

Según tengo entendido, todos los datos se almacenan en un disco duro como 1 o 0.

Si se realiza una sobrescritura de 1 y 0 aleatorios una vez en todo el archivo, ¿por qué no es suficiente para eliminar todos los rastros del archivo original?

¿Fue útil?

Solución

Un bit de disco duro que solía ser un 0 y luego se cambia a '1' tiene un campo magnético ligeramente más débil que uno que solía ser un 1 y luego se escribió nuevamente en 1.Con equipos sensibles, el contenido anterior de cada bit se puede discernir con un grado razonable de precisión midiendo las ligeras variaciones en la fuerza.El resultado no será exactamente correcto y habrá errores, pero se podrá recuperar una buena parte del contenido anterior.

Cuando hayas garabateado sobre los bits 35 veces, es prácticamente imposible discernir lo que solía haber allí.

Editar: Un análisis moderno muestra que un solo bit sobrescrito se puede recuperar con solo un 56% de precisión.Intentar recuperar un byte completo solo es preciso el 0,97% de las veces.Entonces solo estaba repitiendo una leyenda urbana.Es posible que haya sido necesario sobrescribir varias veces al trabajar con disquetes o algún otro medio, pero los discos duros no lo necesitan.

Otros consejos

Daniel Feenberg (economista de la privada Oficina Nacional de Investigación Económica) afirma que las posibilidades de que se recuperen datos sobrescritos de un disco duro moderno equivalen a una "leyenda urbana":

¿Pueden las agencias de inteligencia leer datos sobrescritos?

Entonces, en teoría, sería suficiente sobrescribir el archivo una vez con ceros.

En términos convencionales, cuando se escribe un uno en el disco, el medio registra un uno, y cuando se escribe un cero, el medio registra un cero.Sin embargo, el efecto real está más cerca de obtener un 0,95 cuando se sobrescribe un cero con un uno, y un 1,05 cuando un uno se sobrescribe con un uno.Los circuitos de disco normales están configurados para que ambos valores se lean como uno, pero utilizando circuitos especializados es posible determinar qué contenían las "capas" anteriores.La recuperación de al menos una o dos capas de datos sobrescritos no es demasiado difícil de realizar leyendo la señal de la electrónica del cabezal analógico con un osciloscopio de muestreo digital de alta calidad, descargando la forma de onda muestreada a una PC y analizándola en el software. para recuperar la señal previamente grabada.Lo que hace el software es generar una señal de lectura "ideal" y restarla de lo realmente leído, dejando como diferencia el remanente de la señal anterior.Dado que los circuitos analógicos de un disco duro comercial no se acercan en absoluto a la calidad de los circuitos del osciloscopio utilizado para muestrear la señal, existe la posibilidad de recuperar mucha información adicional que no es explotada por la electrónica del disco duro (aunque con las tecnologías más modernas). técnicas de codificación de canales como PRML (explicadas más adelante) que requieren grandes cantidades de procesamiento de señales, el uso de herramientas simples como un osciloscopio para recuperar directamente los datos ya no es posible)

http://www.cs.auckland.ac.nz/~pgut001/pubs/secure_del.html

Imagine un sector de datos en el disco físico.Dentro de este sector hay un patrón magnético (una tira) que codifica los bits de datos almacenados en el sector.Este patrón lo escribe un cabezal de escritura que está más o menos estacionario mientras el disco gira debajo de él.Ahora, para que su disco duro funcione correctamente como dispositivo de almacenamiento de datos, cada vez que se escribe una nueva banda de patrón magnético en un sector, debe restablecer el patrón magnético en ese sector lo suficiente como para que pueda leerse más tarde.Sin embargo, no tiene que borrar por completo toda la evidencia del patrón magnético anterior, simplemente tiene que ser lo suficientemente bueno (y con la cantidad de corrección de errores que se usa hoy en día, lo suficientemente bueno no tiene que ser tan bueno).Tenga en cuenta que el cabezal de escritura no siempre tomará la misma trayectoria que el paso anterior sobre un sector determinado (podría estar un poco sesgado hacia la izquierda o hacia la derecha, podría pasar sobre el sector con un ligero ángulo en un sentido u otro debido a vibraciones, etc.)

Lo que obtienes es una serie de capas de patrones magnéticos, donde el patrón más fuerte corresponde a la última escritura de datos.Con la instrumentación adecuada, es posible leer estas capas de patrones con suficiente detalle para poder determinar algunos de los datos en capas más antiguas.

Ayuda que los datos sean digitales, porque una vez que haya extraído los datos de una capa determinada, puede determinar exactamente el patrón magnético que se habría utilizado para escribirlos en el disco y restarlo de las lecturas (y luego hacerlo en la siguiente). capa y la siguiente).

La razón por la que quieres esto es no discos duros, pero SSD.Reasignan clústeres sin avisar al sistema operativo ni a los controladores del sistema de archivos.Esto se hace con fines de nivelación del desgaste.Por lo tanto, las posibilidades de que el bit 0 escrito vaya a un lugar diferente al 1 anterior son bastante altas.Quitar el controlador SSD y leer los chips flash sin procesar está al alcance incluso del espionaje corporativo.Pero con 36 sobrescrituras de disco completo, la nivelación de desgaste probablemente habrá pasado por todos los bloques de repuesto unas cuantas veces.

"Remanencia de datos" Hay un muy buen conjunto de referencias con respecto a los posibles ataques y su viabilidad real en Wikipedia.Allí también se citan estándares y recomendaciones del Departamento de Defensa y del NIST.En pocas palabras, es posible, pero cada vez más difícil, recuperar datos sobrescritos de medios magnéticos.No obstante, algunos estándares (del gobierno de EE. UU.) todavía requieren al menos varias sobrescrituras.Mientras tanto, las partes internas del dispositivo continúan volviéndose más complejas e, incluso después de sobrescribir, una unidad o dispositivo de estado sólido puede tener copias inesperadas (piense en el manejo incorrecto de bloques o la nivelación del desgaste del flash (ver Peter Gutmann).Así que los verdaderamente preocupados siguen destruyendo discos.

Lo que estamos viendo aquí se llama "Remanencia de datos". De hecho, la mayoría de las tecnologías que sobrescriben repetidamente están (inofensivamente) haciendo más de lo que realmente es necesario.Ha habido intentos de recuperar datos de discos a los que se les ha sobrescrito y, con la excepción de algunos casos de laboratorio, realmente no hay ejemplos de que dicha técnica haya tenido éxito.

Cuando hablamos de métodos de recuperación, principalmente verá la microscopía de fuerza magnética como la solución milagrosa para evitar una sobrescritura casual, pero ni siquiera esto ha tenido éxito registrado y puede anularse en cualquier caso escribiendo un buen patrón de datos binarios en toda la región en sus medios magnéticos (a diferencia de los simples 0000000000).

Por último, las 36 (en realidad 35) sobrescrituras a las que usted se refiere se consideran obsoletas e innecesarias hoy en día, ya que la técnica (conocida como método Gutmann) fue diseñada para adaptarse a los diversos métodos de codificación, generalmente desconocidos para el usuario, utilizados en las tecnologías. como RLL y MFM, con los que probablemente no te toparás de todos modos.Incluso las directrices del gobierno de EE.UU. establecen que una sola sobrescritura es suficiente para eliminar datos, aunque para fines administrativos no lo consideran aceptable para "desinfectar".La razón sugerida para esta disparidad es que los sectores "malos" pueden ser marcados como malos por el hardware del disco y no sobrescritos adecuadamente cuando llega el momento de sobrescribirlos, por lo que se deja abierta la posibilidad de que una inspección visual del disco pueda recuperarlos. regiones.

Al final, escribir con un patrón 1010101010101010 o bastante aleatorio es suficiente para borrar datos hasta el punto de que las técnicas conocidas no puedan recuperarlos.

Siempre me he preguntado por qué no se considera la posibilidad de que el archivo se haya almacenado previamente en una ubicación física diferente del disco.

Por ejemplo, si acaba de realizarse una desfragmentación, podría haber fácilmente una copia del archivo que se pueda recuperar fácilmente en otro lugar del disco.

Aquí hay una implementación de borrado de Gutmann que preparé.Utiliza el generador criptográfico de números aleatorios para producir un bloque sólido de datos aleatorios.

public static void DeleteGutmann(string fileName)
{
    var fi = new FileInfo(fileName);

    if (!fi.Exists)
    {
        return;
    }

    const int GutmannPasses = 35;
    var gutmanns = new byte[GutmannPasses][];

    for (var i = 0; i < gutmanns.Length; i++)
    {
        if ((i == 14) || (i == 19) || (i == 25) || (i == 26) || (i == 27))
        {
            continue;
        }

        gutmanns[i] = new byte[fi.Length];
    }

    using (var rnd = new RNGCryptoServiceProvider())
    {
        for (var i = 0L; i < 4; i++)
        {
            rnd.GetBytes(gutmanns[i]);
            rnd.GetBytes(gutmanns[31 + i]);
        }
    }

    for (var i = 0L; i < fi.Length;)
    {
        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x92;
        gutmanns[7][i] = 0x49;
        gutmanns[8][i] = 0x24;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0x6D;
        gutmanns[29][i] = 0xB6;
        gutmanns[30][i++] = 0xDB;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x49;
        gutmanns[7][i] = 0x24;
        gutmanns[8][i] = 0x92;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xB6;
        gutmanns[29][i] = 0xDB;
        gutmanns[30][i++] = 0x6D;
        if (i >= fi.Length)
        {
            continue;
        }

        gutmanns[4][i] = 0x55;
        gutmanns[5][i] = 0xAA;
        gutmanns[6][i] = 0x24;
        gutmanns[7][i] = 0x92;
        gutmanns[8][i] = 0x49;
        gutmanns[10][i] = 0x11;
        gutmanns[11][i] = 0x22;
        gutmanns[12][i] = 0x33;
        gutmanns[13][i] = 0x44;
        gutmanns[15][i] = 0x66;
        gutmanns[16][i] = 0x77;
        gutmanns[17][i] = 0x88;
        gutmanns[18][i] = 0x99;
        gutmanns[20][i] = 0xBB;
        gutmanns[21][i] = 0xCC;
        gutmanns[22][i] = 0xDD;
        gutmanns[23][i] = 0xEE;
        gutmanns[24][i] = 0xFF;
        gutmanns[28][i] = 0xDB;
        gutmanns[29][i] = 0x6D;
        gutmanns[30][i++] = 0xB6;
    }

    gutmanns[14] = gutmanns[4];
    gutmanns[19] = gutmanns[5];
    gutmanns[25] = gutmanns[6];
    gutmanns[26] = gutmanns[7];
    gutmanns[27] = gutmanns[8];

    Stream s;

    try
    {
        s = new FileStream(
            fi.FullName,
            FileMode.Open,
            FileAccess.Write,
            FileShare.None,
            (int)fi.Length,
            FileOptions.DeleteOnClose | FileOptions.RandomAccess | FileOptions.WriteThrough);
    }
    catch (UnauthorizedAccessException)
    {
        return;
    }
    catch (IOException)
    {
        return;
    }

    using (s)
    {
        if (!s.CanSeek || !s.CanWrite)
        {
            return;
        }

        for (var i = 0L; i < gutmanns.Length; i++)
        {
            s.Seek(0, SeekOrigin.Begin);
            s.Write(gutmanns[i], 0, gutmanns[i].Length);
            s.Flush();
        }
    }
}

Hay aplicaciones y servicios del tipo "reparación de disco" que aún pueden leer datos de un disco duro incluso después de haberlo formateado, por lo que simplemente sobrescribir con 1 y 0 aleatorios una vez no es suficiente si realmente necesita borrar algo de forma segura.

Yo diría que para el usuario promedio, esto es más que suficiente, pero si se encuentra en un entorno de alta seguridad (gobierno, ejército, etc.), entonces necesita un nivel mucho más alto de "eliminación" que pueda garantizar de manera bastante efectiva que no se podrán recuperar datos de la unidad.

Estados Unidos tiene requisitos establecidos con respecto al borrado de información confidencial (es decir,Información ultrasecreta) es destruir el disco.Básicamente, las unidades se colocaron en una máquina con un imán enorme y también destruirían físicamente la unidad para su eliminación.Esto se debe a que existe la posibilidad de leer información en una unidad, incluso de sobrescribirla muchas veces.

Simplemente invierta los bits para que los 1 se escriban en todos los 0 y los 0 se escriban en todos los 1 y luego ponga a cero todo lo que debería eliminar cualquier variable en el campo magnético y solo requiere 2 pasadas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top