Skip to content

Registros unificados de macOS: guía forense práctica

Qué registran los registros unificados de macOS, dónde están tracev3, uuidtext y timesync, qué pueden demostrar y cómo leerlos en una investigación.

Publicado el 5 min de lectura

En resumen. Los registros unificados (Unified Logs) son la cronología más detallada que conserva un Mac: autenticación, sudo, decisiones de privacidad (TCC), Gatekeeper, agentes de arranque, acceso remoto y montaje de discos, cada uno con un proceso, un subsistema y una marca de tiempo con precisión de microsegundos. El inconveniente es que cada entrada se reparte entre tres tipos de archivos (.tracev3, uuidtext/dsc y timesync) y se necesitan todos. Esta guía explica qué hay en cada sitio y cómo abordarlo; Unified Log Parser lo lee todo en su navegador.

Qué es el sistema de registro unificado

Desde macOS 10.12 Sierra, Apple canaliza casi todo el registro a través de un único sistema. El kernel, los daemons de Apple y cualquier código de terceros que llame a os_log envían entradas a logd, que las escribe en archivos binarios comprimidos. Los archivos de texto de estilo syslog en /var/log siguen existiendo, pero la mayor parte de lo que importa en una investigación está en el almacén unificado.

Cada entrada contiene:

  • la hora, con precisión de microsegundos una vez convertida;
  • el proceso (ruta de la imagen y PID), el hilo y el ID de usuario;
  • la imagen del emisor: la biblioteca o el framework que generó la entrada (a menudo no es el propio proceso);
  • un subsistema y una categoría en formato DNS inverso, por ejemplo com.apple.TCC / access;
  • un tipo: Default, Info, Debug, Error o Fault para los mensajes de registro, además de actividades, signposts y volcados de estado;
  • el mensaje, reconstruido a partir de una cadena de formato y de los valores registrados con la entrada.

Dónde están los archivos

RutaContenido
/private/var/db/diagnostics/Persist/Almacén principal de archivos .tracev3
/private/var/db/diagnostics/Special/Entradas con su propio tiempo de vida (a menudo más antiguas que las de Persist)
/private/var/db/diagnostics/Signpost/Signposts de rendimiento
/private/var/db/diagnostics/HighVolume/Datos de gran volumen, normalmente vacío
/private/var/db/diagnostics/timesync/Registros de correlación de arranque y reloj
/private/var/db/uuidtext/XX/…Cadenas de formato, un archivo por UUID de binario
/private/var/db/uuidtext/dsc/…Cadenas de la caché compartida de dyld

Un .logarchive generado por log collect o sysdiagnose contiene las mismas carpetas, además de logdata.LiveData.tracev3, el búfer en memoria en el momento de la recopilación. El artículo sobre el formato tracev3 recorre la estructura binaria.

Por qué siempre se necesitan tres tipos de archivos

Una entrada .tracev3 no almacena su texto. Almacena una referencia a una cadena de formato (un desplazamiento dentro de un archivo uuidtext o del archivo dsc de la caché compartida) y los valores brutos de los argumentos. Sin los archivos de cadenas, un analizador solo puede mostrar números y fragmentos; las entradas quedan "no resueltas". Las horas se almacenan como tiempo continuo de Mach relativo al arranque y se convierten a hora real con los registros timesync; sin ellos, las horas son, en el mejor de los casos, aproximadas.

Por eso la regla para la recopilación es sencilla: obtenga diagnostics y uuidtext, o un .logarchive, que contiene ambos.

Qué pueden demostrar los registros unificados

  • Autenticación y uso de privilegios: comandos sudo con el usuario de destino y la línea de comandos completa, contraseñas fallidas, su, derechos de autorización concedidos por authd, cambios en cuentas locales.
  • Acceso remoto: sesiones de SSH (sshd, sshd-session) y de Compartir pantalla, con la dirección remota cuando se registra.
  • Decisiones de privacidad: avisos y resultados de TCC (por ejemplo, Acceso total al disco concedido a Terminal) en el subsistema com.apple.TCC.
  • Contexto de ejecución: evaluaciones y anulaciones de Gatekeeper por parte de syspolicyd, actividad de XProtect y XProtect Remediator, atributos de cuarentena, lanzamientos de aplicaciones por LaunchServices.
  • Persistencia: carga de agentes y daemons de arranque, registro de ítems de inicio por Background Task Management.
  • Dispositivos: volúmenes montados y expulsados por diskarbitrationd, conexión de dispositivos USB.

El artículo sobre consultas de triaje enumera búsquedas concretas para cada caso.

Qué no pueden demostrar

  • La ausencia. Que falte una entrada puede significar que el almacén rotó, que el nivel nunca se guardó en disco (la mayoría de las entradas Info y Debug solo existen en memoria), que el valor se ocultó o que Apple cambió la redacción en esa versión.
  • Los valores ocultos. <private> significa que el valor se ocultó en el momento del registro. Ningún analizador puede recuperarlo; la cadena de formato sigue mostrando de qué tipo de evento se trataba.
  • La redacción exacta entre versiones. Los mensajes no son una API. Una búsqueda ajustada para una versión de macOS puede pasar por alto eventos en otra; prefiera los filtros por subsistema, categoría y proceso, y lea el contexto de cada coincidencia.

Un flujo de trabajo sólido

  1. Recopile pronto, con uuidtext y timesync, y calcule el hash de lo recopilado.
  2. Documente la cobertura: la primera y la última entrada de cada sesión de arranque, y cualquier laguna, antes de afirmar que "no ocurrió nada".
  3. Acote por tiempo alrededor de eventos conocidos (una descarga maliciosa, un inicio de sesión) y luego amplíe.
  4. Filtre por proceso y subsistema en lugar de basarse solo en el texto del mensaje.
  5. Lea el contexto de cada coincidencia: las entradas del mismo PID unos segundos antes y después suelen explicarla.
  6. Confirme las entradas clave con log show en un Mac para todo lo que vaya a un informe, y anote el analizador y la versión utilizados.

Hacerlo en el navegador

Unified Log Parser decodifica archivos tracev3 de un .logarchive, de una copia del árbol /private/var/db o de una recopilación de UAC / Velociraptor, y también abre exportaciones de log show. Ofrece un intervalo de tiempo con franja de densidad, filtros por tipo, proceso, subsistema y PID, preajustes DFIR seleccionados y exportaciones a CSV, NDJSON y Timesketch. Todo se ejecuta localmente con WebAssembly; el recorrido utiliza el ejemplo sintético FIN-MBP-03.

Lecturas adicionales: el proyecto macos-UnifiedLogs de Mandiant y las notas de libyal sobre el formato Apple Unified Logging documentan los formatos en profundidad.

Artículos relacionados

Paso a paso: abra un .logarchive de macOS, una carpeta diagnostics o una exportación de log show en Unified Log Parser, revise hallazgos y exporte.
Recopile los registros unificados de macOS con log collect, una copia de diagnostics y uuidtext, UAC, Velociraptor o mac_apt, sin lagunas.
Exporte los registros unificados de macOS con log show (ndjson, json, texto), evite errores de zona horaria y construya cronologías CSV o Timesketch.