Die Application-Experience-Appraisal-Aufgabe: wann die BCF geschrieben und wann sie geleert wird
Der Lebenszyklus der BCF hängt an einer einzigen geplanten Aufgabe. Verstehen Sie, wann ProgramDataUpdater läuft, wann sie die Datei leert und wie Sie einen deaktivierten Appraiser erkennen.
RecentFileCache.bcf schreibt sich nicht selbst. Es gibt eine einzige geplante Aufgabe, Microsoft\Windows\Application Experience\ProgramDataUpdater, die den gesamten Lebenszyklus der Datei steuert. Verstehen Sie diese Aufgabe und Sie verstehen das Artefakt. Übersehen Sie sie, dann werden Sie falsch deuten, was eine leere BCF oder eine veraltete BCF tatsächlich bedeutet.
Dies ist ein Beitrag über eine geplante Aufgabe und das halbe Dutzend Dinge, die Sie darüber wissen müssen.
Was die Aufgabe tut
ProgramDataUpdater ist der Application-Experience-Appraiser. Auf einem Windows 7 SP1 Host führt er den Programminventur-Durchlauf aus: Er geht kürzlich ausgeführte Binärdateien durch, bewertet sie hinsichtlich Shim- und Kompatibilitätszwecken, aktualisiert die lokalen Bewertungsdatensätze und leert die Arbeitsdatei.
Die Arbeitsdatei ist RecentFileCache.bcf. Jedes Mal, wenn die Aufgabe erfolgreich läuft, wird die Datei auf ihren Header zurückgeschnitten. Neue Ausführungen sammeln sich in der BCF bis zum nächsten Durchlauf. Dieser Zyklus ist der gesamte Mechanismus.
Die Aufgabe ist in C:\Windows\System32\Tasks\Microsoft\Windows\Application Experience\ProgramDataUpdater definiert. Es ist eine XML-Datei, die Sie direkt lesen können. Auf einer sauberen Win7 SP1 Installation sieht der Trigger sinngemäß so aus (die genaue Formulierung variiert):
- Ein täglicher Trigger, üblicherweise zu einer zufälligen Off-Hours-Zeit.
- Ein zusätzlicher Trigger beim Benutzer-Logon, mit einer zufälligen Verzögerung.
- Eine Abhängigkeit vom Wartungsfenster, was bedeutet, dass sie verschoben werden kann, wenn der Rechner beschäftigt ist.
Die Kadenz in der Praxis ist ungefähr täglich, aber es sind nicht genau 24 Stunden. Die Aufgabe kann übersprungen werden, wenn der Rechner aus war, im Akkubetrieb war, aktiv benutzt wurde oder eine offene Wartungsfenster-Verschiebung hatte. Ich habe gesehen, dass die Aufgabe auf einem normalen Laptop, der nur sporadisch eingeschaltet war, vier oder fünf Tage zwischen den Durchläufen liegt.
Was die Datei leert
Drei Dinge, in absteigender Häufigkeit:
- Der Appraiser lief erfolgreich. Das ist der normale Pfad. Die Datei wird auf einen Header mit null Einträgen gekürzt. Die Dateisystem-Metadaten bleiben erhalten.
- Die Datei wurde manuell gelöscht. Selten. Einige "Telemetry-Remover"-Skripte zielen auf diese Datei ab. Einige IR-Tools auch, damals, als das Artefakt weniger bekannt war. Wenn die Datei weg ist, der Appraiser aber so konfiguriert ist, dass er läuft, erwarten Sie, dass das Betriebssystem sie beim nächsten Ausführungsereignis neu erstellt.
- Ein System-Reset oder eine Imaging-Operation. Löscht die Datei zusammen mit allem anderen.
Was die Datei nicht leert:
- Neustarts.
- Windows-Updates (fast nie).
- Deaktivierung von Defender oder eines anderen Sicherheitsprodukts.
- Wenn ein Benutzer den Papierkorb leert.
- Datenträgerbereinigung.
Wenn die BCF leer ist und Sie das nicht durch eine der drei oben genannten Ursachen erklären können, schauen Sie genauer hin. Die häufigste Erklärung in einer echten Untersuchung ist, dass der Appraiser letzte Nacht lief und Sie das Fenster verpasst haben. Das ist ein völlig normaler Zustand.
Was die Aufgabe deaktiviert
Group Policy kann Application Experience vollständig deaktivieren:
Computer Configuration\Administrative Templates\Windows Components\Application Compatibility\Turn off Application TelemetryComputer Configuration\Administrative Templates\Windows Components\Application Compatibility\Turn off Inventory Collector
Beide schalten dasselbe zugrundeliegende Verhalten um. Auf einem domain-gejointen Host mit strikter Datenschutzrichtlinie sollten Sie davon ausgehen, dass die Aufgabe deaktiviert ist. Die BCF wird sich ansammeln.
Die Aufgabe kann auch lokal deaktiviert werden:
schtasks /Change /TN "\Microsoft\Windows\Application Experience\ProgramDataUpdater" /Disable- Direkte Bearbeitung der Task-XML in
C:\Windows\System32\Tasks\. Set-ScheduledTask -Disableüber PowerShell.
Die Registry-Seite des deaktivierten Zustands erscheint unter HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Schedule\TaskCache\Tasks\ und \Tree\Microsoft\Windows\Application Experience\ProgramDataUpdater. Der Registry-Parser liefert Ihnen sowohl den Enabled-Wert als auch die registrierte Befehlszeile.
Ein deaktivierter Appraiser ist an den richtigen Stellen laut, an anderen leise. Die Aufgabe taucht nicht im Defender-Alarmstream auf. Sie generiert kein Security-Event. Sie müssen aktiv danach suchen.
Einen deaktivierten Appraiser aus EVTX erkennen
Das relevante Log ist Microsoft-Windows-TaskScheduler%4Operational.evtx. Die interessanten Event-IDs:
- 106: Aufgabe registriert. Achten Sie auf den Benutzer, der sie registriert hat. Bei einer Standardinstallation ist das
SYSTEMzum Setup-Zeitpunkt des Rechners. Ein106fürProgramDataUpdatermit Datum nach dem Aufbau des Rechners ist ein Zeichen dafür, dass jemand die Aufgabe neu registriert hat, möglicherweise nach dem Löschen und Neuerstellen mit anderen Parametern. - 141: Aufgabe gelöscht. Ein
141fürProgramDataUpdaterist interessant. Es bedeutet, dass die Aufgabe entfernt wurde, was aggressiver ist als sie zu deaktivieren. - 200: Aktion gestartet. Das Vorhandensein von
200-Events sagt Ihnen, dass die Aufgabe tatsächlich gelaufen ist. Fehlende200-Events über Wochen sind eine rote Flagge. - 201: Aktion abgeschlossen. Mit
200paaren, um einen sauberen Lauf zu bestätigen. - 129: Task-Prozess erstellt. Bestätigt, dass die Aufgabe ihre Aktion gespawnt hat.
- 325: Aufgabe getriggert. Die nützlichste für die Kadenz-Analyse.
Wenn das Operational Log einen gesunden Strom von 200/201-Events für ProgramDataUpdater hat, läuft der Appraiser und leert die BCF nach Zeitplan. Wenn diese Events an einem bestimmten Datum aufhören und die BCF entsprechend veraltet ist, hat sich an diesem Datum etwas geändert. Das ist der Pivot-Punkt für die Untersuchung.
Der EVTX-Parser verarbeitet diesen Log-Typ. Das Schema ist dicht, aber der Filter ist einfach: Channel = "Microsoft-Windows-TaskScheduler/Operational" und TaskName = "\Microsoft\Windows\Application Experience\ProgramDataUpdater".
Was die Aufgabe berührt und wofür Sie pivotieren können
Wenn ProgramDataUpdater läuft, leert er nicht nur die BCF. Er aktualisiert mehrere Registry-Schlüssel und die Amcache.hve auf Win8+ Hosts (irrelevant für unseren Win7-Scope). Speziell auf Win7 interagiert der Appraiser-Durchlauf mit:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\und seinen Unterschlüsseln.HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility Assistant\.C:\Windows\AppCompat\Programs\Install\für Installer-Tracking-Einträge.
Die Last-Write-Zeitstempel von AppCompatFlags\Compatibility Assistant\Persisted auf Win7 sind ein nützlicher bestätigender Zeitstempel für "wann der Appraiser zuletzt lief." Vergleichen Sie das mit dem Last-Modified-Zeitstempel von RecentFileCache.bcf selbst. Sie sollten sehr nahe beieinander liegen. Eine große Lücke bedeutet, dass der Appraiser unterbrochen wurde oder die Datei out-of-band modifiziert wurde.
Ein spezifischer Fehlermodus, den Sie kennen sollten
Ich habe ein konsistentes Problem mit dem Appraiser auf Win7 SP1 gesehen: Wenn der Rechner aus einem sysprep'd Master re-imaged wurde und der Task Scheduler die Aufgabe mit einer zukünftigen Trigger-Zeit stempelt, kann der Appraiser seinen ersten geplanten Lauf überspringen. Die BCF wächst. Die Korrektur ist harmlos: Der nächste Benutzer-Logon triggert die Aufgabe und die Datei wird geleert. Aber in der Zwischenzeit können Sie eine ungewöhnlich große BCF auf einem frisch ausgerollten Image finden. Es lohnt sich, das zu wissen, damit Sie eine große Datei auf einem als sauber bekannten Rechner nicht überinterpretieren.
Der andere Fehlermodus ist absichtlicher. Ein Angreifer mit Admin-Rechten kann die Aufgabe deaktivieren, seine Tools ausführen und sie dann wieder aktivieren. Der nächste Appraiser-Durchlauf leert die BCF und löscht die Beweise. Das Fenster ist kurz (ein Aufgabenzyklus), aber die Technik funktioniert. Detection: Suchen Sie nach einem 141 (Aufgabe gelöscht) oder einer Statusänderung im TaskCache\Tree\...\Enabled-Wert der Registry und vergleichen Sie dann mit den Zeitstempeln auf RecentFileCache.bcf und den Ausführungen, die Sie untersuchen. Wenn die Aufgabe um die Zeit der vermuteten Aktivität deaktiviert-und-wieder-aktiviert wurde, behandeln Sie die BCF für dieses Fenster als kompromittiert.
Praktischer Workflow
Wenn Sie auf einem Win7 Host landen und die BCF wichtig ist:
- Erfassen Sie die BCF. Jetzt. Vor dem nächsten Appraisal-Durchlauf.
- Ziehen Sie
Microsoft-Windows-TaskScheduler%4Operational.evtx. - Ziehen Sie die Registry-Hives, speziell
SOFTWAREundSYSTEMfür den Task-Status und AppCompatFlags. - Ziehen Sie das USN-Journal, damit Sie
FileWrite | Close- undFileDelete | Close-Operationen gegenRecentFileCache.bcfselbst sehen können. - Vergleichen Sie die Last-Modified-Zeit der BCF mit dem jüngsten
200-Event fürProgramDataUpdater. Sie sollten innerhalb von wenigen Sekunden voneinander liegen.
Wenn diese beiden Zeitstempel divergieren, hat jemand die Datei außerhalb des Appraisers angefasst. Das ist interessanter als alles, was in der Datei steht.
Weiterführende Literatur
- Microsoft, Task Scheduler-Referenz. Das XML-Schema und die Trigger-Typen sind beim Lesen der Aufgabendefinition wichtig.
- Mandiant, Tracking ProgramDataUpdater for forensic value. Die ursprüngliche Analyse behandelt die Interaktion der Aufgabe mit der BCF.
Wenn jemand diese Aufgabe auf einem Host deaktiviert hat, der keinen datenschutzrechtlichen Grund hat, sie zu deaktivieren, ist das Ihre Startlinie für die Untersuchung, nicht die BCF selbst.