Skip to content

ShellBags : le guide complet de l'analyse forensique

Ce que sont les ShellBags, où Windows les stocke, ce que prouvent BagMRU et les shell items, comment lire leurs horodatages et où l'artefact trompe l'analyste.

Publié le 9 min de lecture

TL;DR. Les ShellBags sont des clés de registre dans lesquelles l'Explorateur mémorise l'affichage de chaque dossier. Pour cela, il tient par utilisateur une arborescence (BagMRU) avec une entrée par dossier parcouru : dossiers locaux, clés USB, partages réseau, intérieur de fichiers ZIP, dossiers qui n'existent plus. Chaque entrée est un shell item binaire qui peut contenir le nom du dossier, son numéro d'entrée MFT et de séquence, et ses dates de création, modification et accès. Les ShellBags prouvent la navigation, pas l'accès aux fichiers. Leurs horodatages demandent de la rigueur. Sous Windows 7 et suivants, analysez UsrClass.dat et NTUSER.DAT ensemble.

Les ShellBags sont l'artefact que je sors quand la question est « cette personne a-t-elle déjà regardé ce dossier ? ». Ils y répondent pour un support amovible jamais saisi, pour un partage que le suspect jure n'avoir jamais ouvert, pour un répertoire de staging que l'attaquant a supprimé avant de partir. Ce sont aussi l'un des artefacts les plus faciles à sur-interpréter. Ce guide couvre les deux faces.

Ce que sont les ShellBags, et pourquoi Windows les conserve

L'Explorateur Windows mémorise les préférences d'affichage par dossier : taille des icônes, colonne de tri, vue détails ou liste, position de la fenêtre. Microsoft n'a jamais documenté publiquement le format, mais le mécanisme a été étudié en profondeur, à commencer par l'article de Chad Tilbury pour le SANS sur les ShellBags de Windows 7 (2011) et le livre blanc SANS de Vincent Lo, « Windows ShellBag Forensics in Depth » (2014).

Pour associer des réglages à un dossier, l'Explorateur doit l'identifier. Il le fait avec une liste d'identifiants de shell items, la structure que le shell utilise partout pour désigner un objet (voir la documentation Microsoft sur ITEMIDLIST et SHITEMID). L'effet de bord fait toute la valeur de l'artefact : un dossier parcouru obtient une entrée dans le registre de l'utilisateur, et cette entrée reste après la disparition du dossier, du lecteur ou du partage.

Deux structures fonctionnent ensemble :

StructureContenuUsage forensique
BagMRUUne arborescence de clés calquée sur la hiérarchie des dossiers. Chaque clé a des valeurs binaires numérotées (un shell item par sous-dossier), un ordre MRUListEx et un NodeSlot.Reconstruit les chemins parcourus, l'ordre d'utilisation récente et des horodatages.
BagsDes clés numérotées, une par NodeSlot, qui contiennent les réglages d'affichage (sous-clés Shell / ComDlg).Montre qu'un dossier a eu un état d'affichage enregistré ; rarement nécessaire pour reconstruire les chemins.

Où ils se trouvent

Sous Windows 7, 10 et 11, l'essentiel des données est dans le UsrClass.dat de l'utilisateur, avec une seconde arborescence, plus petite, dans NTUSER.DAT :

RucheFichier sur disqueClé
UsrClass.datC:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.datLocal Settings\Software\Microsoft\Windows\Shell\BagMRU et ...\Shell\Bags
NTUSER.DATC:\Users\<user>\NTUSER.DATSoftware\Microsoft\Windows\Shell\BagMRU et ...\Shell\Bags
NTUSER.DAT (Windows XP)C:\Documents and Settings\<user>\NTUSER.DATSoftware\Microsoft\Windows\ShellNoRoam\BagMRU (et Shell\BagMRU)

Le détail par version, y compris la variante Wow6432Node et la collecte de ruches verrouillées, se trouve dans où sont stockés les ShellBags et comment les collecter.

Comment un chemin est reconstruit

La clé BagMRU est la racine. Ses valeurs 0, 1, 2... sont des shell items pour les objets de premier niveau de l'espace de noms : typiquement Poste de travail, Réseau, le dossier du profil, la Corbeille. Chaque valeur numérotée a une sous-clé du même numéro qui décrit ses enfants, et ainsi de suite. En joignant les noms des items le long d'une branche, on obtient le chemin absolu. Exemple tiré de l'échantillon synthétique du site (données fictives) :

BagMRU\0          -> My Computer          (root folder item, GUID 20D04FE0-...)
BagMRU\0\1        -> E:                   (volume item)
BagMRU\0\1\0      -> exfil                (file entry item, directory)
BagMRU\0\1\0\0    -> finance_2026         (file entry item, directory)
                  => My Computer\E:\exfil\finance_2026
Schéma : clés BagMRU imbriquées contenant les shell items My Computer, E:, exfil et finance_2026, assemblés en un chemin complet

Le type d'item compte. Un item racine est identifié par un GUID de dossier connu, un item volume porte une lettre de lecteur, un item « file entry » porte le nom 8.3, le nom long et généralement une référence de fichier MFT. Un item réseau contient une chaîne UNC comme \\FILESRV01\Finance. La structure octet par octet est détaillée dans le format des shell items expliqué.

Ce qu'une entrée ShellBags vous apprend

Pour chaque dossier, un bon parseur vous donne :

  • Le chemin absolu au moment de la navigation, avec lettre de lecteur ou chemin UNC.
  • Le type de shell item : volume, répertoire, emplacement réseau, élément du Panneau de configuration, dossier connu, contenu d'archive.
  • Des métadonnées du système de fichiers issues de l'entrée de répertoire (le bloc d'extension 0xBEEF0004) : dates de création, modification et accès au format FAT, à 2 secondes près, et sur NTFS le numéro d'entrée MFT et de séquence.
  • Des métadonnées de registre : le LastWrite de la clé, la position de l'entrée dans le MRUListEx du parent, le NodeSlot et le nombre de sous-dossiers.

Les dates embarquées décrivent le dossier lui-même, capturé au moment où le shell item a été créé. D'après les tests de 4n6k, elles ne sont pas mises à jour lors des visites suivantes. Les dates de registre décrivent le moment où les clés BagMRU ont changé. Confondre les deux est l'erreur la plus fréquente dans les rapports sur les ShellBags. L'article sur les horodatages des ShellBags déroule la logique sur un exemple concret.

Ce qui crée un ShellBag

La navigation dans les dossiers via le shell Windows. Cela inclut les fenêtres de l'Explorateur et, d'après les tests résumés par 4n6k, les boîtes de dialogue Ouvrir/Enregistrer courantes. La même source note que sous Windows 7, sélectionner un dossier peut suffire : il n'est pas toujours nécessaire d'y entrer. Chaque parent d'un chemin parcouru obtient aussi sa propre entrée, puisque l'arborescence doit le contenir.

Ce qui n'en crée pas : cd et dir dans une invite de commandes, Get-ChildItem en PowerShell, les scripts, la plupart des gestionnaires de fichiers tiers, et les outils distants qui énumèrent des fichiers via des API plutôt que via le shell. Un attaquant qui prépare ses données depuis une console ne laisse aucun ShellBag. Un attaquant qui ouvre l'Explorateur sur un partage, si.

Valeur en investigation

Voici les questions auxquelles les ShellBags répondent bien :

  1. Supports amovibles. Un dossier sous E:\ ou F:\ prouve la navigation sur un volume peut-être disparu depuis longtemps. Croisez la lettre de lecteur avec l'historique des périphériques USB de la ruche SYSTEM et les journaux d'événements (le parseur EVTX et le parseur de registre les couvrent).
  2. Partages réseau. Les items d'emplacement réseau conservent les noms \\serveur\partage. Un compte de service qui parcourt \\FILESRV01\Finance\Payroll est une constatation en soi.
  3. Archives. L'Explorateur parcourt l'intérieur des fichiers ZIP comme des dossiers, et naviguer dans l'un d'eux laisse des entrées sous l'item de l'archive. Windows 11 ouvre aussi nativement les formats RAR, 7z et tar depuis la mise à jour d'octobre 2023 KB5031455 ; les traces qu'ils laissent sont moins documentées, testez donc sur votre build cible. Voir ShellBags et fichiers ZIP.
  4. Dossiers supprimés. L'entrée survit au répertoire. Le numéro d'entrée MFT et de séquence permet de vérifier si l'enregistrement a été réutilisé. Voir retrouver des dossiers supprimés grâce aux ShellBags.
  5. Connaissance. Dans les affaires internes, les ShellBags peuvent montrer qu'un utilisateur a navigué jusqu'au dossier contenant les fichiers litigieux, ce qui compte quand quelqu'un affirme ne pas connaître l'existence du dossier.

Là où les ShellBags induisent en erreur

  • Naviguer n'est pas ouvrir un fichier. Un ShellBag prouve que le dossier a été parcouru ou sélectionné, pas que payroll.xlsx qu'il contient a été ouvert. Pour les ouvertures de fichiers, regardez les fichiers LNK, les Jump Lists et RecentDocs. La comparaison est dans ShellBags vs fichiers LNK, Jump Lists et RecentDocs.
  • Le LastWrite d'une clé n'est pas « dernière ouverture ». Le LastWrite change quand les enfants de la clé changent. Seul l'enfant en première position du MRUListEx du parent peut être rattaché au LastWrite du parent.
  • Les dates embarquées ne sont pas des dates d'accès utilisateur. Ce sont les dates du dossier dans le système de fichiers, telles qu'elles étaient lors du premier enregistrement de l'item.
  • L'absence est une preuve faible. L'activité en console, les outils de nettoyage, les réinitialisations de profil et les ruches copiées sans leurs journaux de transactions suppriment ou masquent des entrées. Voir limites et anti-forensique des ShellBags.

Un workflow minimal

  1. Collectez NTUSER.DAT et UsrClass.dat de chaque utilisateur avec leurs fichiers .LOG1/.LOG2, par une méthode de copie brute (KAPE, Velociraptor, FTK Imager ou image disque).
  2. Rejouez les journaux de transactions si la ruche est sale (dirty).
  3. Analysez les deux ruches en conservant l'attribution au compte (SID depuis la clé racine de UsrClass, nom d'utilisateur depuis NTUSER).
  4. Triez : autres lettres de lecteur, chemins UNC, chemins d'archives, dossiers de staging accessibles en écriture (ProgramData, AppData, Temp, Users\Public).
  5. Construisez une chronologie à partir des dates « dernière interaction » dérivées du MRU, puis recoupez avec le journal USN, les LNK et les journaux d'événements avant d'affirmer quoi que ce soit dans un rapport.

Les étapes 3 et 4 se font dans votre navigateur avec le ShellBags Parser : déposez les ruches, un dossier ou un ZIP KAPE, et il reconstruit l'arborescence, signale les autres lecteurs, emplacements réseau, archives et dossiers accessibles en écriture, et exporte en CSV ou JSON. Rien n'est envoyé. Le guide pas à pas déroule une session avec l'échantillon intégré.

Pour aller plus loin

FAQ

Que prouvent les ShellBags ?

Qu'un compte utilisateur donné a navigué vers un dossier, ou l'a sélectionné, dans l'Explorateur ou dans une boîte de dialogue Ouvrir/Enregistrer. Ils ne prouvent pas qu'un fichier de ce dossier a été ouvert.

Les ShellBags survivent-ils à la suppression du dossier ou au retrait de la clé USB ?

Oui. L'entrée BagMRU reste dans la ruche de l'utilisateur jusqu'à ce que Windows ou un outil de nettoyage la supprime : les dossiers sur des clés débranchées, des partages déconnectés ou des répertoires supprimés restent visibles.

Quelle ruche analyser, NTUSER.DAT ou UsrClass.dat ?

Les deux. Depuis Windows Vista et 7, la plupart des entrées sont dans UsrClass.dat, mais NTUSER.DAT conserve sa propre arborescence BagMRU, plus petite. Analysez la paire ensemble pour chaque utilisateur.

Articles liés

Articles liés