Aller au contenu

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

Pré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 WindowsEmplacementRemarques
XP à 11 (tout volume NTFS)$INDEX_ROOT:$I30 dans l'enregistrement MFT du dossierRésident ; petits dossiers uniquement ; slack limité
XP à 11$INDEX_ALLOCATION:$I30 du dossierEnregistrements INDX (signature INDX), où se trouvent les entrées de slack
XP à 11$BITMAP:$I30 du dossierEnregistrements 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

ChampSignification
Référence de fichierEntré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 parentDossier propriétaire de l'index
Création / modification / changement d'enregistrement / accèsQuatre horodatages copiés dans l'entrée
Taille allouée, taille logiqueTailles au moment de l'écriture de l'entrée
IndicateursAttributs du fichier (dossier, caché, système, archive…)
Espace de nomsNom Win32, DOS (8.3), Win32 et DOS, ou POSIX
Nom de fichierNom de l'enfant
Décalage / indicateur de slackPosition de l'entrée dans l'enregistrement INDX et provenance (slack ou non)

Horodatages

HorodatagePositionné quandFormatPièges
Quatre horodatages (entrée active)NTFS crée ou met à jour l'entréeFILETIME, UTCBien 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 slackFILETIME, UTCUn instantané, pas une date de suppression ; certaines entrées récupérées correspondaient aux valeurs $FILE_NAME plutôt qu'à $SI
Enregistrement INDXAucun 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. FileSystem et $MFT ne 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'artefact Windows.NTFS.I30 avec AlsoUpload pour remonter les flux $I30 bruts 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:\out liste les entrées actives et de slack avec une colonne FromSlack et les références MFT.
  • Velociraptor : Windows.NTFS.I30 carve les entrées (éventuellement le slack seul) directement sur un poste en fonctionnement.
  • INDXParse (Willi Ballenthin, open source) : INDXParse.py -d inclut les entrées de slack, en CSV ou bodyfile.
  • Indx2Csv (Joakim Schicht, open source) : analyse les enregistrements INDX de $I30, ainsi que les index $O et $R.
  • dfir_ntfs (Maxim Suhanov) : ntfs_parser --indx <image> <décalage> out.csv extrait les entrées $I30 de 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 $SI actuel 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

Termes du glossaire

Tous les artefacts sur une page : aide-mémoire