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.
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 Windows | Ruche | Chemin de la clé dans la ruche | Vue en direct (regedit) |
|---|---|---|---|
| XP / Server 2003 | NTUSER.DAT | Software\Microsoft\Windows\ShellNoRoam\BagMRU et \Bags | HKCU\Software\Microsoft\Windows\ShellNoRoam |
| XP / Server 2003 | NTUSER.DAT | Software\Microsoft\Windows\Shell\BagMRU et \Bags | HKCU\Software\Microsoft\Windows\Shell |
| Vista, 7, 8, 8.1, 10, 11 | UsrClass.dat | Local Settings\Software\Microsoft\Windows\Shell\BagMRU et \Bags | HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell |
| Vista, 7, 8, 8.1, 10, 11 | NTUSER.DAT | Software\Microsoft\Windows\Shell\BagMRU et \Bags | HKCU\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 aussiWow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRUdans 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
| Ruche | Chemin (Vista et suivants) | Montée sous |
|---|---|---|
| UsrClass.dat | C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat | HKEY_USERS\<SID>_Classes, fusionnée dans HKCU\Software\Classes |
| NTUSER.DAT | C:\Users\<user>\NTUSER.DAT | HKEY_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_BINARYnumérotées contiennent chacune un shell item. MRUListExest une liste de numéros d'emplacement 32 bits, du plus récent au plus ancien, terminée par0xFFFFFFFF.NodeSlotrelie une clé BagMRU à sa clé de réglagesBags\<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éthode | Quand | Remarques |
|---|---|---|
KAPE avec la cible RegistryHivesUser | Triage à chaud | Lecture brute ; collecte NTUSER.DAT, UsrClass.dat et leurs journaux pour chaque profil, en conservant la structure Users\<nom>\. |
| Velociraptor | À chaud, à grande échelle | Collectez 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 unique | Fonctionne sur système actif et sur image. |
| Cliché instantané de volume (VSS) | À chaud, état antérieur | Donne une seconde copie, plus ancienne, à comparer. |
| Image disque | À froid | Export depuis l'image montée (parseur d'images disque pour un premier coup d'œil). |
Check-list :
- 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. - Les deux ruches par utilisateur. NTUSER.DAT et UsrClass.dat.
- Les journaux à côté de chaque ruche.
.LOG1et.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. - Conservez l'arborescence (
Users\<nom>\...) ou renommez par utilisateur, pour que l'outil d'analyse distingue les comptes. - 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, plusNTUSER.DAT→Software\Microsoft\Windows\Shell\BagMRU. - XP :
NTUSER.DAT→Software\Microsoft\Windows\ShellNoRoam\BagMRUetShell\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.