RecentFileCache.bcf: el artefacto silencioso que la mayoría de analistas olvida
Un artefacto breve y específico que solo existe en Windows 7 y Server 2008 R2, pero cuando lo tienes, es una de las pruebas más limpias de ejecución reciente en DFIR.
RecentFileCache.bcf es el artefacto que olvidas hasta que el host que tienes delante es lo suficientemente viejo como para tener uno. Su alcance es pequeño. Su vida útil es corta. Y cuando está presente, responde a la pregunta "¿corrió este ejecutable recientemente?" con menos ambigüedad que casi cualquier otra cosa en el sistema.
Este es el post que le pasaría a alguien que acaba de descubrir que el host que tiene delante es Windows 7 y tiene una carpeta Amcache llena de RecentFileCache.bcf y nada más.
Qué es y qué no es
C:\Windows\AppCompat\Programs\RecentFileCache.bcf es un pequeño archivo binario escrito por el servicio Application Experience en Windows 7 SP1 y Windows Server 2008 R2. Registra ejecutables que corrieron desde el último pase de evaluación de Application Experience y aún no se han plegado en los datasets de compatibilidad mayores. Piénsalo como un write-ahead log para el appraiser de compatibilidad de programas: efímero, de alcance estrecho, pero específico.
No es el AmCache. El AmCache reemplazó a RecentFileCache.bcf desde Windows 8 y corre en un ciclo de vida diferente. En un host Win7 verás el archivo BCF. En un host Win10/11 verás Amcache.hve en su lugar y (casi siempre) ningún archivo BCF. No hay versión de Windows donde ambos sean el artefacto primario al mismo tiempo.
Tampoco es el Shimcache. Shimcache vive en el hive SYSTEM y registra archivos que Windows examinó (no necesariamente ejecutó). RecentFileCache solo contiene binarios que fueron ejecutados desde la última evaluación, una afirmación más estricta.
El único hecho útil sobre él
Cada entrada en RecentFileCache.bcf prueba que el ejecutable fue iniciado desde el último pase de evaluación. Eso es todo. Sin lista de carga, sin marcas de tiempo por entrada, sin hash. Solo una lista de rutas completas.
Eso suena poco impresionante hasta que te das cuenta de lo fuerte que "fue iniciado" es realmente como afirmación forense. Shimcache no puede decir esto. El AmCache no puede decir esto sin correlación. RecentFileCache lo dice directamente.
El truco, y hay dos de ellos, es que no sabes cuándo corrió cada binario, solo que corrió desde la última evaluación, y no sabes cuántas veces. Para ambos, necesitas emparejar el BCF con Prefetch y el log de eventos de Security.
El corolario: un binario que aparece en RecentFileCache.bcf pero no tiene entrada en Prefetch corrió recientemente y o bien vive en una unidad con Prefetch deshabilitado, o corrió con evasión de Prefetch. Cualquiera de los dos casos vale una mirada más cercana.
Ciclo de vida: corto e implacable
Esta es la parte que sorprende a la gente. RecentFileCache es un archivo de trabajo. La tarea de evaluación de Application Experience (Microsoft\Windows\Application Experience\ProgramDataUpdater) corre aproximadamente a diario, procesa el archivo y lo vacía. Después de procesar, el BCF está vacío o ausente hasta que corra algo nuevo.
En términos prácticos:
- Un binario que corrió en las últimas ~24 horas probablemente esté ahí.
- Un binario que corrió hace cuatro días casi seguro que se ha ido.
- Si la tarea del appraiser está deshabilitada, el archivo se acumula indefinidamente. He visto hosts donde estaba 18 meses desactualizado porque alguien deshabilitó la tarea con un script "removedor de telemetría".
- El archivo se trunca, no se borra, cuando el appraiser lo vacía. Los metadatos del sistema de archivos (tiempo de creación) usualmente preceden a las entradas.
Si estás en un host vivo del que sospechas, agarra el BCF inmediatamente. Mañana puede estar vacío. Este es uno de los pocos artefactos donde diez minutos de retraso pueden costarte la evidencia.
Formato de archivo, brevemente
El formato es directo y no ha cambiado desde Windows 7 SP1. Cabecera, luego una secuencia de cadenas de ruta UTF-16LE con prefijo de longitud, rellenadas. Sin marcas de tiempo, sin hashes. El análisis original de Willi Ballenthin de Mandiant aguanta: el archivo no almacena más de lo que parece almacenar.
Eso significa que el parseo es indulgente. La mayoría de las herramientas producirán la misma salida. La pregunta interesante no es cómo parsearlo, sino qué hacer con la lista una vez que la tienes.
Leer la lista de rutas
Una entrada típica se ve así:
\??\C:\Users\bob\AppData\Local\Temp\setup.exe
\??\C:\Program Files\Internet Explorer\iexplore.exe
\??\C:\Windows\System32\rundll32.exe
El prefijo \??\ es la notación del administrador de objetos NT para una ruta DOS; trátalo como C:\ y sigue. Tres cosas que busco, en orden:
- Rutas en directorios escribibles por usuario.
\Users\*\AppData\Local\Temp\,\Users\Public\,\ProgramData\. Aquí tiende a aterrizar el tooling de adversarios. - Binarios del sistema renombrados. Un
\Users\bob\AppData\Roaming\svchost.exees sospechoso. También lo es un\Windows\Temp\lsass.exe. - Ejecuciones desde recursos compartidos de red. Cualquier cosa que empiece con
\\o\Device\HarddiskVolumeShadowCopy*\.
Verás entradas de aspecto legítimo de instaladores y actualizadores. Los instaladores de Microsoft en particular adoran %TEMP%. Tría por mtime y contexto padre, no por ruta sola.
La corroboración lo es todo
Un hit BCF en una ruta sospechosa es un punto de partida, no una conclusión. La cadena de corroboración estándar:
- Prefetch. Si el binario tiene un archivo
.pf, tienes marcas de tiempo de ejecución y una lista de carga. El parser de Prefetch da ambos. - MFT. La Master File Table te da el tiempo de creación del binario en este volumen, incluso si el archivo ha sido borrado desde entonces.
- USN journal. El USN journal muestra cuándo el archivo fue creado, modificado o borrado, con granularidad a nivel de operación.
- EVTX. Security 4688 o Sysmon 1 te da la línea de comandos y el contexto de usuario, asumiendo que el logging estaba activo. En un host Win7 sin Sysmon, usualmente no tienes la línea de comandos.
- Registry. Claves de persistencia, AppCompatFlags y
MUICachebajo NTUSER.DAT y SOFTWARE.
Si puedes acertar al menos dos de los anteriores para una ruta dada, la afirmación es reportable.
El caso "ausente" también es interesante
Cuando RecentFileCache.bcf está vacío en un host Win7 y la tarea de evaluación claramente ha estado corriendo, ese es un estado normal: la evaluación limpió. Pero dos patrones valen la pena comprobar:
- La tarea del appraiser está deshabilitada o no ha corrido en días. Comprueba
Microsoft-Windows-TaskScheduler%4Operational.evtxpara el último ejecución exitosa. - El archivo fue borrado por algo distinto del appraiser. Comprueba el USN journal para registros
FileDelete | ClosesobreRecentFileCache.bcfmismo.
El caso de borrado es más raro de lo que la gente asume. La mayoría de los atacantes no apuntan a este archivo específicamente porque no han oído hablar de él. Esa oscuridad es parte de por qué sigue siendo útil.
Donde deja de ser útil
Unas pocas limitaciones honestas:
- Sin marcas de tiempo por entrada. No puedes construir una timeline desde el BCF solo.
- Sin hashes. No puedes pivotar a threat intel desde el contenido del archivo.
- Sin atribución de usuario. Como el AmCache, el BCF es por máquina. La pregunta "quién ejecutó esto" necesita evidencia separada.
- Sin cobertura en Windows moderno. Si tu incidente es en Windows 8 o posterior, el BCF no está ahí. Usa el AmCache en su lugar.
- Limitado a ejecutables. Los scripts ejecutados vía
cscript.exeopowershell.exemuestran el intérprete, no el script.
Un flujo de trabajo corto
Cuando RecentFileCache.bcf está presente e importa:
- Adquiere el archivo inmediatamente, antes del siguiente pase de evaluación.
- Parsea a una lista plana de rutas.
- Filtra por ubicaciones escribibles por usuario y patrones de ruta conocidos de adversarios.
- Para cada fila interesante, tira la entrada Prefetch correspondiente (si existe) y la entrada MFT del ejecutable.
- Pivota a EVTX para el contexto de usuario y línea de comandos, si el logging lo permite.
Ese es todo el trabajo. El BCF es un artefacto estrecho. Trátalo como una verificación rápida, no como una fuente comprehensiva de timeline.
Leer el archivo en el navegador
El parser en este sitio lee RecentFileCache.bcf enteramente del lado del cliente. Suelta el archivo, obtén la lista ordenada de rutas con el prefijo NT normalizado. Sin subida. Útil cuando haces IR para un cliente regulado cuyos endpoints Win7 no han sido reemplazados todavía: existen, y son sorprendentemente comunes.
Lecturas adicionales
- Willi Ballenthin, RecentFileCache.bcf - el análisis público original. Sigue siendo la referencia para el formato.
- Microsoft, Application Experience y Programa de Inventario - contexto del fabricante sobre qué hace realmente el appraiser.
Si encuentras este archivo en un host construido en 2024, alguien hizo una elección extraña. Investiga.