
Agente de detección ligero para macOS construido sobre la telemetría de Endpoint Security de Santa.

Sidecar ligero de detección para macOS Santa que evalúa la telemetría de Endpoint Security localmente con reglas CEL y reenvía solo las señales de detección coincidentes a un servidor backend.
Experimental. Creado para laboratorios domésticos y flotas pequeñas. Versión temprana: se esperan errores y cambios en la API.
Santamon lee el flujo de telemetría protobuf de Santa, evalúa las reglas de detección mediante expresiones CEL y envía señales de seguridad a un backend. La telemetría bruta permanece en el endpoint; solo se reenvían las detecciones.
Capacidades principales:
Santamon es un sidecar de detección para Santa, no otro cliente ESF.
Crear una herramienta ESF personalizada requiere los entitlements restringidos de Apple, perfiles de aprovisionamiento y un manejo cuidadoso de eventos de Endpoint Security de alto volumen. Santa ya hace esto y está probada en producción.
El valor de Santamon:
Santa se encarga del trabajo pesado de ingerir eventos de Endpoint Security de manera confiable y segura; Santamon se centra en la lógica de detección y la calidad de las señales.
Santa Spool → Watcher → Decoder → Rules Engine → Signal Generator → Shipper → Backend
↓ ↓
┌────────────────────────┐
│ State DB (BoltDB) │
│ • Correlation windows │
│ • Baseline tracking │
│ • Signal queue │
└────────────────────────┘
Process lineage: in-memory cache (1h TTL, 50K max)
Flujo de datos:
/var/db/santa/spool/new/) en busca de nuevos archivos protobufCiclo de vida del spool:
santa.archive_dir (predeterminado: /var/lib/santamon/spool_hits)Linaje de procesos:
tcc_modification requieren macOS 15+)configs/examples/santa-config.mobileconfigSanta debe configurarse para escribir eventos protobuf. Usa el perfil de configuración proporcionado:
# Review and customize, then install via System Settings
open configs/examples/santa-config.mobileconfig
# Verify
santactl status | grep "Log Type"
# Should show: Log Type | protobuf
git clone https://github.com/0x4d31/santamon.git
cd santamon
make build
sudo make install
Esto instala:
/usr/local/bin/santamon/etc/santamon/config.yaml y rules.yaml/Library/LaunchDaemons/com.santamon.plist/var/lib/santamon/Edita /etc/santamon/config.yaml:
shipper:
endpoint: "https://your-backend.example.com:8443/ingest"
api_key: "${SANTAMON_API_KEY}"
Establece la clave de API en el plist del LaunchDaemon:
# Generate strong API key
openssl rand -hex 32
# Edit LaunchDaemon
sudo nano /Library/LaunchDaemons/com.santamon.plist
# Add under EnvironmentVariables:
<key>SANTAMON_API_KEY</key>
<string>your-generated-key-here</string>
# Start service
sudo make start
# Monitor logs
make logs
Configuración principal: /etc/santamon/config.yaml
agent:
id: "${HOSTNAME}"
shipper:
endpoint: "https://backend.example.com:8443/ingest"
api_key: "${SANTAMON_API_KEY}"
santa:
spool_dir: "/var/db/santa/spool" # Santa spool location
archive_dir: "/var/lib/santamon/spool_hits" # Archive spool files that produced alerts
stability_wait: "2s" # Wait before reading new files
rules:
path: "/etc/santamon/rules.yaml" # File or directory
state:
db_path: "/var/lib/santamon/state.db"
sync_writes: true # Fsync after writes (safer but slower)
first_seen:
max_entries: 10000 # LRU cache for baseline rules
windows:
max_events: 1000 # Max events per correlation window
shipper:
batch_size: 100 # Signals per batch
flush_interval: "30s" # Time between flushes
timeout: "10s" # HTTP request timeout
tls_skip_verify: false # NEVER true in production
Consulta configs/santamon.yaml para conocer todas las opciones con comentarios detallados.
Las reglas son expresiones CEL que evalúan eventos de Santa. Se admiten tres tipos: simple, correlación y línea base.
rules:
- id: SM-014
title: "Non-interactive process invoking curl/wget"
description: |
Non-terminal, non-package-manager process launching curl or wget.
expr: |
kind == "execution" &&
event.execution.target.executable.path in ["/usr/bin/curl", "/usr/bin/wget"] &&