Analyser des ShellBags en ligne avec un parseur navigateur
Pas à pas : analyser UsrClass.dat et NTUSER.DAT dans le navigateur, lire l'arborescence et la chronologie, trier les dossiers signalés, exporter en CSV ou JSON.
TL;DR. Ouvrez le ShellBags Parser, déposez UsrClass.dat et NTUSER.DAT (ou un ZIP KAPE/Velociraptor complet) et vous obtenez chaque dossier parcouru, en arborescence par compte et en chronologie, avec des signaux de tri pour les autres lecteurs, partages réseau, archives et dossiers modifiables par l'utilisateur, plus l'export CSV/JSON. Le parseur est écrit en Rust, compilé en WebAssembly et exécuté dans un Web Worker : les ruches ne quittent jamais votre machine. Il ne rejoue pas encore les journaux de transactions : rejouez d'abord les ruches sales.
On cherche « ShellBags Explorer en ligne » parce que les outils de référence sont des programmes Windows, et qu'une bonne partie du triage initial se fait sur un Mac, une station d'analyse Linux ou un portable verrouillé où installer des outils .NET demande un ticket. Ce guide déroule une session complète avec l'échantillon synthétique intégré au site, pour suivre sans données réelles.
Avant de commencer : collecter les bons fichiers
Il vous faut, par utilisateur :
| Fichier | Emplacement | Pourquoi |
|---|---|---|
UsrClass.dat | C:\Users\<user>\AppData\Local\Microsoft\Windows\ | Arborescence ShellBags principale depuis Vista |
NTUSER.DAT | C:\Users\<user>\ | Seconde arborescence BagMRU, et le nom d'utilisateur |
.LOG1 / .LOG2 de chaque ruche | À côté de chaque ruche | Écritures en attente d'une ruche sale |
Les deux ruches sont verrouillées tant que l'utilisateur est connecté. Utilisez la cible KAPE RegistryHivesUser, Velociraptor, FTK Imager ou une image disque. Détails et pièges dans où sont stockés les ShellBags et comment les collecter.
Si une ruche est sale (dirty), rejouez d'abord ses journaux avec rla.exe ou Registry Explorer (outils d'Eric Zimmerman). Le parseur détecte les ruches sales et le signale, mais lit le fichier principal tel quel.
Étape 1 : charger les ruches
Ouvrez la page d'accueil. Vous pouvez :
- déposer des fichiers isolés (
UsrClass.dat,NTUSER.DAT, les copies renommées fonctionnent), - choisir un dossier (par exemple un répertoire de sortie KAPE),
- déposer une collecte de triage ZIP issue de KAPE ou Velociraptor.
Ou cliquez sur Essayer un exemple pour charger deux ruches synthétiques tirées d'une intrusion fictive : le compte svc_backup décompresse une boîte à outils, parcourt un partage finance et copie des données sur une clé USB.
L'analyse s'exécute dans un Web Worker. Il n'existe aucun point d'envoi ; une fois la page chargée, elle fonctionne hors ligne.
Étape 2 : lire le rapport d'intégration
Avant de lire les résultats, vérifiez ce qui n'a pas été analysé. L'outil liste chaque fichier ignoré avec une raison :
- Rempli de zéros : la ruche était verrouillée lors de la copie et l'outil de copie a produit une image vide. Recollectez avec une méthode de copie brute.
- Journal de transactions : gardez-le à côté de la ruche et rejouez-le ; il n'est pas analysé seul.
- Une autre ruche (SYSTEM, SOFTWARE, Amcache...) : les ShellBags ne se trouvent que dans NTUSER.DAT et UsrClass.dat. Pour les autres ruches, voyez le parseur de registre ou le parseur Amcache.
- Pas une ruche de registre : les premiers octets sont affichés.
Les avertissements du parseur (valeurs illisibles, ruche sale) apparaissent dans un panneau dédié. Un avertissement de ruche sale signifie que des ShellBags récents peuvent manquer.
Étape 3 : identifier les comptes
Chaque ruche est attribuée à un compte : le SID de la clé racine de UsrClass (S-1-5-21-..._Classes), le nom d'utilisateur tiré des valeurs Shell Folders de NTUSER, ou le dossier Users\<nom>\ du chemin déposé. Avec une collecte de triage complète, vous obtenez un groupe par utilisateur. Dans l'échantillon, les deux ruches appartiennent à svc_backup.
Étape 4 : parcourir l'arborescence
La vue Arborescence suit la hiérarchie BagMRU, groupée par compte et par ruche. Colonnes : dossier, type d'élément shell, dernière interaction, dernière écriture de la clé, création, accès, MFT, signaux.
Cliquez sur une ligne pour ouvrir le panneau de détails :
| Champ | Signification |
|---|---|
| Nom / Nom 8.3 | Nom long issu du bloc d'extension, nom court issu de l'en-tête de l'item |
| Type d'élément shell | Racine, volume, répertoire, réseau, délégué, panneau de configuration, URI, variable |
| Clé BagMRU | Par exemple BagMRU\0\1\0\0, pour la retrouver dans Registry Explorer |
| Position MRU | Position dans le MRUListEx du parent (0 = la plus récente) |
| NodeSlot | Lien vers la clé de réglages Bags |
| Sous-dossiers | Nombre de sous-clés |
| Modification (élément shell) | Date de modification FAT issue de l'en-tête de l'item |
| Version du bloc d'extension | 3, 7, 8 ou 9 : indique la version de Windows qui l'a écrit |
| GUID | Pour les items racines et les dossiers connus |
| Élément shell brut | Hexadécimal, pour tout ce que le parseur ne décode pas |
Dans l'échantillon, dépliez My Computer\E: pour trouver exfil\finance_2026, et Network pour trouver \\FILESRV01\Finance avec Payroll et Board.
Étape 5 : trier avec les signaux et les filtres
Cochez Signalés uniquement. Les signaux sont des heuristiques simples et documentées :
- Autre lecteur (USB ?) : une lettre de lecteur autre que C: sous Poste de travail.
- Emplacement réseau : un chemin UNC ou un item réseau.
- Dans une archive : un chemin qui passe par
.zip,.7z,.rar,.cab,.iso,.tar,.gz,.vhd(x)et similaires. - Dossier modifiable par l'utilisateur :
AppData,Users\Public,ProgramData,Windows\Temp,$Recycle.Bin,PerfLogs,Temp.
Ils orientent, ils ne prouvent pas. Un lecteur D: peut être un second disque interne, un sous-dossier de ProgramData peut être un répertoire éditeur légitime. Le champ de filtre accepte chemins, dates et numéros d'entrée MFT : c'est ainsi que vous pivotez d'une entrée MFT vue dans le journal USN vers le dossier.
Étape 6 : passer à la chronologie
La vue Chronologie trie selon la meilleure date disponible : « Dernière interaction » quand l'entrée était première dans le MRUListEx de son parent, sinon « Dernière écriture de la clé ». Sachez laquelle vous regardez : la colonne vous le dit. La logique est détaillée dans les horodatages des ShellBags expliqués. Basculez entre UTC et heure locale avec le sélecteur ; rédigez vos rapports en UTC.
Pour l'échantillon, le récit se lit ainsi : tools.zip\x64 parcouru vers 10:07, ProgramData\Intel à 10:09, \\FILESRV01\Finance à partir de 10:31, Board à 10:36, E:\exfil\finance_2026 à 10:45, la Corbeille à 10:50 (tout le 2026-09-14 en UTC, fictif). La mise en situation d'investigation l'interprète.
Étape 7 : exporter et corroborer
Exportez en CSV ou en JSON. Les exports contiennent les lignes affichées : filtrez d'abord pour obtenir un tableau ciblé. Les cellules CSV qui commencent comme une formule de tableur sont neutralisées, car les noms de dossiers sont contrôlables par un attaquant.
Puis corroborez : fichiers LNK et Jump Lists pour les fichiers ouverts dans ces dossiers, journaux d'événements (parseur EVTX) pour les ouvertures de session et les connexions USB, et journal USN pour la création et la suppression de fichiers.
Ce que l'outil ne fait pas (encore)
- Rejouer les journaux de transactions
.LOG1/.LOG2. - Récupérer les clés BagMRU supprimées dans les cellules non allouées de la ruche.
- Décoder entièrement les items de périphériques MTP, de contenu ZIP (
0x52) et de résultats de recherche (conservés sous forme de nom approximatif plus hexadécimal).
Pour cela, utilisez en complément ShellBags Explorer / SBECmd et Registry Explorer.