マリオ・ヘワード
公開日: 2026 年 3 月 26 日
はじめに
macOS 実行可能バイナリのコード署名の権利を検出して一覧表示するためのコマンド ライン ツール。 静的スキャン、リアルタイム プロセス監視、バックグラウンド デーモン操作をサポートします。
listent ディレクトリを再帰的にスキャンして実行可能バイナリを検索し、コード署名の権利を抽出します。 macOS アプリケーションによって要求されるアクセス許可を監査または理解する必要があるセキュリティ研究者、開発者、システム管理者向けに設計されています。
特徴
コア機能
- 高速スキャン: スマート フィルタリングと進行状況インジケーターを使用してディレクトリ ツリーを効率的に走査する
-
権利の抽出: macOS
codesignを使用してバイナリから権利を抽出する - 柔軟なフィルター処理: glob パターンのサポートを使用してパスと特定のエンタイトルメント キーでフィルター処理する
- 複数の出力形式: 人間が読み取り可能で構造化された JSON 出力
- 複数のパス: 1 つのコマンドで複数のディレクトリをスキャンする
- グレースフルな割り込み: 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
例示
静的スキャン
# 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
コンフィギュレーション
コマンド ライン オプション
-
パス: 位置引数として複数のパスを指定できます。
listent /path1 /path2 -
エンタイトルメント フィルタリング:
-e "pattern"は完全一致と glob (*、?、[]) をサポートします -
出力形式: 構造化された出力の
--jsonまたは-j、既定値は人間が判読可能です -
サイレント モード:
--quietまたは-qは、読み取り不可能なファイルに関する警告を抑制します -
監視:
listent monitorサブコマンドを使用すると、リアルタイムのプロセス監視が可能になります。 -
監視間隔: ポーリング頻度を設定
--interval SECONDS(0.1 から 300.0、既定値: 1.0) -
デーモン モード: バックグラウンド デーモン プロセスとして実行
listent daemon run -
デーモン管理:
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 -
カスタム パス:
--configとdaemon 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 の統合ターミナルには影響しません。
出力形式
Human-Readable (既定値)
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