RousselTMLEARNING

TP · Kibana et Elastic Observability : de la découverte à l'expertise

TP : Détecter une attaque par force brute avec Elastic Security avec correction

La correction est intégrée au TP (Voir les encadrés de couleur vert)

Ce que vous allez apprendre dans ce TP
  • Produire des événements ECS
  • Écrire une règle de seuil
  • Écrire une règle EQL
  • Trier et investiguer

Introduction #

Ce que vous allez apprendre dans cette section
  • Produire des événements ECS
  • Écrire une règle de seuil
  • Écrire une règle EQL
  • Trier et investiguer

Contexte. Un serveur exposé subit des tentatives de connexion. Vous écrivez les règles qui détectent la rafale d'échecs puis la connexion réussie qui la suit.

Prérequis : le labo start-local du TP précédent, jq  ·  Durée estimée : 40 min

Licence : ce TP fonctionne aussi avec la licence Basic gratuite : règles de seuil et EQL, alertes, timelines et cases y sont inclus. Seules les règles de type machine learning et les notifications vers des outils externes (Slack, Jira…) demandent un abonnement ou l'essai.

Mise en place #

Étapes guidées, avec leur correction.

  1. 1. Des événements d'authentification

    Pourquoi ? Les règles d'Elastic Security s'appuient sur ECS : event.category, event.outcome, source.ip, user.name.

    Voir la correction
    source elastic-start-local/.env && export PASS=$ES_LOCAL_PASSWORD
    B=$(( $(date -u +%s) - 120 ))   # événements horodatés sur les deux dernières minutes, le succès après les échecs
    evt() { printf '{"create":{}}\n{"@timestamp":"%s","event":{"category":["authentication"],"outcome":"%s"},"source":{"ip":"203.0.113.50"},"user":{"name":"admin"},"host":{"name":"srv-web-01"},"message":"%s password for admin"}\n' "$(date -u -d @$1 +%Y-%m-%dT%H:%M:%SZ)" "$2" "$3"; }
    { for i in $(seq 12); do evt $((B + i)) failure Failed; done; evt $((B + 30)) success Accepted; } > auth.ndjson
    curl -s -X POST 'localhost:9200/logs-authlab-default/_bulk?refresh=true' -u elastic:$PASS -H 'Content-Type: application/x-ndjson' --data-binary @auth.ndjson | jq .errors   # false
  2. 2. Une règle de seuil

    Créez une règle qui alerte au-delà de 10 échecs depuis une même adresse IP.

    Voir la correction
    curl -s -X POST localhost:5601/api/detection_engine/rules -u elastic:$PASS -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{
      "rule_id": "lab-force-brute", "name": "Lab - force brute", "description": "Plus de 10 échecs de connexion depuis une même IP",
      "type": "threshold", "index": ["logs-authlab-*"], "language": "kuery",
      "query": "event.category:authentication and event.outcome:failure",
      "threshold": { "field": ["source.ip"], "value": 10 },
      "risk_score": 73, "severity": "high", "interval": "1m", "from": "now-10m", "enabled": true, "tags": ["lab"]
    }' | jq '{id, name, enabled}'
  3. 3. Une règle EQL

    Pourquoi ? Une rafale d'échecs suivie d'un succès pour le même compte est bien plus grave qu'une rafale seule : la séquence EQL l'exprime directement.

    Voir la correction
    curl -s -X POST localhost:5601/api/detection_engine/rules -u elastic:$PASS -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d '{
      "rule_id": "lab-echecs-puis-succes", "name": "Lab - échecs puis succès", "description": "Échec puis succès de connexion pour le même compte et la même IP",
      "type": "eql", "language": "eql", "index": ["logs-authlab-*"],
      "query": "sequence by source.ip, user.name with maxspan=10m [authentication where event.outcome == \"failure\"] [authentication where event.outcome == \"success\"]",
      "risk_score": 90, "severity": "critical", "interval": "1m", "from": "now-10m", "enabled": true, "tags": ["lab"]
    }' | jq '{id, name, enabled}'
  4. 4. Les alertes

    Attendez une minute, puis listez les alertes produites.

    Voir la correction
    sleep 70
    curl -s -X POST localhost:5601/api/detection_engine/signals/search -u elastic:$PASS -H 'kbn-xsrf: true' -H 'Content-Type: application/json' \
      -d '{ "query": { "match_all": {} }, "size": 10 }' | jq '.hits.hits[]._source | {regle: .["kibana.alert.rule.name"], severite: .["kibana.alert.severity"]}'
  5. 5. Trier et investiguer

    Dans Security › Alerts, ouvrez l'alerte critique, examinez la séquence dans une timeline, ajoutez-la à un case, puis passez l'alerte en « Acknowledged ».

    Voir la correction

    Dans la timeline, la requête source.ip : 203.0.113.50 montre les 12 échecs puis le succès. Le case garde la trace de l'analyse et peut être transmis à un outil de ticketing par un connecteur.

    Bonne pratique : Ajoutez une exception sur la règle de seuil pour les scanners de vulnérabilités internes plutôt que de relever le seuil pour tout le monde.

Niveau de difficulté : ●●●○○ (3/5)

Mon suivi

  • ⏱ Durée estimée : ≈ 40 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

💬 Questions sur cette leçon

Aucune question pour l'instant : soyez le premier à demander de l'aide ou à partager votre configuration.

Poser une question sur cette leçon →

Articles recommandés

Elastic Security : SIEM, règles de détection et investigation

Utiliser Elastic Security comme SIEM : sources de données ECS, types de règles de détection (quer...

Machine learning dans Elastic : détection d'anomalies et AIOps

Détecter automatiquement les comportements anormaux : jobs de détection d'anomalies, datafeeds, d...

Elastic Common Schema (ECS) : le format standard des données Elastic et son rôle dans Elastic SIEM

Comprendre l'Elastic Common Schema (ECS) : format standard des champs dans Elasticsearch, convent...

Alertes, connecteurs et SLO dans Kibana

Créer des règles d'alerte dans Kibana (requête Elasticsearch, ES|QL, seuil personnalisé, logs), c...

Bonnes pratiques Kibana et Elastic Observability

Check-list pour exploiter Kibana en production : versions, sécurité, espaces et rôles, dashboards...

Projet de parcours Elastic : centraliser et exploiter les journaux

Le projet de validation du parcours « Maîtrise de la suite Elastic » : Elastic Agent et Fleet, Lo...

Logstash : gérer les plugins et adopter Elastic Common Schema (ECS)

Version écrite des leçons vidéo : lister, installer, mettre à jour et embarquer hors ligne les pl...

Elastic Observability : logs, infrastructure, APM et synthétiques

Les fonctions d'Elastic Observability : exploration des logs, inventaire d'infrastructure avec El...

Kibana Maps et Canvas : cartes géographiques et présentations

Créer des cartes avec Kibana Maps (couches de documents, d'agrégats, choroplèthes, ES|QL) et des ...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !