UserAssist¶
Was UserAssist ist¶
Der Windows-Explorer zählt die Programme und Verknüpfungen, die ein Benutzer über die Explorer-Shell startet: das
Startmenü, die Taskleiste, den Desktop und Doppelklicks in Ordnern. Er speichert die Zählerstände in der
NTUSER.DAT des Benutzers. Jedes Element hat:
- eine Ausführungsanzahl;
- unter Windows 7 und später, wie oft und wie lange (in Millisekunden) es den Fokus hatte;
- den Zeitpunkt der letzten Ausführung.
Die Wertnamen sind ROT13-kodiert. Der Name eines Programms beginnt meist mit der GUID eines bekannten Ordners
({1AC14E77-…} ist System32).
UserAssist zeigt, was ein bestimmter Benutzer interaktiv gestartet hat – etwas, das die meisten anderen Ausführungsbelege keinem Benutzer zuordnen.
Bestmögliche Schlussfolgerung: Der Benutzer hat dieses Programm bzw. diese Verknüpfung über den Explorer gestartet, so oft, zuletzt zu diesem Zeitpunkt. Auf andere Weise gestartete Programme (Befehls- zeile, Dienst, geplante Aufgabe, anderes Programm) werden nicht gezählt.
Speicherort¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\UserAssist\{GUID}\Count
| GUID | Enthält |
|---|---|
{CEBFF5CD-ACE2-4F4F-9178-9926F41749EA} |
Programme (executable), Windows 7 und später |
{F4E57C4B-2036-45F0-A9AB-443BCFE33D9F} |
Verknüpfungen (shortcut), Windows 7 und später |
{75048700-EF1F-11D0-9888-006097DEACF9} |
Programme und Verknüpfungen (active_desktop), Windows 2000 bis Vista |
{5E6AB780-7743-11CF-A12B-00AA004AE837} |
Internet-Symbolleiste (internet_toolbar), Windows 2000 bis Vista |
Andere GUIDs werden als other gemeldet. Sichern Sie NTUSER.DAT mit seinen Transaktionsprotokollen für jedes
Profil sowie den SOFTWARE-Hive des Systems, der die SID des Benutzers liefert.
Hinweise für die Analyse¶
- Neue Profile werden vorbelegt. Unter Windows 7 und später beginnt ein neues Profil mit Standardelementen (Erste Schritte, Rechner, Paint, Kurznotizen, …). Ihre Ausführungsanzahlen zählen von 14 abwärts, und sie teilen sich alle denselben Zeitpunkt der letzten Ausführung, ungefähr zum Zeitpunkt der Profilerstellung. Sie sind keine Benutzer- aktivität.
- Version 3 zählt ab 5 (Windows 2000 bis Vista). Der gespeicherte Zähler beginnt bei 5, daher wird 5
davon abgezogen. Ein gespeicherter Zähler unter 5 wird in
Problemsgemeldet. - Pfade verwenden den Standardpfad des bekannten Ordners (
%windir%\system32,%ProgramFiles%,%APPDATA%\…). Ein an einen anderen Ort umgeleiteter Ordner zeigt weiterhin seinen Standardpfad. App-IDs (Microsoft.Windows.Explorer,Microsoft.WindowsNotepad_8wekyb3d8bbwe!App) und Systemsteuerungs- elemente (::{…}) haben keinen Pfad. - Die Aufzeichnung kann deaktiviert werden mit
Explorer\AdvancedStart_TrackProgs= 0,Policies\ExplorerNoInstrumentation= 1 oderUserAssist\SettingsNoLog= 1. Die Zusammenfassung listet die Hives auf, in denen sie deaktiviert ist. Ein leeres oder fehlendes UserAssist bei einem aktiven Profil kann auf Anti-Forensik hindeuten. NoEncrypt= 1 veranlasst Windows, Namen ohne ROT13 zu schreiben. Solche Namen werden falsch dekodiert, daher vermerkt jedes Element dieses Hives dies inProblems(und auf stderr, wenn die Datensätze nach stdout gehen).- Zeitpunkt der letzten Ausführung und Zähler werden pro Element gespeichert, aber die Zeit des letzten Schreibzugriffs auf den Schlüssel
(
KeyLastWrittenUTC) ist nur der Zeitpunkt der jüngsten Aktualisierung irgendeines Elements. - Ausführungsanzahlen können 0 sein bei Elementen, die nur den Fokus hatten. Fokusanzahlen und -zeiten gibt es nur in Version 5 (Windows 7 und später).
Mit Juntei parsen¶
Usage: juntei parse-registry user-assist <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry user-assist -d evidence/ -o userassist.csv
juntei parse-registry user-assist -f NTUSER.DAT -t jsonl \
| jq 'select(.Path? // "" | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
Die Zusammenfassung listet die zuletzt ausgeführten Elemente (neueste zuerst) mit ihren Benutzern auf sowie die Hives, in denen UserAssist deaktiviert ist.
Ausgabefelder¶
| Feld | Interpretation |
|---|---|
Host, User, UserSID, SourcePath |
Host, Name des Profilordners, SID des Benutzers aus der ProfileList des Systems (mit dem SOFTWARE-Hive des Systems) und der Hive. |
GUID, Kind |
Der {GUID}-Schlüssel und was er enthält (executable, shortcut, active_desktop, internet_toolbar, other). |
NameRot13, Name |
Der Name des Werts wie gespeichert und dekodiert. |
Path |
Der dekodierte Name als Pfad, wobei die GUID eines bekannten Ordners durch dessen Standardpfad ersetzt ist; leer bei App-IDs und Shell-Items. |
RunCount |
Wie oft es über den Explorer gestartet wurde (Version 3: der gespeicherte Zähler minus 5). |
FocusCount, FocusTimeMs |
Wie oft es den Fokus hatte und wie lange in Millisekunden (Version 5). |
LastRunUTC |
Wann es zuletzt gestartet wurde. Leer, wenn Windows 0 gespeichert hat oder wenn die gespeicherte Zeit nach 9999 liegt (dann gibt Problems sie an und DataRaw bewahrt die Bytes). |
Format, SessionID |
Das Layout der Daten (5: 72 Bytes, 3: 16 Bytes) und die Nummer der Sitzung, in der sie zuletzt geschrieben wurden. |
KeyLastWrittenUTC |
Letzter Schreibzugriff auf den Count-Schlüssel: die jüngste Aktualisierung eines seiner Elemente. |
DataRaw |
Die Bytes des Werts (hexadezimal), wenn sie sich nicht dekodieren lassen. |
TransactionLogStatus, LogsApplied |
Kontext der Registry-Wiederherstellung. |
Problems |
Daten unbekannter Größe, eine Größe, die nicht zur Version des Schlüssels passt, ein Zähler unter 5 in Version 3, eine letzte Ausführung nach 9999, NoEncrypt. |
Untersuchungsstrategie¶
- Sortieren Sie nach
LastRunUTCund klammern Sie die vorbelegten Elemente aus: Sie teilen sich einen Zeitpunkt, ungefähr zur Erstellung des Profils. - Suchen Sie nach Programmen an für Benutzer beschreibbaren Orten (
%USERPROFILE%,Downloads,Temp,ProgramData), auf Wechsellaufwerken und Netzwerkpfaden sowie nach Administrations- und Fernzugriffs- tools. - Korrelieren Sie mit Prefetch (Ausführung mit Ausführungszeiten), Amcache und ShimCache (Vorhandensein),
Jump Lists und LNK-Dateien (was damit geöffnet wurde) sowie der
$MFTfür die Programmdateien. - Prüfen Sie die Hives, in denen die Aufzeichnung deaktiviert ist, und Profile mit leerem UserAssist auf Bereinigung.
- Verwenden Sie
parse-registry read --recover-deletedfür gelöschte UserAssist-Werte.