
Lab SOC reproductible pour la détection et la réponse à CVE-2024-4577
HTSOC est un système Security Operations Center auto-construit dans un environnement de laboratoire. Le système combine la collecte de logs, la détection via Splunk, la gestion des alertes/cas via TheHive, l'analyse des Observable via Cortex, la recherche IOC avec MISP ou VirusTotal, puis coordonne les notifications via n8n et Telegram.
CVE-2024-4577 n'est qu'un cas d'usage permettant de valider la capacité de détection multicouche ; l'ensemble du projet ne se limite pas à une seule CVE.
Le système simule un processus SOC complet :
flowchart LR
K[Kali ou source de test] --> W[Windows/XAMPP + Apache/PHP-CGI]
L[Endpoint Linux] --> F[Universal Forwarder]
W --> A[Log Apache access/error]
W --> S[Sécurité Windows + Sysmon]
A --> F
S --> F
F --> SP[Splunk]
L --> F
SP -->|Webhook d'alerte| TH[TheHive]
TH -->|Alerte + Observable| N[n8n]
N --> T[Telegram]
N -->|Analyzer choisi par l'analyste| C[Cortex]
C --> M[MISP]
C --> V[VirusTotal]
M --> N
V --> N
N --> T| Composant | Rôle | Adresse de référence |
|---|---|---|
| Kali | source de trafic de test autorisé | 192.168.10.132 |
| Windows/XAMPP | machine cible Apache/PHP-CGI et Sysmon | 192.168.10.130:8080 |
| Splunk | collecte, recherche, corrélation et alertes | 192.168.10.128 |
| TheHive | gestion des alertes, cas et Observable | 192.168.10.133:9000 |
| Cortex | exécution des analyzers | 192.168.10.133:9001 |
| MISP | référentiel IOC interne | 192.168.10.133:443 |
| n8n | automatisation webhook/callback | 192.168.10.133:5678 |
Les adresses ci-dessus sont réservées au laboratoire. Lors d'un redéploiement, remplacez-les par des variables d'environnement et n'exposez pas les services sur Internet.
Splunk est le centre de détection du système. Les recherches couvrent le brute force de connexion, les logons réseau NTLM suspects, les changements de groupes à privilèges élevés, le mouvement latéral via SMB, la création de nouveaux services Windows, PowerShell encodé et l'injection d'arguments PHP-CGI.
TheHive reçoit les alertes de Splunk, affiche la sévérité/la source/le titre, stocke les Observable et permet à l'analyste de convertir une alerte en cas. Cortex reçoit les Observable de TheHive pour exécuter les analyzers. MISP et VirusTotal sont deux options d'analyse parallèles, non obligatoirement exécutées en série.
n8n reçoit les webhooks de TheHive et envoie l'alerte SOC initiale vers Telegram. Lorsque l'analyste clique sur un Observable, n8n traite alors le callback, détermine l'analyzer, crée le job Cortex, attend le rapport et envoie le résultat vers Telegram. Les mécanismes update_id, callback_query_id, suppression et job ID évitent les exécutions répétées.
Génération du log
→ Universal Forwarder
→ Recherche/corrélation Splunk
→ Alerte TheHive
→ Webhook n8n
→ Alerte SOC Telegram
L'analyste clique sur un Observable dans Telegram
→ Callback Telegram
→ n8n répond immédiatement au callback
→ récupération de l'Observable depuis TheHive
→ vérification du type d'Observable et de l'analyzer
→ Cortex crée le job
→ n8n attend et récupère le rapport
→ Telegram envoie le résultat
n8n n'exécute pas automatiquement tous les Observable dès la réception de l'alerte. L'analyzer n'est exécuté que lorsque l'analyste le sélectionne, ce qui réduit les coûts, diminue les notifications redondantes et préserve le contrôle de l'investigation.
Les détections de base se trouvent dans config/splunk/core-savedsearches.conf, avec des lookups excluant les activités légitimes :
| Détection | Données principales | Objectif |
|---|---|---|
| Brute Force Login | Windows Event ID 4625 | multiples échecs de connexion dans une fenêtre temporelle |
| Suspicious NTLM Logon | Windows Event ID 4624 | logon réseau type 3 utilisant NTLM de manière anormale |
| Privileged Group Change | Event ID 4732/4728/4756 | ajout d'un compte à un groupe à privilèges élevés |
| Lateral Movement SMB | Event ID 4624 | une source accédant à plusieurs hôtes de manière anormale |
| New Windows Service | Event ID 7045 | création d'un nouveau service hors allowlist |
| Encoded PowerShell | Event ID 4688 | PowerShell utilisant -enc ou -EncodedCommand |
Ce cas d'usage comporte deux couches :
Les métadonnées de règle au format Sigma se trouvent dans detections/sigma/cve-2024-4577-php-cgi-argument-injection.yml. La recherche exécutée dans Splunk se trouve dans config/splunk/install-cve-detections.ps1.
config/
├── forwarder/ configuration des entrées/sorties Windows et Linux
├── misp/ IOC simulés pour la recherche interne
├── n8n/ modèle de workflow TheHive–Telegram–Cortex
├── splunk/ recherches enregistrées, lookups et script de corrélation
└── sysmon/ configuration de la télémétrie Windows
deploy/ modèle Docker Compose avec secrets supprimés
detections/
└── sigma/ métadonnées de règles indépendantes du fournisseur
scripts/
├── splunk/ mise à jour des recherches via API
├── validation/ vérification de la disponibilité
└── windows/ installation de la télémétrie sur la machine cible du lab
docs/ documentation d'exploitation et callback Telegram
La correspondance entre la source et le système live se trouve dans l'inventaire du système. Le manifeste du workflow n8n réel avec secrets supprimés se trouve dans config/n8n/live-workflow-manifest.json ; le petit fichier modèle d'import est conservé séparément pour reconstruire un nouveau lab en toute sécurité.
cp deploy/docker-compose.soc.example.yml deploy/docker-compose.yml
cp .env.example .env
# Renseigner les secrets via un gestionnaire de secrets ou un fichier .env local.
docker compose -f deploy/docker-compose.yml config
docker compose -f deploy/docker-compose.yml up -d
docker compose -f deploy/docker-compose.yml ps
Le modèle Compose déploie TheHive, Cortex, MISP, Cassandra, Elasticsearch, MinIO, Redis et les modules MISP. n8n est actuellement exploité comme service hôte et la configuration du workflow se trouve dans config/n8n/.
# PowerShell Administrateur sur le Windows du lab
.\scripts\windows\install-lab-telemetry.ps1
# Sur la machine Splunk, ne pas écrire le mot de passe dans le code source
$env:SPLUNK_PASSWORD = '<local-secret>'
.\config\splunk\install-cve-detections.ps1
python .\scripts\splunk\update-correlation-searches.py
# Vérification de la disponibilité
.\scripts\validation\check-system-readiness.ps1
Les détails du callback se trouvent dans docs/telegram-callback-setup.md.
Les tests s'effectuent dans l'ordre ascendant :
Les indicateurs utilisés dans le lab : MTTD de l'événement jusqu'à la détection par Splunk, MTTN de l'alerte jusqu'à la notification Telegram, MTTR de la réception de l'alerte jusqu'au triage/clôture du cas, taux de faux positifs et taux de doublons.