Compartir a través de


listent 1.0

Por Mario Hewardt

Publicado: 26 de marzo de 2026

Descargar listent para macOS (GitHub)

Introducción

Una herramienta de línea de comandos para detectar y enumerar los derechos de firma de código para archivos binarios ejecutables de macOS. Admite el análisis estático, la supervisión de procesos en tiempo real y la operación como demonio en segundo plano.

listent examina de forma recursiva los directorios para buscar archivos binarios ejecutables y extrae sus derechos de firma de código. Está diseñado para investigadores de seguridad, desarrolladores y administradores del sistema que necesitan auditar o comprender los permisos solicitados por las aplicaciones macOS.

Características

Funcionalidades principales

  • Examen rápido: recorre eficazmente árboles de directorio con indicadores inteligentes de filtrado y progreso
  • Extracción de derechos: usa macOS codesign para extraer derechos de archivos binarios
  • Filtrado flexible: filtrado por rutas de acceso y claves de derechos específicas con compatibilidad con patrones globales
  • Varios formatos de salida: salida JSON legible y estructurada
  • Varias rutas de acceso: examinar varios directorios en un solo comando
  • Interrupciones elegantes: Cancelación ordenada con Ctrl+C

Modos de funcionamiento

1. Modo de examen estático (valor predeterminado)

Examinar archivos y directorios para obtener derechos:

# Scan default locations (/usr/bin and /usr/sbin)
listent

# Scan specific paths
listent /usr/bin /usr/sbin

# Filter by entitlement patterns
listent -e "com.apple.security.*"
listent -e "*network*" -e "*debug*"

# JSON output for automation
listent /usr/bin -e "*security*" --json

2. Modo de monitor en tiempo real

Supervisión de nuevos procesos para derechos:

# Monitor all new processes
listent monitor

# Monitor with custom polling interval
listent monitor --interval 0.5

# Monitor specific entitlements only
listent monitor -e "com.apple.security.network.*"

3. Modo demonio

Ejecute la supervisión continuamente en primer plano (útil para probar o el funcionamiento manual de un servicio):

# Run as daemon in foreground
listent daemon run

# Daemon with custom config file
listent daemon run --config /etc/listent/custom.toml

Plantilla de archivo de configuración personalizada (daemon.toml):

[daemon]
# How often to poll for new processes, in seconds (0.1 - 300.0)
polling_interval = 1.0
# Start automatically when loaded by launchd (RunAtLoad)
auto_start = true

[monitoring]
# Filesystem paths to scan for running process binaries.
# Empty list = monitor processes from all paths.
path_filters = ["/usr/bin", "/usr/sbin"]
# Entitlement patterns to match (glob syntax). Empty list = all entitlements.
# Examples: "com.apple.security.*", "*network*"
entitlement_filters = []

Consultar registros con:

# View listent logs in real-time
log stream --predicate 'subsystem == "com.microsoft.sysinternals.listent"' --level info

# View recent logs
log show --predicate 'subsystem == "com.microsoft.sysinternals.listent"' --last 1h

# Filter for errors only
log show --predicate 'subsystem == "com.microsoft.sysinternals.listent" AND messageType == error' --last 24h

4. Servicio de daemón en segundo plano

Ejecutar la supervisión como un servicio del sistema persistente administrado por launchd.

# Install and start daemon
sudo listent daemon install

# Check daemon status
listent daemon status

# View daemon logs
listent daemon logs
listent daemon logs --since 1h
listent daemon logs --since 30m
listent daemon logs --since "2025-01-15 10:00"
listent daemon logs --format json
listent daemon logs -f                    # Follow logs in real-time

# Stop daemon process
listent daemon stop

# Uninstall service
sudo listent daemon uninstall

Ejemplos

Escaneo estático

# Basic scan with progress (uses default /usr/bin and /usr/sbin)
listent

# Multi-directory scan with filtering
listent /usr/bin /usr/sbin -e "*security*"

# Find all network-related entitlements
listent -e "*network*" --json | jq '.results[].entitlements'

# Scan quietly (suppress warnings)
listent /usr/bin --quiet

Proceso de supervisión

# Monitor all processes with 2-second intervals
listent monitor --interval 2.0

# Monitor only security-related entitlements
listent monitor -e "com.apple.security.*"

# Run as daemon with custom config
listent daemon run --config /etc/listent/daemon.toml

Gestión de demonios

# Install daemon with default monitoring (requires sudo)
sudo listent daemon install

# Install with custom configuration file
sudo listent daemon install --config /path/to/config.toml

# View recent daemon activity
listent daemon logs --since 1h

# Check if daemon is running
listent daemon status

# Stop and remove daemon
listent daemon stop
sudo listent daemon uninstall

Configuración

Opciones de la línea de comandos

  • Rutas de acceso: se pueden especificar varias rutas de acceso como argumentos posicionales: listent /path1 /path2
  • Filtrado de derechos: -e "pattern" admite coincidencias exactas y globs (*, ?, [])
  • Formato de salida: --json o -j para la salida estructurada, el valor predeterminado es legible por el usuario.
  • Modo silencioso: --quiet o -q suprime advertencias sobre archivos ilegibles
  • Supervisión: listent monitor subcomando habilita la supervisión de procesos en tiempo real
  • Intervalo de supervisión: --interval SECONDS establece la frecuencia de sondeo (0.1-300.0, valor predeterminado: 1.0)
  • Modo demonio: listent daemon run se ejecuta como un daemón en segundo plano
  • Gestión de servicios en segundo plano: listent daemon install|uninstall|status|stop|logs
  • Archivo de configuración: --config FILE o -c FILE especifica la ruta de configuración del demonio

Patrones de derechos

# Exact match
-e "com.apple.security.network.client"

# Wildcard patterns
-e "com.apple.security.*"        # All Apple security entitlements
-e "*network*"                   # Any entitlement containing "network"
-e "*.debug.*"                   # Debug-related entitlements

# Multiple patterns (OR logic)
-e "com.apple.private.*" -e "*.debug.*"

Configuración del demonio

La configuración del daemon se realiza a través de un fichero de configuración TOML.

  • Ubicación predeterminada: ~/.config/listent/daemon.toml
  • Ruta de acceso personalizada: uso --config con daemon install

Para cambiar la configuración, edite el archivo de configuración y reinicie el demonio:

# Edit config
nano ~/.config/listent/daemon.toml

# Restart daemon
listent daemon stop
sudo listent daemon install

Configuración de demonio de ejemplo:

[daemon]
polling_interval = 1.0
auto_start = true

[monitoring]
path_filters = []
entitlement_filters = ["com.apple.security.*", "*network*"]

[logging]
level = "info"
subsystem = "com.microsoft.sysinternals.listent"
category = "daemon"

Solución de problemas

Ctrl+C no funciona en terminales externos

Si Ctrl+C no interrumpe el examen en Terminal.app o iTerm2, esto se debe a un problema de control de señales del terminal macOS.

Solución alternativa: antes de ejecutar listent, ejecute:

trap - INT

Esto quita cualquier captura de interrupción existente y restaura el comportamiento predeterminado de SIGINT. Después de esto, Ctrl+C debería funcionar normalmente.

Nota: Este problema no afecta al terminal integrado de VS Code.

Formatos de salida

Legible para humanos (por defecto)

Found 2 binaries with 5 total entitlements:

/usr/bin/security:
  com.apple.private.platformsso.security: true

/usr/bin/nc:
  com.apple.security.network.client: true
  com.apple.security.network.server: true

Scan Summary:
  Scanned: 156 files
  Matched: 2 files
  Duration: 2.34s

Formato JSON

{
  "results": [
    {
      "path": "/usr/bin/security",
      "entitlements": {
        "com.apple.private.platformsso.security": true
      },
      "entitlement_count": 1
    }
  ],
  "summary": {
    "scanned": 156,
    "matched": 2,
    "duration_ms": 2340,
    "skipped_unreadable": 0
  }
}

Seguridad

Si cree que ha encontrado un problema de seguridad, notifiquelo a través del repositorio de GitHub del proyecto en lugar de abrir un problema público.

Descarga de jcd para Linux y macOS (GitHub)

Se ejecuta en:

  • macOS