RecentFileCache.bcf von Live- und Offline-Systemen erfassen
Praxisleitfaden zum Ziehen von RecentFileCache.bcf in drei Szenarien: ein laufender Windows-7-Endpoint, ein forensisches Disk-Image und eine Volume Shadow Copy.
Sie können RecentFileCache.bcf nicht analysieren, bevor Sie eine Kopie haben. Die Datei hat eine kurze Haltbarkeit (der nächste ProgramDataUpdater-Lauf schreibt sie neu), also greifen Sie früh zu. Dieser Beitrag deckt die drei Szenarien ab, die Sie tatsächlich antreffen werden, und die Fallstricke, die jedes beißen.
Live-System: Die Datei wird offen gehalten
Auf einer laufenden Windows-7-Box wird RecentFileCache.bcf vom Application-Experience-Dienst offen gehalten. Ein naives Kopieren schlägt fehl:
PS C:\> copy C:\Windows\AppCompat\Programs\RecentFileCache.bcf C:\tmp\
Access to the path 'C:\Windows\AppCompat\Programs\RecentFileCache.bcf' is denied.
Drei Ansätze, die funktionieren:
-
Roher Dateilesezugriff mit FTK Imager (GUI oder CLI). Umgeht die Win32-Sperre, indem er auf Geräteebene mit dem Volume kommuniziert. Die Kopie erfasst die Bytes, die zum Lesezeitpunkt auf der Festplatte sind.
-
Volume Shadow Copy.
vssadmin list shadows, um einen aktuellen Snapshot zu finden, dann die Datei aus dem Snapshot-Pfad lesen:$sc = (vssadmin list shadows | Select-String 'Shadow Copy Volume:').Line.Split(' ')[-1] Copy-Item "$sc\Windows\AppCompat\Programs\RecentFileCache.bcf" C:\triage\ -
KAPE mit dem
RecentFileCache-Target. Bevorzugt für skalierbare Triage. Die Target-Datei liegt unterTargets/Windows/RecentFileCache.tkapein der Kroll-KAPE-Distribution. KAPE mit--target RecentFileCacheausführen, zieht die Datei plus ihre NTFS-Metadaten über Raw-Reads.
Alle drei bewahren die LastWriteTime der Datei, die (laut dem Lifecycle-Beitrag) das Nächste ist, was Sie als „zuletzt aktualisiert"-Zeitstempel für das Artefakt als Ganzes erhalten.
Ein Hinweis, der mir ein- oder zweimal das Leben gerettet hat: Wenn Sie Erstreaktion auf einem verdächtigen Host sind, warten Sie nicht. Morgen ist der Appraiser gelaufen und Ihre Beweise sind eine viel kürzere Liste. Das ist eines der wenigen Artefakte, bei denen zehn Minuten Verzögerung die Spur kosten können.
Offline: Disk-Images
Für ein E01-, VHD- oder dd-Image lebt die Datei am selben Pfad innerhalb der Windows-Partition:
<partition root>/Windows/AppCompat/Programs/RecentFileCache.bcf
Übliche Workflows:
-
libewf + eine gemountete Partition — den Pfad direkt lesen:
ewfmount image.E01 /mnt/ewf mmls /mnt/ewf/ewf1 # NTFS-Partitionsoffset finden mount -o ro,offset=$((2048*512)) /mnt/ewf/ewf1 /mnt/win cp /mnt/win/Windows/AppCompat/Programs/RecentFileCache.bcf ./ -
Sleuth Kit ohne Mounten, nützlich wenn das Image groß ist oder Sie
$LogFile-wiederherstellbare Kopien wollen:fls -r -p -o 2048 image.dd | grep -i RecentFileCache.bcf # nutzen Sie den Inode, den fls meldet: icat -o 2048 image.dd <inode> > RecentFileCache.bcf -
FTK Imager / X-Ways / EnCase. Point and click. Alle drei verarbeiten gesperrte Dateien in einem Image ohne Probleme.
Volume Shadow Copies sind Ihr Freund
Windows-7-Systeme tragen typischerweise wochenlange VSS-Historie unter Standardeinstellungen. Jede Shadow Copy enthält ihre eigene RecentFileCache.bcf, und weil die Datei neu geschrieben (nicht angehängt) wird, halten ältere Shadows oft Einträge, die seitdem aus der Live-Datei gepurgt wurden.
Workflow:
- Snapshots aufzählen:
vssadmin list shadows(live) oder\System Volume Information\aus einem Image ziehen. - Für jeden Snapshot die BCF aus
<shadow root>\Windows\AppCompat\Programs\ziehen. - Geparste Einträge über Snapshots diffen. Einträge, die in alten Snapshots existieren, aber nicht in der Live-Datei, sind besonders interessant. Sie wurden entweder in Amcache.hve befördert oder sind herausgealtert.
Der Parser auf dieser Seite hat kein eingebautes Diff, aber das JSON, das er ausgibt, ist klein und stabil. jq erledigt den Rest:
jq -r '.entries[].path' rfc_2026-05-20.json | sort > old.txt
jq -r '.entries[].path' rfc_2026-05-26.json | sort > new.txt
comm -23 old.txt new.txt # Pfade, die verschwanden
comm -13 old.txt new.txt # Pfade, die auftauchten
Die verschwundene Liste ist da, wo die interessanten Dinge wohnen. Ein Pfad, der vor drei Tagen vorhanden war und heute weg ist, lief entweder und wurde befördert, oder jemand hat aufgeräumt. Die Bestätigungskette über MFT und USN-Journal sagt Ihnen, welches.
Stolperfallen, die man im Hinterkopf behalten sollte
- Die Datei existiert möglicherweise nicht. Auf einer frisch geimagten Maschine oder einer, auf der
AeLookupSvcdeaktiviert ist, kann die BCF fehlen. Abwesenheit ist Daten. Siehe Erkennen von RecentFileCache-Manipulation. - Erfassungszeitstempel sind keine Eintragszeitstempel. Die Datei um 14:00 zu ziehen, bedeutet nicht, dass der letzte Eintrag um 14:00 landete. Die eigene
LastWriteTimeder Datei ist die relevante Uhr, und sie verfolgt den Appraiser-Lauf, nicht eine einzelne Ausführung. - Server 2008 R2 verhält sich wie Win7. Gleiche Datei, gleicher Dienst, gleiche geplante Aufgabe
Microsoft\Windows\Application Experience\ProgramDataUpdater. Überspringen Sie keinen 2008-R2-Server, weil „es ist ein Server, keine Workstation". - Win8 und später haben es nicht. Wenn Ihr Image Windows 8 oder neuer ist, hören Sie auf zu suchen. Sie wollen Amcache.hve.
- Pfad-Semantik. Einträge werden mit dem
\??\-NT-Präfix aufgezeichnet. Anständige Parser strippen es. Wenn Sie gegen Roh-Bytes scripten, machen Sie das Strippen selbst.
Als Nächstes
Sie haben eine Datei. Der nächste Beitrag behandelt, worauf Sie tatsächlich achten, sobald sie geparst ist.
Weiterführende Literatur
- Triage: verdächtige Einträge in RecentFileCache erkennen
- RecentFileCache-Befunde validieren
- USN-Journal und MFT zur Bestätigung des Datei-Lebenszyklus auf der Festplatte