Investigación con FSEvents: exfiltración en un Mac
Una intrusión ficticia en macOS reconstruida solo con FSEvents: una descarga, un LaunchAgent, Acceso total al disco, una carpeta oculta, un USB y la limpieza.
En resumen. Solo con los logs de .fseventsd de un portátil y de una memoria USB se puede demostrar que, aproximadamente entre las 10:05 y las 10:50 UTC, alguien descargó y descomprimió tools.zip, eliminó un atributo extendido, escribió un LaunchAgent, provocó un cambio en TCC, reunió 48 documentos financieros en una carpeta oculta, los copió a una memoria llamada EXFIL y borró la carpeta de preparación. Todo lo que aparece aquí es la muestra sintética del FSEvents Parser: pulsa Probar un ejemplo para seguir el ejemplo.
El caso
Esta investigación continúa la intrusión ficticia que comenzó en la estación de trabajo Windows FIN-WKS-07 (la cuenta svc_backup). El mismo actor utilizó una sesión robada en FIN-MBP-03, el MacBook de dana.whitlock, empleada del departamento financiero, el 2026-09-14. El responsable de la respuesta dispone de dos archivos: el .fseventsd del volumen Data y el .fseventsd de una memoria USB encontrada sobre el escritorio, adquirida mediante un bloqueador de escritura.
1. Cargar los logs
Carga ambos archivos (o la muestra). La pestaña Fuentes muestra dos volúmenes: el volumen Data (siete logs 3SLD) y EXFIL (un log). La línea de temporización indica que las fechas de los archivos parecen originales: los mtimes de los logs se reparten a lo largo de la mañana, por lo que las ventanas temporales son fiables. El historial del volumen EXFIL empieza a las 10:31:14, la fecha de modificación de su fseventsd-uuid: fue entonces cuando fseventsd vio la memoria por primera vez.
2. Fijar la ventana
En la barra de rango temporal, escribe 2026-09-14 10:00:00 → 10:55:00 UTC (la muestra ofrece un botón para hacerlo con un clic). El indicador muestra 770 of 1,068 records y la URL incorpora #from=2026-09-14T10:00:00Z&to=2026-09-14T10:55:00Z. Todos los recuentos, hallazgos y exportaciones usan ahora esta ventana. Mantén el campo temporal por defecto, approximate window (overlaps), para no perder nada (por qué).
3. Leer los hallazgos
- LaunchAgent escrito.
~/Library/LaunchAgents/com.example.updater.plist.tmpse crea, se renombra acom.example.updater.plisty cambian sus metadatos, entre las 10:09:55 y las 10:23:18. Consulta launch agent. - Base de datos TCC modificada. El archivo de sistema
Library/Application Support/com.apple.TCC/TCC.db(y su-wal) se modifica en la misma ventana, justo después decom.apple.systempreferences.plist. Es coherente con que se concediera a Terminal el Acceso total al disco (Full Disk Access); las filas de TCC.db lo confirmarían (base de datos TCC). - Atributos extendidos eliminados.
Downloads/tools/sync-helperyDownloads/tools/com.example.updater.plistpierden un atributo entre las 09:58:40 y las 10:09:55, tras haberse extraído con uno. La eliminación decom.apple.quarantinees una explicación probable; FSEvents no puede indicar el nombre del atributo (atributo de cuarentena). - Carpeta oculta. Se crea
Users/dana.whitlock/Library/Caches/.synccon 48 hojas de cálculo, CSV y PDF. - Volumen externo EXFIL.
Volumes/EXFILse monta y se desmonta en el volumen Data; en la memoria,exfil/recibe los mismos 48 nombres, cada uno con su compañero AppleDouble._. - Borrado masivo. 48 eliminaciones en
.syncy después la propia carpeta, entre las 10:38:02 y las 10:52:41. - Archivos de vida corta.
Downloads/tools/*yDownloads/tools.zipaparecen y desaparecen dentro del historial cargado.
Ninguno de estos indicios demuestra intencionalidad por sí solo. Juntos, y en este orden, cuentan una historia coherente.
4. Seguir los archivos
- Abre la eliminación de
tools.zipy pulsa Mostrar todos los registros de esta ruta: el archivo llega mediante un renombrado desdetools.zip.download/tools.zip(el paquete de descarga de Safari), recibe sus atributos y se elimina al final. La pestaña Renombrados empareja ambos lados por su node ID compartido. - Filtra por
node:+ el node ID del LaunchAgent para ver el nombre.tmpy el definitivo como un único objeto. - El Árbol de rutas muestra
Users/dana.whitlock/Library/Caches/.synccon las etiquetas Created y Removed, yexfilen el volumen EXFIL solo con Created. - La visita del navegador a
transfer.examplesolo deja escrituras enSafari/History.dbdentro de FSEvents: el dominio en sí está en la base de datos History, no aquí.
5. Exportar e informar
Exporta Registros (CSV) y Pares de renombrado (CSV) para el informe, Timesketch (CSV) para combinarlo con otras líneas temporales (cada registro se sitúa en el momento de volcado de su archivo de log, marcado como límite superior) o Todo (JSON). Los nombres de archivo incluyen el rango, por ejemplo FIN-MBP-03_fsevents_2026-09-14T100000Z-2026-09-14T105500Z_records.csv.
En el informe, presenta cada evento como una ventana, cita el archivo de log e indica lo que FSEvents no muestra: ni usuario, ni proceso, ni contenido de los archivos.
Qué cambiaría las conclusiones
- Si la copia hubiera restablecido los mtimes de los logs, solo quedaría el orden.
- Si la memoria nunca se hubiera adquirido, solo se verían el punto de montaje y la preparación y el borrado en el Mac; faltaría la lista de archivos escritos en ella.
- Si el Mac hubiera estado inactivo durante días antes del incidente, la primera ventana podría abarcar varios días.
Para la parte de adquisición, consulta cómo recopilar .fseventsd; para el formato, páginas 1SLD, 2SLD y 3SLD.