Skip to content

registre · setupapi · evtx · LNK

L’historique des périphériques USB, reconstitué pour vous

Déposez une collecte de triage Windows. USBSTOR, MountedDevices, setupapi.dev.log, Partition/Diagnostic 1006, Kernel-PnP, LNK, Jump Lists et ShellBags deviennent une chronologie par périphérique — avec la source de chaque fait et les points où les sources divergent. Analyse dans votre navigateur grâce à WebAssembly ; rien n’est envoyé.

Déposez une collecte de triage, un ZIP ou des fichiers isolés

Ruches SYSTEM et SOFTWARE, setupapi.dev.log, journaux d’événements (Partition/Diagnostic, Kernel-PnP, DriverFrameworks, Security, System), NTUSER.DAT / UsrClass.dat, fichiers LNK et Jump Lists. Les arborescences KAPE et Velociraptor sont prises en charge telles quelles ; les fichiers sans rapport sont ignorés.

L’exemple est une collecte synthétique issue d’un poste de travail fictif : une clé USB branchée par un compte illégitime pendant une intrusion, plus deux périphériques plus anciens.

Analysé dans votre navigateur — rien n’est envoyé

Comment obtenir vos données

Guide d’acquisition complet

L’historique USB est réparti entre les ruches SYSTEM et SOFTWARE, setupapi.dev.log, quelques journaux d’événements ainsi que la ruche et le dossier Recent de chaque utilisateur. Collectez-les ensemble : chaque source ajoutée confirme ou corrige les autres.

  1. Collectez avec une commande administrateur, KAPE ou Velociraptor
  2. Déposez le dossier ou le ZIP ici
  3. Analyse locale — rien ne quitte le navigateur

Sur l’hôte actif, ouvrez PowerShell avec « Exécuter en tant qu’administrateur » et collez ce bloc. reg save exporte les ruches verrouillées ; wevtutil exporte les journaux d’événements (Security filtré sur 6416 et 4663) ; les ruches utilisateur des comptes connectés et le dossier Recent de chaque profil sont également copiés.

PowerShell · Admin
$t = 'C:\triage'; New-Item -ItemType Directory -Force $t | Out-Null
reg save HKLM\SYSTEM "$t\SYSTEM" /y; reg save HKLM\SOFTWARE "$t\SOFTWARE" /y
Copy-Item C:\Windows\INF\setupapi.dev*.log $t
'Microsoft-Windows-Partition/Diagnostic','Microsoft-Windows-Kernel-PnP/Configuration','Microsoft-Windows-DriverFrameworks-UserMode/Operational','System' |
  ForEach-Object { wevtutil epl $_ "$t\$($_ -replace '/','%4').evtx" /ow:true }
wevtutil epl Security "$t\Security.evtx" "/q:*[System[(EventID=6416 or EventID=4663)]]" /ow:true
Get-ChildItem Registry::HKEY_USERS | Where-Object PSChildName -match '^S-1-5-21-[\d-]+$' | ForEach-Object {
  reg save "HKU\$($_.PSChildName)" "$t\NTUSER_$($_.PSChildName).DAT" /y
  reg save "HKU\$($_.PSChildName)_Classes" "$t\UsrClass_$($_.PSChildName).dat" /y }
Get-ChildItem C:\Users -Directory | ForEach-Object {
  robocopy "$($_.FullName)\AppData\Roaming\Microsoft\Windows\Recent" "$t\Users\$($_.Name)\AppData\Roaming\Microsoft\Windows\Recent" /S /XJ /R:0 /W:0 /NP /NFL /NDL | Out-Null }

Tout est placé dans C:\triage. Déposez ce dossier sur la page.

Ou compressez-le d’abord pour le sortir de l’hôte (Windows 10 1803+ intègre tar) :

PowerShell / cmd
tar -a -c -f C:\usb-triage.zip -C C:\ triage

Pièges

  • Copier SYSTEM ou NTUSER.DAT avec l’Explorateur échoue ou produit un fichier rempli de zéros tant que Windows fonctionne : utilisez reg save, KAPE ou un outil de copie brute.
  • setupapi.dev.log est en heure locale. Ajoutez la ruche SYSTEM pour que les horodatages soient convertis ; sinon ils sont affichés comme s’ils étaient en UTC.
  • Les journaux d’événements tournent : un Security.evtx très sollicité peut ne couvrir que quelques jours. Collectez tôt et conservez les anciennes copies .evtx issues des sauvegardes ou des clichés instantanés de volume (Volume Shadow Copies).
  • reg save n’atteint que les ruches des utilisateurs connectés ; pour les autres, utilisez KAPE / Velociraptor ou copiez NTUSER.DAT depuis une image.

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é.

Une intrusion fictive analysée avec USB Forensics : trouver la clé, confirmer quand elle a été branchée, attribuer le compte et lister les fichiers copiés.
Relier raccourcis, Jump Lists, ShellBags et événements 4663 à une clé USB par numéro de série de volume, lettre de lecteur et heure, et nommer l’utilisateur.
Lire les sections d’installation de setupapi.dev.log, convertir leur heure locale en UTC et les comparer à la date de première installation du registre.