Systèmes de fichiers · Leçon 2 sur 8
Comment les systèmes de fichiers stockent les données : clusters, allocation, espace résiduel et espace non alloué
13 min de lecture
Un système de fichiers transforme les secteurs bruts d'un volume en fichiers nommés. Il stocke le contenu dans des unités de taille fixe, consigne les unités utilisées et conserve les métadonnées et les noms dans des structures distinctes, dont chacune peut subsister ou être effacée indépendamment. Comprendre ce fonctionnement permet à un examinateur d'expliquer pourquoi un fichier supprimé est récupérable, d'où provient un ancien fragment et ce que ce fragment permet ou non de prouver. Les leçons suivantes appliquent ce modèle à NTFS, FAT, ext4 et APFS.
Un cadre de raisonnement : les cinq catégories de Carrier
Brian Carrier (File System Forensic Analysis, 2005) classe les données des systèmes de fichiers en cinq catégories. Ce modèle s'applique à tous les systèmes de fichiers et vous amène à vous demander à quelle catégorie appartient un élément de preuve.
| Catégorie | Ce qu'elle contient | Exemples |
|---|---|---|
| Système de fichiers | Organisation et taille du système de fichiers dans son ensemble | Secteur de démarrage NTFS, secteur de démarrage FAT (BPB), superbloc ext4 |
| Contenu | Unités de données contenant le contenu des fichiers et leur état d'allocation | Clusters ou blocs, $Bitmap NTFS, tables de bits des blocs ext4 |
| Métadonnées | Données décrivant un fichier : taille, horodatages, propriétaire, emplacement de stockage de son contenu | Enregistrements MFT NTFS, inodes ext4, champs de métadonnées d'une entrée de répertoire FAT |
| Nom de fichier | Noms et répertoires qui associent les noms aux métadonnées | Index de répertoire $I30 NTFS, entrées de répertoire ext4, champs de nom FAT |
| Application | Fonctionnalités dont le système de fichiers n'a pas besoin pour stocker des fichiers | $LogFile et $UsnJrnl NTFS, journal ext4, quotas de disque |
Les catégories peuvent être altérées indépendamment. Un nom peut subsister après la réutilisation de son entrée de métadonnées, une entrée de métadonnées peut pointer vers des clusters qui appartiennent désormais à un autre fichier, et le contenu peut subsister sans nom ni métadonnées. De nombreuses erreurs dans les rapports résultent du fait de considérer un élément de preuve d'une catégorie comme la preuve d'un fait relevant d'une autre.
Clusters, blocs et unités d'allocation
Un disque est adressé en secteurs, généralement de 512 octets (certains disques utilisent des secteurs de 4 096 octets ; les disques « 512e » présentent des secteurs logiques de 512 octets reposant sur des secteurs physiques de 4 096 octets). Un système de fichiers regroupe un nombre fixe de secteurs consécutifs dans un cluster (FAT, exFAT et NTFS), un bloc (ext4) ou, de façon générique, une unité d'allocation. La taille est définie lors du formatage et consignée dans la catégorie système de fichiers. Sur NTFS, le secteur de démarrage stocke le nombre d'octets par secteur à l'offset 0x0B et le nombre de secteurs par cluster à l'offset 0x0D. Les volumes NTFS utilisent couramment des clusters de 4 096 octets, et ext4 utilise couramment des blocs de 4 096 octets.
Le cluster est la plus petite unité qu'un système de fichiers peut attribuer à un fichier, car les structures d'allocation suivent un état par cluster ; suivre chaque secteur ou chaque octet les rendrait beaucoup plus volumineuses et plus lentes. Un fichier occupe donc un nombre entier de clusters, même lorsqu'il ne contient qu'un octet. Sa taille logique est le nombre d'octets qu'il contient. Sa taille physique (allouée) est le nombre de clusters × la taille d'un cluster. La différence constitue l'espace résiduel du fichier.
NTFS présente une exception. Un très petit fichier peut être stocké de manière résidente, dans son enregistrement MFT, et n'utilise alors aucun cluster. La leçon 1.3 traite des données résidentes.
Structures d'allocation
Chaque système de fichiers consigne les clusters utilisés :
- NTFS utilise
$Bitmap(enregistrement MFT 6), qui contient un bit par cluster (1 = alloué). L'utilisation des enregistrements MFT est suivie séparément, dans l'attribut$BITMAPde$MFTet dans l'indicateur d'utilisation (0x0001) de l'en-tête de chaque enregistrement. - FAT12/16/32 utilisent la table d'allocation des fichiers, qui comporte une entrée par cluster. 0 signifie libre ; les autres valeurs indiquent le cluster suivant dans la chaîne, la fin de chaîne ou un cluster défectueux. Les entrées FAT32 ont une largeur de 32 bits, dont les 28 bits de poids faible sont utilisés. Sur FAT, la table sert à la fois de carte d'allocation et de registre des emplacements où le contenu de chaque fichier est stocké.
- exFAT utilise une table de bits d'allocation et emploie la FAT principalement pour les fichiers fragmentés.
- ext4 utilise des tables de bits des blocs et des tables de bits des inodes pour chaque groupe de blocs.
Ce que fait généralement la « suppression » d'un fichier
Sur la plupart des systèmes de fichiers, la suppression d'un fichier modifie l'état d'allocation. Elle n'efface pas le contenu. Voici les résultats habituels :
- NTFS : l'indicateur d'utilisation dans l'enregistrement MFT est désactivé, les bits du fichier dans
$Bitmapsont mis à 0 et l'entrée est retirée de l'index du répertoire parent. L'enregistrement conserve généralement ses attributs, ses horodatages et ses séquences de données jusqu'à sa réutilisation. - FAT : le premier octet de l'entrée de répertoire est défini sur 0xE5 et la chaîne du fichier dans la FAT est mise à 0 (libre). L'entrée de répertoire conserve généralement la taille et le cluster de départ (sur FAT32, certaines implémentations effacent ses 16 bits de poids fort), mais la chaîne reliant les autres clusters a disparu.
- ext3/ext4 : l'inode et ses blocs sont marqués comme libres. Les informations de localisation des blocs dans l'inode sont généralement effacées elles aussi, ce qui complique la récupération à partir des métadonnées.
Dans chaque cas, le contenu reste dans les clusters jusqu'à son écrasement. Sur les disques SSD, TRIM peut faire en sorte que les blocs libérés renvoient des zéros à la lecture, même si aucune nouvelle donnée n'y a été écrite. La leçon 1.8 compare la récupération à partir des métadonnées à la récupération de fichiers par signatures.
Fragmentation
Un fichier est fragmenté lorsque ses clusters ne sont pas contigus ; NTFS consigne les fragments sous forme de séquences de données et FAT sous forme de liens dans la chaîne de clusters. Lorsque les métadonnées sont intactes, cela ne pose pas de problème, car chaque séquence est répertoriée. Sans métadonnées, en revanche, cela pose problème : un outil de récupération par signatures qui suppose la contiguïté associera au premier fragment des clusters sans rapport avec lui.
Espace résiduel du fichier : espace résiduel de RAM et espace résiduel de disque
L'espace résiduel du fichier (également appelé espace résiduel de cluster) est l'espace compris entre la fin de la taille logique d'un fichier et la fin de son dernier cluster. Il comporte deux parties :
- L'espace résiduel de RAM s'étend de la fin des données du fichier à la fin du secteur qui les contient. Le disque écrit des secteurs entiers ; le système d'exploitation doit donc fournir des octets pour le remplir. Ce nom provient des anciens systèmes, tels que MS-DOS et les premières versions de Windows sur FAT, qui le remplissaient avec le contenu présent dans le tampon mémoire. Les versions actuelles de Windows y écrivent des zéros ; sur un volume NTFS écrit par un système Windows moderne, vous devez donc vous attendre à ce que l'espace résiduel de RAM soit rempli de zéros. Si vous y trouvez des valeurs non nulles, expliquez-les (ancien système d'exploitation, autre pilote ou outil, ou système de fichiers autre que NTFS) plutôt que de les tenir pour acquises.
- L'espace résiduel de disque, également appelé espace résiduel restant, correspond aux secteurs entiers du dernier cluster situés après le secteur qui contient la fin du fichier. Aucune écriture n'y est effectuée ; ils conservent donc ce qui s'y trouvait auparavant, souvent un vestige d'un ancien fichier supprimé.
Si la taille d'un fichier diminue par la suite, son propre contenu antérieur situé au-delà de la nouvelle fin devient de l'espace résiduel.
Exemple détaillé
Un fichier a une taille logique de 10 000 octets. Il se trouve sur un volume comportant des clusters de 4 096 octets et des secteurs de 512 octets (8 secteurs par cluster).
- Clusters nécessaires : 10 000 ÷ 4 096 = 2,44, arrondi à l'entier supérieur, soit 3 clusters.
- Taille allouée : 3 × 4 096 = 12 288 octets.
- Espace résiduel du fichier : 12 288 − 10 000 = 2 288 octets.
- Données dans le dernier cluster : 10 000 − (2 × 4 096) = 10 000 − 8 192 = 1 808 octets.
- Secteurs utilisés dans ce cluster : 1 808 ÷ 512 = 3, reste 272. Cela représente trois secteurs entiers, plus 272 octets dans le quatrième secteur.
- Espace résiduel de RAM : 512 − 272 = 240 octets, aux offsets 1 808–2 047 dans le cluster.
- Espace résiduel de disque : 8 − 4 = 4 secteurs entiers, soit 4 × 512 = 2 048 octets, aux offsets 2 048–4 095.
- Vérification : 240 + 2 048 = 2 288, ce qui correspond à l'étape 3.
Pour localiser ces zones dans l'image, supposons un volume NTFS (le cluster 0 commence au premier secteur du volume) débutant au secteur 2 048, dont le dernier cluster est le cluster 120 000 :
| Élément | Calcul | Offset en octets dans l'image |
|---|---|---|
| Début du volume | 2 048 × 512 | 1 048 576 |
| Début du cluster 120 000 | 1 048 576 + 120 000 × 4 096 | 492 568 576 |
| Début de l'espace résiduel de RAM | 492 568 576 + 1 808 | 492 570 384 |
| Début de l'espace résiduel de disque | 492 568 576 + 2 048 | 492 570 624 |
Espace résiduel du volume et espaces entre partitions
Des données peuvent également se trouver en dehors de tout système de fichiers.
- L'espace résiduel du volume est l'espace compris entre la fin du système de fichiers et la fin du volume qui le contient. Il apparaît lorsque la taille du volume n'est pas un multiple exact de la taille d'un cluster, lorsque le système de fichiers a été créé avec une taille inférieure à celle de sa partition ou lorsque la partition a été agrandie par la suite.
- Les espaces entre partitions sont des secteurs qu'aucune partition ne couvre. Il peut s'agir des secteurs entre la table de partitions et la première partition (secteurs 1–2 047 sur un disque MBR dont la première partition commence au secteur 2 048), de l'espace entre deux partitions ou de l'espace après la dernière partition.
Ces zones contiennent généralement des zéros ou des vestiges d'un partitionnement antérieur ; la présence de données non nulles mérite une explication, car des outils de dissimulation les utilisent. La leçon 1.1 montre comment les localiser.
Espace non alloué et espace libre
L'espace non alloué est l'ensemble des clusters que la structure d'allocation marque comme inutilisés. Il s'agit d'un état, et non d'une description du contenu. L'espace libre est la capacité que le système d'exploitation indique comme disponible. Il découle du même état, mais ne dit rien du contenu : « 20 GB libres » peut correspondre à 20 GB de données supprimées récupérables. Dans un rapport, écrivez « non alloué », jamais « vide ». L'espace non partitionné est encore différent, car il se situe en dehors de tout système de fichiers.
Ce que chaque zone permet ou non de prouver
| Zone | Peut montrer | Ne peut pas montrer à elle seule |
|---|---|---|
| Fichier alloué | Du contenu associé à un nom, à des horodatages et à un propriétaire | Qui a créé le contenu, sauf si d'autres sources le confirment |
| Fichier supprimé, métadonnées intactes | Ancien nom, taille, horodatages, emplacement du contenu | Que le contenu est toujours celui d'origine, car les clusters peuvent avoir été réutilisés |
| Espace résiduel du fichier | Que les données étaient dans le cluster avant la dernière écriture du fichier actuel, ou qu'elles y ont été placées délibérément | Quand elles ont été écrites, à quel fichier elles appartenaient ou quel utilisateur les a écrites |
| Espace non alloué | Que les données ont été écrites sur ce volume à un moment donné | Quand, par qui ou sous quel nom, sauf si le contenu possède ses propres métadonnées internes |
| Espace résiduel du volume, espaces entre partitions | Que des données existent en dehors du système de fichiers | Comment ou quand elles y sont arrivées |
Le contenu de l'espace résiduel et de l'espace non alloué ne possède pas de métadonnées du système de fichiers. Toute date ou identité d'auteur doit provenir du contenu lui-même, par exemple des métadonnées internes d'un document ou d'un horodatage dans une ligne de journal, et doit être corroborée.
Comment les outils donnent accès à ces zones
The Sleuth Kit propose des commandes pour chaque catégorie. fls -d répertorie les noms de fichiers supprimés (ajoutez -r pour parcourir les répertoires récursivement, -p pour les chemins complets et -o pour l'offset de la partition en secteurs). istat affiche une entrée de métadonnées. blkstat indique si un cluster est alloué. ifind -d recherche l'entrée de métadonnées qui pointe vers un cluster donné. blkls extrait par défaut les unités de données non allouées (-A). Avec -s, il extrait l'espace résiduel, et avec -e, il extrait toutes les unités. Lorsqu'une occurrence de mot-clé est trouvée dans la sortie de blkls, blkcalc -u <unit> convertit le numéro d'unité en adresse de cluster dans le volume d'origine. Autopsy présente les mêmes zones sous forme de vues des fichiers supprimés, de fichiers virtuels « Unalloc » et de fichiers -slack pour chaque fichier.
Points clés pour l'examen : Attendez-vous à devoir calculer la taille allouée, l'espace résiduel du fichier, l'espace résiduel de RAM et l'espace résiduel de disque à partir d'une taille de fichier, d'une taille de cluster et d'une taille de secteur, ainsi qu'à convertir un numéro de cluster en offset en octets. Les questions peuvent également porter sur ce que la suppression modifie sur un système de fichiers donné et sur ce que le contenu de l'espace résiduel ou de l'espace non alloué permet d'établir quant à la date et à l'auteur.
Points essentiels
- Les cinq catégories de Carrier (système de fichiers, contenu, métadonnées, nom de fichier, application) peuvent subsister ou disparaître indépendamment ; indiquez donc la catégorie de chaque élément de preuve.
- Le cluster est la plus petite unité d'allocation. La taille allouée d'un fichier correspond à son nombre de clusters × la taille d'un cluster, et la différence avec sa taille logique constitue l'espace résiduel du fichier.
- La suppression modifie normalement l'état d'allocation et les métadonnées ; le contenu reste présent jusqu'à son écrasement ou, sur les SSD, jusqu'à son éventuel traitement par TRIM.
- L'espace résiduel de RAM sur les systèmes Windows/NTFS modernes est normalement rempli de zéros. L'espace résiduel de disque se compose de secteurs non écrits qui peuvent contenir des vestiges d'un ancien fichier.
- L'espace non alloué est un état, et non du vide. Le contenu qui s'y trouve, ou qui se trouve dans l'espace résiduel, ne peut être daté ni attribué sans éléments de preuve indépendants.