
وكيل كشف خفيف لنظام macOS مبني على بيانات Endpoint Security الخاصة بـ Santa.

مكوّن جانبي خفيف لاكتشاف macOS لـ Santa يقيّم بيانات قياس أمان نقطة النهاية محليًا باستخدام قواعد CEL ويُرسل إشارات الكشف المطابقة فقط إلى خادم خلفي.
تجريبي. صُمم للمختبرات المنزلية والفرق الصغيرة. إصدار مبكر – توقع وجود أخطاء وتغييرات في الواجهة البرمجية.
يقرأ Santamon تدفق قياسات protobuf الخاص بـ Santa، ويقيّم قواعد الكشف باستخدام تعبيرات CEL، ويُرسل الإشارات الأمنية إلى خادم خلفي. تبقى القياسات الأولية على نقطة النهاية—يتم إرسال عمليات الكشف فقط.
القدرات الأساسية:
Santamon هو مكوّن جانبي للكشف خاص بـ Santa، وليس عميل ESF آخر.
يتطلب بناء أداة ESF مخصصة صلاحيات Apple المقيدة وملفات التزويد والتعامل الدقيق مع أحداث أمان نقطة النهاية عالية الحجم. يقوم Santa بذلك بالفعل وقد خضع لاختبارات قاسية في الإنتاج.
قيمة Santamon:
يتولى Santa الجزء الأثقل من استهلاك أحداث أمان نقطة النهاية بشكل موثوق وآمن؛ بينما يركز Santamon على منطق الكشف وجودة الإشارات.
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)
تدفق البيانات:
/var/db/santa/spool/new/) بحثًا عن ملفات protobuf جديدةدورة حياة الطابور:
santa.archive_dir (الافتراضي: /var/lib/santamon/spool_hits)سلالة العمليات:
tcc_modification تتطلب macOS 15+)configs/examples/santa-config.mobileconfigيجب تكوين Santa لكتابة أحداث protobuf. استخدم ملف التكوين المقدم:
# 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
يتم تثبيت ما يلي:
/usr/local/bin/santamon/etc/santamon/config.yaml و rules.yaml/Library/LaunchDaemons/com.santamon.plist/var/lib/santamon/عدّل /etc/santamon/config.yaml:
shipper:
endpoint: "https://your-backend.example.com:8443/ingest"
api_key: "${SANTAMON_API_KEY}"
عيّن مفتاح API في ملف LaunchDaemon plist:
# 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
الإعداد الرئيسي: /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
راجع configs/santamon.yaml لجميع الخيارات مع تعليقات مفصلة.
القواعد هي تعبيرات CEL تقيّم أحداث Santa. ثلاثة أنواع مدعومة: بسيطة، ارتباطية، وخط أساس.
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"] &&
// Exclude interactive shells
!(
event.execution.instigator.executable.path.startsWith("/bin/bash") ||
event.execution.instigator.executable.path.startsWith("/bin/zsh") ||
event.execution.instigator.executable.path.startsWith("/bin/sh")
) &&
// Exclude Homebrew / package-manager helpers that legitimately use curl frequently
!(
event.execution.instigator.executable.path.startsWith("/opt/homebrew/") ||
event.execution.instigator.executable.path.contains("/Homebrew/")
)
severity: high
tags: ["T1105", "command-and-control"]
extra_context: ["event.execution.args"]
include_process_tree: true
enabled: true