Saltar al contenido

Actividad del usuarioEjecuciónRed

Flujos Biome SEGB: foco y actividad de apps en macOS

Biome guarda flujos de actividad de macOS como App.InFocus en archivos SEGB con registros protobuf, el relevo de muchos flujos de knowledgeC.db.

Ubicación
~/Library/Biome/streams/restricted/<Stream>/local/
Prueba
Qué apps estaban en primer plano, qué sitios se visitaron, qué dispositivos y redes se conectaron, con horas por registro
Marcas de tiempo
Mac absolute time (Cocoa) como doubles en los registros SEGB; los nombres de archivo son tiempo Cocoa en microsegundos
Acceso
Full Disk Access (flujos de usuario); los flujos del sistema están restringidos por SIP
Retención
Semanas para la mayoría de los flujos (unos 28 días, cifra de estudios sobre iOS); los archivos caducados pasan a tombstone
Adquisición
UAC, mac_apt, Disk image

Qué es

Biome es el framework más reciente de Apple para registrar eventos de contexto y de "patrón de vida". Ha ido asumiendo muchos flujos que antes residían en knowledgeC.db, incluido el foco de las aplicaciones. Cada flujo es una carpeta de archivos binarios SEGB, llamados así por su valor mágico SEGB. Cada registro SEGB contiene un estado, una o dos marcas de tiempo, un CRC y una carga útil que suele ser un mensaje protocol buffer propio del flujo.

Según una única fuente (Howard Oakley), Biome apareció como subsistema independiente hacia macOS Catalina, y se usa ampliamente desde macOS 12 Monterey. Está activo en todas las versiones actuales, con nuevos flujos que se añaden con el tiempo (por ejemplo App.MenuItem, documentado por Unit 42 en macOS Tahoe 26).

Dónde se encuentra

ÁmbitoRutaProtección
Flujos de usuario~/Library/Biome/streams/restricted/<Stream>/local/ y ~/Library/Biome/streams/public/<Stream>/local/Protegidos por TCC, requieren Full Disk Access
Sincronizados desde otros dispositivos.../<Stream>/remote/<device UUID>/Igual que arriba
Archivos caducados.../<Stream>/local/tombstone/Igual que arriba
Estado de sincronización del usuario~/Library/Biome/sync/ (base de datos SQLite)Igual que arriba
Flujos del sistema/private/var/db/biome/streams/Pertenecen a _biome; UAC documenta que solo los recopila en vivo con SIP desactivado

Las carpetas de los flujos contienen también archivos de bloqueo y de metadatos. Los nombres de flujo usan puntos, por ejemplo App.InFocus; algunas fuentes muestran un prefijo _DKEvent. en iOS. Lista las carpetas en lugar de dar por supuestos los nombres.

Qué prueba

Flujos que decodifica el plugin Biome de mac_apt en macOS:

FlujoQué muestra
App.InFocusApp que pasa a primer plano o sale de él (estado 1 / 0), nombre de producto y versión
App.WebUsageURL, dominio y bundle ID de la app utilizada
Safari.*Dominios visitados en Safari
ScreenTime.AppUsageBundle ID de la app con estado en primer plano o fuera de él
Notification.UsageApp, título y subtítulo de las notificaciones
Device.Wireless.WiFiSSID con estado de conexión o desconexión
Device.Wireless.BluetoothDirección del dispositivo, nombre e ID de producto, conexión o desconexión
SystemSettings.SearchTermsTérminos escritos en la búsqueda de Ajustes del Sistema

Existen otros flujos, por ejemplo App.MenuItem (macOS Tahoe 26), que registra los elementos de menú que seleccionó el usuario, según documentó Unit 42. mac_apt no tiene un decodificador específico para ellos y solo les aplica una decodificación protobuf genérica sin esquema.

Biome no prueba quién estaba ante el teclado, y el significado de las cargas útiles procede de ingeniería inversa de la comunidad, no de documentación de Apple. Trata los campos sin decodificar como desconocidos.

Campos clave

Capa de registros SEGB, tal como la implementa ccl-segb:

FormatoCabeceraCampos por registro
SEGB v1Cabecera de 56 bytes, magic SEGB en los últimos 4 bytes, desplazamiento de fin de datos en los 4 primeroslongitud, estado, timestamp1, timestamp2, CRC32, carga útil
SEGB v2Cabecera de 32 bytes que empieza por SEGB, número de entradas, hora de creación; un bloque final de entradas de 16 bytes (offset final, estado, marca de tiempo) al término del archivo indexa los registrosCRC32 sobre la carga útil, carga útil (el estado y la marca de tiempo proceden del bloque final)

Estados de registro: 1 escrito, 3 borrado, 4 vacío o sin usar. Los registros borrados todavía pueden contener datos. Un CRC que no coincide indica un registro escrito a medias o dañado.

En iOS, SEGB v1 está documentado para iOS 14 a 16 y v2 a partir de iOS 17. En macOS la frontera no está documentada públicamente; las herramientas detectan el formato por la cabecera.

Marcas de tiempo

  • Las marcas de tiempo de los registros están en Mac absolute time almacenado como doubles: segundos desde 2001-01-01 UTC. Suma 978307200 para obtener tiempo Unix.
  • Los nombres de los archivos SEGB son enteros que mac_apt interpreta como tiempo Cocoa en microsegundos, lo que da una hora aproximada de creación del archivo.
  • Algunas cargas útiles contienen campos adicionales cuyo significado depende del flujo; decodifica cada flujo antes de tratar cualquier valor como una hora.
# File name 781234567000000 (microseconds) -> UTC
date -u -r $(( 781234567000000 / 1000000 + 978307200 ))

Retención

Los estudios sobre iOS indican que la mayoría de los flujos conservan registros activos unos 28 días, y algunos (por ejemplo Device.Metadata y Location.Visit) durante meses. Los archivos SEGB caducados pasan a tombstone/, que mac_apt omite por defecto pero que conviene examinar manualmente. Mide la retención sobre tu evidencia a partir del registro más antiguo de cada flujo.

Adquisición

# Terminal needs Full Disk Access
ditto ~/Library/Biome case/Biome_user
find case/Biome_user/streams -maxdepth 2 -type d | sort
  • El artefacto biome de UAC recopila ~/Library/Biome/streams/restricted/*/local de cada usuario y /private/var/db/biome (este último solo con SIP desactivado, según UAC). Plantéate añadir manualmente public/ y remote/.
  • Para el almacén del sistema, es preferible una imagen completa del disco o del volumen Data a desactivar SIP.
  • No modifiques los archivos SEGB en su sitio; calcula el hash antes de analizarlos.

Análisis

  • El plugin BIOME de mac_apt lee los flujos de usuario y del sistema (restricted y public) desde una imagen o, en modo solo artefactos, desde una carpeta streams, y decodifica los flujos indicados arriba:
python3 mac_apt_artifact_only.py -i case/Biome_user/streams -o out -c BIOME
  • ccl-segb muestra los registros en bruto de un único archivo SEGB v1 o v2:
python3 ccl_segb_cli.py "case/Biome_user/streams/restricted/App.InFocus/local/<file>"

Las cargas útiles que no cubre ningún parser pueden decodificarse sin esquema con una herramienta protobuf como blackboxprotobuf (la que usa mac_apt) y después interpretarse manualmente. Algunos campos de la carga útil contienen property lists NSKeyedArchiver.

KnowledgeC Parser decodifica en el navegador archivos SEGB v1 y v2, con decodificadores específicos para flujos como App.InFocus, App.WebUsage y ScreenTime.AppUsage y decodificación protobuf sin esquema para el resto; no se sube nada.

Consejos para la investigación

  • Revisa tanto knowledgeC.db como Biome en cada caso: en macOS actual, los datos de foco de apps se esperan en App.InFocus, no en knowledgeC. Consulta knowledgeC and Biome.
  • Separa local de remote/<device UUID>: los archivos remotos proceden de otros dispositivos con la misma Apple Account y no deben atribuirse al Mac examinado.
  • Mira los registros en estado borrado y los archivos de tombstone/; los parsers suelen omitir ambos.
  • Device.Wireless.WiFi y Device.Wireless.Bluetooth complementan los archivos de preferencias de Wi-Fi y Bluetooth con horas de conexión y desconexión.
  • ScreenTime.AppUsage y Notification.Usage se solapan con Screen Time y con la base de datos de notificaciones; conviene explicar las discrepancias entre ellos.
  • Valida los campos decodificados con datos de prueba de la misma compilación de macOS antes de apoyarte en ellos en un informe.

Ver también