Construction d'un tableau de bord de réponse aux incidents
Quand l'utiliser
Utilisez cette compétence lorsque :
- Les équipes de réponse aux incidents ont besoin de tableaux de bord en temps réel pendant des incidents actifs pour la coordination et le suivi.
- La direction du SOC a besoin de tableaux de bord opérationnels montrant l'état des incidents et la charge de travail des analystes.
- Les revues post-incident nécessitent des chronologies visuelles et des évaluations d'impact.
- Les briefings exécutifs exigent des métriques d'incidents de haut niveau et des analyses de tendances.
Ne pas utiliser pour les tableaux de bord de surveillance SOC quotidiens (utilisez Incident Review à la place) — les tableaux de bord de réponse aux incidents sont conçus pour la coordination d'incidents actifs et les rapports de gestion.
Prérequis
- Plateforme SIEM (Splunk avec Dashboard Studio, Elastic Kibana ou Grafana)
- Données d'événements notables et d'incidents dans le SIEM (index incident_review de Splunk ES)
- Intégration d'un système de ticketing (ServiceNow, Jira) pour le suivi de la remédiation
- Tables de recherche d'actifs et d'identités pour l'enrichissement contextuel
- Accès à la publication de tableaux de bord pour la distribution à l'équipe SOC et à la direction
Workflow
Étape 1 : Concevoir la disposition du tableau de bord d'incident actif
Construisez un tableau de bord Splunk Dashboard Studio pour le suivi d'incident actif :
<dashboard version="2" theme="dark">
<label>Tableau de bord de réponse aux incidents actifs</label>
<description>Suivi en temps réel pour IR-2024-0450</description>
<row>
<panel>
<title>Résumé de l'incident</title>
<single>
<search>
<query>
| makeresults
| eval incident_id="IR-2024-0450",
status="CONFINEMENT",
severity="Critique",
affected_hosts=7,
contained_hosts=5,
iocs_identified=23,
hours_elapsed=round((now()-strptime("2024-03-15 14:00","%Y-%m-%d %H:%M"))/3600,1)
| table incident_id, status, severity, affected_hosts, contained_hosts, iocs_identified, hours_elapsed
</query>
</search>
</single>
</panel>
</row>
</dashboard>
Étape 2 : Construire le panneau des systèmes affectés en temps réel
Suivez les systèmes affectés et leur statut de confinement :
| inputlookup ir_affected_systems.csv
| eval status_color = case(
status="Confiné", "#2ecc71",
status="Compromis", "#e74c3c",
status="En cours d'investigation", "#f39c12",
status="Récupéré", "#3498db",
1=1, "#95a5a6"
)
| stats count by status
| eval order = case(status="Compromis", 1, status="En cours d'investigation", 2,
status="Confiné", 3, status="Récupéré", 4)
| sort order
| table status, count
--- Table détaillée des hôtes
| inputlookup ir_affected_systems.csv
| lookup asset_lookup_by_cidr ip AS host_ip OUTPUT category, owner, priority
| table hostname, host_ip, category, owner, status, containment_time,
compromise_vector, analyst_assigned
| sort status, hostname
Étape 3 : Construire le panneau de suivi des IOC
Surveillez la propagation des IOC dans l'environnement :
--- IOC identifiés pendant l'incident
index=* (src_ip IN ("185.234.218.50", "45.77.123.45") OR
dest IN ("evil-c2.com", "malware-drop.com") OR
file_hash IN ("a1b2c3d4...", "e5f6a7b8..."))
earliest="2024-03-14"
| stats count AS hits, dc(src_ip) AS unique_sources,
dc(dest) AS unique_dests, latest(_time) AS last_seen
by sourcetype
| sort - hits
--- Chronologie des IOC
index=* (src_ip IN ("185.234.218.50") OR dest="evil-c2.com")
earliest="2024-03-14"
| timechart span=1h count by sourcetype
--- Suivi de la découverte de nouveaux IOC
| inputlookup ir_ioc_list.csv
| stats count by ioc_type, source, discovery_time
| sort discovery_time
| table discovery_time, ioc_type, ioc_value, source, status
Étape 4 : Construire le panneau de chronologie de réponse
Créez une chronologie d'incident chronologique :
| inputlookup ir_timeline.csv
| sort _time
| eval phase = case(
action_type="detection", "Détection",
action_type="triage", "Triage",
action_type="containment", "Confinement",
action_type="eradication", "Éradication",
action_type="recovery", "Récupération",
1=1, "Autre"
)
| eval phase_color = case(
phase="Détection", "#e74c3c",
phase="Triage", "#f39c12",
phase="Confinement", "#e67e22",
phase="Éradication", "#2ecc71",
phase="Récupération", "#3498db"
)
| table _time, phase, action, analyst, details
Exemple de données de chronologie :
_time,action_type,action,analyst,details
2024-03-15 14:00,detection,Alerte déclenchée - Beacon Cobalt Strike détecté,splunk_es,Événement notable NE-2024-08921
2024-03-15 14:12,triage,Alerte triée - confirmé vrai positif,analyst_jdoe,Score VT 52/72 sur le hash du beacon
2024-03-15 14:23,containment,Poste de travail WORKSTATION-042 isolé,analyst_jdoe,Isolement réseau CrowdStrike
2024-03-15 14:35,containment,Domaine C2 bloqué sur le pare-feu,analyst_msmith,Règle Palo Alto déployée
2024-03-15 15:00,eradication,Analyse IOC à l'échelle de l'entreprise lancée,analyst_jdoe,Recherche Splunk sur tous les index
2024-03-15 15:30,containment,3 hôtes supplémentaires identifiés et isolés,analyst_msmith,Mouvement latéral confirmé
2024-03-15 16:00,eradication,Malware supprimé de tous les hôtes affectés,analyst_tier3,Nettoyage CrowdStrike RTR
2024-03-15 18:00,recovery,Systèmes restaurés et surveillés,analyst_msmith,Période de surveillance de 72 heures démarrée
Étape 5 : Construire le tableau de bord des opérations SOC
Suivez les métriques globales de performance du SOC :
--- Volume d'incidents par sévérité (30 derniers jours)
index=notable earliest=-30d
| stats count by urgency
| eval order = case(urgency="critical", 1, urgency="high", 2, urgency="medium", 3,
urgency="low", 4, urgency="informational", 5)
| sort order
--- MTTD (Délai moyen de détection)
index=notable earliest=-30d status_label="Résolu*"
| eval mttd_minutes = round((time_of_first_event - orig_time) / 60, 1)
| stats avg(mttd_minutes) AS avg_mttd, median(mttd_minutes) AS med_mttd,
perc95(mttd_minutes) AS p95_mttd
--- MTTR (Délai moyen de réponse/résolution)
index=notable earliest=-30d status_label="Résolu*"
| eval mttr_hours = round((status_end - _time) / 3600, 1)
| stats avg(mttr_hours) AS avg_mttr, median(mttr_hours) AS med_mttr by urgency
--- Répartition de la charge de travail des analystes
index=notable earliest=-7d
| stats count by owner
| sort - count
--- Répartition des statuts de clôture des alertes
index=notable earliest=-30d status_label IN ("Résolu*", "Fermé*")
| stats count by disposition
| eval percentage = round(count / sum(count) * 100, 1)
| sort - count
Étape 6 : Construire le tableau de bord des briefings exécutifs
Créez un tableau de bord de haut niveau pour la direction lors des incidents majeurs :
--- Panneau résumé exécutif
| makeresults
| eval metrics = "Impact métier : 1 serveur de fichiers hors ligne (service Finances), "
."Récupération estimée : 4 heures, "
."Risque de perte de données : Faible (sauvegardes vérifiées), "
."Impact client : Aucun, "
."Notification réglementaire : Non requise (aucune exposition de PII confirmée)"
--- Comparaison de tendances (ce mois vs mois précédent)
index=notable earliest=-60d
| eval period = if(_time > relative_time(now(), "-30d"), "Mois en cours", "Mois précédent")
| stats count by period, urgency
| chart sum(count) AS incidents by period, urgency
--- Principales catégories de menaces
index=notable earliest=-30d
| top rule_name limit=10
| table rule_name, count, percent
Étape 7 : Automatiser les mises à jour du tableau de bord
Utilisez des recherches planifiées Splunk pour maintenir les données du tableau de bord :
--- Recherche planifiée pour mettre à jour la table de recherche des systèmes affectés (s'exécute toutes les 5 minutes)
index=* (src_ip IN [| inputlookup ir_ioc_list.csv | search ioc_type="ip"
| fields ioc_value | rename ioc_value AS src_ip])
earliest=-1h
| stats latest(_time) AS last_seen, count AS event_count,
values(sourcetype) AS data_sources by src_ip
| eval status = if(last_seen > relative_time(now(), "-15m"), "Actif", "Inactif")
| outputlookup ir_affected_systems_auto.csv
Concepts clés
| Terme | Définition |
|---|---|
| Connaissance de la situation | Compréhension en temps réel de l'étendue de l'incident, des systèmes affectés et de la progression de la réponse |
| MTTD | Délai moyen de détection — temps moyen entre l'apparition de la menace et la génération d'une alerte SOC |
| MTTR | Délai moyen de réponse — temps moyen entre l'alerte et la résolution ou le confinement de l'incident |
| Taux de confinement | Pourcentage de systèmes affectés isolés avec succès par rapport au total des systèmes compromis |
| Diagramme de brûlure | Suivi visuel des tâches d'investigation restantes au fil du temps pendant un incident |
| Briefing exécutif | Tableau de bord résumé non technique montrant l'impact métier, la chronologie et l'état de la récupération |
Outils et systèmes
- Splunk Dashboard Studio : Cadre de tableau de bord moderne avec visualisation par glisser-déposer et données en temps réel
- Elastic Kibana Dashboard : Plateforme de visualisation avec Lens, Maps et Canvas pour les tableaux de bord de sécurité
- Grafana : Plateforme de visualisation open-source prenant en charge plusieurs sources de données, dont Elasticsearch et Splunk
- Microsoft Sentinel Workbooks : Cadre de tableau de bord natif Azure avec visualisation analytique basée sur Kusto
- TheHive : Plateforme de réponse aux incidents open-source avec suivi de cas intégré et tableaux de bord de métriques
Scénarios courants
- Incident ransomware actif : Tableau de bord montrant la propagation du chiffrement, l'état du confinement, la vérification des sauvegardes, la progression de la récupération
- Investigation de brèche de données : Tableau de bord suivant les magasins de données affectés, le volume d'exfiltration, les exigences de notification
- Réponse à une campagne de phishing : Tableau de bord montrant le nombre de destinataires, le taux de clics, l'exposition des identifiants, l'état de la remédiation
- Rapport SOC mensuel : Tableau de bord de direction avec tendances des incidents, métriques MTTD/MTTR, performance des analystes
- Audit de conformité : Tableau de bord démontrant la couverture de détection, la conformité aux SLA de réponse et les métriques de clôture des incidents
Format de sortie
TABLEAU DE BORD DE RÉPONSE AUX INCIDENTS — IR-2024-0450
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
STATUT : PHASE DE CONFINEMENT (6h30m écoulées)
Systèmes affectés : Progression du confinement :
Compromis : 2 [==========----------] 71%
Investigation : 1 5 des 7 systèmes confinés
Confiné : 3
Récupéré : 1
Résumé IOC : Chronologie de réponse :
IPs : 4 14:00 — Alerte déclenchée
Domaines : 2 14:12 — Confirmé malveillant
Hashs : 3 14:23 — Premier hôte isolé
URLs : 5 15:00 — Analyse d'entreprise démarrée
Emails : 1 15:30 — 3 hôtes supplémentaires isolés
Métriques clés :
MTTD : 12 minutes
MTTC : 23 minutes (premier hôte)
Analystes actifs : 3 (Niveau 2 : 2, Niveau 3 : 1)
Impact métier : FAIBLE — Serveur de fichiers des Finances hors ligne, aucun système orienté client affecté