Partager via


listent 1.0

Par Mario Hewardt

Publication : 26 mars 2026

Télécharger listent pour macOS (GitHub)

Présentation

Outil en ligne de commande permettant de découvrir et de répertorier les droits de signature de code pour les fichiers binaires exécutables macOS. Prend en charge l’analyse statique, la surveillance des processus en temps réel et l'exécution de programmes d'arrière-plan.

listent Analyse de manière récursive les répertoires pour rechercher des fichiers binaires exécutables et extrait leurs droits de signature de code. Il est conçu pour les chercheurs en sécurité, les développeurs et les administrateurs système qui doivent auditer ou comprendre les autorisations demandées par les applications macOS.

Fonctionnalités

Fonctionnalités principales

  • Analyse rapide : traverse efficacement les arborescences d’annuaires avec des indicateurs de filtrage et de progression intelligents
  • Extraction des droits d’utilisation : utilise macOS codesign pour extraire les droits des fichiers binaires
  • Filtrage flexible : Filtrer par chemins et clés d'autorisation spécifiques avec prise en charge des modèles glob
  • Plusieurs formats de sortie : sortie JSON lisible par l’homme et structurée
  • Chemins d’accès multiples : analyser plusieurs répertoires dans une seule commande
  • Interruptions élégantes : Annulation propre avec Ctrl+C

Modes de fonctionnement

1. Mode d’analyse statique (par défaut)

Analysez les fichiers et les répertoires pour obtenir les autorisations :

# 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. Mode moniteur en temps réel

Surveillez les nouveaux processus pour les droits d’utilisation :

# 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. Mode démon

Exécutez la surveillance en continu au premier plan (utile pour tester ou effectuer une opération de démon manuelle) :

# Run as daemon in foreground
listent daemon run

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

Modèle de fichier de configuration personnalisé (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 = []

Journaux de requêtes avec :

# 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. Service démon d'arrière-plan

Exécutez la surveillance en tant que service système persistant géré par 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

Exemples

Analyse statique

# 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

Analyse des processus

# 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

Gestion des daemons

# 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

Paramétrage

Options de la ligne de commande

  • Chemins d’accès : plusieurs chemins peuvent être spécifiés en tant qu’arguments positionnels : listent /path1 /path2
  • Filtrage des droits d’utilisation : -e "pattern" prend en charge les correspondances exactes et les glob (*, ?, [])
  • Format de sortie : --json ou -j pour la sortie structurée, la valeur par défaut est lisible par l’homme
  • Mode silencieux : --quiet ou -q supprime les avertissements relatifs aux fichiers non lisibles
  • Supervision : listent monitor la sous-commande active la surveillance des processus en temps réel
  • Intervalle du moniteur : --interval SECONDS définit la fréquence d’interrogation (0.1-300.0, valeur par défaut : 1.0)
  • Mode démon : listent daemon run en tant que processus démon en arrière-plan
  • Gestion des démons : listent daemon install|uninstall|status|stop|logs
  • Fichier de configuration : --config FILE ou -c FILE spécifie le chemin de configuration du démon

Modèles de droits

# 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.*"

Configuration du démon

Les paramètres de démon sont configurés via un fichier de configuration TOML :

  • Emplacement par défaut : ~/.config/listent/daemon.toml
  • Chemin d’accès personnalisé : utiliser --config avec daemon install

Pour modifier la configuration, modifiez le fichier de configuration et redémarrez le démon :

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

# Restart daemon
listent daemon stop
sudo listent daemon install

Exemple de configuration de démon :

[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"

Résolution des problèmes

Ctrl+C ne fonctionne pas dans les terminaux externes

Si Ctrl+C n’interrompt pas l’analyse dans Terminal.app ou iTerm2, cela est dû à un problème de gestion des signaux de terminal macOS.

Solution de contournement : Avant d’exécuter listent, exécutez :

trap - INT

Cela supprime tout piège d'interruption existant et restaure le comportement SIGINT par défaut. Après cela, Ctrl+C doit fonctionner normalement.

Remarque : ce problème n’affecte pas le terminal intégré de VS Code.

Formats de sortie

Humainement lisible (par défaut)

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

JSON Format

{
  "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
  }
}

Sécurité

Si vous pensez avoir trouvé un problème de sécurité, signalez-le via le dépôt GitHub du projet plutôt que d’ouvrir un problème public.

Télécharger jcd pour Linux et macOS (GitHub)

S’exécute sur :

  • macOS