¿Qué son los Unified Logs de macOS?
Desde macOS 10.12 Sierra, el kernel, los daemons de Apple y cualquier app que use os_log escriben en un único sistema de registro. logd guarda las entradas en archivos binarios comprimidos .tracev3 bajo /private/var/db/diagnostics; el texto de cada mensaje se reconstruye a partir de una cadena de formato guardada en /private/var/db/uuidtext (por binario) o en los archivos dsc de la caché compartida, más los valores registrados con la entrada.
Para un investigador es el registro cronológico más rico de un Mac: inicios de sesión y sudo, decisiones de privacidad (TCC), Gatekeeper y XProtect, launchd e ítems de inicio, SSH y Compartir pantalla, montajes de discos — cada entrada con su proceso, PID, subsistema, categoría y una marca de tiempo al microsegundo.
Qué lee esta herramienta
- Un .logarchive (de log collect o sysdiagnose), como carpeta o ZIP, o las carpetas en bruto diagnostics + uuidtext copiadas de un Mac o de una imagen de disco, incluidas las recolecciones de UAC (.tar.gz) y Velociraptor (ZIP).
- Los bloques tracev3: cabecera, catálogo, chunksets comprimidos con LZ4, firehose (log, activity, trace, signpost, loss), cadenas oversize, statedump y simpledump; horas Mach relativas al arranque convertidas a UTC mediante los registros timesync (bases de tiempo de Intel y Apple silicon).
- Cadenas de formato resueltas a través de los archivos uuidtext y dsc y mostradas como log show (conversiones printf, %{public}/%{private}, decodificadores errno, UUID y mask.hash).
- Exportaciones de log show: --style ndjson y json (todos los campos), y los estilos de texto default, compact y syslog, mensajes multilínea incluidos.
- Filtros por texto libre o expresión regular, tipo, proceso, subsistema, categoría y PID (con exclusiones), un intervalo de tiempo al segundo con franja de densidad, reglas de triaje DFIR y exportación a CSV, NDJSON (nombres de campo de log show), JSON y Timesketch.
Por qué importa en una investigación
- Autenticación y privilegios: comandos y fallos de sudo, su, derechos de autorización, sesiones SSH y de Compartir pantalla, cuentas locales nuevas.
- Evasión de defensas y persistencia: permisos TCC como el acceso total al disco para Terminal, excepciones de Gatekeeper, eliminación de la cuarentena, nuevos agentes y daemons de arranque, ítems de inicio y extensiones.
- Contexto de exfiltración: volúmenes USB montados por DiskArbitration, actividad de red y de archivos en los mismos minutos.
- Ancla de la cronología: las marcas de tiempo al microsegundo y los UUID de arranque alinean el resto de artefactos de macOS.
Límites a tener en cuenta
- Los mensajes solo están completos si lo están los archivos de cadenas: sin uuidtext ni dsc el texto no puede reconstruirse (las entradas se marcan sin resolver). Sin timesync, las horas son aproximadas.
- Los valores <private> se ocultaron al registrarse y no pueden recuperarse. La mayoría de los mensajes Info y Debug nunca se escriben en disco.
- El almacén rota por tamaño y a menudo solo conserva días. La ausencia de entradas no prueba que no pasara nada.
- La representación sigue al analizador de código abierto macos-unifiedlogs, validado aquí frente a log show (alrededor del 99 % de los mensajes log, activity y state idénticos); el texto de los signposts y algunos decodificadores de objetos difieren. Compruebe las entradas clave con log show antes de apoyarse en ellas en un informe.
- Todo se guarda en la memoria del navegador: los almacenes muy grandes (varios millones de entradas) pueden requerir las opciones de importación para cargar solo una ventana de tiempo.
Cómo recolectarlos
- En el Mac: sudo log collect --output equipo.logarchive (todo el almacén); después suelte el paquete o su ZIP.
- Desde una imagen u otra herramienta: copie /private/var/db/diagnostics y /private/var/db/uuidtext con su estructura (UAC macos_unified_logs, mac_apt UNIFIEDLOGEXPORT, Velociraptor Generic.Collectors.File).
- Si solo tiene la herramienta de Apple: log show --archive equipo.logarchive --info --debug --timezone UTC --style ndjson > equipo.ndjson.
Preguntas frecuentes
¿Se suben mis registros a algún sitio?
No. Los archivos los lee código WebAssembly que se ejecuta en un Web Worker de su navegador. No se envía nada a ningún servidor; al cerrar la pestaña se olvida todo.
¿Necesito un Mac para usarla?
No. El decodificador de tracev3 funciona en cualquier navegador moderno en Windows, Linux o macOS. Solo necesita los archivos: un .logarchive, o las carpetas diagnostics y uuidtext de un Mac o de una imagen de disco.
¿Por qué algunos mensajes están incompletos o marcados sin resolver?
El texto de una entrada procede de cadenas de formato guardadas en los archivos uuidtext y dsc. Si faltan en su recolección, o si la entrada apunta a una cadena que no contienen, el mensaje no puede reconstruirse por completo. Recolecte la carpeta uuidtext, o un .logarchive, que la incluye.
¿El resultado es idéntico al de log show?
Muy parecido, pero sin garantía. El decodificador se basa en el analizador de código abierto macos-unifiedlogs de Mandiant, con correcciones para ajustarse a log show (formato de números, UUID, errno y hashes enmascarados). En un archivo real, alrededor del 99 % de los mensajes coincidían exactamente con log show; los signposts y algunos tipos de objeto se muestran de otra forma. Como prueba, confirme las entradas importantes con log show.
¿En qué zona horaria están las horas?
Las entradas se convierten a UTC a partir de la hora Mach relativa al arranque mediante los registros timesync. El selector UTC / Local solo cambia la presentación; las exportaciones van siempre en UTC.
¿Qué tamaño de almacén puede manejar?
Varios millones de entradas, según la memoria de la pestaña del navegador. Para almacenes mayores, use las opciones de importación para conservar solo una ventana de tiempo u omitir signposts, Info o Debug durante la lectura.
¿Puede leer la salida de log show?
Sí: --style ndjson y json conservan todos los campos; los estilos de texto default, compact y syslog también funcionan, con menos detalle. Use --timezone UTC para que las horas no sean ambiguas (el estilo compact no incluye el desfase UTC).
¿Los hallazgos del triaje prueban un compromiso?
No. Son preajustes que señalan entradas que vale la pena leer (sudo, permisos TCC, excepciones de Gatekeeper, nuevos ítems de arranque, montajes USB…). Muchos son habituales en un Mac normal; júzguelos en su contexto.