USB- und Gerätehistorie aus Amcache: InventoryDeviceContainer und InventoryDevicePnp

Über PE-Binärprogramme hinaus zeichnet das moderne Schema von Amcache jedes Gerät auf, das Windows auf dem Host enumeriert hat. Die beiden Unterschlüssel, die hier zählen — Root\InventoryDeviceContainer und Root\InventoryDevicePnp — geben Analysten zusammen eine der saubersten Antworten auf „welche Hardware hat diese Maschine jemals berührt?", die Windows bietet.

Diese Seite ist der praktische Leitfaden zu USB- und Peripherie-Untersuchungen mit Amcache: was jeder Schlüssel aufzeichnet, wie man die beiden zusammen liest und welche Grenzen Sie kennen müssen.

Für die breitere Artefakt-Referenz siehe die vollständige Amcache-Referenz; für das umliegende Schema siehe Amcache-Registry-Struktur.


Was Amcache erfasst vs die traditionellen Quellen#

Historisch haben sich „USB-Gerätehistorie"-Untersuchungen unter Windows verlassen auf:

  • HKLM\SYSTEM\CurrentControlSet\Enum\USB — jedes USB-Gerät, das Windows enumeriert hat.
  • HKLM\SYSTEM\CurrentControlSet\Enum\USBSTOR — speziell USB-Massenspeichergeräte.
  • setupapi.dev.log (C:\Windows\INF\setupapi.dev.log) — Treiber-Installationsprotokoll mit Zeitstempeln.
  • NTUSER.DAT pro Benutzer für die Mount-Point-Historie.

Diese Quellen bleiben die maßgeblichsten insbesondere für USB-Massenspeicher. Amcache fügt eine parallele Sicht hinzu, die oft schneller zu parsen und reicher an Anzeigenamen ist:

Quelle Am besten geeignet für
Enum\USB / USBSTOR (Registry) Maßgebliche Gerätehistorie, besonders Massenspeicher.
setupapi.dev.log Treiber-Installations-Zeitstempel für die Erstverbindung.
NTUSER.DAT-Mount-Points Mount- und Last-Connect-Daten pro Benutzer.
Amcache InventoryDeviceContainer Anzeigenamen, Hersteller / Modell, Paarungs-/Verbindungsstatus.
Amcache InventoryDevicePnp PnP-Enumerationseintrag pro Schnittstelle.

In einem Triage-Kontext ist Amcache schneller — ein Hive-Parse und Sie haben eine tabellarische Sicht jedes Geräts mit Anzeigenamen. Für Beweise wollen Sie alle Quellen, nicht nur Amcache.


InventoryDeviceContainer#

Die benutzerseitige Sicht. Ein Unterschlüssel pro „Device Container", den Windows verfolgt — ein logisches Gerät, keine Low-Level-Schnittstelle. Jeder Eintrag hat:

Feld Bedeutung
FriendlyName Der Anzeigename, den Windows zuweist: „Brother HL-L2350DW", „SanDisk Cruzer Glide", „Logitech BRIO".
Manufacturer Vendor-String.
ModelName Modell-Identifikator vom Gerät.
ModelNumber Modellnummer, falls separat.
Categories Gerätekategorien: Printer, Storage, Display, Network, Bluetooth, MultimediaDevice, ...
DiscoveryMethod Wie Windows es enumerierte: DeviceEnumeration, Manual, BluetoothPairing, ...
IsConnected 1, wenn beim letzten Inventar verbunden.
IsPaired 1, wenn gekoppelt (speziell Bluetooth).
IsActive 1, wenn Windows es derzeit als aktiv betrachtet.
Icon Pfad zur Icon-Ressource des Geräts.
KeyLastWriteTimestamp Wann der Eintrag zuletzt aktualisiert wurde — das, was „zuletzt gesehen" für das Gerät am nächsten kommt.

Das ist die sauberste „welche Hardware war hier verbunden?"- Tabelle, die Windows bereitstellt. Anzeigenamen, Kategorien und ein Last-Update-Zeitstempel pro Gerät, in einer einzelnen CSV nach AmcacheParser.


InventoryDevicePnp#

Die technische Sicht. Ein Unterschlüssel pro Geräteschnittstelle, die der PnP-Manager enumeriert hat. Wo InventoryDeviceContainer „Brother HL-L2350DW" einmal listet, listet InventoryDevicePnp möglicherweise die USB-Schnittstelle des Druckers, seine Druckschnittstelle und alle virtuellen Schnittstellen, die er bereitstellte. Felder:

Feld Bedeutung
InstanceId PnP-Instanz-Identifikator, z. B. USB\VID_05E0&PID_1701\ABC123.
BusReportedDescription Was das Gerät Windows mitgeteilt hat, dass es ist.
DeviceClass Treiberklassen-GUID.
DeviceId PnP-Geräte-ID.
Manufacturer Vendor-String.
Model Modell-String.
Service Treiberdienst.
DriverName Treiberdatei hinter dem Gerät.
KeyLastWriteTimestamp Wann der PnP-Eintrag zuletzt aktualisiert wurde.

InstanceId ist der Join-Schlüssel zwischen InventoryDeviceContainer und InventoryDevicePnp: Nehmen Sie eine InstanceId aus einem und finden Sie die passende Zeile im anderen, um sowohl den benutzerseitigen Namen als auch die technischen IDs zu erhalten.


Die beiden zusammen lesen#

Ein sauberes Muster für „liste jedes Gerät auf, das jemals auf diesem Host war, mit Anzeigenamen, Kategorie und PnP-Instanz":

$containers = Import-Csv .\HOST_amcache_DeviceContainers.csv
$pnps       = Import-Csv .\HOST_amcache_DevicePnps.csv
 
# Über InstanceId joinen, wo vorhanden
$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

Das produziert eine Pro-Gerät-Tabelle, die dramatisch leichter zu überfliegen ist als rohe Enum\USB-Exporte.


USB-Massenspeicher-Fokus#

Für die klassische „Hat sich am $DATUM ein USB-Laufwerk mit diesem Host verbunden?"-Frage filtern Sie auf Speicherkategorien:

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

Für jede verbleibende Zeile querverweisen Sie mit Enum\USBSTOR für die maßgebliche Seriennummer und Erst-/Letzt-Connect-Zeitstempel. Amcache liefert Ihnen eine schnelle Triage-Sicht; USBSTOR liefert Ihnen das beweistaugliche Detail.


Ermittlungs-Anwendungsfälle#

Insider-Bedrohungs-Triage für Daten-Exfiltration#

Ein häufiges Szenario: Sie vermuten, dass ein Mitarbeiter Daten auf ein USB-Laufwerk kopiert hat, bevor er gekündigt hat. Die Amcache-Geräteliste gibt Ihnen eine chronologische Sicht jedes Speichergeräts, das der Host gesehen hat, typischerweise über viele Monate.

Muster:

  1. Filtern Sie aus DeviceContainers.csv auf Speicherkategorien.
  2. Sortieren Sie absteigend nach KeyLastWriteTimestamp.
  3. Identifizieren Sie jedes Gerät, dessen Last-Seen-Zeit ins Verdachtsfenster fällt.
  4. Pivotieren Sie zu USBSTOR für die Seriennummer, dann zur NTUSER.DAT-Mount-Point-Historie für diese Seriennummer, um das Benutzerkonto zu bestätigen, das es eingebunden hat.
  5. Querverweisen Sie mit Dateisystem-Zugriffs-Zeitstempeln für interessierende Dateien im selben Fenster.

Nicht autorisierte Peripherie-Verbindung#

Für Umgebungen, in denen Peripherie durch Richtlinien beschränkt ist (Drucker, Audiogeräte, Netzwerkspeicher), ist Amcaches InventoryDeviceContainer ein schneller Scan auf nicht-konforme Geräte:

Import-Csv .\HOST_amcache_DeviceContainers.csv |
  Where-Object {
    $_.Manufacturer -notmatch '^(YourCompany|YourApprovedVendor)' -and
    $_.Categories   -match 'Printer|Display'
  } |
  Select-Object FriendlyName, Manufacturer, Categories, KeyLastWriteTimestamp

Passen Sie die Allowlist an Ihre Umgebung an.

Bluetooth-Paarungshistorie#

DiscoveryMethod = BluetoothPairing-Zeilen zeigen jedes Gerät, das über Bluetooth gekoppelt wurde, mit Anzeigenamen. Nützlich für „Hat der Benutzer sein Telefon / persönliches Headset / persönliche Tastatur gekoppelt?"-Fragen in regulierten Umgebungen.

Identifizierung gefälschter / unbekannter Geräte#

Eine Zeile in DevicePnps.csv, deren BusReportedDescription generisch ist („USB Device", „Unknown Device") und deren Manufacturer leer oder ohne Marke ist, gepaart mit einer DeviceContainers.csv-Zeile ohne FriendlyName, ist oft ein bösartiges oder gefälschtes HID-Gerät — ein „BadUSB"-Pen-Test-Tool, ein markenloses Tastaturen-Emulator oder ein bösartiges Datenkabel.


Grenzen und Vorbehalte#

KeyLastWriteTimestamp ist nicht „erste Verbindung"#

Es ist „letzte Aktualisierung". Für ein Gerät, das sich regelmäßig verbindet, sehen Sie neuere Zeitstempel. Für ein Gerät, das sich vor einem Jahr einmal verbunden hat, sehen Sie den ein Jahr alten Zeitstempel. Für Erst-Connect-Zeitstempel parsen Sie setupapi.dev.log.

Nicht jedes Gerät hinterlässt einen Amcache-Eintrag#

Geräte, die sich verbinden und sofort wieder trennen zwischen Appraiser-Läufen, werden möglicherweise nie inventarisiert. Für USB-Untersuchungen mit kurzem Fenster (Sekunden bis Minuten) sind setupapi.dev.log und USBSTOR zuverlässiger.

Anzeigenamen sind Hersteller-kontrolliert#

Der FriendlyName ist das, was das Gerät Windows mitteilt, das es ist. Ein bösartiges USB-Gerät kann behaupten, „Microsoft Wireless Mouse" zu sein, und Windows zeigt diesen Namen an. Paaren Sie es mit BusReportedDescription und physischer Inspektion.

Einige Kategorien sind verrauscht#

InventoryDeviceContainer zeichnet virtuelle Geräte, Software- Audio-Endpoints und plattforminterne Geräte neben echter Peripherie auf. Filtern Sie auf Categories und darauf, ob IsPaired oder Manufacturer gesetzt ist, um das Rauschen zu reduzieren.


Siehe auch#

Um die Gerätehistorie in Ihrer eigenen Hive zu erkunden, ohne etwas zu installieren, legen Sie eine Datei auf der Startseite des Parsers ab — sie parst vollständig in Ihrem Browser.

Verwandte Beiträge

Zurück zu allen Beiträgen