RecentFileCache.bcf: das leise Artefakt, das die meisten Analysten vergessen
Ein kurzes, spezifisches Artefakt, das nur auf Windows 7 und Server 2008 R2 existiert, aber wenn Sie es haben, ist es einer der saubersten Beweise für kürzliche Ausführung im DFIR.
RecentFileCache.bcf ist das Artefakt, das Sie vergessen, bis der Host, den Sie sich ansehen, alt genug ist, um eines zu haben. Sein Scope ist klein. Seine Lebenszeit ist kurz. Und wenn es vorhanden ist, beantwortet es die Frage "ist diese ausführbare Datei kürzlich gelaufen?" mit weniger Mehrdeutigkeit als fast alles andere auf dem System.
Das ist der Beitrag, den ich jemandem in die Hand drücken würde, der gerade erfahren hat, dass der Host vor ihm Windows 7 ist und er einen Amcache-Ordner voller RecentFileCache.bcf und nichts anderes hat.
Was es ist und was es nicht ist
C:\Windows\AppCompat\Programs\RecentFileCache.bcf ist eine kleine Binärdatei, die vom Application Experience Service auf Windows 7 SP1 und Windows Server 2008 R2 geschrieben wird. Sie zeichnet ausführbare Dateien auf, die seit dem letzten Application-Experience-Bewertungsdurchlauf gelaufen sind und noch nicht in die größeren Kompatibilitäts-Datensätze gefaltet wurden. Stellen Sie sich das als Write-Ahead-Log für den Programm-Kompatibilitäts-Appraiser vor: kurzlebig, schmal im Umfang, aber spezifisch.
Es ist nicht die AmCache. Die AmCache ersetzte RecentFileCache.bcf ab Windows 8 und läuft auf einem anderen Lebenszyklus. Auf einem Win7 Host sehen Sie die BCF-Datei. Auf einem Win10/11 Host sehen Sie stattdessen Amcache.hve und (fast immer) gar keine BCF-Datei. Es gibt keine Version von Windows, in der beide gleichzeitig das primäre Artefakt sind.
Es ist auch nicht der Shimcache. Shimcache lebt im SYSTEM-Hive und zeichnet Dateien auf, die Windows untersucht hat (nicht notwendigerweise ausgeführt hat). RecentFileCache enthält nur Binärdateien, die seit der letzten Bewertung ausgeführt wurden, eine strengere Behauptung.
Die einzige nützliche Tatsache darüber
Jeder Eintrag in RecentFileCache.bcf beweist, dass die ausführbare Datei seit dem letzten Bewertungsdurchlauf gestartet wurde. Das ist es. Keine Load-Liste, keine Zeitstempel pro Eintrag, kein Hash. Nur eine Liste vollständiger Pfade.
Das klingt unterwältigend, bis Sie merken, wie stark "wurde gestartet" als forensische Behauptung tatsächlich ist. Shimcache kann das nicht sagen. Die AmCache kann das ohne Korrelation nicht sagen. RecentFileCache sagt es direkt.
Der Haken, und es gibt zwei davon, ist, dass Sie nicht wissen, wann jede Binärdatei lief, nur dass sie seit der letzten Bewertung lief, und Sie wissen nicht, wie oft. Für beides müssen Sie die BCF mit Prefetch und dem Security Event Log paaren.
Das Korollar: Eine Binärdatei, die in RecentFileCache.bcf auftaucht, aber keinen Prefetch-Eintrag hat, lief kürzlich und lebt entweder auf einem Laufwerk mit deaktiviertem Prefetch oder lief mit Prefetch-Evasion. Beide Fälle sind einen näheren Blick wert.
Lebenszyklus: kurz und unerbittlich
Das ist der Teil, der die Leute überrascht. RecentFileCache ist eine Arbeitsdatei. Die Application-Experience-Bewertungsaufgabe (Microsoft\Windows\Application Experience\ProgramDataUpdater) läuft etwa täglich, verarbeitet die Datei und leert sie. Nach der Verarbeitung ist die BCF leer oder fehlt, bis etwas Neues läuft.
In der Praxis:
- Eine Binärdatei, die in den letzten ~24 Stunden lief, ist wahrscheinlich drin.
- Eine Binärdatei, die vor vier Tagen lief, ist mit ziemlicher Sicherheit weg.
- Wenn die Appraiser-Aufgabe deaktiviert ist, akkumuliert die Datei unbegrenzt. Ich habe Hosts gesehen, bei denen sie 18 Monate veraltet war, weil jemand die Aufgabe mit einem "Telemetry-Remover"-Skript deaktiviert hat.
- Die Datei wird gekürzt, nicht gelöscht, wenn der Appraiser sie leert. Die Dateisystem-Metadaten (Erstellungszeit) liegen normalerweise vor den Einträgen.
Wenn Sie auf einem Live-Host sind, den Sie verdächtigen, schnappen Sie sich die BCF sofort. Bis morgen kann sie leer sein. Das ist eines der wenigen Artefakte, bei denen zehn Minuten Verzögerung Sie die Beweise kosten können.
Dateiformat, kurz
Das Format ist unkompliziert und hat sich seit Windows 7 SP1 nicht geändert. Header, dann eine Folge von längen-präfixierten UTF-16LE-Pfad-Strings, gepolstert. Keine Zeitstempel, keine Hashes. Die ursprüngliche Analyse von Mandiants Willi Ballenthin hält stand, die Datei speichert nicht mehr, als sie zu speichern scheint.
Das bedeutet, dass das Parsen nachsichtig ist. Die meisten Tools werden die gleiche Ausgabe produzieren. Die interessante Frage ist nicht, wie man es parst, sondern was man mit der Liste anfängt, sobald man sie hat.
Die Pfadliste lesen
Ein typischer Eintrag sieht so aus:
\??\C:\Users\bob\AppData\Local\Temp\setup.exe
\??\C:\Program Files\Internet Explorer\iexplore.exe
\??\C:\Windows\System32\rundll32.exe
Das \??\-Präfix ist die Notation des NT-Object-Managers für einen DOS-Pfad; behandeln Sie es als C:\ und gehen Sie weiter. Drei Dinge, nach denen ich suche, in der Reihenfolge:
- Pfade in benutzerbeschreibbaren Verzeichnissen.
\Users\*\AppData\Local\Temp\,\Users\Public\,\ProgramData\. Hier landet Adversary-Tooling tendenziell. - Umbenannte System-Binaries. Eine
\Users\bob\AppData\Roaming\svchost.exeist verdächtig. So auch eine\Windows\Temp\lsass.exe. - Ausführungen über Netzwerkfreigaben. Alles, was mit
\\oder\Device\HarddiskVolumeShadowCopy*\beginnt.
Sie werden legitim aussehende Einträge von Installern und Updatern sehen. Microsoft-Installer lieben besonders %TEMP%. Triage nach mtime und Elternkontext, nicht nach Pfad allein.
Korroboration ist alles
Ein BCF-Hit auf einem verdächtigen Pfad ist ein Startpunkt, keine Schlussfolgerung. Die Standard-Korroborationskette:
- Prefetch. Wenn die Binärdatei eine
.pf-Datei hat, haben Sie Ausführungs-Zeitstempel und eine Load-Liste. Der Prefetch-Parser gibt beides. - MFT. Die Master File Table gibt Ihnen die Erstellungszeit der Binärdatei auf diesem Volume, selbst wenn die Datei seitdem gelöscht wurde.
- USN-Journal. Das USN-Journal zeigt, wann die Datei erstellt, modifiziert oder gelöscht wurde, mit Granularität auf Operationsebene.
- EVTX. Security 4688 oder Sysmon 1 gibt Ihnen die Befehlszeile und den Benutzerkontext, vorausgesetzt das Logging war an. Auf einem Win7 Host ohne Sysmon haben Sie üblicherweise nicht die Befehlszeile.
- Registry. Persistenzschlüssel, AppCompatFlags und
MUICacheunter NTUSER.DAT und SOFTWARE.
Wenn Sie für einen gegebenen Pfad mindestens zwei der oben genannten treffen können, ist die Behauptung berichtsfähig.
Der "fehlende" Fall ist auch interessant
Wenn RecentFileCache.bcf auf einem Win7 Host leer ist und die Bewertungsaufgabe offensichtlich gelaufen ist, ist das ein normaler Zustand, die Bewertung hat aufgeräumt. Aber zwei Muster sind eine Prüfung wert:
- Die Appraiser-Aufgabe ist deaktiviert oder ist seit Tagen nicht gelaufen. Prüfen Sie
Microsoft-Windows-TaskScheduler%4Operational.evtxauf den letzten erfolgreichen Lauf. - Die Datei wurde von etwas anderem als dem Appraiser gelöscht. Prüfen Sie das USN-Journal auf
FileDelete | Close-Datensätze fürRecentFileCache.bcfselbst.
Der Löschfall ist seltener, als die Leute annehmen. Die meisten Angreifer zielen nicht speziell auf diese Datei ab, weil sie nichts davon gehört haben. Diese Obskurität ist Teil dessen, warum sie nützlich bleibt.
Wo es aufhört, nützlich zu sein
Ein paar ehrliche Einschränkungen:
- Keine Zeitstempel pro Eintrag. Sie können aus der BCF allein keine Timeline aufbauen.
- Keine Hashes. Sie können vom Inhalt der Datei nicht zu Threat Intel pivotieren.
- Keine Benutzerzuordnung. Wie die AmCache ist die BCF pro Maschine. Die "wer hat das ausgeführt"-Frage braucht separate Beweise.
- Keine Abdeckung auf modernem Windows. Wenn Ihr Vorfall auf Windows 8 oder später ist, ist die BCF nicht da. Verwenden Sie stattdessen die AmCache.
- Beschränkt auf ausführbare Dateien. Skripte, die über
cscript.exeoderpowershell.exelaufen, zeigen den Interpreter, nicht das Skript.
Ein kurzer Workflow
Wenn RecentFileCache.bcf vorhanden und wichtig ist:
- Erfassen Sie die Datei sofort, vor dem nächsten Bewertungsdurchlauf.
- Parsen Sie zu einer flachen Liste von Pfaden.
- Filtern Sie nach benutzerbeschreibbaren Orten und bekannten Adversary-Pfadmustern.
- Für jede interessante Zeile ziehen Sie den passenden Prefetch-Eintrag (falls vorhanden) und den MFT-Eintrag für die ausführbare Datei.
- Pivotieren Sie zu EVTX für den Benutzer- und Befehlszeilenkontext, wenn das Logging es erlaubt.
Das ist die ganze Aufgabe. Die BCF ist ein schmales Artefakt. Behandeln Sie es als Schnellcheck, nicht als umfassende Timeline-Quelle.
Die Datei im Browser lesen
Der Parser auf dieser Seite liest RecentFileCache.bcf vollständig Client-seitig. Datei reinwerfen, die sortierte Pfadliste mit normalisiertem NT-Präfix bekommen. Kein Upload. Nützlich, wenn Sie IR für einen regulierten Kunden machen, dessen Win7-Endpoints noch nicht ersetzt wurden; es gibt sie, und sie sind überraschend häufig.
Weiterführende Literatur
- Willi Ballenthin, RecentFileCache.bcf - die ursprüngliche öffentliche Analyse. Immer noch die Referenz für das Format.
- Microsoft, Application Experience und Programminventur - Hersteller-Kontext dafür, was der Appraiser tatsächlich tut.
Wenn Sie diese Datei auf einem 2024 gebauten Host finden, hat jemand eine seltsame Entscheidung getroffen. Untersuchen Sie.