listent 1.0

Oleh Mario Hewardt

Diterbitkan: 26 Maret 2026

Unduh listent untuk macOS (GitHub)

Pendahuluan

Perangkat lunak baris perintah untuk menemukan dan mencantumkan hak istimewa penandatanganan kode untuk biner yang dapat dieksekusi di macOS. Mendukung pemindaian statis, pemantauan proses real time, dan operasi daemon latar belakang.

listent secara rekursif memindai direktori untuk menemukan biner yang dapat dieksekusi dan mengekstrak hak penandatanganan kode. Ini dirancang untuk peneliti keamanan, pengembang, dan administrator sistem yang perlu mengaudit atau memahami izin yang diminta oleh aplikasi macOS.

Features

Kemampuan Inti

  • Pemindaian cepat: Menjelajahi pohon direktori secara efisien dengan pemfilteran pintar dan indikator progres
  • Ekstraksi hak istimewa: Menggunakan macOS codesign untuk mengekstrak hak istimewa dari biner
  • Pemfilteran fleksibel: Filter menurut jalur dan kunci pemberian izin tertentu dengan dukungan pola glob
  • Beberapa format output: Output JSON yang dapat dibaca manusia dan terstruktur
  • Beberapa jalur: Memindai beberapa direktori dalam satu perintah
  • Interupsi yang halus: Pembatalan bersih dengan Ctrl+C

Mode Operasi

1. Mode Pemindaian Statis (Default)

Memindai file dan direktori untuk hak akses

# 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 Pemantauan Waktu Nyata

Pantau proses baru untuk pemberian izin:

# 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 Daemon

Jalankan pemantauan terus menerus di latar depan (berguna untuk pengujian atau operasi daemon manual):

# Run as daemon in foreground
listent daemon run

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

Templat file konfigurasi kustom (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 = []

Catat log kueri dengan:

# 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. Layanan Daemon Latar Belakang

Jalankan pemantauan sebagai layanan sistem persisten yang dikelola oleh 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

Examples

Pemindaian Statis

# 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

Pemantauan Proses

# 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

Manajemen Daemon

# 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

Konfigurasi

Opsi Baris Perintah

  • Jalur: Beberapa jalur dapat ditentukan sebagai argumen posisi: listent /path1 /path2
  • Pemfilteran hak akses: -e "pattern" mendukung kecocokan tepat dan pola umum (*, ?, [])
  • Format output: --json atau -j untuk output terstruktur, defaultnya dapat dibaca manusia
  • Mode diam: --quiet atau -q menyembunyikan peringatan tentang file yang tidak dapat dibaca
  • Pemantauan: listent monitor subperintah memungkinkan pemantauan proses waktu nyata
  • Interval pemantauan: --interval SECONDS mengatur frekuensi polling (0.1-300.0, default: 1.0)
  • Mode Daemon: listent daemon run berjalan sebagai proses layanan latar belakang
  • Manajemen daemon: listent daemon install|uninstall|status|stop|logs
  • File konfigurasi: --config FILE atau -c FILE menentukan jalur konfigurasi daemon

Pola Pemberian Izin

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

Konfigurasi Daemon

Pengaturan Daemon dikonfigurasi melalui file konfigurasi TOML:

  • Lokasi default: ~/.config/listent/daemon.toml
  • Jalur kustom: Gunakan --config dengan daemon install

Untuk mengubah konfigurasi, edit file konfigurasi dan mulai ulang daemon:

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

# Restart daemon
listent daemon stop
sudo listent daemon install

Contoh konfigurasi daemon:

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

Troubleshooting

Ctrl+C Tidak Berfungsi di Terminal Eksternal

Jika Ctrl+C tidak mengganggu pemindaian di Terminal.app atau iTerm2, ini disebabkan oleh masalah penanganan sinyal terminal macOS.

Solusi sementara: Sebelum menjalankan listent, jalankan:

trap - INT

Ini menghapus perangkap interupsi yang ada dan memulihkan perilaku SIGINT default. Setelah ini, Ctrl+C akan bekerja secara normal.

Catatan: Masalah ini tidak memengaruhi terminal terintegrasi VS Code.

Format Hasil

Dapat Dibaca Manusia (Bawaan)

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

Keamanan

Jika Anda yakin telah menemukan masalah keamanan, silakan laporkan melalui repositori GitHub proyek daripada membuka masalah publik.

Unduh jcd untuk Linux dan macOS (GitHub)

Berjalan pada:

  • macOS