AmcacheParser-Ausgabespalten erklärt: jedes CSV-Feld dekodiert

AmcacheParser schreibt eine andere CSV pro Inventory*-Kategorie. Die meisten Analysten verbringen 90 % ihrer Zeit in zwei dieser Dateien — *_UnassociatedFileEntries.csv und *_AssociatedFileEntries.csv — aber jede Spalte in jeder Datei ist potenziell nützlich. Dies ist die Referenz dafür, was jede einzelne bedeutet.

Für den breiteren Kontext zum Tool siehe den vollständigen AmcacheParser-Leitfaden.


Die sieben CSV-Dateien#

Nach einem typischen Lauf mit --csv .\out sehen Sie:

Datei Quell-Schlüssel Typische Zeilenanzahl
*_AssociatedFileEntries.csv Root\InventoryApplicationFile, verknüpft mit einer InventoryApplication Hunderte bis Tausende
*_UnassociatedFileEntries.csv Root\InventoryApplicationFile ohne Eltern-Anwendung Hunderte bis Tausende
*_ProgramEntries.csv Root\Programs (alte Liste installierter Software) niedrige Hunderte
*_ShortcutEntries.csv Root\InventoryApplicationShortcut Dutzende
*_DriverBinaries.csv Root\InventoryDriverBinary Hunderte
*_DevicePnps.csv Root\InventoryDevicePnp Hunderte
*_DeviceContainers.csv Root\InventoryDeviceContainer Dutzende

Die Unassociated-Datei ist die, auf die die meisten Analysten zuerst pivotieren: dort landen typischerweise ad-hoc heruntergeladene Binaries, Angreifer-Tooling und einmalige Skripte, weil sie nie durch ein registriertes Produkt installiert wurden.


Dateieintrags-Spalten (Associated / Unassociated)#

Die beiden Dateieintrags-CSVs teilen sich dasselbe Schema. Spalten, die Sie in fast jedem Fall verwenden werden:

Identität & Pfad#

Spalte Bedeutung Hinweise
ApplicationName Anzeigename, von Windows aufgelöst Oft leer für nicht zugeordnete Einträge.
ProgramId 44-Zeichen-Windows-Programm-Identitäts-Hash Pivotieren Sie zu Root\InventoryApplication, um den Datensatz des installierten Produkts zu finden.
FileId "0000" + SHA-1 hex der ersten 31 MiB der Datei Entfernen Sie den 0000-Präfix, um einen SHA-1 zu erhalten, den Sie an VirusTotal / TI-Feeds übermitteln können.
Hash Bequemkopie des SHA-1 ohne Präfix Verwenden Sie diese Spalte, nicht FileId, wenn Sie gegen externe Hash-Feeds joinen.
Name Nur Dateiname kernel32.dll, mimikatz.exe, etc.
FullPath Vollständiger Pfad zur Inventarzeit Wenn der Pfad \Users\ oder \AppData\ enthält und Publisher leer ist, schauen Sie genau hin.
Publisher Publisher-String aus der PE-Signatur / Ressource Leer für unsignierte Binaries.
PublisherName Freundlicherer Publisher-Anzeigename Manchmal befüllt, wenn Publisher der X.509-CN ist.
BinaryType Architektur / Art (pe32, pe64, pe32_arm, ...) Nützlich zum Filtern von nativem vs. managed PE.

Zeitstempel#

Amcache ist eine Goldgrube an Zeitstempeln, aber sie bedeuten verschiedene Dinge. Diese Unterscheidung richtig zu machen oder Sie werden Befunde falsch datieren.

Spalte Was es ist Nicht verwechseln mit
KeyLastWriteTimestamp Registry-Last-Write des umschließenden Schlüssels „Wann die Datei inventarisiert wurde." Das Naheste an einer echten „Amcache-Zeit."
LinkDate PE-Header TimeDateStamp, zur Kompilier-/Link-Zeit gesetzt „Wann die Datei erstellt wurde" — vom Compiler gesetzt, angreiferkontrollierbar und häufig gefälscht.
BinFileVersion / ProductVersion Versionsstrings aus der PE-Ressource Das sind keine Zeitstempel.
LastModified Manche Amcache-Schemata exponieren ein letztes-Änderungs-FILETIME Nicht in jeder Schema-Version vorhanden; als Best-Effort behandeln.

Der richtige „Wann"-Pivot für Amcache ist KeyLastWriteTimestamp. LinkDate ist fantastisch zum Gruppieren von Binaries (alle Binaries, die der Angreifer am selben Tag kompiliert hat, clustern zusammen), aber es ist kein Signal für „dieses Binary wurde zu dieser Zeit auf diesem Host platziert".

Version / Metadaten#

Spalte Bedeutung
BinFileVersion PE VS_FIXEDFILEINFO.dwFileVersion
BinProductVersion PE VS_FIXEDFILEINFO.dwProductVersion
ProductName PE-Ressource ProductName
ProductVersion PE-Ressource ProductVersion (String-Form)
FileVersionString PE-Ressource FileVersion
Language PE-Ressourcen-Sprach-ID
Size Dateigröße in Bytes

Flags#

Spalte Bedeutung Standard-Filter
IsPeFile True, wenn Amcache die Datei als PE klassifiziert hat Filtern Sie auf True, wenn Sie nach ausführbaren Artefakten jagen.
IsOsComponent True, wenn die Datei zu Windows selbst gehört Filtern Sie auf False, außer -i wurde übergeben; OS-Komponenten sind laut.

Lifecycle / Inventar-Metadaten#

Spalte Bedeutung
Usn USN-Journal-Eintrag, der zur Inventarzeit mit der Datei verknüpft war
Description Freitext-Beschreibung, oft aus der PE-Ressource
LongPathHash Hash, den Amcache intern für Pfad-Deduplizierung nutzt
MsiInstallDate Wann das Eltern-MSI installiert wurde (falls vorhanden)
MsiPackageCode MSI-Paket-GUID

ProgramEntries.csv (alter Programs-Schlüssel)#

Der alte Root\Programs-Schlüssel ist älter als das Inventory*-Schema und ist sparsamer. Die am häufigsten verwendeten Spalten:

Spalte Bedeutung
ProgramId Dieselbe 44-Zeichen-Identität, die in den Dateieintrags-CSVs verwendet wird
LastWriteTimestamp Registry-Last-Write des Eintrags
Name Programm-Anzeigename
Version Programmversion
Publisher Publisher-String
InstallDate Installationsdatum (FILETIME → ISO-8601)
LanguageCode LCID
InstallSource Quellpfad (CD, Netzwerkfreigabe, Downloads-Ordner)
UninstallString Kommandozeile, die das Programm deinstallieren würde
RootDirPath Installationsverzeichnis
Source MSI, AddRemoveProgram, etc.

InstallSource ist die Geheimwaffe hier: er zeichnet manchmal die Netzwerkfreigabe oder Download-URL auf, von der der Installer gezogen wurde, was unbezahlbar ist, wenn Sie Lieferketten- oder Social-Engineering-Eindringungen untersuchen.


DriverBinaries.csv#

Für Kernelmode-Artefakte. Spalten:

Spalte Bedeutung
KeyLastWriteTimestamp Inventarzeit
DriverName Treiber-Dateiname
Inf Quell-.inf
DriverVersion Treiber-Versionsstring
Product Produktname aus der PE-Ressource des Treibers
ProductVersion Produktversion
WdfVersion Windows Driver Framework-Version, falls anwendbar
DriverCompany Unternehmens-String
DriverPackageStrongName Strong Name
Service Verknüpfter Dienstname
DriverSigned Ob der Treiber behauptete, signiert zu sein
DriverIsKernelMode True für Kernelmode-Treiber
DriverType legacy, pnp, service, ...
DriverTimeStamp PE-Linkdatum des Treibers
Hash SHA-1 des Treiber-Binaries

Für BYOVD-Untersuchungen (Bring-Your-Own-Vulnerable-Driver), sortieren Sie nach DriverTimeStamp und suchen Sie nach alten-aber-signierten Treibern, die kürzlich auf dem Host erschienen sind.


DeviceContainers.csv#

Historie verbundener Geräte. Relevanteste Spalten:

Spalte Bedeutung
KeyLastWriteTimestamp Wann der Geräte-Datensatz zuletzt berührt wurde
Categories Gerätekategorien (Drucker, Display, Netzwerk, ...)
DiscoveryMethod Wie Windows das Gerät enumeriert hat
FriendlyName „Brother HL-L2350DW", „Logitech BRIO", ...
Manufacturer Vendor-String
ModelName / ModelNumber Modell-Bezeichner
IsConnected Zuletzt-verbunden-Flag zur Inventarzeit
IsPaired Gekoppelt (Bluetooth, etc.)
Icon Pfad zur Geräte-Icon-Ressource

Diese Datei beantwortet oft „hat sich Gerät X jemals mit diesem Host verbunden?" ohne sich durch Setup-Logs wühlen zu müssen.


DevicePnps.csv#

PnP-Enumerations-Datensätze — eine Zeile pro Geräteschnittstelle. Die in DFIR nützlichsten Spalten:

Spalte Bedeutung
KeyLastWriteTimestamp Wann der PnP-Datensatz zuletzt berührt wurde
BusReportedDescription Was das Gerät Windows mitteilte zu sein
DeviceClass Treiber-Klassen-GUID
DeviceId / InstanceId PnP-Instanz-Identifikator
Manufacturer Vendor-String
Service Treiber-Dienst
DriverName Treiber-Datei hinter dem Gerät

Verknüpfen Sie hier InstanceId mit der passenden Zeile in DeviceContainers.csv, um sowohl den benutzerseitigen Namen als auch die technischen IDs zu erhalten.


ShortcutEntries.csv#

Jede Startmenü-/angepinnte Verknüpfung, die Windows kennt, mit der entsprechenden ProgramId und dem Inventar-Zeitstempel. Weniger für Incident Response, aber praktisch für Fragen wie „was hatte der Benutzer am $DATE angepinnt".


Pivots, die ihr Geld verdienen#

Einige Spalten-übergreifende Muster, die immer wieder auftauchen:

  1. Hash überall. Nehmen Sie Hash aus *_UnassociatedFileEntries.csv und greppen Sie ihn in *_AssociatedFileEntries.csv, dem Prefetch-CSV des Hosts und den Sysmon-1/7-Events. Ein Binary, das in Amcache, aber nie in Prefetch auftaucht, ist „präsent, aber nie ausgeführt" — ein sehr anderer Befund als „ausgeführt".

  2. Publisher leer + Pfad unter \Users\. Das ist der einzelne produktivste Triage-Filter bei einer typischen Commodity-Malware-Untersuchung.

  3. LinkDate-Clustering. Sortieren Sie alle nicht zugeordneten PE-Einträge nach LinkDate und suchen Sie nach engen Clustern von 3–10 Binaries mit demselben Kompilier-Tag. Das ist oft ein einzelner Angreifer-Tool-Drop.

  4. InstallSource-URLs in ProgramEntries. Wann immer Sie ein verdächtiges Programm sehen, prüfen Sie seine InstallSource — sie zeigt oft direkt auf den Auslieferungsvektor.

  5. KeyLastWriteTimestamp-Fenster-Join. Joinen Sie alle CSVs auf ein Ein-Stunden-Fenster um die vermutete Initial-Access-Zeit und Sie erhalten das vollständige Bild dessen, was Windows während der Eindringung inventarisiert hat.


Siehe auch#

Möchten Sie diese Spalten auf Ihrer eigenen Hive sehen, ohne etwas zu installieren? Legen Sie die Datei auf die Startseite des Parsers — sie parst vollständig in Ihrem Browser.

Verwandte Beiträge

Zurück zu allen Beiträgen