Historique USB et périphériques depuis Amcache : InventoryDeviceContainer et InventoryDevicePnp
Au-delà des binaires PE, le schéma moderne d'Amcache enregistre
chaque périphérique que Windows a énuméré sur l'hôte. Les deux
sous-clés qui importent ici — Root\InventoryDeviceContainer et
Root\InventoryDevicePnp — donnent ensemble aux analystes l'une des
réponses les plus propres à « quel matériel a déjà touché cette
machine ? » que Windows offre.
Cette page est le guide pratique pour les enquêtes USB et périphériques utilisant Amcache : ce qu'enregistre chaque clé, comment lire les deux ensemble, et les limites à connaître.
Pour la référence plus large sur l'artefact, voir la référence complète Amcache ; pour le schéma environnant, voir Structure du registre Amcache.
Ce que capture Amcache vs les sources traditionnelles#
Historiquement, les enquêtes « historique de périphériques USB » sur Windows se sont appuyées sur :
HKLM\SYSTEM\CurrentControlSet\Enum\USB— chaque périphérique USB que Windows a énuméré.HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR— spécifiquement les périphériques USB de stockage de masse.setupapi.dev.log(C:\Windows\INF\setupapi.dev.log) — journal d'installation de pilote avec horodatages.NTUSER.DATpar-utilisateur pour l'historique des points de montage.
Ces sources restent les plus faisant autorité pour le stockage USB en particulier. Amcache ajoute une vue parallèle qui est souvent plus rapide à analyser et plus riche en noms conviviaux :
| Source | Idéale pour |
|---|---|
Enum\USB / USBSTOR (registre) |
Historique faisant autorité des périphériques, surtout stockage de masse. |
setupapi.dev.log |
Horodatages d'installation de pilote pour la première connexion. |
Points de montage NTUSER.DAT |
Données de montage et dernière connexion par utilisateur. |
InventoryDeviceContainer Amcache |
Noms conviviaux, fournisseur / modèle, état pair/connecté. |
InventoryDevicePnp Amcache |
Enregistrement d'énumération PnP par interface. |
Dans un contexte de triage, Amcache est plus rapide — une seule analyse de ruche et vous avez une vue tabulaire de chaque périphérique avec noms conviviaux. Pour la preuve, vous voulez toutes les sources, pas seulement Amcache.
InventoryDeviceContainer#
La vue côté utilisateur. Une sous-clé par « device container » que Windows suit — un périphérique logique, pas une interface bas niveau. Chaque entrée a :
| Champ | Signification |
|---|---|
FriendlyName |
Le nom d'affichage que Windows assigne : « Brother HL-L2350DW », « SanDisk Cruzer Glide », « Logitech BRIO ». |
Manufacturer |
Chaîne fournisseur. |
ModelName |
Identifiant de modèle depuis le périphérique. |
ModelNumber |
Numéro de modèle, si séparé. |
Categories |
Catégories de périphérique : Printer, Storage, Display, Network, Bluetooth, MultimediaDevice, … |
DiscoveryMethod |
Comment Windows l'a énuméré : DeviceEnumeration, Manual, BluetoothPairing, … |
IsConnected |
1 si connecté au dernier inventaire. |
IsPaired |
1 si appairé (Bluetooth spécifiquement). |
IsActive |
1 si Windows le considère actuellement actif. |
Icon |
Chemin vers la ressource d'icône du périphérique. |
KeyLastWriteTimestamp |
Quand l'enregistrement a été mis à jour pour la dernière fois — ce qui ressemble le plus à « vu pour la dernière fois » pour le périphérique. |
C'est la table « quel matériel a été connecté ici ? » la plus propre que Windows expose. Noms conviviaux, catégories et un horodatage de dernière mise à jour par périphérique, dans un seul CSV après AmcacheParser.
InventoryDevicePnp#
La vue technique. Une sous-clé par interface de périphérique que
le PnP manager a énumérée. Là où InventoryDeviceContainer liste
« Brother HL-L2350DW » une fois, InventoryDevicePnp peut lister
l'interface USB de l'imprimante, son interface d'impression et toute
interface virtuelle qu'elle expose. Champs :
| Champ | Signification |
|---|---|
InstanceId |
Identifiant d'instance PnP, ex. USB\VID_05E0&PID_1701\ABC123. |
BusReportedDescription |
Ce que le périphérique a déclaré être à Windows. |
DeviceClass |
GUID de classe de pilote. |
DeviceId |
ID de périphérique PnP. |
Manufacturer |
Chaîne fournisseur. |
Model |
Chaîne modèle. |
Service |
Service du pilote. |
DriverName |
Fichier pilote derrière le périphérique. |
KeyLastWriteTimestamp |
Quand l'enregistrement PnP a été mis à jour pour la dernière fois. |
InstanceId est la clé de jointure entre
InventoryDeviceContainer et InventoryDevicePnp : prenez un
InstanceId de l'un et trouvez la ligne correspondante dans l'autre
pour obtenir à la fois le nom côté utilisateur et les IDs techniques.
Lire les deux ensemble#
Un pattern propre pour « lister chaque périphérique qui a été sur cet hôte avec nom convivial, catégorie et instance PnP » :
$containers = Import-Csv .\HOST_amcache_DeviceContainers.csv
$pnps = Import-Csv .\HOST_amcache_DevicePnps.csv
# Join on InstanceId where present
$containers | ForEach-Object {
$c = $_
$pnp = $pnps | Where-Object { $_.InstanceId -eq $c.InstanceId } | Select-Object -First 1
[pscustomobject]@{
FriendlyName = $c.FriendlyName
Categories = $c.Categories
Manufacturer = $c.Manufacturer
InstanceId = $c.InstanceId
BusDesc = $pnp.BusReportedDescription
Service = $pnp.Service
IsConnected = $c.IsConnected
LastSeen = $c.KeyLastWriteTimestamp
}
} | Sort-Object LastSeen -DescendingCela produit une table par périphérique nettement plus simple à
parcourir que les exports Enum\USB bruts.
Focus stockage de masse USB#
Pour la question classique « un lecteur USB s'est-il connecté à cet hôte le $DATE ? », filtrez sur les catégories de stockage :
Import-Csv .\HOST_amcache_DeviceContainers.csv |
Where-Object {
$_.Categories -match 'Storage|Disk|USB.*Mass'
} |
Select-Object FriendlyName, ModelName, Manufacturer, IsConnected, KeyLastWriteTimestamp |
Sort-Object KeyLastWriteTimestamp -DescendingPour chaque ligne survivante, recroisez avec Enum\USBSTOR pour
le numéro de série faisant autorité et les horodatages de première /
dernière connexion. Amcache vous donne une vue de triage rapide ;
USBSTOR vous donne le détail de niveau preuve.
Cas d'usage en enquête#
Triage d'exfiltration de données par menace interne#
Un scénario courant : vous suspectez qu'un employé a copié des données sur un lecteur USB avant de démissionner. La liste de périphériques Amcache vous donne une vue chronologique de chaque périphérique de stockage que l'hôte a vu, typiquement sur de nombreux mois.
Pattern :
- Depuis
DeviceContainers.csv, filtrez sur les catégories de stockage. - Triez par
KeyLastWriteTimestampdécroissant. - Identifiez tout périphérique dont l'heure de dernière vue tombe dans la fenêtre de suspicion.
- Pivotez vers
USBSTORpour le numéro de série, puis vers l'historique de points de montageNTUSER.DATpour ce numéro de série afin de confirmer le compte utilisateur qui l'a monté. - Recroisez avec les horodatages d'accès du système de fichiers pour les fichiers d'intérêt dans la même fenêtre.
Connexion de périphérique non autorisée#
Pour les environnements où les périphériques sont restreints par
politique (imprimantes, périphériques audio, stockage réseau),
InventoryDeviceContainer d'Amcache est un scan rapide pour les
périphériques non conformes :
Import-Csv .\HOST_amcache_DeviceContainers.csv |
Where-Object {
$_.Manufacturer -notmatch '^(YourCompany|YourApprovedVendor)' -and
$_.Categories -match 'Printer|Display'
} |
Select-Object FriendlyName, Manufacturer, Categories, KeyLastWriteTimestampAjustez l'allowlist à votre environnement.
Historique d'appairage Bluetooth#
Les lignes DiscoveryMethod = BluetoothPairing montrent chaque
périphérique qui a été appairé par Bluetooth, avec des noms
conviviaux. Utile pour les questions « l'utilisateur a-t-il appairé
son téléphone / casque personnel / clavier personnel ? » dans les
environnements réglementés.
Identifier des périphériques contrefaits / inconnus#
Une ligne dans DevicePnps.csv dont BusReportedDescription est
générique (« USB Device », « Unknown Device ») et dont
Manufacturer est blanc ou sans marque, associée à une ligne
DeviceContainers.csv qui n'a pas de FriendlyName, est souvent
un périphérique HID malveillant ou contrefait — un outil pen-test
« BadUSB », un émulateur clavier sans marque, ou un câble de données
malveillant.
Limites et réserves#
KeyLastWriteTimestamp n'est pas « première connexion »#
C'est « dernière mise à jour ». Pour un périphérique qui se connecte
régulièrement, vous voyez des horodatages récents. Pour un
périphérique qui s'est connecté une fois il y a un an, vous voyez
l'horodatage vieux d'un an. Pour les horodatages de première
connexion, analysez setupapi.dev.log.
Tous les périphériques ne laissent pas d'entrée Amcache#
Les périphériques qui se connectent et se déconnectent immédiatement
entre passages de l'appraiser peuvent n'être jamais inventoriés.
Pour les enquêtes USB sur fenêtre courte (secondes à minutes),
setupapi.dev.log et USBSTOR sont plus fiables.
Les noms conviviaux sont contrôlés par le fournisseur#
Le FriendlyName est ce que le périphérique dit à Windows qu'il
est. Un périphérique USB malveillant peut prétendre être « Microsoft
Wireless Mouse » et Windows affiche ce nom. Couplez avec
BusReportedDescription et une inspection physique.
Certaines catégories sont bruyantes#
InventoryDeviceContainer enregistre les périphériques virtuels, les
endpoints audio logiciels et les périphériques internes à la
plateforme à côté des vrais périphériques. Filtrez sur Categories
et sur le fait que IsPaired ou Manufacturer soit renseigné pour
couper le bruit.
Voir aussi#
- Référence complète Amcache — l'artefact en intégralité.
- Structure du registre Amcache —
où se trouvent
InventoryDeviceContaineretInventoryDevicePnpdans la ruche. - Les colonnes de sortie d'AmcacheParser expliquées
— chaque champ dans
*_DeviceContainers.csvet*_DevicePnps.csv. - Amcache pour l'investigation de malware — le playbook de triage axé binaire (couplez avec l'historique des périphériques pour un triage d'hôte complet).
Pour explorer l'historique des périphériques sur votre propre ruche sans rien installer, déposez un fichier sur la page d'accueil de l'analyseur — il s'analyse entièrement dans votre navigateur.
Articles liés
- Volatility et Amcache : extraire la ruche depuis des images mémoire
Un guide pratique pour récupérer Amcache depuis une image mémoire Windows en utilisant Volatility — quand la récupération côté mémoire est la seule option, quels plugins utiliser, et comment passer le relais à AmcacheParser.
- Plugin amcache de RegRipper : ce qu'il fait et quand l'utiliser
Un guide pratique sur le plugin amcache de RegRipper — ce qu'il analyse, comment sa sortie texte diffère du CSV d'AmcacheParser, et quand l'utiliser à la place (ou en complément) de l'outil Zimmerman.
- Les colonnes de sortie d'AmcacheParser expliquées : chaque champ CSV décodé
Référence champ par champ pour la sortie CSV d'AmcacheParser — FileId, PathHash, ProgramId, LinkDate, BinFileVersion, IsPeFile et toutes les autres colonnes, avec les pivots qui comptent en DFIR.
- Guide de téléchargement d'AmcacheParser : sources officielles, miroirs et vérification
Tous les moyens de télécharger AmcacheParser d'Eric Zimmerman — Get-ZimmermanTools, téléchargement direct, KAPE, Velociraptor — avec vérification par somme de contrôle et schémas d'installation en environnement isolé.