Preuve T1 — Journalisation & alerting minimal viable (SIEM-lite)

Résumé exécutif (1 min) : Un environnement lab sans centralisation de logs, sans dashboards, sans alertes. Après déploiement d’un pipeline de collecte (syslog + journald + Event Log Windows), d’un stack de visualisation (Grafana/Loki ou équivalent) et de règles d’alerte, le temps de détection d’un événement anormal passe de “jamais détecté” à moins de 15 minutes. Un runbook d’investigation accompagne chaque type d’alerte. Le principe de minimisation (CNIL) est respecté : seuls les logs justifiés sont collectés.


Contexte

  • Type de structure : lab multi-OS (Linux + Windows, lab Proxmox existant).
  • Problème initial : logs locaux uniquement, pas de centralisation, pas de dashboards, pas d’alertes. Un incident passe inaperçu jusqu’à ce qu’un utilisateur signale un problème.
  • Objectifs mesurables :
    • Centraliser les logs de 100 % des services critiques.
    • Créer 5+ dashboards exploitables.
    • Configurer 10+ règles d’alerte (sécurité + exploitation).
    • Temps de détection d’un événement anormal < 15 min.
    • Runbook d’investigation pour chaque catégorie d’alerte.

Architecture

flowchart LR
    subgraph "Sources"
        LIN["Serveurs Linux\n(syslog / journald)"]
        WIN["Serveurs Windows\n(Event Log / WEF)"]
        FW["Firewall\n(syslog)"]
        DOCKER["Conteneurs\n(stdout/JSON)"]
    end
    subgraph "Collecte"
        PROM["Promtail / Filebeat\n/ Fluentd"]
    end
    subgraph "Stockage & Indexation"
        LOKI["Loki / Elasticsearch"]
    end
    subgraph "Visualisation & Alerting"
        GRAFANA["Grafana\n(dashboards + alertes)"]
    end

    LIN --> PROM
    WIN --> PROM
    FW --> PROM
    DOCKER --> PROM
    PROM --> LOKI
    LOKI --> GRAFANA

Schéma anonymisé — TODO


Pipeline de collecte

SourceTransportFormatRétention
Linux (syslog)rsyslog → PromtailJSON structuré6 mois
Windows (Event Log)WEF / WinlogbeatJSON6 mois
Firewallsyslog UDP/TCPCEF/syslog3 mois
Dockerstdout → Loki driverJSON3 mois

Dashboards créés

DashboardContenuUsage
Santé systèmeCPU, RAM, disque, uptime par serveurExploitation quotidienne
AuthentificationsSuccès/échecs, sources, top usersSécurité
FirewallConnexions autorisées/bloquées, top destinationsSécurité réseau
Logs applicatifsErreurs, warnings, tendancesDebug applicatif
Alertes activesAlertes en cours, historique, acquittementsPilotage

Règles d’alerte (extrait)

AlerteConditionSévéritéRunbook
Échecs d’authentification répétés> 10 échecs en 5 min (même source)HauteRunbook AUTH-01
Élévation de privilègesÉvénement 4672 (Windows) / sudo (Linux)HauteRunbook PRIV-01
Service arrêtéPas de heartbeat depuis 5 minHauteRunbook SVC-01
Disque > 85 %Seuil espace disqueMoyenneRunbook DISK-01
Backup échouéAbsence de log backup dans les 24 hHauteRunbook BKP-01
Connexion sortante inhabituelleDestination non whitelistéeMoyenneRunbook NET-01
Modification GPOÉvénement 5136HauteRunbook GPO-01
Création de compteÉvénement 4720MoyenneRunbook ACCT-01
Redémarrage serveurÉvénement système rebootBasseRunbook REBOOT-01
Certificat TLS expirantExpiration < 15 joursMoyenneRunbook CERT-01

Runbooks d’investigation (extrait)

Runbook AUTH-01 : Échecs d’authentification répétés

  1. Contexte : l’alerte signale > 10 échecs en 5 min depuis une même source.
  2. Investigation :
    1. Identifier la source (IP, hostname, compte ciblé).
    2. Vérifier si la source est légitime (poste utilisateur, script, service).
    3. Vérifier si le compte ciblé existe.
    4. Consulter les logs détaillés (type d’échec : mot de passe incorrect, compte verrouillé, etc.).
  3. Décision :
    • Source légitime + erreur utilisateur → contacter l’utilisateur, réinitialiser le mot de passe si nécessaire.
    • Source inconnue / suspecte → bloquer l’IP au firewall, vérifier l’intégrité du poste source, escalader.
  4. Documentation : consigner l’incident (date, source, action, résolution).

Runbook SVC-01 : Service arrêté

  1. Contexte : pas de heartbeat depuis 5 min pour un service critique.
  2. Investigation :
    1. Vérifier l’état du service (systemctl status, docker ps).
    2. Consulter les logs du service (dernières entrées).
    3. Vérifier les ressources (CPU, RAM, disque).
  3. Action :
    • Cause identifiée (OOM, disque plein, crash) → corriger + redémarrer.
    • Cause non identifiée → redémarrer en observant les logs, escalader si récurrence.
  4. Documentation : consigner l’incident.

Contrôles appliqués

ContrôleRéférenceStatut
Centralisation des logsANSSI Hygiène — R33, R34✅ Appliqué
Minimisation (CNIL) : seuls les logs justifiés sont collectésCNIL — Journalisation✅ Appliqué
Séparation des rôles (admins ne modifient pas leurs logs)ANSSI Admin sécurisée✅ Appliqué
Alerting sur événements critiquesANSSI Hygiène — R34✅ Appliqué
Runbooks d’investigationBonne pratique SOC/NOC✅ Documenté
Rétention définie par catégorieCNIL — Durée de conservation✅ Appliqué

Résultats / KPIs

KPIAvantAprèsObjectif
Sources centralisées0100 % services critiques100 %
Dashboards exploitables05≥ 5
Règles d’alerte actives010≥ 10
Temps de détection (événement anormal)∞ (jamais détecté)< 15 min≤ 15 min
Runbooks d’investigation010 (1 par type d’alerte)≥ 1 par alerte

Valeurs issues d’un environnement lab — exemple lab.


Backlog de remédiation (extrait)

#ActionPrioritéStatut
1Déployer le pipeline de collecteHaute✅ Fait
2Créer les dashboardsHaute✅ Fait
3Configurer les alertesHaute✅ Fait
4Rédiger les runbooks d’investigationHaute✅ Fait
5Intégrer les logs Windows (WEF/Winlogbeat)Moyenne⏳ Planifié
6Ajouter des alertes de corrélation (multi-sources)Moyenne📋 Backlog
7Automatiser les réponses (webhook → script)Basse📋 Backlog

Tâches LAB

  • Déployer Loki + Grafana (ou ELK) sur le lab.
  • Configurer la collecte depuis les serveurs Linux (Promtail / rsyslog).
  • Configurer la collecte depuis les serveurs Windows (Winlogbeat / WEF).
  • Configurer la collecte depuis le firewall lab (syslog).
  • Créer les 5 dashboards listés ci-dessus.
  • Configurer les 10 règles d’alerte.
  • Simuler un événement anormal (ex : brute-force SSH) et vérifier la détection < 15 min.
  • Dérouler le runbook d’investigation et documenter le résultat.

Captures à produire (à anonymiser)

  • Dashboard Grafana : vue d’ensemble (flouté) → T1_grafana_dashboard.png
  • Exemple d’alerte : alerte déclenchée + notification (flouté) → T1_alert_example.png

Emplacements prévus :

  • ../annexes/images/TODO_T1_grafana_dashboard.png
  • ../annexes/images/TODO_T1_alert_example.png

Anonymisation appliquée

  • Tokens de remplacement utilisés (voir tableau)
  • Captures floutées + cartouche ajouté
  • Métadonnées EXIF supprimées
  • Grep inverse effectué (aucun résultat)
  • Vérification visuelle effectuée
  • Nommage standard respecté

Références


À faire (humain)

  • Exécuter les tâches LAB (section “Tâches LAB” ci-dessus)
  • Produire les captures (section “Captures à produire” ci-dessus)
  • Anonymiser (checklist “Anonymisation appliquée” ci-dessus)
  • Ajouter les images dans annexes/images/
  • Vérifier les liens internes
  • Relire “Résumé exécutif”