作者:馬里奧·休沃特
發佈日期:2026年3月26日
簡介
一個命令列工具,用來發現並列出 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