마리오 헤워드
게시 날짜: 2026년 3월 26일
소개
macOS 실행 파일 이진 파일에 대한 코드 서명 자격을 검색하고 나열하는 명령줄 도구입니다. 정적 검색, 실시간 프로세스 모니터링 및 백그라운드 디먼 작업을 지원합니다.
listent 디렉터리를 재귀적으로 검색하여 실행 가능한 이진 파일을 찾고 코드 서명 자격을 추출합니다. macOS 애플리케이션에서 요청한 권한을 감사하거나 이해해야 하는 보안 연구원, 개발자 및 시스템 관리자를 위해 설계되었습니다.
Features
핵심 기능
- 빠른 검색: 디렉터리 트리를 스마트 필터링 및 진행률 표시기를 사용하여 효율적으로 탐색합니다.
-
권한 추출: macOS
codesign를 사용하여 이진 파일에서 자격 추출 - 유연한 필터링: glob 패턴 지원을 사용하여 경로 및 특정 권한 키별로 필터링
- 여러 출력 형식: 사람이 읽을 수 있고 구조화된 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. 백그라운드 디먼 서비스
시작 시 관리되는 영구 시스템 서비스로 모니터링을 실행합니다.
# 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
Configuration
명령줄 옵션
-
경로: 여러 경로를 위치 인수로 지정할 수 있습니다.
listent /path1 /path2 -
권한 필터링:
-e "pattern"정확한 일치 항목 및 글롭(*,?,[]) 지원 -
출력 형식:
--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 -
사용자 지정 경로:
--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