Application Experience & ProgramDataUpdater: wie .bcf befüllt wird
Ein Durchgang durch den Windows-7-Dienst und die geplante Aufgabe, die RecentFileCache.bcf schreiben, und was dieser Lebenszyklus für Triage-Zeitfenster bedeutet.
RecentFileCache.bcf erscheint nicht durch Zauberei. Ein bestimmter Dienst schreibt sie zur Laufzeit, und eine bestimmte geplante Aufgabe leert sie in einem Takt. Beides zu kennen ist das, was Ihnen erlaubt zu beurteilen, wie weit das Artefakt zurückreicht, wie oft es sich ändert und wo seine blinden Flecken sitzen.
Der Application-Experience-Dienst
Auf Windows 7 ist der Dienst als AeLookupSvc („Application Experience") registriert. Er ist die Laufzeithälfte der Application-Compatibility-Infrastruktur, die existiert, um auf neueren Windows-Versionen bekannt-schlechte Binärdateien zu erkennen und stillschweigend Compatibility-Shims anzuwenden, damit Legacy-Software weiter funktioniert.
Bei einem typischen Start einer ausführbaren Datei passieren zwei Dinge:
- Der Image-Loader konsultiert
sysmain.sdbnach Shims, die zur Binärdatei passen. - Der Application-Experience-Dienst zeichnet auf, dass die Binärdatei gesehen wurde, damit die Offline-Wartungsaufgabe sie später auf Shim-Eignung evaluieren kann.
RecentFileCache.bcf ist der Staging-Buffer für Schritt 2. Es ist kein Langzeit-Log. Es existiert, um den nächsten Wartungslauf zu füttern, Punkt.
ProgramDataUpdater
Die geplante Aufgabe, die den Buffer konsumiert, ist:
\Microsoft\Windows\Application Experience\ProgramDataUpdater
Sie tut der Reihe nach drei Dinge:
- Liest
C:\Windows\AppCompat\Programs\RecentFileCache.bcf. - Geht jeden Pfad durch, fingerabdruckt die ausführbare Datei und aktualisiert den Amcache.hve-Datensatz.
- Schreibt
RecentFileCache.bcfneu. Manchmal kürzer, manchmal leer, manchmal komplett ersetzt.
Die Aufgabe ist registriert, bei System-Idle oder beim Logon zu laufen, gesteuert vom Automatic-Maintenance-Framework. Auf einem gesunden Desktop sehen Sie sie ungefähr täglich feuern. Auf einem Kiosk, der nur während der Geschäftszeiten läuft, kann das Fenster zwischen Schreibvorgängen sich auf Tage strecken.
Was das für die Triage bedeutet
Die Aktualität des Artefakts ist eine Funktion des letzten ProgramDataUpdater-Laufs, nicht irgendeines einzelnen Executable-Starts. Praktische Konsequenzen:
- Die
LastWriteTimeder Datei ist eine obere Schranke dafür, wann ProgramDataUpdater zuletzt abgeschlossen wurde. Nützlich, aber nicht pro Eintrag. Platzieren Sie sie nicht auf einer Ausführungs-Timeline, als wäre sie es. - Wenn ein System kompromittiert, kurz benutzt und vor dem nächsten ProgramDataUpdater-Lauf ausgeschaltet wurde, lebt die bösartige Binärdatei in
RecentFileCache.bcfund wurde noch nicht inAmcache.hvebefördert. Das macht die BCF zum einzigen Artefakt, das die Spur trägt. - Nach einem erfolgreichen Lauf kann ein Eintrag aus der BCF verschwinden, während er in
Amcache.hvebestehen bleibt. Lesen Sie die zwei immer zusammen. Ein Pfad, der in der BCF fehlt, aber in Amcache mit einem aktuellen Registry-Key-LastWrittenvorhanden ist, ist der normale Zustand nach der Beförderung.
Was nicht in .bcf landet
Die Application-Experience-Pipeline fängt nur Binärdateien, die durch den normalen Image-Loader mit aktiven AppCompat-Hooks gehen. Folgendes umgeht sie routinemäßig:
- Reflective DLL-Injektion und In-Memory-PE-Loader.
- Treiber und Kernel-Mode-Payloads (anderer Codepfad).
- LOLBin-Ketten, bei denen der Launcher eine signierte Binärdatei ist und der eigentliche Payload ein Skript oder COM-Scriptlet (
mshta.exe,regsvr32.exe /i). - Anti-Forensik-Tools, die
AeLookupSvcdirekt deaktivieren.
Wenn Sie Grund zur Annahme haben, dass eines davon verwendet wurde, ist die Abwesenheit von RecentFileCache kein „lief nicht"-Signal. Es ist Schweigen, keine Beweise.
Wie der Fußabdruck eines Angreifers aussieht, wenn er es unterdrückt
Es lohnt sich, die Audit-Spur für die offensichtlichen Bewegungen zu kennen. Das Stoppen oder Deaktivieren von AeLookupSvc lässt Service Control Manager Events 7036 und 7040 im System-Log aufleuchten. Das Deaktivieren oder Löschen der ProgramDataUpdater-Aufgabe lässt 141/142 in Microsoft-Windows-TaskScheduler%4Operational.evtx aufleuchten. Beide sind im Detail in RecentFileCache-Manipulation erkennen behandelt.
Eine BCF, die auf einer täglich benutzten Maschine seit Monaten nicht angefasst wurde, sollte eine Augenbraue heben, selbst wenn Sie keine Service-Control- oder Task-Events finden. Manchmal hat der Angreifer die Aufgabe deaktiviert, indem er die Task-Scheduler-XML auf der Festplatte bearbeitet hat, und die Events feuern auf dem falschen Konto oder rollen heraus. Gegenprüfen Sie gegen die System- und Application-Logs in EVTX und gegen den Registry-Zustand für den Dienst.
Kadenz in Zahlen
Ungefähre Werte von gesunden Hosts, nützlich als Sanity-Baseline:
- Workstation, täglicher Nutzer: ProgramDataUpdater feuert alle 18 bis 30 Stunden.
- Server (niedriger Idle): feuert alle 2 bis 5 Tage.
- Kiosk, der nur während Geschäftszeiten eingeschaltet ist: feuert, wann immer Automatic Maintenance ihn unterbringen kann, oft alle 3 bis 7 Tage.
- Host mit nie erreichtem Idle (hohe Last): kann eine Woche oder länger zwischen Läufen vergehen.
Eine BCF, die seit einem Monat alt ist, auf einem Host, der bekanntermaßen täglich aktiv ist, ist bedeutsam. Eine BCF, die seit einer Woche alt ist, auf einem Server ist normal.