Ce que cet outil reconstitue
Windows enregistre un périphérique amovible à une douzaine d’endroits, dont aucun n’est complet. La ruche SYSTEM connaît le périphérique (USBSTOR, USB, WPDBUSENUM), sa lettre de lecteur et son GUID de volume (MountedDevices) ainsi que quatre horodatages de propriétés : première installation, dernière installation, dernière arrivée et dernier retrait. setupapi.dev.log date la première installation. Les journaux d’événements datent chaque connexion et chaque retrait, et Partition/Diagnostic 1006 contient même le secteur d’amorçage du volume (VBR), donc le numéro de série de volume. La ruche, les raccourcis, les Jump Lists et les ShellBags de chaque utilisateur montrent qui a monté le volume et ce qui y a été ouvert.
USB Forensics les lit tous dans votre navigateur et les relie par périphérique physique — par numéro de série / ID d’instance, puis par GUID de volume, puis par numéro de série de volume — dans une fiche de périphérique et une chronologie unique. Chaque fait porte des pastilles de preuve indiquant le fichier et la clé, l’enregistrement ou la ligne d’origine, et lorsque les sources divergent, l’outil le signale au lieu d’en choisir une en silence.
Artefacts lus
- SYSTEM : Enum\USBSTOR (fabricant, produit, révision, numéro de série, FriendlyName, ContainerID et les horodatages Properties\{83da6326-97a6-4088-9453-a1923f573b29} 0064 date d’installation, 0065 date de première installation, 0066 dernière arrivée, 0067 dernier retrait), Enum\USB (VID/PID), Enum\SWD\WPDBUSENUM, MountedDevices, TimeZoneInformation.
- SOFTWARE : Microsoft\Windows Portable Devices\Devices (noms de volume), Windows NT\CurrentVersion\EMDMgmt (nom + numéro de série de volume), ProfileList (SID → compte).
- C:\Windows\INF\setupapi.dev.log : sections d’installation de périphériques, converties depuis l’heure locale avec le fuseau horaire de SYSTEM.
- Journaux d’événements : Partition/Diagnostic 1006, Kernel-PnP/Configuration 400/410/420/430, DriverFrameworks-UserMode 2003/2100/2101/2102, Security 6416 et 4663, System UserPnp 20001/20003.
- Par utilisateur : NTUSER.DAT MountPoints2, ShellBags de UsrClass.dat, Recent\*.lnk, Jump Lists AutomaticDestinations / CustomDestinations.
Les questions auxquelles il répond
- Quels périphériques de stockage USB ont été connectés, avec marque, modèle et numéro de série (et si Windows a généré ce numéro de série).
- Quand chacun a été installé pour la première fois, et chaque connexion et retrait encore enregistrés par une source.
- Quelles lettres de lecteur, noms de volume et numéros de série de volume il a eus au fil du temps, et quels comptes l’ont monté.
- Quels fichiers et dossiers y ont été ouverts, écrits ou lus, et par qui.
- Des constats pour le triage : un périphérique connecté pendant la fenêtre d’incident, un périphérique de stockage vu récemment pour la première fois, des fichiers copiés vers ou ouverts depuis un support amovible, un périphérique utilisé par un compte inattendu.
Limites
- Les journaux de transactions du registre (.LOG1/.LOG2) ne sont pas rejoués : une ruche « dirty » est signalée, et les modifications les plus récentes peuvent manquer.
- Seul le control set courant est lu. Les clés supprimées et l’espace non alloué ne sont pas récupérés.
- setupapi.dev.log est converti avec les règles de fuseau horaire de SYSTEM ; les règles Dynamic DST propres à chaque année ne sont pas appliquées, et le format setupapi.log de Windows XP n’est pas pris en charge.
- Les ShellBags et Security 4663 ne nomment pas le périphérique : ils y sont rattachés par la lettre de lecteur ou le numéro de volume et le recouvrement temporel, et marqués « déduit ».
- Les fichiers de raccourci isolés sont datés par leur date de dernière modification dans la collecte ; si la copie ne l’a pas préservée, fiez-vous à la Jump List et aux horodatages de la cible affichés dans les preuves.
- Le moteur a été validé sur des données synthétiques et des cas limites construits à la main ; comparez avec des outils éprouvés avant de vous en servir devant un tribunal.
Comment collecter
- Le plus rapide : le bloc PowerShell élevé ci-dessus (reg save + wevtutil + robocopy) — ou la cible USBDetective de KAPE.
- Velociraptor : Windows.Triage.Targets avec la cible USBDetective, puis déposez tel quel le ZIP de collecte.
- Images disque : montez-les en lecture seule et copiez les fichiers listés en conservant leurs chemins, ou déposez un export FTK Imager.
FAQ
Mes fichiers sont-ils envoyés ?
Non. Le parseur est écrit en Rust, compilé en WebAssembly et s’exécute dans un Web Worker à l’intérieur de l’onglet de votre navigateur. Les fichiers sont lus localement et rien n’est envoyé nulle part.
Pourquoi un numéro de série contient-il « & » ?
Lorsque le deuxième caractère d’un ID d’instance USBSTOR est « & », le périphérique n’a fourni aucun numéro de série exploitable et Windows en a généré un (par exemple 7&1f2e3d4c&0). Il n’est unique que sur cet ordinateur et n’est pas le vrai numéro de série du périphérique : rapprochez donc ce périphérique par fabricant, produit, numéro de série de volume et horodatages.
Quel horodatage indique quand une clé USB a été branchée ?
Plusieurs : la propriété 0066 « dernière arrivée » de la ruche SYSTEM donne la plus récente, les événements Partition/Diagnostic 1006 et Kernel-PnP donnent chaque connexion, setupapi.dev.log et 0065 (FirstInstallDate) donnent la première. L’outil les fusionne en une seule entrée de connexion et affiche chaque source sous forme de pastille.
Comment les raccourcis sont-ils rattachés à une clé USB ?
Un raccourci stocke le numéro de série de volume du lecteur sur lequel se trouvait sa cible. L’outil lit ce même numéro de série dans le secteur d’amorçage du volume journalisé par Partition/Diagnostic 1006 et dans EMDMgmt, ce qui relie le raccourci au périphérique physique même lorsque les lettres de lecteur ont été réutilisées.
Et si les sources divergent ?
La divergence est affichée sur la fiche du périphérique avec les deux valeurs et leurs sources : par exemple setupapi et le registre qui donnent des dates de première installation différentes après une réinstallation, ou une dernière arrivée dans le registre sans enregistrement correspondant dans les journaux d’événements parce que ceux-ci ont tourné.