Prefetch¶
Was Prefetch ist¶
Windows-Prefetch-Dateien zeichnen Informationen auf, die zur Optimierung des Anwendungsstarts dienen. Eine programmspezifische
.pf-Datei speichert typischerweise den Namen und Hash der ausführbaren Datei, den Ausführungszähler, die letzten Ausführungszeiten,
Volume-Informationen sowie Verzeichnisse und Dateien, auf die beim Start verwiesen wurde.
Bei unterstützten Windows-Versionen ist ein gültiger Prefetch-Datensatz einer Anwendung in der Regel ein starker Beweis dafür, dass die ausführbare Datei ausgeführt wurde. Er ist eines der nützlichsten Ausführungsartefakte außerhalb der Ereignisprotokolle.
Bestmögliche Schlussfolgerung: Die genannte ausführbare Datei wurde zu den aufgezeichneten letzten Ausführungszeitpunkten gestartet, vorbehaltlich des Betriebssystemverhaltens und der Gültigkeit des Parsings.
Speicherort und Sicherung¶
Juntei unterstützt die Formatversionen 17 bis 31 (Windows XP bis Windows 11), einschließlich komprimierter Dateien ab Windows 8. Sichern Sie das gesamte Verzeichnis, damit Hashes der Namen ausführbarer Dateien und benachbarte Datensätze verglichen werden können.
Hinweise für die Analyse¶
- Ältere Windows-Versionen speichern nur einen historischen Ausführungszeitpunkt, neuere bis zu acht.
RunCountkann die Anzahl der verfügbaren Zeitstempel übersteigen. - Prefetch kann auf manchen Systemen bzw. in manchen Rollen deaktiviert, bereinigt, ausgeschlossen oder nicht verfügbar sein. Das Fehlen ist kein Beweis dafür, dass ein Programm nicht ausgeführt wurde.
- Listen geladener Dateien beschreiben Startabhängigkeiten und Zugriffe; sie beweisen nicht, dass jede aufgeführte Datei bösartig war, absichtlich geöffnet oder vollständig gelesen wurde.
- Der Name der ausführbaren Datei im Prefetch-Header ist in der Länge begrenzt; Juntei ermittelt einen Pfad aus den geladenen Dateien, sofern dies eindeutig möglich ist.
- Die Dateisystem-Zeitstempel einer
.pf-Quelldatei sind unabhängig von den eingebetteten Ausführungszeiten. Findingssind Beobachtungen für das Threat Hunting. Installationsprogramme und legitime Administration nutzen häufig Staging-Pfade.
Mit Juntei parsen¶
Usage: juntei parse-file prefetch <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find *.pf files
-f, --file <FILE> Parse one Prefetch file
Records:
-T, --timeline Write one row per retained execution time, sorted by time
Output:
-o, --output <FILE> Save every record
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-file prefetch -d Prefetch/ -o prefetch.csv
juntei parse-file prefetch -d Prefetch/ -T -o prefetch-timeline.csv
juntei parse-file prefetch -d Prefetch/ -t jsonl \
| jq 'select(.ExecutableName? | test("powershell|rundll32"; "i"))'
Standard-CSV-Felder¶
| Feld | Interpretation |
|---|---|
SourceFile |
Eingabe-.pf; behalten Sie dieses Feld bei, um Hosts und doppelte Namen ausführbarer Dateien zu unterscheiden. |
ExecutableName |
Name der ausführbaren Datei aus dem Header. Für die meisten Suchen ohne Beachtung der Groß-/Kleinschreibung verwenden; die ursprüngliche Schreibweise bewahren. |
ExecutablePath |
Von Juntei nach Möglichkeit ermittelter Ladepfad. Gleichen Sie ihn mit Files und anderen Artefakten ab. |
PathValidated |
Der gewählte Pfad entspricht dem SCCA-Pfadhash. Dies bestätigt die Pfadzuordnung, nicht den Dateiinhalt oder die Vertrauenswürdigkeit. |
PathAmbiguous |
Mehrere geladene Pfade bleiben möglich; ExecutablePath enthält den Headernamen. Prüfen Sie Files und weitere Artefakte. |
PrefetchHash |
Hash, den Windows im .pf-Dateinamen verwendet; kein kryptografischer Hash des Dateiinhalts. |
FormatVersion |
Version der Prefetch-Struktur; bestimmt die verfügbaren Felder und die Anzahl der Zeitstempel. |
RunCount |
Von Windows aufgezeichneter kumulativer Zähler. Nützlich für die Häufigkeit, nicht für den genauen Verlauf. |
LastRun |
Zuletzt gespeicherter Ausführungszeitpunkt. |
PreviousRun1 … PreviousRun7 |
Frühere gespeicherte Ausführungszeitpunkte, vom neuesten zum älteren. Leer, wenn Format oder Verlauf sie nicht enthalten. |
VolumeCount |
Anzahl der aufgezeichneten Quell-Volumes. |
VolumeDevicePaths |
NT-Gerätepfade der beim Start verwendeten Volumes. Mit den Seriennummern korrelieren. |
VolumeSerialNumbers |
Volume-Kennungen; nützlich, um Beweise zu Wechseldatenträgern oder neu formatierten Laufwerken zu verknüpfen. |
VolumeCreated |
Aufgezeichnete Erstellungszeitpunkte der Volumes, nicht der ausführbaren Datei. |
DirectoryCount |
Anzahl der aufgezeichneten Verzeichniszeichenfolgen. |
FileCount |
Anzahl der aufgezeichneten Verweise auf geladene Dateien. |
Findings |
Beobachtungen von Juntei, etwa verschobene System-Binärdateien oder verdächtige Ausführungspfade. Manuell prüfen. |
Files |
Geladene bzw. referenzierte Dateien mit verfügbaren NTFS-Referenzen. Hervorragender Ansatzpunkt für DLLs/Pfade, aber kein Beweis für eine Absicht bezüglich der Datei. |
Dir |
Mit dem Start verknüpfte Verzeichniszeichenfolgen. Nützlich, wenn einzelne Pfade geladener Dateien unvollständig sind. |
Zeitleisten-CSV-Felder (-T)¶
| Feld | Interpretation |
|---|---|
RunTime |
Ein gespeicherter Prefetch-Ausführungszeitpunkt. |
ExecutableName, ExecutablePath |
Identität des Programms bzw. Pfadkontext. |
PathValidated |
Der gewählte Pfad entspricht dem SCCA-Pfadhash. Dies bestätigt die Pfadzuordnung, nicht den Dateiinhalt oder die Vertrauenswürdigkeit. |
PathAmbiguous |
Mehrere geladene Pfade bleiben möglich; ExecutablePath enthält den Headernamen. Prüfen Sie Files und weitere Artefakte. |
PrefetchHash |
Unterscheidet Varianten/Pfade, die denselben Namen der ausführbaren Datei haben. |
RunCount |
Zähler aus der Prefetch-Datei; er wird in jeder Zeitleistenzeile wiederholt. |
SourceFile |
Quell-.pf zur Überprüfung. |
JSON/JSONL bewahrt Volumes, Verzeichnisse, geladene Dateien und NTFS-Dateireferenzen als strukturierte Arrays statt als kommagetrennte CSV-Zellen.
Untersuchungsstrategie¶
- Verwenden Sie
-T, um gespeicherte Ausführungen in eine Zeitleiste aufzunehmen. - Gruppieren Sie nach Name der ausführbaren Datei plus Prefetch-Hash; derselbe Name kann unterschiedliche Pfade/Hashes haben.
- Prüfen Sie
ExecutablePath, Staging-Pfade, Findings zu verschobenen System-Binärdateien und geladene DLLs. - Gleichen Sie MFT-Referenzen und Dateipfade der Zieldateien mit
$MFT-/USN-Datensätzen ab. - Korrelieren Sie Ausführungszeiten mit Ereignisprotokollen, SRUM, Netzwerktelemetrie, Diensten, Aufgaben und Benutzerartefakten.