Forense de FSEvents en macOS: qué prueba .fseventsd
Qué registra FSEvents en macOS, dónde está .fseventsd, qué puede y qué no puede probar, y cómo leerlo sin marcas de tiempo exactas.
En resumen. FSEvents es un historial a nivel de ruta de cada volumen de macOS: qué archivos y carpetas se crearon, modificaron, renombraron o eliminaron, y en qué orden. No tiene marcas de tiempo, ni usuario, ni proceso, pero a menudo recuerda archivos que desaparecieron hace tiempo. Recopile la carpeta .fseventsd completa conservando las fechas de modificación de sus archivos y analícela con un parser que mantenga visible la incertidumbre temporal, como el FSEvents Parser de este sitio.
Qué escribe fseventsd
El daemon fseventsd existe para que Time Machine, Spotlight y los clientes de sincronización puedan preguntar "¿qué ha cambiado bajo esta carpeta desde el punto X?" sin volver a recorrer el disco. Para responder incluso tras reinicios, mantiene un diario persistente en cada volumen escribible que supervisa, en una carpeta oculta en la raíz del volumen:
| macOS | Carpeta |
|---|---|
| 10.15 Catalina y posteriores | /System/Volumes/Data/.fseventsd/ (el volumen de datos) |
| 10.14 y anteriores | /.fseventsd/ |
| Discos externos | /Volumes/<name>/.fseventsd/ |
La carpeta contiene archivos de log comprimidos con gzip cuyos nombres tienen 16 dígitos hexadecimales, un archivo fseventsd-uuid que identifica el flujo de eventos y, en ocasiones, un marcador no_log. Dentro de cada log hay una o varias páginas de registros. Un registro consta de:
- una ruta, relativa a la raíz del volumen (
Users/dana/Downloads/tools.zip); - un ID de evento de 64 bits, procedente de un contador global del sistema que solo aumenta;
- un conjunto de flags de 32 bits: qué ocurrió (creación, eliminación, renombrado, modificación, cambio de atributo extendido…) y sobre qué (archivo, carpeta, enlace simbólico, enlace físico);
- desde macOS 10.13, un node ID; desde macOS 14, cuatro bytes adicionales cuyo significado Apple no ha documentado.
La estructura a nivel de bytes se describe en el artículo sobre el formato de archivo de FSEvents.
Qué prueba
- Existencia. Si una ruta aparece en un registro, existió un elemento con ese nombre en esa ubicación de ese volumen, aunque se haya eliminado después.
- Tipo de cambio. Creado, modificado, renombrado o movido, eliminado, permisos cambiados, atributo extendido añadido o eliminado, información de Finder cambiada, clonado.
- Orden. Los ID de evento crecen de forma monótona, así que los registros pueden ordenarse con confianza, también entre volúmenes del mismo Mac.
- Uso de medios extraíbles. El volumen de datos registra los eventos de montaje y desmontaje de
Volumes/<name>; el propio.fseventsddel dispositivo registra lo que se escribió en él.
Qué no prueba
- Cuándo, exactamente. Un registro no contiene marca de tiempo. Consulte cómo datar los registros de FSEvents.
- Quién o qué. No se registra ni usuario ni proceso. FSEventsParser decodifica el campo adicional de 3SLD como un ID de usuario; trátelo como no confirmado.
- Cada paso. Los cambios en una misma ruta que ocurren muy seguidos se agrupan en un único registro:
Created;Modified;Removeden una sola fila no indica en qué orden sucedieron. - Contenido. Solo nombres. Combínelo con snapshots de APFS, Time Machine o carving para recuperar datos.
- Recursos de red compartidos y volúmenes de solo lectura. No se registran.
Dónde resulta útil
- Persistencia. Un plist de LaunchAgent creado en
~/Library/LaunchAgents, aunque se eliminara después. - Preparación y limpieza. Decenas de documentos que aparecen en una carpeta oculta y luego se eliminan de golpe.
- Descargas. Un archivo comprimido que permaneció diez minutos en
Downloads, al que se añadió un atributo de cuarentena, y después la eliminación de un atributo de su contenido extraído. - Permisos de privacidad. Escrituras en la base de datos TCC en torno al momento en que Terminal obtuvo Acceso total al disco (Full Disk Access).
- Exfiltración por USB. Un montaje
Volumes/EXFILen el Mac y, en la propia memoria USB, la lista de archivos escritos.
El ejemplo práctico de exfiltración muestra los cinco casos en una investigación ficticia.
Cómo analizarlo bien
- Filtre primero por ruta. Un Mac con mucha actividad genera cientos de miles de registros al día. Empiece por
Users/*/Downloads,Library/LaunchAgents,Users/Shared,private/tmpyVolumes/, y después amplíe. - Siga los node ID a través de los renombrados. Un renombrado son dos registros (ruta antigua y nueva) que comparten node ID en 2SLD y 3SLD.
- Conserve la incertidumbre. Indique "entre las 10:09:55 y las 10:23:18 UTC", no "a las 10:23:18".
- Correlacione. Los eventos de cuarentena, los Unified Logs, las marcas de tiempo de APFS y la referencia de flags acotan la reconstrucción de los hechos.
- Recopile correctamente. Las fechas de modificación son su único reloj: consulte cómo recopilar .fseventsd.
Preguntas frecuentes
¿Qué es FSEvents en el análisis forense de macOS?
Un registro persistente de cambios en el sistema de archivos que el daemon fseventsd escribe en una carpeta oculta .fseventsd de cada volumen. Cada registro contiene una ruta, un ID de evento y flags como Created, Removed o Renamed.
¿Registra FSEvents los archivos eliminados?
Sí. Una eliminación se registra con el flag Removed y la ruta completa, por lo que FSEvents suele conservar el nombre y la ubicación de archivos que ya no existen.
¿Tiene FSEvents marcas de tiempo?
No. Los registros solo llevan un ID de evento. La hora se estima a partir de las fechas de modificación de los archivos de log, lo que da una ventana temporal y no un instante.