共用方式為


聆聽 1.0

作者:馬里奧·休沃特

發佈日期:2026年3月26日

下載macOS版本的listent (GitHub)

簡介

一個命令列工具,用來發現並列出 macOS 可執行檔的程式碼簽名權限。 支援靜態掃描、即時程序監視及背景後台程序操作。

listent 遞迴掃描目錄以尋找可執行的二進位檔,並擷取其程式碼簽署權限。 它專為安全研究者、開發者和系統管理員設計,讓他們需要稽核或理解 macOS 應用程式所要求的權限。

Features

核心功能

  • 快速掃描:透過智慧篩選與進度指示器,有效遍歷目錄樹
  • 權限擷取:使用 macOS codesign 從二進位檔中擷取權限
  • 彈性過濾:依路徑及特定權限鍵篩選,並支援球狀模式
  • 多種輸出格式:人類可讀且結構化的 JSON 輸出
  • 多重路徑:在單一指令中掃描多個目錄
  • 優雅中斷:使用 Ctrl+C 進行清除操作

操作模式

1. 靜態掃描模式(預設)

掃描檔案與目錄以尋找權利:

# 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. 即時監控模式

監控新的權利流程:

# 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. 惡魔模式

在前景持續執行監控(對測試或手動守護進程操作很有用):

# Run as daemon in foreground
listent daemon run

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

自訂設定檔範本(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 = []

使用以下條件查詢日誌:

# 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. 背景守護程式服務

以持續系統服務方式執行監控,由 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

靜態掃描

# 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

流程監控

# 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

精靈管理

# 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

Configuration

命令列選項

  • 路徑:可指定多條路徑作為位置參數: listent /path1 /path2
  • 權限篩選-e "pattern" 支援精確匹配和通配符模式(*?[]
  • 輸出格式--json-j 結構化輸出,預設為人類可讀
  • 靜音模式--quiet-q 抑制無法讀取檔案的警告
  • 監控listent monitor 子指令可實現即時程序監控
  • 監控間隔--interval SECONDS 設定輪詢頻率(0.1-300.0,預設:1.0)
  • 守護程序模式: listent daemon run 作為背景守護程序執行
  • Daemon 管理listent daemon install|uninstall|status|stop|logs
  • 設定檔--config FILE-c FILE 指定守護程序的配置路徑

權利模式

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

精靈配置

守護程序設定可透過 TOML 設定檔進行配置:

  • 預設位置~/.config/listent/daemon.toml
  • 自訂路徑:使用--configdaemon install

要更改設定,請編輯設定檔並重新啟動守護程序:

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

# Restart daemon
listent daemon stop
sudo listent daemon install

守護程序配置範例:

[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 在外部終端機中無法使用

如果 Ctrl+C 在 Terminal.app 或 iTerm2 中沒有中斷掃描,那是因為 macOS 終端機的訊號處理問題。

變通方法:在跑步 listent前,先執行:

trap - INT

此舉移除所有現有中斷陷阱,並恢復預設的 SIGINT 行為。 之後,Ctrl+C 應該就能正常運作了。

注意:這個問題不會影響 VS Code 的整合終端機。

輸出格式

人類可讀(預設)

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 格式

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

安全性

如果你認為發現了安全問題,請透過 專案的 GitHub 倉庫 回報,而非開啟公開問題。

下載適用於 Linux 和 macOS 的 jcd (GitHub)

運行於:

  • macOS