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.DAT par-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 -Descending

Cela 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 -Descending

Pour 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 :

  1. Depuis DeviceContainers.csv, filtrez sur les catégories de stockage.
  2. Triez par KeyLastWriteTimestamp décroissant.
  3. Identifiez tout périphérique dont l'heure de dernière vue tombe dans la fenêtre de suspicion.
  4. Pivotez vers USBSTOR pour le numéro de série, puis vers l'historique de points de montage NTUSER.DAT pour ce numéro de série afin de confirmer le compte utilisateur qui l'a monté.
  5. 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, KeyLastWriteTimestamp

Ajustez 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#

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

Retour à tous les articles