Ga naar inhoud

Agent payload signing

Sinds de hardening-ronde van mei 2026 ondertekent elke agent zijn ingest-payloads met een eigen Ed25519 keypair. Het hub-side bearer-token alleen is niet voldoende om data namens een agent te pushen — de aanvaller heeft ook de private signing key van de host nodig.

Agent (eerste start)
├─ genereert Ed25519 keypair
├─ schrijft secret naar /var/lib/monsys/agent-signing.key (mode 0600)
└─ stuurt public key naar hub via /api/v1/agents/register
Hub pint de key in
agents.signing_pubkey
(trust-on-first-use)
Agent (elke ingest)
body = "[{...metrics...}]"
sig = base64(Ed25519(SHA256(body)))
HTTP POST /api/v1/ingest
Authorization: Bearer ms_...
X-Monsys-Signature: <sig>
Hub
pubkey = SELECT signing_pubkey FROM agents WHERE token_hash = …
als pubkey NULL → accepteer + log "unsigned_payload" (medium)
als sig ontbreekt → 403 + log "unsigned_payload" (high)
als sig fout → 403 + log "signature_invalid" (critical)
anders → ✓ verwerk
PlatformPad
Linux/var/lib/monsys/agent-signing.key
WindowsC:\ProgramData\monsys\agent-signing.key

Permissies op Linux: mode 0600, eigenaar = de user die de agent draait (user/monsys afhankelijk van je install). Windows: ACL beperkt tot SYSTEM + Administrators.

Inhoud is 32 bytes (raw Ed25519 secret seed). Geen header, geen PEM — houd het bestand exact op die grootte.

De eerste keer dat een agent een pubkey meestuurt in register, pint de hub hem en zet signing_set_at = NOW(). Daarna is de pin immutable vanuit de agent — een nieuwe pubkey wordt geweigerd én genereert een signature_invalid integrity-anomaly.

Om legitiem te roteren moet een admin de pin expliciet wegzetten via:

POST /api/v1/agents/<id>/rotate-signing-key

(zie Token rotation)

Wat een aanvaller met alleen de bearer token niet kan

Section titled “Wat een aanvaller met alleen de bearer token niet kan”
AanvalGeblokkeerd door
Fake metrics pushen onder dezelfde agentsignature mismatch → 403
Honeypot trip vervalsensignature mismatch → 403
Process DNA hash vervangensignature mismatch → 403
Versie downgraden in rapportagesignature mismatch → 403, plus version_downgrade integrity check

Wat een aanvaller met token + key file wel kan

Section titled “Wat een aanvaller met token + key file wel kan”

Als beide gestolen zijn, kan de aanvaller volledig namens de agent rapporteren. De key file zit echter buiten /etc/ (waar backups van system-config typisch heen gaan), en is mode 0600. Concrete maatregelen om beide niet samen te laten lekken:

  • Houd de key file uit backups (backup_exclude in restic / borg)
  • Roteer de signing-key na een geconstateerd security event
  • Monitor wijzigingen op /var/lib/monsys/agent-signing.key met de host’s eigen FIM (auditd, auditctl -w /var/lib/monsys/agent-signing.key -p wa)

Een oudere agent zonder signing module blijft werken: de hub accepteert de unsigned payload maar maakt elk uur een unsigned_payload-anomaly aan zodat het niet onopgemerkt blijft.

Upgrade-pad:

Terminal window
# Op de host
sudo apt update && sudo apt upgrade monsys-agent
# Of via install script:
curl -fsSL https://get.monsys.ai/install.sh | sudo bash
sudo systemctl restart monsys-agent

De agent genereert dan zelf een keypair, registreert de pubkey, en de unsigned_payload-anomalies worden vanzelf gesloten in de eerstvolgende integrity-cyclus (10 min).