Detection & Reporting
Le module Detection & Reporting de monsys observe ce qui se passe sur vos hôtes au niveau de l’authentification + IP source, et signale les patterns suspects avec contexte complet. Le système n’agit pas automatiquement — le sysadmin garde la main via les Emergency Actions existantes (TOTP-gated, signées Ed25519).
C’est un choix délibéré : les features auto-block (style CrowdStrike) sont spoofables (l’attaquant peut faire bloquer des IPs légitimes) et ne correspondent pas à la séparation-des-devoirs NIS2. monsys fournit la preuve, l’humain décide.
Dans le tableau de bord
- Sidebar → Security → Detection (sous OBSERVATION)
- Tuiles KPI en haut : events ouverts / acquittés / fenêtre
- Filtre : fenêtre temporelle (1h/24h/7j/30j) + statut + type de règle
- Cliquez sur un event dans la liste de gauche → panneau contexte à droite :
- Hôte + IP source + pays + RIR + user cible + count + fenêtre
- MITRE ATT&CK TTPs (par ex. T1110.001 pour brute force SSH)
- “Étapes suivantes suggérées” — guide avec pointeur explicite vers l’Emergency Action manuelle pour l’escalade
- “Auth-events liés (même IP)” — qu’a encore tenté cette IP dans la même fenêtre
- “Findings similaires cette semaine (même IP)” — cette IP a-t-elle touché d’autres hôtes de votre flotte ?
- Cliquez Acquitter une fois investigué (event sort de la vue “open”)
Ce que nous détectons
| Type de règle | Config par défaut | MITRE TTP |
|---|---|---|
auth_brute_force (par user) | >10 échecs en 5min | T1110.001 |
auth_brute_force (par src_ip) | >20 échecs en 5min | T1110.001 |
auth_invalid_user | >10 users uniques inexistants depuis 1 IP en 10min | T1589.002 |
auth_new_country | login réussi depuis pays non vu pour user en 30j | T1078 |
geo_blocked_country | toute connexion depuis pays configuré opérateur | T1078 |
Au premier déploiement, les 4 règles par défaut sont seedées par
tenant. Modifiez/ajoutez via /security/detection/rules (v2 — pour
l’instant via API : POST /api/v1/detection/rules).
Ce que les hôtes doivent faire (opt-in par agent)
La détection requiert que l’agent lise /var/log/auth.log (ou
/var/log/secure sur RHEL) et envoie les events parsés au hub. C’est
désactivé par défaut car usernames + IPs sources sont des PII.
Activer par hôte dans /etc/monsys/agent.toml :
auth_event_shipping_enabled = trueRedémarrer agent : sudo systemctl restart monsys-agent. Events
expédiés dans la minute. Confidentialité : tout reste dans le scope
tenant (RLS) et seuls les signals agrégés remontent au niveau event
sur le hub (pas de raw log lines stockées).
GeoIP — pas MaxMind, RIR
Pour le mapping pays, monsys utilise les fichiers RIR delegated stats (RIPE/ARIN/APNIC/AFRINIC/LACNIC). Listes publiques, rafraîchies quotidiennement directement par le registry allocant. Pas de licence MaxMind, pas d’attribution, EU-pull-friendly, et plus précis au niveau pays que les bases commerciales (c’est par définition la source de vérité pour l’allocation IP).
Limitation : pays + ASN uniquement, pas de city/lat-lng. Pour l’impossible-travel à coordonnées exactes, source séparée nécessaire (plus tard).
Le GeoIPWorker sur le hub télécharge les 5 fichiers RIR toutes les
24h (~25 MB total), les parse en ranges, peuple
geoip_country_ranges. Le détection worker fait un seul index seek
par IP source pour chercher pays + RIR.
Ce que monsys ne fait PAS
- Pas de blocks
iptablesautomatiques niusermod -L - Pas d’EATs pré-émis qui s’auto-déclenchent sur signaux de détection
- Pas d’inspection de paquets niveau réseau (nous lisons logs, pas paquets)
- Pas de ML / sequence detection (commencer par règles, ML uniquement quand les baselines sont stables pendant des mois)
- Pas d’intégration avec SIEMs externes (nous SOMMES la source de preuves, pas un agent-feeder vers Splunk/Datadog)
Comportement auto-resolve
Les detected events ne se ferment pas automatiquement. Le sysadmin acquitte explicitement via le bouton “Acquitter” — par design pour maintenir l’audit trail (“le 2026-05-21 14:23 alice@acme.com a dismissé l’event X comme bénin”). Les events plus anciens que 30 jours sont purgés par la chunk-retention policy TimescaleDB (configurable dans mig 097).
Ou via API (avancé — pour automatisation)
# Liste events ouverts dernières 24hcurl 'https://app.monsys.ai/api/v1/detection/events?since=24h&ack=open' \ -H "Authorization: Bearer $TOKEN"
# Détail avec related + similar findingscurl https://app.monsys.ai/api/v1/detection/events/<id> \ -H "Authorization: Bearer $TOKEN"
# Acquitter après investigationcurl -X POST https://app.monsys.ai/api/v1/detection/events/<id>/acknowledge \ -H "Authorization: Bearer $TOKEN"
# Ajouter une règle pays-bloquécurl -X POST https://app.monsys.ai/api/v1/detection/rules \ -H "Authorization: Bearer $TOKEN" \ -d '{ "name": "Block KP traffic", "rule_kind": "geo_blocked_country", "config": {"countries": ["KP"]}, "severity": "high", "enabled": true }'Ce qui n’appartient PAS à cette page
- Emergency Actions manuelles (IsolateNetwork etc.) → voir Emergency console
- Audit trail des EATs exécutés → voir Transparency log
- Détection basée CVE (kernel + deps applicatives + paquets OS) → voir Kernel CVE pipeline et Correspondance CVE paquets OS