Pourquoi écraser un fichier plusieurs fois pour supprimer en toute sécurité toutes les traces d'un fichier ?

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

  •  09-06-2019
  •  | 
  •  

Question

Les programmes d'effacement tels que Eraser recommandent d'écraser les données peut-être 36 fois.

Si je comprends bien, toutes les données sont stockées sur un disque dur sous forme de 1 ou de 0.

Si un écrasement de 1 et de 0 aléatoires est effectué une fois sur l'ensemble du fichier, pourquoi cela ne suffit-il pas pour supprimer toutes les traces du fichier d'origine ?

Était-ce utile?

La solution

Un bit de disque dur qui était auparavant un 0, puis remplacé par un « 1 », a un champ magnétique légèrement plus faible que celui qui était auparavant un 1 et qui a ensuite été réécrit à 1.Avec un équipement sensible, le contenu précédent de chaque bit peut être discerné avec un degré raisonnable de précision, en mesurant les légères variations de résistance.Le résultat ne sera pas tout à fait correct et il y aura des erreurs, mais une bonne partie du contenu précédent pourra être récupérée.

Au moment où vous avez griffonné les morceaux 35 fois, il est effectivement impossible de discerner ce qui s'y trouvait.

Modifier: Une analyse moderne montre qu'un seul bit écrasé peut être récupéré avec une précision de seulement 56 %.Essayer de récupérer un octet entier n’est précis que 0,97 % du temps.Je ne faisais donc que répéter une légende urbaine.L'écrasement plusieurs fois peut s'avérer nécessaire lorsque l'on travaille avec des disquettes ou un autre support, mais les disques durs n'en ont pas besoin.

Autres conseils

Daniel Feenberg (économiste au Bureau national privé de recherche économique) affirme que les chances de récupérer des données écrasées à partir d'un disque dur moderne s'apparentent à une « légende urbaine » :

Les agences de renseignement peuvent-elles lire les données écrasées ?

Donc, en théorie, écraser le fichier une fois avec des zéros serait suffisant.

En termes conventionnels, lorsqu'un un est écrit sur le disque, le support enregistre un un, et lorsqu'un zéro est écrit, le support enregistre un zéro.Cependant, l'effet réel est plus proche de l'obtention d'un 0,95 lorsqu'un zéro est écrasé par un un, et d'un 1,05 lorsqu'un un est écrasé par un un.Les circuits de disque normaux sont configurés de manière à ce que ces deux valeurs soient lues comme une seule, mais en utilisant des circuits spécialisés, il est possible de déterminer ce que contenaient les « couches » précédentes.La récupération d'au moins une ou deux couches de données écrasées n'est pas trop difficile à réaliser en lisant le signal de l'électronique de la tête analogique avec un oscilloscope à échantillonnage numérique de haute qualité, en téléchargeant la forme d'onde échantillonnée sur un PC et en l'analysant dans un logiciel. pour récupérer le signal précédemment enregistré.Le logiciel génère un signal de lecture « idéal » et le soustrait de ce qui a été réellement lu, laissant comme différence le reste du signal précédent.Étant donné que la qualité des circuits analogiques d'un disque dur commercial est loin d'être comparable à celle des circuits de l'oscilloscope utilisé pour échantillonner le signal, il est possible de récupérer de nombreuses informations supplémentaires qui ne sont pas exploitées par l'électronique du disque dur (bien qu'avec des systèmes plus récents). les techniques de codage de canal telles que PRML (expliquées plus loin) qui nécessitent des traitements de signal importants, l'utilisation d'outils simples comme un oscilloscope pour récupérer directement les données n'est plus possible)

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

Imaginez un secteur de données sur le disque physique.Dans ce secteur se trouve un motif magnétique (une bande) qui code les bits de données stockés dans le secteur.Ce motif est écrit par une tête d'écriture qui est plus ou moins stationnaire pendant que le disque tourne en dessous.Désormais, pour que votre disque dur fonctionne correctement en tant que périphérique de stockage de données, chaque fois qu'une nouvelle bande de motif magnétique est écrite dans un secteur, il doit réinitialiser suffisamment le motif magnétique de ce secteur pour être lisible ultérieurement.Cependant, il n'est pas nécessaire qu'il efface complètement toutes les preuves du motif magnétique précédent, il doit simplement être assez bon (et avec la quantité de correction d'erreur utilisée aujourd'hui, il n'est pas nécessaire que ce soit si bon).Considérez que la tête d'écriture ne prendra pas toujours la même trajectoire que lors du passage précédent sur un secteur donné (elle pourrait être un peu inclinée vers la gauche ou vers la droite, elle pourrait passer sur le secteur avec un léger angle dans un sens ou dans l'autre en raison aux vibrations, etc.)

Ce que vous obtenez est une série de couches de motifs magnétiques, le motif le plus puissant correspondant à la dernière écriture de données.Avec les bons instruments, il peut être possible de lire cette superposition de modèles avec suffisamment de détails pour pouvoir déterminer certaines des données des couches plus anciennes.

Il est utile que les données soient numériques, car une fois que vous avez extrait les données d'une couche donnée, vous pouvez déterminer exactement le motif magnétique qui aurait été utilisé pour les écrire sur le disque et le soustraire des lectures (et ensuite le faire lors de la prochaine couche). couche, et la suivante).

La raison pour laquelle tu veux ça est pas disques durs, mais SSD.Ils remappent les clusters sans en informer le système d'exploitation ou les pilotes du système de fichiers.Ceci est fait à des fins de nivellement de l’usure.Il y a donc de fortes chances que le bit 0 écrit aille à un endroit différent du 1 précédent.Le retrait du contrôleur SSD et la lecture des puces flash brutes sont à la portée même de l'espionnage industriel.Mais avec 36 écrasements complets du disque, le nivellement de l'usure aura probablement parcouru tous les blocs de rechange plusieurs fois.

"Rémanence des données" Il y a un assez bon ensemble de références concernant les attaques possibles et leur faisabilité réelle sur Wikipédia.Des normes et recommandations du DoD et du NIST y sont également citées.En fin de compte, il est possible, mais cela devient de plus en plus difficile, de récupérer des données écrasées à partir d'un support magnétique.Néanmoins, certaines normes (du gouvernement américain) nécessitent encore au moins plusieurs écrasements.Pendant ce temps, les composants internes des périphériques continuent de devenir plus complexes et, même après un écrasement, un disque ou un périphérique SSD peut avoir des copies inattendues (pensez à une mauvaise gestion des blocs ou à un nivellement de l'usure du flash (voir Peter Gutmann).Ainsi, les vrais inquiets détruisent toujours les disques.

Ce que nous regardons ici s'appelle «Remmanence des données». En fait, la plupart des technologies qui écrasent à plusieurs reprises font (sans danger) plus que ce qui est réellement nécessaire.Il y a eu des tentatives pour récupérer des données à partir de disques dont les données ont été écrasées et, à l'exception de quelques cas de laboratoire, il n'existe vraiment aucun exemple de réussite d'une telle technique.

Lorsque nous parlons de méthodes de récupération, vous verrez principalement la microscopie à force magnétique comme la solution miracle pour contourner un écrasement occasionnel, mais même cela n'a pas de succès enregistré et peut être annulé dans tous les cas en écrivant un bon modèle de données binaires dans toute la région. vos supports magnétiques (par opposition aux simples 0000000000).

Enfin, les 36 (en fait 35) écrasements auxquels vous faites référence sont aujourd'hui reconnus comme obsolètes et inutiles, car la technique (connue sous le nom de méthode Gutmann) a été conçue pour s'adapter aux différentes méthodes de codage - et généralement inconnues de l'utilisateur - utilisées dans les technologies. comme RLL et MFM que vous ne rencontrerez probablement pas de toute façon.Même les directives du gouvernement américain stipulent qu'un seul écrasement suffit pour supprimer des données, même si, à des fins administratives, ils ne considèrent pas cela comme acceptable pour la « désinfection ».La raison suggérée pour cette disparité est que les secteurs "mauvais" peuvent être marqués comme mauvais par le matériel du disque et ne pas être correctement écrasés lorsque vient le temps de procéder à l'écrasement, laissant ainsi la possibilité qu'une inspection visuelle du disque puisse les récupérer. Régions.

En fin de compte, écrire avec un motif 1010101010101010 ou assez aléatoire suffit à effacer les données au point que les techniques connues ne peuvent pas les récupérer.

Je me suis toujours demandé pourquoi la possibilité que le fichier ait été précédemment stocké dans un emplacement physique différent sur le disque n'était pas prise en compte.

Par exemple, si une défragmentation vient de se produire, il pourrait facilement y avoir une copie du fichier facilement récupérable ailleurs sur le disque.

Voici une implémentation d'effacement Gutmann que j'ai mise en place.Il utilise le générateur de nombres aléatoires cryptographiques pour produire un bloc solide de données aléatoires.

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();
        }
    }
}

Il existe des applications et des services de type « réparation de disque » qui peuvent toujours lire les données d'un disque dur même après son formatage. Par conséquent, un simple écrasement avec des 1 et des 0 aléatoires une seule fois n'est pas suffisant si vous avez vraiment besoin d'effacer quelque chose en toute sécurité.

Je dirais que pour l'utilisateur moyen, c'est plus que suffisant, mais si vous êtes dans un environnement de haute sécurité (gouvernemental, militaire, etc.), vous avez besoin d'un niveau de « suppression » beaucoup plus élevé qui peut garantir assez efficacement que aucune donnée ne sera récupérable à partir du lecteur.

Les États-Unis ont émis des exigences concernant l'effacement des informations sensibles (c.-à-d.Informations Top Secret) consiste à détruire le lecteur.Fondamentalement, les disques étaient placés dans une machine dotée d'un énorme aimant et détruiraient également physiquement le disque pour être éliminés.En effet, il est possible de lire des informations sur un disque, voire de les écraser plusieurs fois.

Regarde ça: L'article de Guttman

Inversez simplement les bits pour que les 1 soient écrits sur tous les 0 et que les 0 soient écrits sur tous les 1, puis mettez le tout à zéro, ce qui devrait éliminer toute variable dans le champ magnétique et ne prend que 2 passes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top