Beveiligingsarchitectuur
Trust boundaries
┌─────────┐ HTTPS + Bearer + Ed25519-sig ┌──────────┐ pgx ┌──────────────┐│ Agent │ ──────────────────────────────▶ │ Hub API │ ────────▶ │ TimescaleDB │└─────────┘ └──────────┘ └──────────────┘ │ │ │ │ WebSocket (emergency + console RPC) │ │ ▼ ▼ ▼ Honeypots Dashboard Row-Level Process DNA (Next.js + Security per inotify HMAC + TOTP cookies) tenant_id
Agent → Hub : Bearer token + X-Monsys-Signature (Ed25519 over sha256(body)) Hub → Agent : Ed25519 emergency / console-session tokens (5-checks verify)Vertrouwensmodel
- Agent vertrouwt hub — voor het verifiëren van Ed25519-handtekeningen op emergency tokens.
- Hub vertrouwt agent NIET — elk ingest-payload wordt gevalideerd, batch size gecapped, rate limit afgedwongen.
- Hub vertrouwt browser-sessie alleen via HMAC-getekende cookies (HttpOnly, Secure, SameSite=Lax, 8u TTL).
- Multi-tenant isolatie — Postgres Row-Level Security policies voorkomen dat tenant A data van tenant B kan zien, ook bij een SQL-fout in de hub code.
Cryptografie
| Doel | Algoritme |
|---|---|
| Sessiecookie HMAC | SHA-256 |
| Wachtwoorden | bcrypt cost 10 |
| Emergency tokens | Ed25519 |
| Agent payload signing | Ed25519 (per-agent keypair, TOFU pin) |
| TOTP (2FA login) | RFC 6238 / SHA-1 |
| TLS | Let’s Encrypt (TLS 1.3) |
| Webhook signing | HMAC-SHA256 |
| Agent token storage | SHA-256 hash, never plaintext |
| Console session integrity | SHA-256 over append-only audit log |
Agent integriteit
Sinds mei 2026 vereist de hub Ed25519-handtekeningen op elke ingest-payload zodra de agent’s pubkey gepind is. Token-diefstal alleen is dus onvoldoende — zie Agent payload signing.
De hub draait een IntegrityCheckWorker die elk 10 min naar zes categorieën
afwijkingen zoekt (clock_drift, flat_metrics, version_downgrade,
unsigned_payload, signature_invalid, cadence_anomaly). Open items vereisen
admin-review; resolved items blijven bewaard als audit trail. Zie
Agent integrity monitoring.
Multi-laags secrets
Drie soorten secrets, elk apart roteerbaar:
| Secret | Opslag | Rotatie endpoint |
|---|---|---|
| Agent bearer token | /etc/monsys/agent.toml (host) | POST /api/v1/agents/:id/rotate-token |
| Agent signing key | /var/lib/monsys/agent-signing.key | POST /api/v1/agents/:id/rotate-signing-key |
| Hub Ed25519 priv | HUB_EMERGENCY_PRIVATE_KEY env (hub) | manueel via key-rotate script |
Zie Token rotation voor de procedure.
Wat Monsys NIET beschermt
- Een gecompromitteerde hub-API kan alle agents instructies geven. Bescherm het hub-OS (firewall, OS patching, MFA op SSH).
- Een gecompromitteerde agent host kan zijn eigen telemetrie liegen. Detectie: vergelijking tussen meerdere hosts, process DNA.
- Insider threats — een legitieme owner kan emergency actions afvuren. Mitigatie: audit log, optionele 2-of-N approval voor niveau 3 acties (in playbooks).