GNU/Linux : Effacement facile de fichiers rémanents
Par Petaramesh le samedi 27 octobre 2007, 19:20 - Informatique non-duelle - Lien permanent
Encore un billet technique de ta mère !
Quand on efface un fichier d'un disque dur, le contenu de ce fichier n'est pas réellement effacé : L'espace occupé par le fichier est simplement rendu de nouveau "disponible", mais les donneés demeurent. Elles ne seront détruites que quand elles seront "écrasées" par un nouveau fichier... Dans 10 secondes ou dans 10 ans, il est impossible de le savoir.
La plupart des systèmes de fichiers utilisés sous GNU/Linux ne possèdent pas de possibilité d'undelete (dé-suppression), et, bien que la récupération de fichiers effacés soit aléatoire et difficile, des outils d'analyse par blocs (autopsie du disque) permettent bien souvent d'exhumer bien des choses...
Une méthode simple pour faire le ménage...
...consiste à créer sur une partition un fichier temporaire plein de zéros ou de données aléatoires, jusqu'à ce que le disque soit plein, écrasant ainsi sauvagement toutes les données qui pourraient s'y trouver encore (sans affecter les fichiers non-effacés qui s'y trouvent).
Bien que cette méthode ne soit pas infaillible,[1] elle garantit toutefois que les données ne seront pas récupérables sans d'extrêmement longues et coûteuses procédures : Celui qui n'a pas quelques centaines de milliers d'Euros à dépenser pour ça pourra faire ballon sur les données ainsi effacées de votre disque, et même pour celui qui a les moyens, la partie sera fine... Bref, la plupart des gens pourront dormir tranquilles.
Pour les autres, il existe des logiciels spécifiques, tels que shred ou secure delete (package secure-delete disponible sur Ubuntu et Debian), mais à mon avis ceux qui ont besoin de shred ont encore davantage besoin de rouler sur leur disque dur avec un bulldozer ;-) [2]
Comment procéder simplement, en console root : [3]
Créer avec "dd" sur un point de montage quelconque (prenons l'exemple de /home) un fichier qui bourrera la partition correspondante de zéros, puis effacer aussitôt celui-ci après avoir synchronisé le disque :
dd if=/dev/zero of=/home/bidon bs=1M; sync; rm -f /home/bidon
Et voilà !
(L'opération peut durer plusieurs dizaines de minutes sur un disque de plusieurs dizaines de Go)
On peut utiliser /dev/urandom à la place de /dev/zero pour écrire des données pseudo-aléatoires plutôt que des zéros : La protection sera légèrement meilleure, mais le temps d'exécution passera, pour un gros disques, à des heures, voire des jours... Tout dépend donc du temps dont on dispose ;-)
A noter que si l'on fait cela sur la partition racine "/" ou "/var" d'un serveur où d'une machine sur laquelle des "démons" tournent, le système risque de ne pas aimer du tout de se trouver temporairement à court d'espace disque au moment où le gros fichier bidon remplira presque entièrement celui-ci... Il est prudent d'arrêter les démons qui pourraient avoir soudainement besoin d'écrire des fichiers sur le disque, pendant la procédure.
N.B. :
- Cette méthode laisse toujours quelques petits bouts de disque non effacés dans la structure même du filesystem, mais elle remplit cependant parfaitement la mission "d'effacer le plus gros", et de loin. La seule méthode pour effacer vraiment tout le disque serait de faire cela sur le disque entier, et non pas dans un fichier ; ce moyen serait donc destructif de tous les fichiers présents sur le disque.
- Cette méthode ne permet pas d'effacer les vieilles données contenues dans le "file slack" : Il faut savoir que sur un disque, l'espace est alloué par blocs, typiquement de 4 Ko pour un filesystem ext3.
- Chaque fichier se voit attribué un nombre entier de blocs. Ainsi, un fichier de 120 octets se voit atttribuer un bloc entier de 4 Ko, un fichier de 10 Ko se voit attribuer 3 blocs alors qu'il n'en utilise réellement que 2 1/2, etc.
- L'espace non utilisé par un fichier auquel il a été attribué conserve les vieilles données (donc un bout de vieux fichier effacé), et les conserve perpétuellement (tant que le fichier auquel est alloué ce bloc "verrouille" cet espace).[4]
- On considère statistiquement que chaque fichier présent sur le disque gaspille en moyenne un demi-bloc d'espace, soit 2 Ko.
- Il est courant qu'une installation GNU/Linux complète comprenne plus de 150.000 fichiers, uniquement pour le système. Ces fichiers verrouillent donc (gaspillent), pour 150.000 fichiers, 300.000 Ko, soit environ 300 Mo d'espace inutilisé, qui en fait contient des données de vieux fichiers effacés (sauf si l'installation a été faite sur un disque vierge). On appelle ceci le "file slack".
- Une méthode d'effacement comme celle présentée plus haut ne peut rien faire pour le file slack, et donc, ces morceaux de vieilles données restent potentiellement récupérables. Il faut cependant noter que :
- Ces morceaux sont disséminés à travers tout le disque, Il est donc peu probable qu'on y trouve autre chose que de petits fragments de milliers de fichiers très difficiles à "recoller ensemble" pour en tirer un sens. Le manque de bol serait que s'y trouve un mot de passe important où une phrase suffisamment compromettante - quel que soit le sens qu'on donne à ce mot - par elle-même.
- Comme ce sont des fins de blocs, on n'aura jamais le début d'un fichier (les premiers octets d'en-tête) Il sera donc difficile de déterminer la nature des morceaux de données ainsi récupérables - sauf si c'est du texte ASCII..
- En pratique, la menace potentielle représentée par ce file slack est réelle, mais très modérée au regard du risque que présenterait la récupération de fichiers entiers.
- Le seul moyen d'éliminer le file slack (sans utilitaire spécial) consisterait à copier tous les fichiers sur un autre support, puis effacer tout le disque avant de restaurer les fichiers sauvegardés à leur place initiale...
Pour éviter de devoir se poser la question de l'effacement réel des fichiers, le chiffrement complet du filesystem reste la solution de choix.
Addendum 15/05/2008 : Pour compléter cet article, je signale aux utilisateurs d'Ubuntu et Debian l'existence du package "secure-delete", qui installe les utilitaires suivants :
srm: Effacement "sécurisé" d'un fichier (ou d'une arborescence de répertoires complète).sfill: Ecrasement "sécurisé" de l'ensemble de l'espace libre sur une partition (pour écrabouiller ce qu'il peut rester des fichiers précédemment effacés par des méthodes "non-sécurisées").sswap: Effacement "sécurisé" du swap.smem: Effacement "sécurisé" de la mémoire vive.
Les 3 premiers, agissant sur le disque, effectuent l'effacement selon les méthodes préconisées par Peter Gutmann au 6e Symposium de Sécurité Usenix, c'est-à-dire que par défaut ils effectuent 38 (!) écrasements successifs du contenu d'un fichier, dont 5 passes avec des valeurs aléatoires, puis 27 passes avec des valeurs spéciales successives déterminées par Gutmann, puis à nouveau 5 passes aléatoires.
Autant dire que si le temps d'exécution est supportable pour des fichiers de taille relativement modeste, un "sfill" par cette méthode d'un disque de plusieurs centaines de Go peut prendre des jours et des jours...
Il existe toutefois moyen de lancer ces outils en mode "plus rapide et moins sécurisé" (effectuant moins de passes).
Je doute personnellement un peu de l'intérêt de faire autant de passes dans la grande majorité des cas et avec la densité des disques modernes, les têtes servo et les méthodes d'enregistrement "orthogonal"... À moins que l'effacement d'un fichier donné soit d'importance absolument vitale et qu'on ne considère qu'on n'est jamais trop paranoïaque.
Et ces outils restent de toute manière hélas vulnérables aux limites indiquées dans la note [2].
Notes
[1] Elle ne protège notamment pas contre les effets-mémoire du support magnétique et les moyens de récupérer des données écrasées avec beaucoup d'efforts et de moyens nécessitant le démontage complet du disque - matériel spécialisé, microscope électronique à effet tunnel... Certains spécialistes doutent cependant qu'une quelconque récupération soit en pratique possible avec la densité d'information atteinte sur les disques actuels.
[2] Je doute très fortement de l'effectivité d'un quelconque logiciel d'écrasement physique "fichier par fichier" sur un filesystem journalisé moderne tel que l'on en recontre sous Linux (ext3, ReiserFS, XFS...), si ce logiciel opère au-dessus du niveau du filesystem. En effet, les données d'écrasement que l'on cherche à écrire par-dessus un fichier ont toutes les chances d'être effectivement écrites à un emplacement physique différent du disque, vouant à l'échec toute tentative d'écraser le contenu d'un fichier spécifique... Et ce sera encore plus vrai avec un système de fichier snapshotté pratiquant systématiquement la réécriture sur des blocs physiques différents (tel que WAFL). Seul le fait de remplir toute la partition de disque concernée peut alors garantir que tous les fichiers effacés seront effectivement écrasés.
[3] Quels que soient les droits de votre "utilisateur ordinaire" sur le point de montage concerné, seul root a par défaut le droit de remplir à 100% un filesystem donné. Un utilisateur ordinaire ne pourra pas dépasser 95% de l'espace libre, laissant ainsi au moins 5% d'espace non-effacé. Voir man tune2fs si l'on désire modifier ce pourcentage.
[4] On peut ainsi considérer qu'un nouveau fichier écrase une partie d'un ancien fichier, tout en préservant le reste de celui-ci...











Commentaires
"Pour éviter de devoir se poser la question", on évitera d'écrire sur un disque :o))
Ok, je sort...
hébé ! elle t'inspire la belle doche ^^
Il existe aussi wipe pour supprimer les fichiers.
@Le Joker : Mâ Belmeramesh n'est pas encore dans les murs.
@Nicola :
...qui existe en package Ubuntu :
aptitude install wipeUn paragraphe essentiel de "
man wipe" est le suivant : . Après ça, y'a un chouille de théorie du complot ;-)le disque dur , au micronde, ça le fait ?
pasque sinon, lampe à souder de chez bricomachin, 20 euros en solde ... :p
@Bob : Je récapépète : schred ou wipe, peu importe. Si tu réécris mille fois pour écraser un fichier, et que le fonctionnement interne d'un filesystem journalisé fait que l'écriture des données d'écrasement à lieu à un emplacement physique différent sur le disque dur, ça ne sert strictement à rien.
Mieux vaut wiper une fois toute une partition avec
dd, plutôt que de réécrire mille fois... au mauvais endroit.Ou carrément utiliser ton billet précédent pour toutes les partitions. Ça évite les problèmes si jamais l'ALPA vient fouiner chez toi par exemple.
Au fait j'aime bien tes billets techniques, n'hésite pas à en faire davantage :D
Il faut bien avoir en tête que la plupart des logiciels "d'effacement sécurisé" (wipe, schred) ont été développés sur des filesystems anciens (non journalisés) et que le fameux papier de Gutman auquel tout le monde se réfère en la matière concerne une technologie ancienne.
Simplement, la problématique de l'effacement sécurisé est totalement différente entre un filesystem ex2 non journalisé ou un XFS ou Reiserfs journalisé par exemple, et les possibilités techniques de récupération ne sont absolument pas comparables sur des technologies différentes : entre les "vieux" disques des années 90 (d'où date l'étude de Gutman) à "faible" densité, quelques dizaines ou centaines de Mo avec des disques à positionnement fixe et encodage MFM ou RLL, et des disques récents de plusieurs centaines de Go servo-positionnés utilisant PRML, de l'encodage en treillis et des têtes à magnéto-resistivité géante... Sur les disques modernes, récupérer quelque chose qui a été écrasé, ça doit être coton, si jamais c'est possible... La simple lecture par le disque des données qui sont dessus est déjà un exploit technique ! Quant à se taper des centaines de Go bit à bit au microscope à effet tunnel, faudrait avoir comme qui dirait du temps devant soi...
Autrement dit, si tu as un adversaire qui a les moyens de faire ça et que tes données l'intéressent assez pour qu'il le fasse, ça fait bien longtemps qu'il sera entré en possession de tes données par des méthodes plus "simples" (keyloggers, caméras dans ton plafond, trois types en bagnole qui te suivent du matin au soir, camionnette Tempest garée sur ton parking... Ou un bon coup de bottin sur la tête...). Dans ce cas, seule une "isolation" façon "ennemi d'état" peut quelque chose pour toi, mais c'est un film ;-)
Si tu n'as pas des adversaires de ce niveau, et pour les seules données de ton disque, une simple passe de zéros ou d'urandom doit suffire, à mon humble avis...
>
Il y en aura d'autres, notamment sur le chiffrement, mais je suis conscient que ça emmerde une partie non négligeable de mes lecteurs ;-) Cela dit, ils ont aussi d'autres billets à se mettre sous la dent ;-)
Rien ne t’empêche de remonter la partition en ext2 à chaud, de supprimer le fichier et de créer un gros fichier plein de n’importe quoi, de le supprimer, puis de la remonter en ext3. Tout ça pour ça.
On a d'autres billets sous la dent mais tu te lasses de nous y lire commenter... ;o)
Bah, qui n'aime pas lire de la pouésie bas-moldave (même sans comprendre) ne semble pas fait pour squatter cet ashram et idolâtrer le Guru...
...mais je suis conscient que ça emmerde une partie non négligeable de mes lecteurs ;-)
Ah ben oui mais ils sont si pédagogiques et bien écrits qu'il m'arrive d'y comprendre quelque chose, ce qui change des aides techniques habituelles où il faut à la fois se concentrer sur le bas-moldave et le bas-français.
C'est pour la théorie car en pratique il y a encore trop, pour moi, « d'incantation magique » que je risque de mal prononcer peuplant ainsi mon portable de malicieux lutins dont je ne parviendrais à me débarrasser qu'en ayant recours à la bombe atomique. Par exemple, quel bon génie invoque bs=1M ? Ceci dit, je comprends qu'il ne soit pas possible de réexpliquer tout Linux à chaque billet.
N'empêche que l'étendu des possibilités de Linux me laisse toujours autant sur le cul même si sa simplicité de mise en oeuvre me fait trembler les rares fois où je suis contraint d'ouvrir une console root.
@otrynteus :
BlockSize = 1 Mo
"
man dd" est ton ami ;-)(Dans KDE: [Alt]-[F2], puis "
#dd")J'ai lu avec intérêt ce billet... et une chose m'interpelle. Qu'en sera t'il dans de (très) nombreuses années, avec un disque dur qui n'a de disque dur que le nom, à savoir composé de mémoire flash ? Si je n'abuse, un seul coup d'écrasement dans la barette efface de manière irrémédiable son contenu, nan ? Je ne m'y connais pas plus que ça, mais je vois mal comment "physiquement" il pourrai y avoir une quelconque rémanence d'information jadis inscrite dans un transistor....
@blabla :
Il est sûr que la destruction physique d'une barrette de mémoire est assez facile, et son contenu probablement irrécupérable si la puce elle-même a été cassée en deux ;-)
Une mémoire flash piège des paquets d'électrons dans des "trous", une exposition à un puissant champ électrique devrait aussi pouvoir lui faire sa fête. Mais détruire le support est toujours plus ennuyeux que de pouvoir l'effacer et le réutiliser.
Pour la mémoire vive (RAM) supposée ne rien conserver après mise hors-tension, il est intéressant de savoir que certains programmes qui conservent en permanence une clé de déchiffrement en mémoire la déplacent en permanence et la recouvrent de données aléatoires, pour éviter qu'en ne restant "toujours au même endroit", elle ne finisse par se "brûler dans la puce" par modification des caractéristiques électriques des composants éternellement sous/hors charge, un peu comme une image fixe finit par se brûler sur un écran cathodique.
De telles images fantômes "brûlées en mémoire" peuvent être récupérées avec certaines techniques, comme l'examen de l'état théoriquement aléatoire de la mémoire à la mise sous-tension, ou l'examen de son comportement sous des tensions inférieures ou supérieures à sa tension de fonctionnement nominale, qui peuvent mettre en évidence les traces de telles "brûlures électroniques"...
OK. Evidemment, quand je disais "écraser" j'entendais remplir de données autre que celle présente auparavant, pas péter en deux la barette pour ne plus pouvoir la réutiliser après. Je comprend à peu près ce que tu as écrit, MAIS, toujours si j'ai bien compris, ce phénomène de "brulure électronique" n'apparait que dans un cas précis ou un secteur de la barette est utilisé pour se mettre plus souvent dans un état qu'un autre de façon quasi systématique... Dans le cas d'une utilisation ou le système entier tournerai sur de la flash, un fichier quelconque écrit une fois pour toute sur un emplacement donné de la barette n'a surement pas "signé" signifiquativement assez le matériau pour que celui ci est pris "le plis" d'une position ou d'une autre une fois un coup de donné aléatoire mis dedans. C'est peut être du charabiat ce que je dis, enfin comme dirait l'autre, "j'me comprend, j'me comprend" lol
D'ailleurs, je me dis qu'il serait techniquement possible d'implémenter un circuit électronique permettant de remettre physiquement à zéro (ou dans un état quelconque aléatoire) les secteur d'une barette flash, que ceux-ci changent tous en même temps leur état sans être obligé de passer par une solution logiciel qui va, un à un (et donc plus longuement) changer l'état des secteur par passes successives. Je parle à un niveau matériel, controlable depuis l'intérieur du PC genre en pressant un petit bouton placé sur la barette elle même, sous réserve qu'elle soit sous tension. Bon j'arrête là je m'enflame et puis suis pas ingé moi !
Petite précision tout de même sur ma dernière remarque, je mentionne que justement ceci n'est pas imaginable pour un disque dur puisqu'il faut le passage de la tête d'écriture sur l'ensemble du disque, les secteurs ne pouvant "s'auto" changer d'eux même. Voilà là j'arrête promis.
Ah, je l'ai retrouvé ce post...
forcément mon message arrive un peu tard, au moment où j'en ai bien besoin :
j'ai tenté la manip' pour effacer proprement un disque externe que je dois renvoyer chez le fabricant (le ventilo s'est mis à couiner bruyamment). Bref, je monte mon disque (mettons sur /mnt/sauvegardes), je le vide en local dans mon /home, et je lance la commande magique du gourou de ces lieux.
Pas de bol, ça se prend les pieds dans le tapis quelques instants plus tard avec un magnifique :
Débordement de la taille permise pour un fichier (core dumped)Bon, jai pas tout dit, ce fichu disque est formaté en ntfs, donc il est monté avec l'option smbfs ; et je me demande si la limite viendrait pas de là ?
Bon, je sais que cet Ashram n'est pas une hotline, mais je prie pour que le taulier m'accorde une petite réponse...
Ah, j'ai aussi testé le petit utilitaire de chiffrement, un vrai régal pour enfin stocker pénard son fichier de mots de passe, surtout quand on devient vieux (faut juste se souvenir de la clé qui tue). Merci !
@TontonRaoul : Si tu veux gicler le contenu d'un disque entier, le mieux est de ne *pas* monter les partitions qu'il contient et d'envoyer ta giclée de zéros directement sur le périphérique-disque lui-même, au-dessous des partitions et systèmes de fichiers. Du coup, tu dégages tout, table de partitions et filesystems compris (et sans limite de taille de fichiers).
Par exemple, si ton disque externe est reconnu en "
/dev/sdc", la commande magique est bêtement :Juste un dernier truc : Fais bien gaffe à ne pas te tromper de disque si tu ne veux pas pleurer à chaudes larmes :-}
merci,
ouaip' je suis bien le genre de type qui pleure à chaudes larmes sa pauvre mère quand, par trop sûr de lui, il déglingue scrupuleusement ce qu'il a mis des semaines à peaufiner.
Ivre de rage, j'ai opté pour un disque réseau, je le vois pas dans /dev.
Pour finir je vais lancer ça :
for i in `seq 1 160`; do dd if=/dev/zero of=/mnt/bidon$i bs=1M count=2000; done(vu que le disque fait 320 Go)...
puis vaquer à autre chose pendant les 24 heures qui suivront !
Merci pour ton aide (toujours un plaisir de passer en ces lieux)
http://www.ssi.gouv.fr/fr/documenta...
D'après ce doc, recouvrir tout ce qui existe sur le disque de données aléatoires ça tendrait vers ce qu'ils appellent effacement des données. Donc suffisant pour limiter significativement les 4 premiers niveaux de menace sur les 5. Pour le dernier niveau de menace, l'attaquant est en effet réduit à faire du maraboutage à l'aide d'un microscope à effet tunnel ou un truc du même style :)
Par contre apparemment quand ils recyclent les disques en interne, ils ont l'air de se contenter d'une réinstall de windows des familles en considérant que supprimer la table des partitions rend l'accès suffisamment complexe aux anciennes données.
Je m'occupe d'un petit guide sur la récupération de données et je viens de tomber sur votre article. Je vais bientôt moi-même créer un petit article sur l'effacement permanent des données et j'aimerais savoir si je pouvais faire référence à votre article? Je l'ai trouvé très intéressant et complet! Merci d'avance.
@recuguide: Bien volontiers ! Je vous signale, à ajouter dans votre liste de logiciels de récupération de données, l'excellent testdisk capable de récupérer une table de partitions bouzillée avec une efficacité redoutable, et photorec pour la récupération de fichiers.
C'est noté! J'ai en effet l'intention d'aggrandir la liste des logiciels sous peu. Merci!