Skip to content

Où sont stockés les ShellBags ? Emplacements et collecte

Emplacements des ShellBags dans UsrClass.dat et NTUSER.DAT, de Windows XP à 11, et collecte des ruches verrouillées avec leurs journaux de transactions.

Publié le 6 min de lecture

TL;DR. Sous Windows 7, 10 et 11, les ShellBags sont principalement dans UsrClass.dat, sous Local Settings\Software\Microsoft\Windows\Shell\BagMRU (et Bags), avec une seconde arborescence plus petite dans NTUSER.DAT sous Software\Microsoft\Windows\Shell\BagMRU. Windows XP n'utilisait que NTUSER.DAT, y compris ShellNoRoam. Les deux ruches sont verrouillées tant que l'utilisateur est connecté : collectez-les en copie brute, avec leurs fichiers .LOG1 et .LOG2, une paire par utilisateur.

« Où sont stockés les ShellBags ? » semble appeler une réponse d'une ligne. En pratique, la plupart des ShellBags manqués que j'ai vus en relecture venaient d'une mauvaise ruche collectée, d'une seule ruche sur deux, ou d'une ruche copiée sans ses journaux de transactions. Cet article sert de check-list.

Emplacements dans le registre par version de Windows

Version de WindowsRucheChemin de la clé dans la rucheVue en direct (regedit)
XP / Server 2003NTUSER.DATSoftware\Microsoft\Windows\ShellNoRoam\BagMRU et \BagsHKCU\Software\Microsoft\Windows\ShellNoRoam
XP / Server 2003NTUSER.DATSoftware\Microsoft\Windows\Shell\BagMRU et \BagsHKCU\Software\Microsoft\Windows\Shell
Vista, 7, 8, 8.1, 10, 11UsrClass.datLocal Settings\Software\Microsoft\Windows\Shell\BagMRU et \BagsHKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell
Vista, 7, 8, 8.1, 10, 11NTUSER.DATSoftware\Microsoft\Windows\Shell\BagMRU et \BagsHKCU\Software\Microsoft\Windows\Shell

Sources : la synthèse ShellBags de Magnet Forensics pour la séparation XP / Vista+, l'article de Chad Tilbury au SANS pour Windows 7, et l'artefact Velociraptor Windows.Forensics.Shellbags, qui interroge exactement les deux chemins modernes ci-dessus.

Deux remarques pratiques :

  • Le volume est dans UsrClass.dat. Sur les systèmes récents, l'arborescence de NTUSER.DAT est en général réduite (éléments du Bureau, quelques entrées réseau). Ne concluez pas « aucun ShellBag » à partir de NTUSER.DAT seul.
  • Wow6432Node. Certains parseurs, dont le ShellBags Parser, vérifient aussi Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRU dans UsrClass.dat, où des composants shell 32 bits peuvent écrire sur un Windows 64 bits. C'est en général vide ; la vérification ne coûte rien.

Les fichiers de ruche sur le disque

RucheChemin (Vista et suivants)Montée sous
UsrClass.datC:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.datHKEY_USERS\<SID>_Classes, fusionnée dans HKCU\Software\Classes
NTUSER.DATC:\Users\<user>\NTUSER.DATHKEY_USERS\<SID>, vue comme HKCU

Chaque ruche a ses journaux de transactions dans le même dossier : UsrClass.dat.LOG1, UsrClass.dat.LOG2, NTUSER.DAT.LOG1, NTUSER.DAT.LOG2. Microsoft décrit la relation ruche/fichier dans Registry Hives. AppData est masqué ; UsrClass.dat et NTUSER.DAT sont des fichiers système cachés.

La clé racine de UsrClass porte le SID de l'utilisateur suivi de _Classes (S-1-5-21-...-1104_Classes). C'est ainsi qu'un parseur attribue un UsrClass.dat isolé à un compte, même si le fichier a été renommé. NTUSER.DAT ne porte pas le SID dans le nom de sa racine, mais ses valeurs Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders pointent vers le profil (C:\Users\<nom>\Desktop), ce qui donne le nom d'utilisateur.

À l'intérieur des clés

...\Shell\BagMRU                 values: 0, 1, 2 (shell items), MRUListEx, NodeSlot, NodeSlots
...\Shell\BagMRU\0               children of item 0, same layout, recursively
...\Shell\Bags\<NodeSlot>\Shell  view settings for the folder whose NodeSlot = <n>
...\Shell\Bags\<NodeSlot>\ComDlg view settings saved from Open/Save dialogs
  • Les valeurs REG_BINARY numérotées contiennent chacune un shell item.
  • MRUListEx est une liste de numéros d'emplacement 32 bits, du plus récent au plus ancien, terminée par 0xFFFFFFFF.
  • NodeSlot relie une clé BagMRU à sa clé de réglages Bags\<n>.

Les articles sur le format des shell items et sur les horodatages vont plus loin.

Collecter les ruches

Les deux ruches sont ouvertes en exclusivité par Windows tant que le profil est chargé. copy échoue ; certains outils naïfs produisent un fichier de la bonne taille rempli de zéros. Les méthodes qui fonctionnent :

MéthodeQuandRemarques
KAPE avec la cible RegistryHivesUserTriage à chaudLecture brute ; collecte NTUSER.DAT, UsrClass.dat et leurs journaux pour chaque profil, en conservant la structure Users\<nom>\.
VelociraptorÀ chaud, à grande échelleCollectez les fichiers, ou exécutez Windows.Forensics.Shellbags côté serveur tout en gardant les ruches brutes.
FTK Imager (« Obtain Protected Files » ou export de fichier)Poste uniqueFonctionne sur système actif et sur image.
Cliché instantané de volume (VSS)À chaud, état antérieurDonne une seconde copie, plus ancienne, à comparer.
Image disqueÀ froidExport depuis l'image montée (parseur d'images disque pour un premier coup d'œil).

Check-list :

  1. Chaque profil. Parcourez C:\Users\*, comptes de service et d'administration compris. Dans les intrusions, les ShellBags intéressants appartiennent souvent à un compte avec lequel personne ne se connecte en interactif.
  2. Les deux ruches par utilisateur. NTUSER.DAT et UsrClass.dat.
  3. Les journaux à côté de chaque ruche. .LOG1 et .LOG2. Si les numéros de séquence du bloc de base diffèrent, la ruche est sale (dirty) et les écritures les plus récentes peuvent ne se trouver que dans les journaux. La spécification du format de fichier du registre de Maxim Suhanov documente le mécanisme.
  4. Conservez l'arborescence (Users\<nom>\...) ou renommez par utilisateur, pour que l'outil d'analyse distingue les comptes.
  5. Calculez l'empreinte de ce que vous avez collecté.

Ruches sales et rejeu des journaux

Une ruche copiée sur un système actif est souvent sale. Rejouez les journaux avant une analyse définitive, par exemple avec rla.exe d'Eric Zimmerman (ses outils) ou en chargeant la ruche dans Registry Explorer puis en enregistrant une copie propre. SBECmd rejoue les journaux par défaut.

Le ShellBags Parser détecte les ruches sales et vous avertit, mais ne rejoue pas encore les journaux. S'il signale une ruche sale, rejouez-la avec l'un des outils ci-dessus et déposez la ruche nettoyée. Il vous indique aussi quand un fichier déposé est un journal de transactions, une autre ruche, ou rempli de zéros (le signe habituel d'une copie de fichier verrouillé).

Aide-mémoire

  • Windows récent : UsrClass.dat → Local Settings\Software\Microsoft\Windows\Shell\BagMRU, plus NTUSER.DAT → Software\Microsoft\Windows\Shell\BagMRU.
  • XP : NTUSER.DAT → Software\Microsoft\Windows\ShellNoRoam\BagMRU et Shell\BagMRU.
  • Collecte brute, avec .LOG1 / .LOG2, tous les profils, les deux ruches.

FAQ

Peut-on copier UsrClass.dat sur un système en fonctionnement ?

Pas avec une copie de fichier classique : la ruche est verrouillée tant que le profil de l'utilisateur est chargé. Utilisez un outil de copie brute comme KAPE, Velociraptor ou FTK Imager, un cliché instantané de volume ou une image disque.

Faut-il récupérer les fichiers .LOG1 et .LOG2 ?

Oui. Si la ruche est sale, les écritures récentes se trouvent encore dans les journaux de transactions. Collectez-les à côté de la ruche et rejouez-les avant de vous fier aux ShellBags les plus récents.

Articles liés

Articles liés