5 votes

Suppression sécurisée de fichiers en C

Suppression sécurisée de fichiers en C

Je dois supprimer en toute sécurité un fichier dans C, voici ce que je fais :

  1. utiliser fopen pour obtenir une poignée du fichier
  2. calculer la taille en utilisant lseek / ftell
  3. obtenir une graine aléatoire en fonction de l'heure actuelle et/ou de la taille du fichier
  4. écrire (taille) octets dans le fichier à partir d'une boucle avec 256 octets écrits à chaque itération
  5. fflush / fclose l'identifiant du fichier
  6. rouvrir le fichier et refaire les étapes 3-6 pour 10~15 fois
  7. renommer le fichier puis le supprimer

C'est comme ça que ça se passe ? Parce que j'ai lu le nom "Gutmann 25 passes" dans Eraser, donc je suppose que 25 est le nombre de fois que le fichier est écrasé et 'Gutmann' est l'algorithme de randomisation ?

8voto

Martin Beckett Points 60406

Vous ne pouvez pas le faire en toute sécurité sans la coopération du système d'exploitation, et souvent même sans cette coopération.

Lorsque vous ouvrez un fichier et que vous y écrivez, rien ne garantit que le système d'exploitation placera le nouveau fichier sur le même morceau de rouille que l'ancien. Même s'il le fait, vous ne savez pas si la nouvelle écriture utilisera la même chaîne de clusters que l'ancienne.

Même dans ce cas, vous n'êtes pas sûr que le lecteur n'a pas mappé le bloc de disque à cause d'un défaut quelconque - laissant vos plans de domination du monde sur un bloc marqué comme mauvais mais toujours lisible.

ps - l'écrasement 25x n'est plus nécessaire, il était nécessaire sur les anciens lecteurs MFM à faible densité avec un mauvais suivi de la tête. Sur les lecteurs GMR modernes, un seul écrasement est suffisant.

1voto

M M. Points 29201

Oui, en fait, il écrase n différents motifs sur un fichier

Il le fait en écrivant une série de 35 motifs sur le site de l'entreprise. région à effacer.

La sélection de motifs suppose que l'utilisateur ne connaît pas l mécanisme de codage utilisé par le lecteur, et inclut donc des motifs conçus spécifiquement pour trois types de lecteurs différents. Un utilisateur qui connaît le type de codage utilisé par le lecteur peut choisir uniquement les motifs destinés à son lecteur. motifs destinés à son lecteur. Un lecteur doté d'un mécanisme d'encodage différent d'encodage différent nécessiterait des motifs différents.

Pour plus d'informations, voir aquí .

1voto

Nemo Points 32838

Martin Beckett a raison ; il n'existe pas de "suppression sécurisée" à moins que vous ne sachiez tout ce que fait le matériel jusqu'au disque. (Et même dans ce cas, je ne prendrais aucun pari sur ce qu'un attaquant suffisamment bien financé pourrait récupérer s'il avait accès au support physique).

Mais en supposant que le système d'exploitation et le disque réutilisent les mêmes blocs, votre schéma ne fonctionne pas pour une raison plus fondamentale : fflush n'écrit généralement rien sur le disque.

Sur la plupart des systèmes d'exploitation multitâches (y compris Windows, Linux et OS X), fflush force simplement les données du tampon de l'espace utilisateur dans le noyau. Le noyau fera alors sa propre mise en mémoire tampon, n'écrivant sur le disque que lorsqu'il en a envie.

Sous Linux, par exemple, vous devez appeler fsync(fileno(handle)) . (Ou simplement utiliser les descripteurs de fichiers en premier lieu.) OS X est similaire. Windows a FlushFileBuffers .

La ligne du bas : La boucle que vous décrivez est très probablement simplement destinée à écraser un tampon du noyau 10-15 fois au lieu du fichier sur le disque. Il n'y a pas de moyen portable en C ou C++ pour forcer les données sur le disque. Pour cela, vous devez utiliser une interface dépendante de la plate-forme.

0voto

Tom Points 1

La méthode de Gutmann fonctionnait bien pour les anciens schémas d'encodage de la technologie des disques, et le schéma d'effacement à 35 passages de la méthode de Gutmann n'est plus nécessaire, ce que même Gutmann reconnaît. Voir : La méthode Gutmann à l'adresse https://en.wikipedia.org/wiki/Gutmann_method dans la section Critique où Gutmann discute des différences.

Il suffit généralement d'effectuer au plus quelques passages aléatoires pour supprimer un fichier en toute sécurité (avec éventuellement un passage supplémentaire de mise à zéro).

Le paquetage secure-delete de thc.org contient la commande sfill pour effacer en toute sécurité l'espace disque et l'espace inode d'un disque dur.

0voto

LinasS Points 1

MFT (Master File Table) similaire à FAT (File Allocation table), MFT conserve les enregistrements : les offsets des fichiers sur le disque, le nom du fichier, la date et l'heure, l'identifiant, la taille du fichier, et même les données du fichier si les données du fichier s'insèrent dans l'espace vide de l'enregistrement qui est d'environ 512 octets, la taille d'un enregistrement est de 1KB.

Remarque : les nouvelles données du disque dur sont réglées sur 0x00 (pour votre information).

Disons que vous voulez écraser file1.txt OS MFT trouve ce fichier décalé dans l'enregistrement. vous commencez à écraser le fichier1.txt avec le binaire (00000000) en mode binaire.

Vous allez écraser les données du fichier sur le disque à 100% ; c'est pourquoi MFT ont un décalage de fichier sur le disque. après l'avoir renommé et supprimé.

REMARQUE : MFT marquera le fichier comme étant supprimé, mais vous pouvez toujours obtenir certaines données sur ce fichier, c'est-à-dire la date et l'heure de création, de modification, d'accès, le décalage du fichier, les attributs, les indicateurs.

1- create folder in c:\  and move file and in same time rename in to folder( use rename function ) rename file to 0000000000 or any another without extention 

2- overwrite file with 0x00 and check if file was overwrited

3- change date/time

4- make without attributes

5- leave file size untouched OS faster reuse empty space.

6- delete file

7- repeat all files (1-6)

8- delete folder

or

(1, 2, 6, 7, 8)

9- find files in MFT remove records of these files.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X