Skip to content

BAM vs. UserAssist: zwei benutzerbezogene Ausführungsspuren

BAM und UserAssist ordnen Programmausführung einem Benutzer zu. Vergleich von Speicherort, Zeitstempeln, Zählern, GUI- und Hintergrundstarts sowie Aufbewahrung.

Veröffentlicht am 6 Min. Lesezeit

TL;DR. Beide Artefakte sagen, welcher Benutzer was gestartet hat. BAM (SYSTEM-Hive, pro SID) erfasst Prozesse unabhängig davon, wie sie gestartet wurden – außer Wechsel-/Netzwerkpfaden und aus der Kommandozeile gestarteten Konsolenprogrammen –, behält aber nur den letzten Zeitstempel für etwa eine Woche. UserAssist (das NTUSER.DAT jedes Benutzers) sieht nur Starts über die Explorer-Shell, ergänzt aber Ausführungszähler, Fokuszähler und Fokuszeit und behält sie viel länger. Widersprechen sie sich, liegt es meist an der Startmethode.

Die meisten Vergleiche stellen BAM neben systemweite Artefakte (Prefetch, ShimCache, Amcache). Spannender ist der Nachbar UserAssist, das andere klassische benutzerbezogene Ausführungsartefakt. Hintergrund zu BAM: der komplette BAM/DAM-Leitfaden.

Auf einen Blick

BAMUserAssist
HiveSYSTEM (eine Datei pro Host)NTUSER.DAT (eines pro Benutzerprofil)
SchlüsselServices\bam\State\UserSettings\<SID>Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count
ZuordnungSchlüsselname = SIDDer Hive gehört dem Benutzer
WertnameNT-Gerätepfad oder PaketnameMit ROT13 verschleierter Pfad, oft mit Known-Folder-GUID
ZeitstempelEin FILETIME (zuletzt erfasste Aktivität)FILETIME der letzten Ausführung
ZählerKeineAusführungszähler, Fokuszähler, Fokuszeit
Was erfasst wirdVon bam.sys gesehene Prozesse (ab Windows 10 1709)Starts über die Explorer-Shell
Aufbewahrung~7 Tage, Bereinigung beim StartLange
Blinde FleckenWechsel-/Netzwerkpfade, Konsolen-Tools aus der KommandozeileAlles, was nicht über den Explorer gestartet wird

Quellen: Suhanov, BAM internals; libyal winreg-kb, UserAssist; Didier Stevens, UserAssist.

UserAssist in zwei Minuten

Unter UserAssist verfolgt jeder GUID-Unterschlüssel eine Kategorie; ab Windows 7 deckt {CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} Starts ausführbarer Dateien und {F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} Starts von Verknüpfungen ab (libyal). Die Wertnamen sind der Programmpfad mit ROT13 auf den Buchstaben – P:\Jvaqbjf\... steht für C:\Windows\.... Pfade beginnen oft mit einer Known-Folder-GUID statt mit einem Laufwerksbuchstaben.

Die Wertdaten (72 Bytes ab Windows 7) enthalten den Ausführungszähler an Offset 4, den Fokuszähler an Offset 8, die Fokuszeit an Offset 12 und den FILETIME der letzten Ausführung an Offset 60 (libyal). libyal führt auf, was der Schlüssel erfasst: Starts über Systemsteuerung, Startmenü und Verknüpfungen, den Ausführen-Dialog, Tastenkürzel, Quick Launch und ähnliche Explorer-Wege.

Einen Wertnamen von Hand dekodieren

ROT13 verschiebt jeden Buchstaben um 13 Stellen und lässt Ziffern und Satzzeichen unverändert – es ist also seine eigene Umkehrung. Nehmen Sie diesen UserAssist-Wertnamen:

P:\Jvaqbjf\Flfgrz32\pzq.rkr

Verschieben Sie die Buchstaben um 13 zurück, und Sie erhalten C:\Windows\System32\cmd.exe. Jedes UserAssist-Tool erledigt das für Sie, aber das Muster zu erkennen hilft, wenn Sie einen rohen Hive in einem Viewer durchblättern oder eine Suche nach cmd.exe im rohen Hive nichts findet: Der Klartextname ist dort nicht gespeichert.

BAM in zwei Minuten

Ein Schlüssel pro SID im SYSTEM-Hive, ein REG_BINARY pro ausführbarer Datei, die ersten 8 Bytes ein FILETIME, der bei Prozessstart und -ende aktualisiert wird; etwa sieben Tage Aufbewahrung; nichts für Wechseldatenträger oder Netzwerkfreigaben (Suhanov). Details: wo der BAM-Schlüssel liegt und das Werteformat.

Wo sie sich widersprechen – und warum

Gesehen inTypische Ursache
Nur BAMVon einem Skript, einer Kommandozeile (keine Konsolenprogramme), einem Dienst oder einer Aufgabe unter dem Benutzer oder per Fernausführung gestartet; oder UserAssist wurde geleert
Nur UserAssistÄlter als BAMs Woche; von USB-Stick oder Netzwerkfreigabe gestartet (Explorer-Start, aber BAM schließt den Pfad aus); ausführbare Datei gelöscht und Host neu gestartet
BeideKürzlich über den Explorer von einer lokalen Platte gestartet
KeinesKonsolenprogramm aus cmd.exe/PowerShell gestartet, oder beide bereinigt

In der ersten Zeile verdient sich BAM seinen Platz: Angreifer-Tools laufen selten über das Startmenü. Im fiktiven Lateral-Movement-Fall sind PsExec64.exe und rclone.exe unter svc_backup genau die Art von Starts, die man in UserAssist nicht erwarten würde, während BAM sie zeigt.

In der zweiten Zeile verdient sich UserAssist seinen: Historie. Begann der Vorfall drei Wochen vor der Sicherung, ist BAM für die frühe Phase wahrscheinlich leer, während UserAssist den ersten Start eines Tools samt Zähler noch zeigen kann.

Unterschiedliche Hives, unterschiedliche Sicherung

  • BAM: ein SYSTEM-Hive (+ Protokolle) deckt alle Benutzer des Hosts ab.
  • UserAssist: ein NTUSER.DAT (+ ntuser.dat.LOG1/LOG2) pro Profil unter C:\Users\<Name>\. Gelöschte Profile nehmen ihr UserAssist mit; die BAM-Schlüssel dieser SID liegen in SYSTEM und können das Profil daher bis zur Bereinigung überdauern.

Eine KAPE-Sammlung mit Registry-Targets erfasst meist beides (KapeFiles). Unser BAM/DAM Parser übernimmt die SYSTEM-Seite; NTUSER.DAT-Artefakte wie UserAssist lesen Sie mit Registry Parser oder den Tools aus dem Parser-Vergleich.

Zeitstempel: vorsichtig vergleichen

Beide sind FILETIMEs in UTC, bedeuten aber nicht dasselbe:

  • Die letzte Ausführung in UserAssist wird geschrieben, wenn der Explorer das Programm startet.
  • BAM wird bei Erzeugen und Beenden des Prozesses aktualisiert und kann für denselben Lauf später als die UserAssist-Zeit liegen, wenn das Programm geöffnet blieb.

Eine BAM-Zeit einige Stunden nach der UserAssist-Zeit für denselben Pfad ist also kein Widerspruch; es kann das Schließen des Programms sein.

Anti-Forensik

Beides sind gewöhnliche Registry-Daten. UserAssist-Werte kann der Benutzer selbst oder ein Bereinigungsprogramm löschen, da der Hive ihm gehört; BAM-Einträge lassen sich mit ausreichenden Rechten löschen und verschwinden von selbst nach einer Woche oder wenn die ausführbare Datei gelöscht und der Host neu gestartet wird (Grenzen von BAM). Ein Benutzer mit leerem UserAssist, während BAM interaktiv wirkende Programme (Browser, Office) zeigt, verdient einen zweiten Blick.

Checkliste für die Untersuchung

  1. BAM für jede SID des Hosts auswerten (ein SYSTEM-Hive deckt alle ab).
  2. UserAssist aus dem NTUSER.DAT jedes Profils auswerten, auch von Konten, die Sie für irrelevant halten.
  3. Für jedes relevante Programm notieren: in BAM? in UserAssist? Zähler? letzte Zeiten in beiden?
  4. Jeden Widerspruch mit der Tabelle oben erklären (Startmethode, Alter, Pfadtyp), bevor Sie etwas als verdächtig einstufen.
  5. Für Zeilen, die dann noch nicht aufgehen, Prefetch und Ereignisprotokolle hinzuziehen.

Häufige Fragen

Was ist der Unterschied zwischen BAM und UserAssist?

BAM liegt im SYSTEM-Hive, ein Schlüssel pro SID, mit einem einzigen aktuellen Zeitstempel pro ausführbarer Datei und etwa einer Woche Aufbewahrung. UserAssist liegt im NTUSER.DAT jedes Benutzers, erfasst Starts über die Explorer-Shell und speichert Zähler, Fokuszeit und letzte Ausführungszeit deutlich länger.

Warum erscheint ein Programm in BAM, aber nicht in UserAssist?

UserAssist erfasst Starts über die Explorer-Shell (Startmenü, Desktop, Verknüpfungen, Ausführen-Dialog). Programme, die von einem Skript, einer Kommandozeile, einem Dienst oder einem Fernwerkzeug gestartet werden, laufen nicht über diese Wege, können aber dennoch einen BAM-Eintrag erzeugen.

Verwandte Artikel