Aller au contenu

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

  1. Sidebar → Security → Detection (sous OBSERVATION)
  2. Tuiles KPI en haut : events ouverts / acquittés / fenêtre
  3. Filtre : fenêtre temporelle (1h/24h/7j/30j) + statut + type de règle
  4. 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 ?
  5. Cliquez Acquitter une fois investigué (event sort de la vue “open”)

Ce que nous détectons

Type de règleConfig par défautMITRE TTP
auth_brute_force (par user)>10 échecs en 5minT1110.001
auth_brute_force (par src_ip)>20 échecs en 5minT1110.001
auth_invalid_user>10 users uniques inexistants depuis 1 IP en 10minT1589.002
auth_new_countrylogin réussi depuis pays non vu pour user en 30jT1078
geo_blocked_countrytoute connexion depuis pays configuré opérateurT1078

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 = true

Redé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 iptables automatiques ni usermod -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)

Fenêtre de terminal
# Liste events ouverts dernières 24h
curl 'https://app.monsys.ai/api/v1/detection/events?since=24h&ack=open' \
-H "Authorization: Bearer $TOKEN"
# Détail avec related + similar findings
curl https://app.monsys.ai/api/v1/detection/events/<id> \
-H "Authorization: Bearer $TOKEN"
# Acquitter après investigation
curl -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