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.DATpro 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 -DescendingDas 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 -DescendingFü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:
- Filtern Sie aus
DeviceContainers.csvauf Speicherkategorien. - Sortieren Sie absteigend nach
KeyLastWriteTimestamp. - Identifizieren Sie jedes Gerät, dessen Last-Seen-Zeit ins Verdachtsfenster fällt.
- Pivotieren Sie zu
USBSTORfür die Seriennummer, dann zurNTUSER.DAT-Mount-Point-Historie für diese Seriennummer, um das Benutzerkonto zu bestätigen, das es eingebunden hat. - 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, KeyLastWriteTimestampPassen 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#
- Vollständige Amcache-Referenz — das Artefakt vollständig.
- Amcache-Registry-Struktur —
wo
InventoryDeviceContainerundInventoryDevicePnpin der Hive sitzen. - AmcacheParser-Ausgabespalten erklärt
— jedes Feld in
*_DeviceContainers.csvund*_DevicePnps.csv. - Amcache für die Malware-Untersuchung — das binär-fokussierte Triage-Playbook (paaren Sie es mit Gerätehistorie für die vollständige Host-Triage).
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
- Volatility und Amcache: die Hive aus Speicherabbildern extrahieren
Ein praktischer Leitfaden zur Wiederherstellung von Amcache aus einem Windows-Speicherabbild mit Volatility — wann speicherseitige Wiederherstellung die einzige Option ist, welche Plugins zu verwenden sind und wie an AmcacheParser übergeben wird.
- RegRipper amcache-Plugin: was es tut und wann man es verwendet
Ein praktischer Leitfaden zum amcache-Plugin von RegRipper — was es parst, wie sich seine Text-Ausgabe von AmcacheParsers CSV unterscheidet und wann man darauf zurückgreift statt (oder zusätzlich zum) Zimmerman-Tool.
- AmcacheParser-Ausgabespalten erklärt: jedes CSV-Feld dekodiert
Eine Feld-für-Feld-Referenz für die CSV-Ausgabe von AmcacheParser — FileId, PathHash, ProgramId, LinkDate, BinFileVersion, IsPeFile und jede andere Spalte, mit den Pivots, die in DFIR zählen.
- AmcacheParser-Download-Leitfaden: offizielle Quellen, Mirrors und Verifizierung
Alle Wege, AmcacheParser von Eric Zimmerman herunterzuladen — Get-ZimmermanTools, direkter Download, KAPE, Velociraptor — mit Prüfsummen-Verifizierung und Air-Gap-Installationsmustern.