SHA-1 in der Amcache: von der Platte zum Threat Intel pivotieren

Die wertvollste Bytefolge in Amcache.hve ist der FileId-Wert unter InventoryApplicationFile. Es ist ein SHA-1 der Dateiinhalte, präfixiert mit vier Nullen (0000) aus historischen Gründen, die heute keine Rolle mehr spielen. Streifen Sie das Präfix ab und Sie haben einen Hash, den Sie an jeden Threat-Intel-Feed dieser Welt schicken können.

Das unterscheidet die Amcache von fast jedem anderen Windows-Artefakt. Der Shimcache gibt Ihnen einen Pfad und einen Zeitstempel. Prefetch gibt Ihnen einen Run-Count und einen Hash des Pfads. Die MFT gibt Ihnen Metadaten über die Datei zu einem Zeitpunkt. Die Amcache gibt Ihnen den tatsächlichen Inhalts-Fingerprint der Datei, von Windows selbst berechnet, persistiert in einer Registry-Hive, die das Löschen der Datei übersteht.

Dieser letzte Punkt ist das, was Fälle abschließt.

Warum Hashes das Löschen überleben und Pfade nicht#

Wenn Appraiser nach Plan das Dateisystem durchläuft (Microsoft\Windows\Application Experience\Microsoft Compatibility Appraiser), berechnet er SHA-1 über den Dateiinhalt und schreibt das Ergebnis in die Hive. Dieser Wert sitzt da, bis jemand gezielt den Subkey löscht. Wenn der Operator loader.exe ablegt, ausführt und entfernt, ist die Datei aus der MFT nach einigen Schreibvorgängen weg, weg aus dem USN-Journal, sobald das Journal umläuft, weg aus dem Prefetch, sobald der Cache das nächste Mal beschnitten wird. Die Amcache-Zeile mit ihrem SHA-1 persistiert auf unbestimmte Zeit. Ich habe FileIds von Hosts gezogen, auf denen die Originalbinärdatei sechs Monate zuvor gelöscht worden war.

Es gibt Grenzen, und Sie sollten sie kennen, bevor Sie den Satz in Ihren Bericht schreiben:

  • Wenn die Compatibility-Appraiser-Task deaktiviert war, wurde die Binärdatei nie gehasht. Keine Zeile, kein FileId, kein Pivot.
  • Wenn der Angreifer die Binärdatei innerhalb eines einzigen Appraiser-Scan-Fensters abgelegt, ausgeführt und gelöscht hat, wurde die Datei nie gehasht. Gleiche Folge.
  • Wenn der Angreifer den Subkey unter InventoryApplicationFile explizit gelöscht hat, hat die Live-Hive nichts. Die Transaktionslogs (Amcache.hve.LOG1 / Amcache.hve.LOG2) haben oft noch etwas. Greifen Sie sie ab und spielen Sie nach.

Das Hashing ist SHA-1, das für Kollisionsangriffe kryptografisch gebrochen ist, aber als Inhalts-Identifier für DFIR völlig in Ordnung ist. Niemand entwickelt Chosen-Prefix-Kollisionen gegen Ihre Registry-Hive. Wenn Ihnen jemand sagt, SHA-1 in der Amcache sei "nicht vertrauenswürdig", verwechselt er zwei verschiedene Bedrohungsmodelle.

Der Pivot, vollständig#

Ein echter Workflow auf einem Host, den ich für kompromittiert halte:

  1. Hive und ihre Logs erfassen. Replay. Parsen.
  2. Jedes (FileId, OriginalFileName, LowerCaseLongPath, KeyLastWrite)-Tupel aus InventoryApplicationFile ausgeben. Das ist das Arbeitsset, typischerweise ein paar tausend Zeilen auf einer Workstation, Zehntausende auf einem lange laufenden Server.
  3. Das 0000-Präfix von jedem FileId abstreifen. Die übrigen 40 Hex-Zeichen sind ein normaler SHA-1.
  4. Per Pfad triagieren. Erst auf benutzerschreibbare Verzeichnisse filtern (\Users\*\AppData\, \ProgramData\ außerhalb von Vendor-Subdirs, C:\Windows\Temp\, C:\PerfLogs\, C:\$Recycle.Bin\). Alles in C:\Windows\System32\ von einer signierten Microsoft-Binärdatei ist selten der Start einer Untersuchung, auch wenn Sie die Ausreißer später trotzdem per Hash prüfen sollten.
  5. Die überlebenden Hashes per Batch an VirusTotal, Ihre interne Sandbox, MalwareBazaar, die Reputation-API Ihres EDR-Anbieters und den kommerziellen Feed Ihres Vertrauens einreichen. Die zwei kostenlosen öffentlichen Dienste, die ich am meisten nutze, sind VirusTotal und abuse.chs MalwareBazaar; beide nehmen SHA-1.
  6. Antworten bucketn. Known-bad geht direkt in die IOC-Liste. Unbekannte-aber-verdächtige Pfade werden für Sandbox-Detonation nach vorne gezogen, falls Sie die Binärdatei noch auf einem Peer-Host oder in einem Backup finden. Known-good signierte Binärdateien werden vermerkt und fallen weg.
  7. Alles, was bei Threat Intel getroffen hat, wird zu einem Sweep über den restlichen Bestand. Die FileId ist der IOC. Suchen Sie jede andere Amcache, die Sie in die Hände bekommen, nach demselben SHA-1 ab.

Schritt 7 ist der, den die meisten unterverkaufen. Die Amcache ist pro Host, aber die FileIds sind universell. Wenn e3b0c44... auf dem Patient-Zero-Host auftauchte, wird er da auftauchen, wo der Operator ihn als Nächstes abgelegt hat, und die Amcache fängt das oft selbst dann ein, wenn die Binärdatei nicht mehr da ist. Bulk-Amcache-Sammlung über ein Unternehmen (KAPE-Collection-Target, Velociraptor-Hunt, die Datei-Sammelfähigkeit Ihres Lieblings-EDR) gefolgt von einer SHA-1-Suche ist ein skalierender Workflow.

Die Falsch-Positiven, die Ihnen den Tag verderben#

Commodity-Offensiv-Tooling verseucht hash-basierte Pivots. Zwei konkrete Muster:

Das erste sind über Red Teams geteilte Infrastrukturen. PsExec ist das kanonische Beispiel: SHA-1s von psexec.exe und psexesvc.exe leuchten bei VirusTotal auf, weil jeder Detection-Anbieter sie als "Hacktool", "Remote-Admin-Tool" oder ähnlich getaggt hat, aber sie sind auch signierte Sysinternals-Binärdateien, die in der halben Welt von IT-Abteilungen verwendet werden. Der Hash ist echte Malware-Nähe, aber der Host-Kontext entscheidet, ob es zählt. Gleiche Geschichte für procdump.exe, nircmd.exe, 7za.exe und den Großteil des LOLBAS- / GTFOBins-Katalogs.

Das zweite sind geteilte Loader. Standard-Beacon-Stager von Cobalt Strike, Sliver-Implants ohne Neukompilierung und Metasploit-Shellcode-Runner werden über Tausende von Engagements wiederverwendet. Ein Treffer auf einen Cobalt-Strike-Default-Config-Beacon-Hash bedeutet "jemand hat ein Off-the-Shelf-C2 ausgerollt", nicht "Sie stehen demselben Bedrohungsakteur gegenüber wie im FireEye-Bericht". Vorsicht bei Attribution aus einem Hash allein.

Der defensive Workflow ist, jeden Threat-Intel-Treffer auf ein Commodity-Tool als gelbe Flagge zu behandeln, nicht als rote. Schauen Sie auf LowerCaseLongPath. Ein signiertes PsExec unter C:\Program Files\Sysinternals\ ist etwas anderes als ein umbenanntes PsExec namens chrome_helper.exe unter \AppData\Local\Temp\. Der Hash ist derselbe; der Kontext entscheidet alles.

Vom Angreifer kontrollierte Felder sind nicht der Hash#

LinkDate ist der IMAGE_FILE_HEADER.TimeDateStamp des PE-Headers. Es ist, was auch immer der Compiler gestempelt hat, was wiederum ist, was der Angreifer dem Compiler gesagt hat. In der Hälfte der Commodity-Malware auf 1970-01-01 gesetzt, in besseren Samples auf einen plausibel aussehenden 2019-Wert, in den polierten so gesetzt, dass er einer Microsoft-Binärdatei entspricht. Bauen Sie keine Timelines darauf.

OriginalFileName und ProductName stammen aus dem PE-Version-Resource. Auch vom Angreifer kontrolliert. Weniger oft manipuliert als LinkDate, weil das Anfassen von Version-Resources die Codesignierung brechen und Installer-Logik kaputt machen kann, aber ich habe OriginalFileName = svchost.exe auf Klartext-Mimikatz-Droppern mehr als einmal gesehen.

FileId wird vom Betriebssystem berechnet, nachdem die Datei auf der Platte gelandet ist. Der Angreifer kann es nicht beeinflussen, ohne die Binärdatei neu zu bauen, womit die neue Datei eine andere Datei mit einem anderen Hash ist, was genau das ist, was Sie für die Verfolgung wollen.

Size ist dateisystem-wahr. Mismatches zwischen Size und dem, was eine bekannt-gute Kopie der vermeintlich gleichen Binärdatei haben sollte, sind eine billige Methode, gepatchte oder trojanisierte Systemdateien zu flaggen.

Hash-Pivoting im großen Maßstab, kurz#

Wenn Sie das über Tausende von Hosts machen:

  • Amcache-Hives über Velociraptor (Windows.Forensics.Amcache), KAPE (Target Amcache) oder die File-Collection-Fähigkeit Ihres EDR sammeln. Alle drei handhaben die Dateisperre korrekt. Verwenden Sie nicht xcopy gegen eine Live-Hive.
  • Auf eine einzige Hash-Spalte normalisieren. Manche Parser behalten das 0000-Präfix, andere streifen es ab. Eine Form wählen und durchsetzen.
  • Per Batch an den /files/{hash}-Endpunkt der VirusTotal-v3-API senden, mit Rate-Limits. Antworten cachen. Ein SHA-1, den Sie diese Woche gesehen haben, muss nicht neu abgefragt werden.
  • Eine interne Allowlist signierter Microsoft-Hashes pflegen, die Sie bereits triagiert haben. Die Amcache liefert auf jedem Host dieselben OS-Binärdateien; Sie wollen nicht zehntausendmal auf cmd.exe schauen.
  • Treffer mit Prefetch, Sysmon EventID 1 (ProcessCreate, enthält den Binärhash) und EDR-Telemetrie querkorrelieren. Die Amcache sagt, die Datei war da. Die anderen Artefakte sagen, was sie getan hat.

Der Parser auf dieser Seite ist um diesen Workflow gebaut. Hive einlegen, Tabelle mit SHA-1s und Pfaden bekommen, in den Batch-Lookup von VirusTotal copy-paste. Kein Upload, was zählt, wenn die Hive aus einer regulierten Umgebung stammt, in der Hashes den Perimeter nicht verlassen sollen.

Weiterführende Quellen#

Verwandte Beiträge

Zurück zu allen Beiträgen