SDelete v1.51

Par Mark Russinovich

Paru le 01 novembre 2006

Introduction

La conformité C2 de Windows NT/2000 (Win2K) lui permet d'implémenter la protection de la réutilisation des objets. Cela signifie que lorsqu'une application alloue de l'espace de fichier ou de la mémoire virtuelle, elle est incapable d'afficher les données précédemment enregistrées dans les ressources que leur attribue Windows NT/2K. Windows NT remplit de zéros la mémoire et remet à zéro les secteurs du disque où un fichier est placé avant qu'il ne présente un type de ressource à une application. Cependant, la réutilisation d'un objet ne nécessite pas que l'espace occupé par un fichier avant sa suppression soit remis à zéro. La raison en est que Windows NT/2K suppose que le système d'exploitation contrôle l'accès aux ressources système. Toutefois, lorsque le système d'exploitation n'est pas actif, il est possible d'utiliser des éditeurs de disques bruts et des outils de récupération pour afficher et récupérer les données libérées par le système d'exploitation. Même lorsque vous chiffrez des fichiers avec le système EFS de Win2K, les données non chiffrées originales d'un fichier sont laissées sur le disque après la création d'une nouvelle version chiffrée du fichier.

Le seul moyen de vous assurer que les fichiers supprimés et les fichiers que vous chiffrez avec EFS ne peuvent pas être récupérés est d'utiliser des applications de suppression sécurisée. Ces applications écrasent les données sur disque d'un fichier supprimé en utilisant des techniques qui rendent la récupération de données de disque impossible même par les technologies de récupération capables de lire les traces des supports magnétiques révélant les fichiers faiblement supprimés. SDelete est un exemple d'application proposant une suppression sécurisée. Vous pouvez utiliser SDelete pour supprimer de façon sécurisée des fichiers existants et toutes les données de fichier qui existent dans les parties non allouées d'un disque (y compris les fichiers que vous avez déjà supprimés ou chiffrés). SDelete implémente la norme de suppression et nettoyage DOD 5220.22-M du ministère de la Défense des États-Unis, ce qui garantit qu'une fois supprimées avec SDelete, les données de vos fichiers ne peuvent plus être récupérées. Notez que SDelete supprime en toute sécurité les données de fichier mais pas les noms de fichier situés dans l'espace disque disponible.

SDelete fonctionne sur Windows 95, 98, NT 4.0 et Win2K.

 Haut de page

Utilisation de SDelete

SDelete est un utilitaire de ligne de commande qui accepte un certain nombre d'options. Il vous permet de supprimer un ou plusieurs fichiers et/ou répertoires ou de nettoyer l'espace libre sur un disque logique. SDelete accepte les caractères génériques dans le spécificateur de répertoire ou de fichier.

Utilisation : sdelete [-p passes] [-s] [-q] <fichier or répertoire>
sdelete [-p passes] -z [lettre du lecteur]

-p passes

Spécifie le nombre de passes d'écrasement

-s

Lit les sous-répertoires de façon récursive

-q

Ignore les erreurs lors de l'impression (mode silencieux)

-z

Nettoie l'espace libre

 Haut de page

Fonctionnement de SDelete

Il est relativement aisé de supprimer de façon sécurisée un fichier qui n'a aucun attribut spécial : le programme de suppression sécurisée remplace simplement le fichier par le modèle de suppression sécurisée. Il est en revanche plus difficile de supprimer les fichiers compressés, chiffrés et éparpillés de Windows NT/2K et de nettoyer de façon sécurisée les espaces libres du disque.

Les fichiers compressés, chiffrés et éparpillés sont gérés par NTFS en blocs de 16 clusters. Si un programme écrit sur une portion existante d'un fichier de ce type, NTFS alloue de l'espace sur le disque pour enregistrer les nouvelles données, et une fois cette opération terminée, libère les clusters précédemment occupés par le fichier. NTFS adopte cette approche prudente pour des raisons d'intégrité des données, et, dans le cas des fichiers compressés et éparpillés, au cas où une nouvelle allocation serait trop volumineuse (le volume des nouvelles données compressées serait supérieur à celui des vieilles données compressées). Ainsi, l'écrasement d'un tel fichier n'arrivera pas à supprimer le contenu du fichier du disque.

Pour traiter ces types de fichiers, SDelete s'appuie sur l'API de défragmentation. Grâce à l'API de défragmentation, SDelete peut déterminer précisément quels clusters d'un disque sont occupés par des données appartenant à des fichiers compressés, éparpillés ou chiffrés. Après avoir déterminé quels clusters contiennent les données du fichier, SDelete peut ouvrir le disque à l'accès brut et écraser ces clusters.

Le nettoyage d'espace libre présente une autre difficulté. Dans la mesure où FAT et NTFS ne permettent pas à une application d'accéder directement à l'espace libre, SDelete a deux possibilités d'action. Premièrement, il peut, comme il le fait avec les fichiers compressés, éparpillés et chiffrés, ouvrir le disque à l'accès brut et écraser l'espace libre. Cette approche comporte un gros problème : même si SDelete était codé de sorte à être entièrement capable de calculer les portions d'espace libre des lecteurs NTFS et FAT (capacité qui, en elle-même, n'est pas négligeable), il risquerait d'entrer en collision avec les opérations des fichiers actifs qui ont lieu sur le système. Par exemple, supposons que SDelete détermine qu'un cluster est libre et que, juste à ce moment, le pilote de système de fichiers (FAT, NTFS) décide d'allouer ce cluster à un fichier qui est en train d'être modifié par une autre application. Le pilote de système de fichiers écrit les nouvelles données sur le cluster, puis SDelete intervient et les écrase : les nouvelles données du fichier sont perdues. Le problème s'aggrave si le groupe est alloué à des métadonnées de système de fichiers puisque SDelete endommagera les structures sur disque du système de fichiers.

La deuxième approche, celle qui est adoptée par SDelete, consiste à écraser indirectement l'espace libre. D'abord, SDelete alloue le plus grand fichier possible. Pour ce faire, SDelete utilise l'E/S des fichiers non mis en cache de sorte que le contenu du cache de système de fichiers NT ne soit pas supprimés et remplacés par des données sans valeur associées au fichier accaparateur d'espace de SDelete. Étant donné que l'E/S de fichiers non mis en cache doit être alignée sur le secteur (512 octets), il pourrait rester de l'espace non alloué au fichier SDelete même lorsque SDelete ne peut plus agrandir ce fichier. Pour saisir tout espace restant, SDelete alloue ensuite le plus gros fichier mis en cache possible. Sur ces deux fichiers, SDelete effectue une tâche d'écrasement sécurisé, et s'assure que tout espace disque précédemment libre est bien nettoyé.

Sur les lecteurs NTFS, la tâche de SDelete n'est pas toujours terminée après l'allocation et l'écrasement des deux fichiers. SDelete doit également remplir toute partie libre du MFT (Master File Table) de NTFS avec des fichiers pouvant être intégrés dans un enregistrement MFT. La taille d'un enregistrement MFT est généralement de 1 Ko, et chaque fichier ou répertoire sur un disque nécessite au moins un enregistrement MFT. Les petits fichiers sont entièrement stockés dans leur enregistrement MFT, tandis que les fichiers qui ne peuvent pas être intégrés dans un enregistrement se voient attribuer des clusters en dehors du MFT. Pour traiter l'espace MFT libre, il suffit à SDelete d'allouer le plus grand fichier possible ; si le fichier occupe tout l'espace disponible dans un enregistrement MFT, NTFS l'empêchera de s'agrandir, étant donné qu'il ne reste plus de clusters sur le disque (ils se trouvent dans les deux fichiers précédemment alloués par SDelete). SDelete répète ensuite le processus. Lorsque SDelete ne peut même plus créer un nouveau fichier, il sait que tous les enregistrements précédemment libres dans le MFT ont été complètement remplis de fichiers écrasés de manière sécurisée.

Pour écraser le nom de fichier d'un fichier que vous supprimez, SDelete renomme le fichier 26 fois, remplaçant chaque caractère du nom du fichier par un caractère alphabétique successif. Par exemple, « foo.txt » serait d'abord remplacé par « AAA.AAA ».

La raison pour laquelle SDelete ne supprime pas les noms de fichier de façon sécurisée lorsqu'il nettoie l'espace libre de disque est que cette opération nécessiterait la manipulation directe des structures de répertoire. Les structures de répertoire peuvent disposer d'espace libre contenant des noms de fichier supprimés, mais l'espace libre du répertoire ne peut pas être alloué aux autres fichiers. SDelete ne peut donc pas allouer cet espace libre pour l'écraser de manière sécurisée.

Télécharger SDelete (47 Ko)

 Haut de page