Accès aux fichiers
Attributs d'index $I30
Fiche $I30 : index de dossiers NTFS ($INDEX_ROOT, $INDEX_ALLOCATION), enregistrements INDX, horodatages, entrées de slack de fichiers supprimés.
- Emplacement
- <directory>\$I30 ($INDEX_ALLOCATION stream of each NTFS folder)
- Prouve
- Un nom de fichier a existé dans un dossier, avec tailles et dates, même supprimé
- Horodatages
- Quatre FILETIME (UTC) par entrée, reflétant souvent $SI ; entrées en slack figées à leur dernière écriture ; pas d'heure propre aux enregistrements INDX
- Rétention
- Les entrées en slack survivent jusqu'à réutilisation de l'espace INDX ; dossiers actifs vite écrasés, dossiers calmes gardant longtemps les anciens noms
- Accès
- Administrateur avec accès NTFS brut (Velociraptor Windows.NTFS.I30, FTK Imager) ou image disque ; pas de cible KAPE
- Type
- Fichier / système de fichiers
- Windows
- XPVista / 78 / 8.11011
- Cible KAPE
- Pas de cible dédiée
- Velociraptor
- Pas de cible dédiée
Outils
Comparer tous les outilsPrésentation
Chaque dossier NTFS tient un index trié des noms qu'il contient afin d'accélérer les recherches. Cet index est stocké dans des attributs nommés $I30 : $INDEX_ROOT (résident dans l'enregistrement MFT du dossier, seul utilisé pour les petits dossiers) et, quand le dossier grossit, $INDEX_ALLOCATION (enregistrements INDX non résidents, en général de 4 Ko) accompagné d'un $BITMAP indiquant les enregistrements INDX utilisés. Chaque entrée d'index contient une copie d'une structure $FILE_NAME de l'enfant : nom, référence du parent, tailles et quatre horodatages.
L'intérêt forensique vient du slack : quand des entrées sont retirées ou que l'arbre B est rééquilibré, d'anciennes entrées restent souvent dans la partie inutilisée d'un enregistrement INDX. L'analyse de ce slack peut lister des fichiers supprimés d'un dossier, parfois longtemps après la réutilisation de leur enregistrement $MFT.
Emplacement
| Version de Windows | Emplacement | Remarques |
|---|---|---|
| XP à 11 (tout volume NTFS) | $INDEX_ROOT:$I30 dans l'enregistrement MFT du dossier | Résident ; petits dossiers uniquement ; slack limité |
| XP à 11 | $INDEX_ALLOCATION:$I30 du dossier | Enregistrements INDX (signature INDX), où se trouvent les entrées de slack |
| XP à 11 | $BITMAP:$I30 du dossier | Enregistrements INDX de l'allocation en cours d'utilisation |
Des outils comme FTK Imager présentent le flux d'allocation comme un fichier nommé $I30 dans chaque dossier. La même structure INDX sert à d'autres index NTFS ($Secure:$SDH et $SII, $ObjId:$O, $Reparse:$R), qui ne sont pas des index de noms de fichiers.
Ce que l'artefact prouve
- Un nom a existé dans ce dossier : chaque entrée active est un enfant présent ; chaque entrée de slack est un nom qui y a été indexé.
- Fichiers supprimés et renommés : les entrées de slack gardent l'ancien nom, les tailles et les horodatages de fichiers supprimés ou renommés, y compris ceux vidés d'un dossier de préparation ou de la Corbeille.
- Métadonnées à un instant donné : une entrée de slack conserve les horodatages qu'avait le fichier lors de la dernière écriture de l'entrée, parfois antérieurs à des modifications ultérieures.
- Il ne prouve pas qui a créé ou supprimé le fichier, quand la suppression a eu lieu (l'index ne garde aucune date de suppression), ni que le fichier a été ouvert ou exécuté.
Champs clés
| Champ | Signification |
|---|---|
| Référence de fichier | Entrée MFT et numéro de séquence de l'enfant ; une différence avec l'enregistrement actuel signifie qu'il décrit désormais un autre fichier |
| Référence du parent | Dossier propriétaire de l'index |
| Création / modification / changement d'enregistrement / accès | Quatre horodatages copiés dans l'entrée |
| Taille allouée, taille logique | Tailles au moment de l'écriture de l'entrée |
| Indicateurs | Attributs du fichier (dossier, caché, système, archive…) |
| Espace de noms | Nom Win32, DOS (8.3), Win32 et DOS, ou POSIX |
| Nom de fichier | Nom de l'enfant |
| Décalage / indicateur de slack | Position de l'entrée dans l'enregistrement INDX et provenance (slack ou non) |
Horodatages
| Horodatage | Positionné quand | Format | Pièges |
|---|---|---|---|
| Quatre horodatages (entrée active) | NTFS crée ou met à jour l'entrée | FILETIME, UTC | Bien que stockés dans une structure $FILE_NAME, les tests montrent qu'ils reflètent en général les valeurs $STANDARD_INFORMATION du fichier ; la date d'accès et la taille peuvent être en retard sur l'enregistrement MFT |
| Quatre horodatages (entrée de slack) | Dernière écriture de l'entrée avant son passage en slack | FILETIME, UTC | Un instantané, pas une date de suppression ; certaines entrées récupérées correspondaient aux valeurs $FILE_NAME plutôt qu'à $SI |
| Enregistrement INDX | Aucun champ de date propre | - | Utilisez les dates du dossier parent et le journal USN pour encadrer les changements |
Ces copies forment un troisième jeu d'horodatages à côté de $SI et $FN dans l'enregistrement du fichier (voir $SI et $FN), utile pour rechercher du timestomping.
Rétention et effacement
- Les entrées de slack survivent jusqu'à ce que NTFS réutilise cet espace de l'enregistrement INDX, en général quand de nouveaux noms sont ajoutés au même dossier. Les dossiers peu actifs conservent le plus longtemps les anciennes entrées.
- Les dossiers très peuplés (
System32, caches de navigateur) sont rééquilibrés en permanence : le slack y est vite écrasé. - Supprimer puis recréer un dossier lui donne un nouvel index ; les anciens clusters INDX passent en espace non alloué et restent carvables grâce à la signature
INDX. - Les outils d'effacement qui renomment avant de supprimer laissent en slack les noms aléatoires, pas les noms d'origine.
Collecte
- Cible KAPE : aucune.
FileSystemet$MFTne collectent pas les flux$I30; réalisez une image disque ou exportez les flux des dossiers visés. - Velociraptor (
Windows.Triage.Targets) : aucune. Utilisez l'artefactWindows.NTFS.I30avecAlsoUploadpour remonter les flux$I30bruts des dossiers choisis. - Commandes natives : aucune commande Windows ne lit le slack d'index. Passez par un outil NTFS brut (« Export files » de FTK Imager sur l'entrée
$I30, Velociraptor, image forensique) et notez les dossiers exportés.
Velociraptor artifact: Windows.NTFS.I30
DirectoryGlobs = C:\Users\*\Downloads
SlackOnly = true
AlsoUpload = true
Outils d'analyse
- MFTECmd (Eric Zimmerman) :
MFTECmd.exe -f E:\export\$I30 --csv E:\outliste les entrées actives et de slack avec une colonneFromSlacket les références MFT. - Velociraptor :
Windows.NTFS.I30carve les entrées (éventuellement le slack seul) directement sur un poste en fonctionnement. - INDXParse (Willi Ballenthin, open source) :
INDXParse.py -dinclut les entrées de slack, en CSV ou bodyfile. - Indx2Csv (Joakim Schicht, open source) : analyse les enregistrements INDX de
$I30, ainsi que les index$Oet$R. - dfir_ntfs (Maxim Suhanov) :
ntfs_parser --indx <image> <décalage> out.csvextrait les entrées$I30de tous les dossiers d'une image brute, avec chemins complets.
Conseils d'investigation
- Lancez l'artefact Velociraptor ou MFTECmd sur
Downloads,Desktop,%TEMP%,\ProgramData\et\Users\Public\: le slack y garde souvent le nom d'outils déposés et d'archives d'exfiltration. - Comparez la référence MFT d'une entrée de slack avec l'enregistrement actuel de la $MFT : même numéro d'entrée mais numéro de séquence supérieur prouve que l'enregistrement a été réutilisé après la suppression.
- Une entrée de slack dont les dates diffèrent du
$SIactuel du même fichier peut montrer les horodatages d'avant modification. - Rapprochez les noms trouvés en slack du journal USN (
FileDelete,RenameOldName) pour dater la suppression, et de $LogFile pour les changements très récents. - Pour l'historique de navigation dans les dossiers, combinez avec les ShellBags, qui gardent aussi des dossiers disparus.
Artefacts liés
- Table de fichiers maîtres ($MFT)Fiche $MFT : enregistrements FILE, horodatages $SI et $FN, données résidentes, entrées supprimées, numéros de séquence, timestomping et MFTECmd.
- Journal USN ($UsnJrnl:$J)Fiche journal USN : $UsnJrnl:$J et $Max, champs, indicateurs Reason, référence parent, taille par défaut, rotation, fsutil et analyse avec MFTECmd.
- $LogFile (journal de transactions NTFS)Fiche $LogFile : journal des métadonnées NTFS (enregistrement MFT 2), 64 Mo par défaut, opérations redo/undo, zone de redémarrage, rétention courte.
- CorbeilleFiche Corbeille : fichiers $I et $R de $Recycle.Bin, $I version 1 et 2, INFO2 sous XP, date de suppression, chemin d'origine, vidage et Maj+Suppr.
- ShellBagsFiche ShellBags : clés BagMRU et Bags dans UsrClass.dat et NTUSER.DAT, shell items, horodatages des dossiers, dossiers supprimés et USB, analyse avec SBECmd.
Termes du glossaire
- NTFSNTFS est le système de fichiers par défaut de Windows ; ses fichiers de métadonnées ($MFT, $LogFile, $UsnJrnl) sont des sources forensiques centrales.
- Slack de fichierL'espace inutilisé entre la fin des données d'un fichier et la fin de son dernier cluster alloué, qui peut contenir des restes d'anciens fichiers.
- $STANDARD_INFORMATION et $FILE_NAMELes deux attributs NTFS qui portent chacun un jeu d'horodatages MACB ; les comparer est une technique clé pour détecter le timestomping.
- Numéro de référence de fichier MFTL'identifiant NTFS d'un fichier sur 64 bits : numéro d'entrée MFT sur 48 bits et numéro de séquence sur 16 bits, modifié à chaque réutilisation.
- TimestompingUne technique anti-forensique qui modifie les horodatages d'un fichier pour masquer sa date de création, de modification ou d'accès.