Limites et anti-forensique des ShellBags : les pièges
Ce que les ShellBags ne prouvent pas, ce qui n'en crée jamais, comment PrivaZer ou CCleaner les effacent, et les traces laissées par la suppression.
TL;DR. Les ShellBags prouvent une navigation dans le shell Windows par un compte, rien de plus. Ils sont aveugles aux accès aux fichiers par console, script ou API, leurs dates demandent une interprétation, Windows plafonne le nombre de dossiers mémorisés, et un utilisateur (ou un malware) peut les effacer par une modification du registre ou un nettoyeur. La suppression laisse rarement zéro trace : cherchez des clés Bags orphelines, des MRUListEx qui référencent des valeurs absentes, des clés supprimées dans les cellules non allouées de la ruche, des copies plus anciennes dans les journaux de transactions et les clichés instantanés, et les traces d'exécution du nettoyeur lui-même.
J'ai vu des ShellBags faire gagner des dossiers et je les ai vus mal utilisés dans des rapports. L'échec vient presque toujours de la même erreur : traiter l'artefact comme un journal complet et infalsifiable des accès aux dossiers. Il n'est ni l'un ni l'autre.
Ce que les ShellBags ne peuvent pas vous dire
| Limite | Pourquoi | Quoi utiliser à la place |
|---|---|---|
| Accès aux fichiers | Seuls les dossiers sont enregistrés | Fichiers LNK, Jump Lists, RecentDocs |
| Activité en console / script | cmd, PowerShell, scripts et API ne passent jamais par l'espace de noms du shell | Artefacts d'exécution (Prefetch, Amcache), journaux d'événements PowerShell et Sécurité, journal USN |
| Heure exacte de visite pour la plupart des entrées | Seul l'enfant en tête du MRU de chaque dossier peut être rattaché à une écriture de clé | Corroborer ; voir les horodatages des ShellBags expliqués |
| Nombre de visites | Aucun compteur n'existe | Jump Lists (nombre d'accès sur les versions récentes) |
| Identité du périphérique | Un item volume ne contient qu'une lettre de lecteur | Historique des périphériques de la ruche SYSTEM, numéros de série de volume des LNK |
| Qui était au clavier | La ruche appartient à un compte | Événements d'ouverture de session, artefacts RDP, contexte |
Ce qui ne crée jamais de ShellBag
dir, cd, robocopy, xcopy, Get-ChildItem, Compress-Archive, rclone, la plupart des outils d'administration à distance, et les malwares qui énumèrent des fichiers via des API. La synthèse 2026 de Cyber Triage fait le même constat pour les accès en ligne de commande et via navigateur. Un attaquant qui n'ouvre jamais l'Explorateur ne laisse aucun ShellBag.
Limites de conservation
Windows ne mémorise les réglages d'affichage que pour un nombre limité de dossiers. La valeur BagMRU Size, dont la valeur par défaut est couramment donnée à 5 000 depuis Vista (voir l'article de Winaero), relève ce plafond. Sur un profil très utilisé, ne supposez pas que la navigation la plus ancienne est toujours là.
Limites des parseurs
Les shell items ne sont pas documentés et sont extensibles. Tous les parseurs, y compris le ShellBags Parser, ne décodent certains items que partiellement (périphériques MTP, contenu d'archives, résultats de recherche). Inconnu ne veut pas dire suspect. Gardez l'hexadécimal brut et recoupez avec un second outil avant de bâtir sur une entrée étrange (comparatif d'outils).
État de la ruche
Une ruche copiée sur un système actif est souvent sale (dirty) : les écritures les plus récentes sont dans .LOG1/.LOG2. Des ShellBags récents manquants relèvent plus souvent d'un problème de collecte que d'anti-forensique. Rejouez d'abord les journaux (la spécification du format de registre de Suhanov décrit le mécanisme).
Comment les ShellBags sont supprimés
| Méthode | Effet | Traces typiques |
|---|---|---|
Suppression manuelle (regedit, reg delete) de BagMRU/Bags | Supprime des clés sous HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell et/ou HKCU\Software\Microsoft\Windows\Shell | Arborescence minuscule avec un LastWrite racine récent ; cellules supprimées dans la ruche |
| PrivaZer | Selon sa documentation, supprime la piste BagMRU ; conserve les réglages Bags sauf si « tout supprimer » est choisi ; peut ne cibler que les « traces de dossiers supprimés » | Clés Bags\<n> orphelines ; entrées de dossiers existants conservées alors que les dossiers supprimés disparaissent ; artefacts d'exécution de PrivaZer |
| CCleaner avec des règles communautaires (Winapp2) | Supprime les clés listées dans le fichier de règles | Artefacts d'exécution de CCleaner, fichier de règles sur le disque |
| Réinitialisation / nouveau profil | UsrClass.dat neuf | Date de création du profil, restes de l'ancien dossier de profil |
| Manipulation des dates | Des outils comme SetRegTime peuvent réécrire le LastWrite des clés via la classe documentée KEY_WRITE_TIME_INFORMATION | Dates de clés incohérentes avec les dates embarquées, l'ordre parent/enfant et les autres artefacts |
Détecter un nettoyage
1. Incohérences structurelles
- Clés
Bagsorphelines. Chaque entrée BagMRU a unNodeSlotqui pointe versBags\<n>. De nombreuses clésBags\<n>sans entrée BagMRU qui pointe vers elles correspondent à un effacement limité à BagMRU. Le ShellBags Parser affiche le NodeSlot de chaque entrée ; listez les sous-clésBagsdans Registry Explorer et comparez. MRUListExqui référence des valeurs absentes. Si leMRUListExd'un parent cite le slot 3 mais qu'il n'existe pas de valeur3, quelque chose a supprimé la valeur sans réécrire la liste.- NodeSlots élevés, peu d'entrées. Les slots sont alloués à mesure que les dossiers reçoivent un état d'affichage. Un profil dont les NodeSlots se comptent en milliers mais dont BagMRU ne contient qu'une poignée d'entrées a peut-être perdu de l'historique (une heuristique ; confirmez avec les autres vérifications).
- LastWrite racine récent sur une arborescence presque vide. La clé racine
BagMRUréécrite quelques minutes avant la collecte, sur un profil par ailleurs actif, mérite une question.
2. Copies récupérables
- Cellules non allouées de la ruche. Les clés et valeurs supprimées restent souvent dans des cellules libres jusqu'à leur réécriture. Registry Explorer affiche les clés supprimées récupérées ; le ShellBags Parser ne les récupère pas encore.
- Journaux de transactions.
UsrClass.dat.LOG1/.LOG2peuvent contenir des états plus anciens de certaines pages. - Clichés instantanés de volume et sauvegardes contiennent souvent un UsrClass.dat plus ancien. Analysez les deux et comparez.
- Autres ruches.
NTUSER.DATpossède sa propre arborescence BagMRU, que certains nettoyeurs ignorent.
3. Traces du nettoyeur
Un nettoyeur est un programme. Il apparaît dans Prefetch, Amcache, ShimCache, SRUM et BAM comme n'importe quel autre. PrivaZer ou CCleaner exécuté peu avant une investigation prévisible est une constatation en soi.
4. Lacunes entre artefacts
Des fichiers LNK, Jump Lists et RecentDocs qui pointent vers des dossiers sans ShellBags, ou un historique de périphérique USB pour une lettre de lecteur sans aucun ShellBag sur cette lettre, suggèrent des ShellBags incomplets. Des lacunes cohérentes sur plusieurs artefacts orientent vers un nettoyeur ou un autre compte.
Rédiger de façon responsable
- Énoncez ce que montrent les ShellBags, pour quel compte, avec quel type de date.
- N'inférez jamais un accès à un fichier à partir d'un ShellBag.
- N'inférez jamais l'innocence d'une absence.
- En cas de suspicion de nettoyage, listez les incohérences précises, pas une conclusion.
FAQ
Peut-on supprimer les ShellBags ?
Oui. Tout processus exécuté sous le compte de l'utilisateur peut supprimer les clés BagMRU, et des nettoyeurs comme PrivaZer, ou CCleaner avec des règles communautaires, proposent de les effacer. Des traces subsistent souvent : clés Bags orphelines, listes MRU incohérentes, cellules non allouées de la ruche, journaux de transactions, clichés instantanés et traces d'exécution du nettoyeur.
Une arborescence ShellBags vide signifie-t-elle que l'utilisateur n'a rien fait ?
Non. L'activité en console et par script ne crée jamais de ShellBags, et une arborescence vide ou minuscule sur un profil actif est en soi une raison de rechercher un nettoyage ou une réinitialisation du profil.