Dans le but d’empêcher le vol de données d’une entreprise en cas de revente ou de don de matériels par exemple mais aussi comme une protection intermédiaire avant la mise au rebut du matériel (DEEE : Déchets d’Équipements Électriques et Électroniques) il est judicieux de procéder à un effacement définitif des fichiers (ou d’une partition) sans possibilité de récupération.
Les fichiers ne sont jamais vraiment supprimés du système, il est la plupart du temps possible de les récupérer, même si ces derniers ont été supprimés il y a longtemps (heures, jours, mois, années) avec l’utilisation d’une application telle que Foremost (Linux) ou EasyRecovery (Windows).
Deux commandes permettent de détruire simplement vos dossiers/fichiers sous linux afin d’éviter toute récupération possible.
La commande Shred
La commande shred
est une commande unix qui permet d’effacer définitivement le contenu d’un fichier (ou d’une partition) sans possibilité de récupération. Le but de shred
est de rendre difficile toute récupération des données. Pour celà shred
écrit de façon répétitive et aléatoire une suite de 1 et de 0 dans le fichier.
Effacer un fichiers ou une partition
La commande shred
(qui signifie déchiqueter) va permettre de détruire un fichier ou une partition entière.
Utilisation : shred [OPTION]... FICHIER... |
/!*Attention, aucune confirmation ne sera demandée* en utilisant la commande ci dessous.
# shred nom-du-fichier |
En visualisant le contenu de votre fichier avec la commande cat
par exemple vous y verrez quelque chose du genre :
�ȋ�����&��(�P+�kƮ��h���d�*�����g�Ęm*�N��PJLkyf]�����F�4������� |
Il est possible d’ajouter des options au déchiquetage, comme le nombre de passe, de supprimer le fichier en fin d’opération, de camoufler le déchiquetage, …
-f modifier les droits pour permettre l'écriture si nécessaire |
Exemple concret
Déchiquetage du fichier secrets.txt
en 10 passes, avec camouflage de l’opération, suppression en fin de traitement et verbose. Les options utilisées auront pour effet de :
- remplacer 10 fois les données du fichier par des déchets (
-n 10
) - remplacer ces données par des zéros (
-z
) pour masquer le déchiquetage - tronquer et supprimer le fichier (
-u
)
La commande shred
va simplement réécrire le fichier au nombre de passes désirées avec des caractères aléatoires
# shred -n 10 -z -v -u secrets.txt |
shred secrets.txt passe 1/11 (random)… |
Limites de shred
Voici les systèmes de fichiers sur lesquels shred
n’est pas efficace ou garanti :
- systèmes de fichiers qui mettent en cache les données dans des emplacements temporaires, NFS version 3
- systèmes de fichiers log-structured ou journalisés, JFS, ReiserFS, XFS, Ext3, etc.
- Dans les systèmes de fichiers ext3, le déchiquetage est d’une efficacité limitée en mode :
- data=journal (journalise données et métadonnées)
- Dans les modes ci-dessous shred fonctionne correctement
- data = ordered (par défaut)
- data = writeback
- Dans les systèmes de fichiers ext3, le déchiquetage est d’une efficacité limitée en mode :
- systèmes de fichiers qui produisent des snapshots.
- systèmes de fichiers basés sur RAID.
- systèmes de fichiers compressés
A noter que des sauvegardes antérieures du système de fichiers et des miroirs distants peuvent contenir des copies du fichier qui a été déchiqueté. Il pourra donc être récupéré plus tard.
Il est également à noter que la commande Shred
permet seulement le déchiquetage de fichiers mais pas d’une arborescence (ou d’un répertoire). pour cela il faut utiliser la commande wipe
La commande Wipe
La commande wipe
permet d’effacer définitivement le contenu d’un fichier, d’une partition ou d’un répertoire ainsi que sa sous arborescence sans possibilité de récupération. Le but de wipe
est de rendre difficile toute récupération des données. Pour celà wipe
écrit des données aléatoires provennant de /dev/random
.
Effacer un fichier, une partition, un dossier et son arborescence
La commande wipe
(qui signifie effacer, essuyer) va permettre de détruire un fichier, un dossier et sa sous arborescence ou une partition entière.
Utilisation : wipe [options] FICHIER |
/!\ Attention, aucune confirmation ne sera demandée en utilisant la commande ci-dessous, et les fichiers seront ici directement supprimés (sauf si vous utilisez l’option -k
)
# wipe -k mon_fichier |
En visualisant le contenu de votre fichier avec la commande cat
par exemple vous y verrez un fichier vide, ou comportant parfois quelques caractères.
Il est possible d’ajouter des options au déchiquetage, comme le nombre de passe, de ne pas supprimer le fichier en fin d’opération, …
-f Force, i.e. don't ask for confirmation (utile dans un script) |
Exemple concret
Effacer définitivement un dossier ainsi que tous ses sous-dossiers avec 35 passes en mode verbeux. Les options utilisées auront pour effet de :
-r
supprime tout le dossier ainsi que ses sous-dossier (mode récursif).-i
active le mode verbeux-Q
35 écrit des données aléatoires 35 fois dans le fichier.-q
option obligatoire pour utiliser-Q
Les données aléatoires proviennent de /dev/random
# wipe -r -i -Q 35 -q dossier_des_Secrets |
Okay to WIPE 1 directory ? (Yes/No) yes |
Commande dd
La commande dd
est surtout une commande générique pour copier les blocs. Elle est très utile pour faire des copies de disques bas niveau, et mettre une image bootable sur une clé USB par exemple. Elle est également un moyen facile de créer des fichiers de taille arbitraire. Alors que wipe
et shred
ne servent vraiment qu’à effacer les données.
Créer des fichiers de taille arbitraire
Créer un fichier de X Mo avec dd
:
# dd if=/dev/zero of=path/to/file bs=1M count=X |
Signification des options :
bs=BYTES read and write up to BYTES bytes at a time (default: 512) |
Effacer un dique entier
La commande dd
sert à copier un fichier, le convertir et le formater en fonction des options choisies.
L’exemple si dessous va remplir le disque sdX
de zéros (avec le code ASCII 0x00) en utilisant le fichier /dev/zero
.
# dd if=/dev/zero of=/dev/sdX bs=1M |
Pour compliquer davantage le processus de récupération, on peut utiliser des données aléatoires en utilisant le fichier /dev/urandom
.
# dd if=/dev/urandom of=/dev/sdX bs=1M |
Effacer une partition
Le principe est exactement le même, il suffit de préciser la partition du disque à effacer.
dd if=/dev/zero of=/dev/sdX4 bs=1M |
Script de sûreté
Si vous voulez vraiment de la haute sécurité, il faudrait écrire au moins 7 fois sur votre lecteur avec des données aléatoires. C’est la procédure utilisé par le gouvernement américain pour sécuriser ses propres données.
Créer un script DANGER_Wipe_sdX.sh, le code est le suivant :
!/bin/bash |
Notrunc : ne pas tronquer le fichier de sortie.
Effacer le chargeur de démarrage (Master Boot Record)
Il est possible d’effacer votre MBR en sélectionnant les secteurs du disque, ici on précise qu’on va démarrer l’effacement à partir du premier secteur avec count=1
.
dd if=/dev/zero of=/dev/hdX bs=446 count=1 |
Documentation
https://fr.wikipedia.org/wiki/Shred_
http://www.admin6.fr/2012/06/linux-detruire-facilement-des-fichiers-avec-shred-et-wipe
https://www.lifewire.com/wipe-vs-shred-vs-delete-vs-erase-whats-the-difference-2619146
https://www.it-connect.fr/shred
http://how-to.wikia.com/wiki/How_to_wipe_a_hard_drive_clean_in_Linux
https://www.marksanborn.net/howto/wiping-a-hard-drive-with-dd
https://doc.ubuntu-fr.org/shred
https://doc.ubuntu-fr.org/wipe
https://www.it-connect.fr/wipe-supprimer-definitivement-un-dossier-sous-ubuntu%ef%bb%bf