Skip to content

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.

Publié le 7 min de lecture

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

LimitePourquoiQuoi utiliser à la place
Accès aux fichiersSeuls les dossiers sont enregistrésFichiers LNK, Jump Lists, RecentDocs
Activité en console / scriptcmd, PowerShell, scripts et API ne passent jamais par l'espace de noms du shellArtefacts d'exécution (Prefetch, Amcache), journaux d'événements PowerShell et Sécurité, journal USN
Heure exacte de visite pour la plupart des entréesSeul 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 visitesAucun compteur n'existeJump Lists (nombre d'accès sur les versions récentes)
Identité du périphériqueUn item volume ne contient qu'une lettre de lecteurHistorique des périphériques de la ruche SYSTEM, numéros de série de volume des LNK
Qui était au clavierLa 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éthodeEffetTraces typiques
Suppression manuelle (regedit, reg delete) de BagMRU/BagsSupprime des clés sous HKCU\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell et/ou HKCU\Software\Microsoft\Windows\ShellArborescence minuscule avec un LastWrite racine récent ; cellules supprimées dans la ruche
PrivaZerSelon 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èglesArtefacts d'exécution de CCleaner, fichier de règles sur le disque
Réinitialisation / nouveau profilUsrClass.dat neufDate de création du profil, restes de l'ancien dossier de profil
Manipulation des datesDes outils comme SetRegTime peuvent réécrire le LastWrite des clés via la classe documentée KEY_WRITE_TIME_INFORMATIONDates 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 Bags orphelines. Chaque entrée BagMRU a un NodeSlot qui pointe vers Bags\<n>. De nombreuses clés Bags\<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és Bags dans Registry Explorer et comparez.
  • MRUListEx qui référence des valeurs absentes. Si le MRUListEx d'un parent cite le slot 3 mais qu'il n'existe pas de valeur 3, 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 BagMRU réé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/.LOG2 peuvent 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.DAT possè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.

Articles liés

Articles liés