security - todos - eliminar registros de programas desinstalados
¿Por qué sobrescribir un archivo más de una vez para eliminar de forma segura todos los rastros de un archivo? (13)
Borrar programas como Eraser recomienda sobreescribir datos tal vez 36 veces.
Según tengo entendido, todos los datos se almacenan en un disco duro como 1s o 0s.
Si se realiza una sobreescritura de 1s y 0 aleatorios una vez sobre todo el archivo, ¿por qué no es suficiente para eliminar todos los rastros del archivo original?
"Remanencia de datos" Hay un conjunto bastante bueno de referencias sobre posibles ataques y su factibilidad real en Wikipedia. Hay normas y recomendaciones del DoD y el NIST citadas allí también. En pocas palabras, es posible, pero cada vez es más difícil recuperar los datos sobrescritos de los medios magnéticos. No obstante, algunas normas (gobierno de EE. UU.) Aún requieren al menos varias sobrescrituras. Mientras tanto, las partes internas del dispositivo continúan volviéndose más complejas e, incluso después de sobreescribir, una unidad o dispositivo de estado sólido puede tener copias inesperadas (piense en el manejo incorrecto de bloques o en la nivelación del desgaste del flash ( véase Peter Gutmann ). conduce.
Aquí hay una implementación de eliminación de Gutmann que armé. Utiliza el generador de números aleatorios criptográficos para producir un bloque fuerte 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();
}
}
}
Daniel Feenberg (un economista de la Oficina Nacional de Investigación Económica) afirma que las posibilidades de que los datos sobrescritos que se recuperan de un disco duro moderno se conviertan en "leyenda urbana":
¿Pueden las agencias de inteligencia leer datos sobrescritos?
Así que teóricamente sobrescribir el archivo una vez con ceros sería suficiente.
En términos convencionales, cuando uno se escribe en el disco, el medio graba 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 un cero se sobrescribe con uno, y un 1,05 cuando se sobrescribe uno con uno. La circuitería del disco normal está configurada de modo que ambos valores se lean como unos, pero usando circuitos especializados es posible determinar qué "capas" previas contenían. La recuperación de al menos una o dos capas de datos sobrescritos no es demasiado difícil de leer leyendo la señal de la electrónica de 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 software para recuperar la señal grabada previamente. Lo que el software hace es generar una señal de lectura "ideal" y restarla de lo que realmente se leyó, dejando como diferencia el remanente de la señal anterior. Dado que los circuitos analógicos en un disco duro comercial no se acercan a la calidad de los circuitos en el osciloscopio utilizado para muestrear la señal, existe la posibilidad de recuperar mucha información adicional que no es explotada por los componentes electrónicos del disco duro (aunque con más nuevos técnicas de codificación de canales como PRML (explicado 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)
Existen aplicaciones y servicios de "reparación de discos" que todavía pueden leer datos de un disco duro incluso después de haber sido formateados, por lo que simplemente sobrescribir con 1 y 0 aleatorios una vez no es suficiente si realmente necesita borrar algo de forma segura.
Diría que para el usuario medio, 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 "eliminar" que pueda garantizar bastante efectivamente que no se podrán recuperar datos del disco.
La razón por la que desea esto no son discos duros, sino discos SSD . Remapean clústeres sin decirle al sistema operativo o a los controladores del sistema de archivos. Esto se hace con fines de nivelación del desgaste. Por lo tanto, las posibilidades son bastante altas de que el bit de 0 escrito vaya a un lugar diferente al anterior. Quitar el controlador de SSD y leer los chips de destello sin procesar está dentro del alcance incluso del espionaje corporativo. Pero con 36 sobrescrituras de disco completas, es probable que la nivelación del desgaste haya pasado varias veces por todos los bloques de repuesto.
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. Se han intentado recuperar datos de discos que han sobrescrito datos y, con la excepción de algunos casos de laboratorio, no hay ejemplos de que dicha técnica tenga éxito.
Cuando hablamos de métodos de recuperación, principalmente verá el microscopio de fuerza magnética como la bala de plata para evitar una sobrescritura casual, pero incluso esto no tiene éxitos registrados y puede anularse en cualquier caso escribiendo un buen patrón de datos binarios en toda la región. sus medios magnéticos (a diferencia de los simples 0000000000).
Por último, los 36 (en realidad 35) sobrescritos a los que se refiere son reconocidos como anticuados e innecesarios hoy en día, ya que la técnica (conocida como método Gutmann) se diseñó para adaptarse a los diversos métodos de codificación utilizados por el usuario como RLL y MFM con los que no es probable que se tope de ninguna manera. Incluso las pautas del gobierno de EE. UU. Establecen que la sobrescritura es suficiente para eliminar datos, aunque para fines administrativos no consideran que esto sea aceptable para la "desinfección". La razón sugerida para esta disparidad es que los sectores "malos" pueden marcarse mal por el hardware del disco y no sobrescribirse correctamente cuando llega el momento de sobrescribir, por lo tanto, dejando abierta la posibilidad de que la inspección visual del disco pueda recuperar estos regiones.
Al final, escribir con un 1010101010101010 o un patrón bastante aleatorio es suficiente para borrar datos hasta el punto de que las técnicas conocidas no pueden recuperarlo.
Los Estados Unidos tienen requisitos establecidos con respecto a la eliminación de información confidencial (es decir, la información Top Secret) es destruir la unidad. Básicamente, las unidades se colocaron en una máquina con un gran imán y también destruyeron físicamente la unidad para su eliminación. Esto se debe a que existe la posibilidad de leer información en un disco, incluso sobrescribiéndose muchas veces.
Siempre me he preguntado por qué no se considera la posibilidad de que el archivo haya sido almacenado previamente en una ubicación física diferente en el disco.
Por ejemplo, si acaba de producirse una defragmentación, fácilmente podría haber una copia del archivo que sea fácilmente recuperable en algún otro lugar del disco.
Simplemente invierte los bits para que los 1 se escriban en todos los 0 y los 0 se escriban en todos los 1, luego ciérralo para eliminar cualquier variable en el campo magnético y solo se tardan 2 pasos.
Un bit de disco duro que solía ser un 0, y luego se cambia a un ''1'', tiene un campo magnético ligeramente más débil que uno que solía ser un 1 y luego se escribió en 1 de nuevo. Con el equipo sensible, el contenido previo de cada bit se puede discernir con un grado de precisión razonable, midiendo las pequeñas variaciones en la fuerza. El resultado no será exactamente correcto y habrá errores, pero se puede recuperar una buena parte de los contenidos anteriores.
Para cuando hayas garabateado 35 veces sobre las partes, es prácticamente imposible discernir qué solía estar allí.
Editar: Un análisis moderno muestra que un solo bit sobreescrito se puede recuperar con solo el 56% de precisión. Tratar de recuperar un byte completo solo es exacto el 0,97% del tiempo. Así que solo estaba repitiendo una leyenda urbana. Puede que haya sido necesario sobrescribir varias veces cuando se trabaja con disquetes o algún otro medio, pero los discos duros no lo necesitan.
Ver esto: el papel de Guttman
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 está escrito por un cabezal de escritura que es más o menos estacionario mientras el disco gira debajo de él. Ahora, para que su disco duro funcione correctamente como un dispositivo de almacenamiento de datos cada vez que se escribe una nueva tira de patrón magnético en un sector, debe reiniciar el patrón magnético en ese sector lo suficiente como para poder leerlo más adelante. Sin embargo, no tiene que borrar por completo todas las pruebas del patrón magnético anterior, solo tiene que ser lo suficientemente bueno (y con la cantidad de corrección de errores utilizada hoy en día lo suficientemente bueno no tiene por qué ser tan bueno). Tenga en cuenta que el cabezal de escritura no siempre tomará la misma pista que el pase anterior sobre un sector dado (podría estar sesgado un poco hacia la izquierda o hacia la derecha, podría pasar sobre el sector en un ángulo leve de una forma u otra debido a la vibración, etc.)
Lo que obtienes es una serie de capas de patrones magnéticos, con el patrón más fuerte correspondiente a la última escritura de datos. Con la instrumentación adecuada, es posible leer esta estratificación de patrones con suficiente detalle para poder determinar algunos de los datos en capas anteriores.
Ayuda a que los datos sean digitales, porque una vez que haya extraído los datos para una capa determinada, puede determinar exactamente el patrón magnético que se habría utilizado para escribirlo en el disco y restarlo de las lecturas (y luego hacerlo en la siguiente capa, y el siguiente).