Aller au contenu

06 · Activité utilisateur

Activité utilisateur : ShellBags, fichiers LNK et Jump Lists

Prouver quels fichiers et dossiers un utilisateur Windows a ouverts, et quand : ShellBags, LNK, Jump Lists, clés MRU, Trust Records Office et Timeline.

Publié le 12 min de lecture

Ce guide vous permet de démontrer qu'un utilisateur Windows donné a ouvert un fichier ou parcouru un dossier, et à quel moment. Vous verrez ce que chaque artefact d'activité utilisateur enregistre réellement, quels horodatages sont fiables, et comment croiser ShellBags, fichiers LNK, Jump Lists et clés MRU du registre pour construire un récit solide : qui a ouvert quoi, et quand.

Pourquoi il faut plusieurs artefacts

Les artefacts d'exécution répondent à la question « ce programme a-t-il tourné ? » (voir preuves d'exécution). Les artefacts d'activité utilisateur répondent à une autre question : cette personne a-t-elle manipulé ces données ? Aucune source n'y répond seule. Certaines enregistrent des dossiers, d'autres des fichiers, d'autres l'application utilisée, et la plupart ne gardent que la première et la dernière occurrence. Tout l'enjeu est de savoir ce que prouve chacune, puis de les empiler jusqu'à combler les trous.

Vue d'ensemble avant d'entrer dans le détail :

ArtefactEmplacementProuveHorodatage clé
ShellBagsUsrClass.dat, NTUSER.DATDossier parcouru (local, USB, réseau, ZIP, téléphone)LastWrite de la clé, pour l'enfant le plus récent uniquement
Fichiers LNK%APPDATA%\Microsoft\Windows\Recent\Fichier ou dossier ouvert via le shellCréation / modification du LNK (première / dernière ouverture de ce nom)
Jump ListsRecent\AutomaticDestinations\, CustomDestinations\Fichier ouvert avec une application donnéeDernier accès DestList par entrée
RecentDocsNTUSER.DAT\...\Explorer\RecentDocsNoms de fichiers ouverts, dans l'ordre MRULastWrite = élément le plus récent
OpenSave / LastVisited MRUNTUSER.DAT\...\Explorer\ComDlg32Fichier choisi dans une boîte ouvrir/enregistrer, et par quel programmeLastWrite = élément le plus récent
TypedPaths / WordWheelQueryNTUSER.DAT\...\ExplorerChemins saisis et termes recherchés dans l'ExplorateurLastWrite = élément le plus récent
MRU Office et Trust RecordsNTUSER.DAT\Software\Microsoft\Office\<ver>Document ouvert dans Office ; modification ou macros activéesFILETIME par entrée
Windows TimelineActivitiesCache.dbApplications au premier plan, fichiers et URL ouverts (Windows 10)Début / fin par activité
Thumbcache%LOCALAPPDATA%\Microsoft\Windows\Explorer\Un fichier a été affiché en miniatureAucun fiable par entrée

ShellBags : la preuve de navigation dans les dossiers

L'Explorateur mémorise les préférences d'affichage de chaque dossier ouvert et, pour cela, enregistre le chemin sous forme d'arborescence de shell items. Depuis Vista, l'essentiel se trouve dans UsrClass.dat sous Local Settings\Software\Microsoft\Windows\Shell\BagMRU et \Bags, avec quelques entrées dans NTUSER.DAT sous Software\Microsoft\Windows\Shell. Sous XP, elles sont dans NTUSER.DAT sous Software\Microsoft\Windows\ShellNoRoam et Shell.

Leur intérêt : elles survivent au dossier. Les entrées restent pour :

  • les répertoires supprimés, y compris ceux que le suspect a créés puis effacés ;
  • les supports amovibles débranchés, identifiés par lettre de lecteur et noms de dossiers ;
  • les partages réseau (\\serveur\partage\chemin), partages administratifs compris ;
  • les archives ZIP ouvertes comme des dossiers, les téléphones et appareils photo MTP, les pages du Panneau de configuration.

Ce qu'elles ne donnent pas, c'est une heure d'accès fiable pour chaque dossier. Le LastWrite de la clé BagMRU concerne l'enfant placé en tête de MRUListEx : il date le sous-dossier le plus récemment consulté à ce niveau, pas tous ses voisins. Les shell items de type fichier embarquent aussi les dates de création, modification et accès du dossier, au format DOS avec une résolution de 2 secondes, mais elles décrivent le dossier au moment où l'item a été construit, pas la visite de l'utilisateur.

Analysez toujours la ruche avec ses journaux de transactions .LOG1 et .LOG2 : sur un système collecté à chaud ou utilisé récemment, la navigation récente n'existe souvent que dans ces journaux.

# Analyser tous les UsrClass.dat / NTUSER.DAT d'un dossier Users collecté
SBECmd.exe -d E:\case\C\Users --csv E:\out\shellbags --dedupe

# Système en direct, utilisateur courant uniquement
SBECmd.exe -l --csv E:\out\shellbags

ShellBags Explorer présente les mêmes données sous forme d'arbre interactif, pratique pour lire la hiérarchie des chemins. Pour une ruche isolée, le ShellBags Parser la décode directement dans le navigateur.

Fichiers LNK : la preuve qu'un fichier a été ouvert

À chaque ouverture de fichier via le shell, l'Explorateur crée ou met à jour un raccourci dans C:\Users\<user>\AppData\Roaming\Microsoft\Windows\Recent\, nommé d'après la cible (budget.xlsx.lnk). Sur les versions récentes, le dossier parent reçoit aussi son propre LNK.

Chaque LNK est un instantané de la cible au moment de son écriture :

  • Horodatages MAC de la cible dans l'en-tête : les dates de création, d'accès et de modification propres au fichier, au format FILETIME. Elles décrivent le fichier, pas l'utilisateur.
  • LinkInfo : chemin local, type de lecteur (fixe, amovible, réseau, CD-ROM), numéro de série de volume et nom de volume, ou nom du partage UNC pour une cible réseau.
  • LinkTargetIDList : les shell items du chemin, avec les références MFT sur NTFS.
  • TrackerDataBlock : le nom NetBIOS de la machine où se trouvait la cible, et des identifiants d'objet dont le champ « node » de l'UUID version 1 contient souvent une adresse MAC.

Ce sont les horodatages NTFS du raccourci lui-même qui reflètent l'activité : la création correspond à peu près à la première ouverture d'un fichier portant ce nom, la modification à la dernière. Le nom servant de clé, ouvrir un autre budget.xlsx depuis un autre dossier met à jour le même raccourci. Lisez le chemin embarqué avant de supposer que les deux événements concernent le même fichier.

# Analyser tous les raccourcis Recent de tous les profils
LECmd.exe -d E:\case\C\Users --csv E:\out\lnk

# Un seul fichier, détail complet à l'écran
LECmd.exe -f "E:\case\C\Users\jdoe\AppData\Roaming\Microsoft\Windows\Recent\budget.xlsx.lnk"

Le numéro de série de volume et le type de lecteur font des LNK le pont vers les supports amovibles : un LNK pointant vers E:\Q3\budget.xlsx sur un lecteur amovible de numéro de série A4F2-19C0 peut être rattaché à une clé USB précise (voir investigation des périphériques USB). Pour une vérification ponctuelle, le LNK Parser fonctionne côté client.

Jump Lists : quelle application a ouvert le fichier

Les Jump Lists, apparues avec Windows 7, apportent ce qui manque aux LNK : l'application. Chaque application a son propre fichier, nommé d'après son AppID, une empreinte calculée à partir du chemin de l'application ou de son AppUserModelID.

  • AutomaticDestinations (Recent\AutomaticDestinations\<AppID>.automaticDestinations-ms) sont des fichiers composés OLE (CFB). Chaque flux numéroté est un LNK, et le flux DestList contient les métadonnées par entrée : dernier accès, position MRU, épinglage, nom d'hôte et, depuis Windows 10, un compteur d'accès.
  • CustomDestinations (Recent\CustomDestinations\<AppID>.customDestinations-ms) sont écrites par l'application elle-même : tâches, éléments épinglés et catégories personnalisées, stockés comme des LNK concaténés. Navigateurs et messageries y laissent des données intéressantes.

Les entrées étant des LNK, on retrouve le même numéro de série de volume, le même type de lecteur et les mêmes horodatages de cible qu'un raccourci isolé, même quand ce dernier a été supprimé. L'heure DestList est souvent le meilleur horodatage « dernière ouverture dans cette application » disponible pour un document.

# Toutes les Jump Lists de tous les profils, avec le détail LNK de chaque entrée
JLECmd.exe -d E:\case\C\Users --csv E:\out\jumplists --ld

# Un seul fichier
JLECmd.exe -f "E:\case\...\AutomaticDestinations\<AppID>.automaticDestinations-ms"

JLECmd résout de nombreux AppID connus en noms d'application. Face à un AppID inconnu, calculez-le à partir du chemin de l'application soupçonnée, ou retrouvez le même AppID sur un système de référence, plutôt que de deviner. Le Jump List Parser traite un fichier isolé dans le navigateur.

Clés MRU de NTUSER.DAT

Ces clés sont petites, rapides à passer en revue et toutes attribuables au propriétaire du profil. Leur faiblesse, c'est le temps : la plupart conservent un ordre MRUListEx et un seul LastWrite de clé, donc seule l'entrée la plus récente de chaque clé est datée.

RecentDocs

Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs liste les éléments récemment ouverts par nom, avec une sous-clé par extension (.docx, .zip, .ps1) et une sous-clé Folder. Elle stocke des noms, pas des chemins complets : retrouvez le chemin dans le LNK ou la Jump List correspondante. Les sous-clés par extension permettent de repérer vite les archives, scripts et images disque manipulés.

OpenSavePidlMRU et LastVisitedPidlMRU

Sous Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32, OpenSavePidlMRU enregistre les fichiers choisis dans les boîtes de dialogue ouvrir et enregistrer (par extension, plus *), et LastVisitedPidlMRU l'exécutable qui a utilisé la boîte avec le dernier dossier parcouru. Une entrée chrome.exe pointant vers E:\Export est une piste sérieuse d'envoi via navigateur ou de téléchargement vers un support amovible. Sous XP, les équivalents sont OpenSaveMRU et LastVisitedMRU, en texte clair.

TypedPaths et WordWheelQuery

TypedPaths contient les chemins saisis dans la barre d'adresse de l'Explorateur (url1 est le plus récent) : c'est là qu'apparaissent les chemins UNC vers d'autres machines et les partages cachés. WordWheelQuery contient les termes saisis dans la zone de recherche de l'Explorateur, en UTF-16, avec un MRUListEx. Les recherches lancées depuis la barre des tâches ou le menu Démarrer de Windows 10/11 n'y sont pas enregistrées.

# Extraire les clés d'activité utilisateur d'un NTUSER.DAT avec un batch RECmd
RECmd.exe -f E:\case\C\Users\jdoe\NTUSER.DAT --bn .\BatchExamples\RECmd_Batch_MC.reb --csv E:\out\registry

MRU Office et Trust Records

Office tient ses propres listes sous NTUSER.DAT\Software\Microsoft\Office\<version>\<App>\, où <version> vaut 16.0 d'Office 2016 à Microsoft 365. File MRU et Place MRU (ou les mêmes listes sous User MRU\<account id>\ quand un compte Microsoft 365 est connecté) enregistrent des chemins complets avec un horodatage intégré à la valeur, sous la forme [F00000000][T01DB...][O00000000]*C:\chemin\fichier.docx, où le champ T est un FILETIME hexadécimal de la dernière ouverture.

Security\Trusted Documents\TrustRecords est encore plus parlant : une valeur y apparaît quand l'utilisateur clique sur « Activer la modification » ou « Activer le contenu » pour un document. Les données commencent par un FILETIME, et une valeur se terminant par FF FF FF 7F est couramment décrite comme le signe que les macros ont été activées. Dans une enquête de phishing, c'est souvent la preuve la plus nette que l'utilisateur, et pas seulement le client de messagerie, a agi sur la pièce jointe.

Windows Timeline et thumbcache

Windows Timeline (C:\Users\<user>\AppData\Local\ConnectedDevicesPlatform\<account>\ActivitiesCache.db, Windows 10 1803 et suivants) enregistre, activité par activité, les lancements d'applications, la durée au premier plan et de nombreux documents et URL ouverts. C'est une base SQLite : collectez toujours le fichier -wal, car les lignes récentes ne se trouvent souvent que dans le journal WAL. Timeline a été retiré de Windows 11 et la synchronisation cloud de l'historique d'activité abandonnée : considérez-le comme une source Windows 10.

WxTCmd.exe -f "E:\case\...\ConnectedDevicesPlatform\L.jdoe\ActivitiesCache.db" --csv E:\out\timeline

Thumbcache (thumbcache_*.db dans %LOCALAPPDATA%\Microsoft\Windows\Explorer\) conserve les miniatures d'images, de vidéos et de certains documents que l'Explorateur a générées pour cet utilisateur. Il prouve qu'un fichier existait à un emplacement consulté par l'utilisateur, y compris sur une clé USB retirée ou un partage, et il en montre le contenu. Il ne prouve pas que le fichier a été ouvert, et les noms de fichiers ne s'obtiennent qu'en rapprochant l'identifiant de cache de l'index Windows Search. Le Thumbcache Parser extrait les images dans le navigateur.

Attribuer l'activité à un utilisateur

Tous ces artefacts sont propres à un profil, ce qui les rend précieux pour l'attribution. Reliez explicitement le profil à un compte :

  1. Associez le dossier de profil à un SID via SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\<SID>\ProfileImagePath.
  2. Résolvez le SID en compte local dans la SAM, ou en compte de domaine.
  3. Confirmez que le compte avait une session interactive aux moments concernés grâce aux événements d'ouverture de session (4624 avec les types 2, 10 ou 11, et les fermetures 4634/4647).

Attribuer à un compte n'est pas attribuer à une personne. Identifiants partagés, sessions non verrouillées et outils d'accès à distance doivent être écartés par d'autres éléments.

# Correspondance SID / chemin de profil sur un système en direct
Get-ItemProperty 'HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList\*' |
  Select-Object PSChildName, ProfileImagePath

Construire le récit « qui a ouvert quoi, et quand »

Partez de la question. Supposons qu'il faille montrer que jdoe a consulté des données de paie sur un serveur de fichiers puis les a copiées sur une clé USB.

  1. Intention : WordWheelQuery contient paie ; TypedPaths contient \\fs01\rh$. L'utilisateur a cherché les données et saisi à la main le chemin d'un partage caché.
  2. Navigation : les ShellBags contiennent \\fs01\rh$\Paie\2026, puis plus tard E:\Q3. Le LastWrite BagMRU du parent 2026 date la visite la plus récente.
  3. Ouverture : paie_2026.xlsx.lnk dans Recent pointe vers \\fs01\rh$\Paie\2026\paie_2026.xlsx ; la Jump List d'Excel contient la même cible avec un dernier accès DestList ; la File MRU d'Excel contient le chemin avec son horodatage T.
  4. Copie sur support amovible : un second LNK ou une entrée de Jump List pointe vers E:\Q3\paie_2026.xlsx, type de lecteur amovible, avec un numéro de série de volume. OpenSavePidlMRU montre un .xlsx enregistré dans E:\Q3.
  5. Identification du périphérique : rattachez le numéro de série de volume à une clé USB et à sa fenêtre de connexion.
  6. Compte : le profil correspond au SID de jdoe, et une ouverture de session interactive 4624 couvre la période.

Placez chaque horodatage sur une frise unique en UTC, en indiquant sa signification exacte (« LNK modifié », « dernier accès DestList », « LastWrite BagMRU »). Une super timeline avec Plaso le fait à grande échelle, mais pour une question ciblée, un tableur alimenté par les CSV des outils est souvent plus lisible.

Erreurs fréquentes

  • Confondre horodatages de la cible et heures d'accès. Les dates de l'en-tête LNK et des shell items décrivent le fichier ou le dossier, pas l'action de l'utilisateur.
  • Étendre un LastWrite de clé à toutes les entrées. Pour BagMRU, RecentDocs, ComDlg32 et TypedPaths, il ne date que l'élément le plus récent.
  • Ignorer les journaux de transactions et le WAL SQLite. L'activité récente ne se trouve souvent que là.
  • Croire qu'un LNK correspond à un seul fichier. Les raccourcis Recent sont indexés par nom de fichier.
  • Prendre l'absence pour une preuve. Utilisateurs, outils de nettoyage et limites de Windows suppriment des entrées. Examinez les clichés instantanés de volume avant de conclure qu'il ne s'est rien passé.
  • Oublier les fuseaux horaires. Les horodatages du registre et des LNK sont en UTC ; certaines sorties d'outils et certains journaux applicatifs sont en heure locale.

Méthode pas à pas

  1. Collectez, pour chaque profil, NTUSER.DAT, UsrClass.dat et leurs journaux, le dossier Recent avec AutomaticDestinations et CustomDestinations, ActivitiesCache.db*, le dossier thumbcache, ainsi que la ruche SOFTWARE. Le guide de triage détaille les cibles KAPE correspondantes.
  2. Associez les profils à leurs SID et à leurs comptes.
  3. Lancez SBECmd, LECmd, JLECmd, WxTCmd et un batch RECmd sur les données collectées.
  4. Filtrez sur les chemins, noms de fichiers, partages et numéros de série de volume utiles à l'affaire.
  5. Croisez, pour chaque élément, les preuves de dossier (ShellBags), de fichier (LNK, RecentDocs, ComDlg32) et d'application (Jump Lists, MRU Office).
  6. Rattachez les numéros de série de volume aux périphériques USB, et les chemins UNC aux serveurs concernés.
  7. Construisez la frise en UTC en notant la signification de chaque horodatage, et relevez chaque zone d'ombre.

Pour approfondir le volet registre, poursuivez avec l'investigation du registre Windows.

Domaine 06

Activité utilisateur

Les fiches artefacts derrière ce guide : emplacement selon la version de Windows, ce que prouve chacun et les outils pour l'analyser.

Articles liés