shufflesoarautomation
MDstable
NoteSnippetChecklistPlaybook
Shuffle — SOAR Open Source
Déploiement et configuration de Shuffle SOAR : workflows d'automatisation SOC, apps, triggers, intégration TheHive/Wazuh/MISP
snippetintermediate 2026-06-19 4 min read
shufflesoarautomationworkflowsocincident-response
Présentation
Shuffle est un SOAR (Security Orchestration, Automation and Response) open source.
Il orchestre les réponses aux incidents via des workflows visuels connectant les outils SOC.
Trigger Wazuh alerteWorkflow ShuffleEnrichir IOC VirusTotal AbuseIPDBCrer case TheHiveNotifier Slack/TeamsBloquer IP sur pfSense si score > 80
Déploiement Docker
yaml
# docker-compose.ymlversion: "3"services:shuffle-frontend:image: ghcr.io/shuffle/shuffle-frontend:latestports:- "3001:80"environment:- BACKEND_HOSTNAME=shuffle-backendshuffle-backend:image: ghcr.io/shuffle/shuffle-backend:latestports:- "5001:5001"volumes:- shuffle-apps:/shuffle-apps- shuffle-db:/shuffle-db- /var/run/docker.sock:/var/run/docker.sock # Pour exécuter les apps Dockerenvironment:- DATASTORE_EMULATOR_HOST=shuffle-database:8000- SHUFFLE_APP_HOTLOAD_FOLDER=/shuffle-apps- SHUFFLE_FILE_LOCATION=/shuffle-db- OUTER_HOSTNAME=shuffle-backend- ORG_ID=default- SHUFFLE_OPENSEARCH_URL=http://shuffle-opensearch:9200shuffle-orborus:image: ghcr.io/shuffle/shuffle-orborus:latestvolumes:- /var/run/docker.sock:/var/run/docker.sockenvironment:- SHUFFLE_APP_SDK_TIMEOUT=300- ENVIRONMENT_NAME=Shuffle- ORG_ID=default- BASE_URL=http://shuffle-backend:5001shuffle-opensearch:image: opensearchproject/opensearch:2.14.0environment:- discovery.type=single-node- DISABLE_SECURITY_PLUGIN=true- "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"volumes:- shuffle-opensearch:/usr/share/opensearch/datavolumes:shuffle-apps:shuffle-db:shuffle-opensearch:
# Accès : http://localhost:3001# Créer compte admin au premier démarrage
Concepts clés
App Connecteur vers un outil TheHive Wazuh VirusTotalAction Opration spcifique dune App crer case chercher hashWorkflow Squence dActions connectes visuellementTrigger Dclencheur du workflow webhook schedule email manual
Apps à installer
# Apps officielles disponibles dans l'App Store ShuffleWazuh Gestion alertes agentsTheHive Case managementMISP IOC lookup cration deventsOpenCTI Enrichissement threat intelVirusTotal Analyse hash IP URL domainAbuseIPDB Score rputation IPShodan Info hostSlack Teams NotificationspfSense Blocage IP via APIEmail Notifications phishing responseHTTP Appels API gnriques
Workflow — Triage d'alerte Wazuh
yaml
# Workflow : Wazuh Alert → Enrichissement → TheHive → NotificationTrigger : Webhook (Wazuh envoie l'alerte)URL : http://shuffle-backend:5001/api/v1/hooks/HOOK_IDStep 1 : Parse AlertAction : Regex/JSON extractExtract : src_ip, rule_id, agent_name, timestampStep 2 : VirusTotal IP CheckApp : VirusTotalAction : Get IP reportInput : $exec.src_ipOutput : vt_score, vt_categoriesStep 3 : AbuseIPDB CheckApp : AbuseIPDBAction : Check IPInput : $exec.src_ipOutput : abuse_score, countryStep 4 : Condition — Score élevé ?IF vt_score > 5 OR abuse_score > 50→ Step 5 (créer case)ELSE→ Step 6 (log et terminer)Step 5 : Créer Case TheHiveApp : TheHiveAction : Create CaseInput :title: "Wazuh Alert: $exec.rule_description"severity: 2tags: ["wazuh", "rule-$exec.rule_id"]Step 6 : Notifier SlackApp : SlackAction : Send messageChannel : #soc-alertsMessage : "🚨 Alert $exec.rule_id on $exec.agent_name — IP $exec.src_ip (Abuse: $abuse_score%)"
Intégration Wazuh → Shuffle (webhook)
python
# /var/ossec/integrations/custom-shuffle#!/usr/bin/env python3import json, sys, requestsdef send_to_shuffle(alert):url = "http://shuffle-backend:5001/api/v1/hooks/HOOK_ID"headers = {"Content-Type": "application/json"}requests.post(url, json=alert, headers=headers, verify=False)alert = json.loads(sys.stdin.read())send_to_shuffle(alert)
xml
<!-- /var/ossec/etc/ossec.conf --><integration><name>custom-shuffle</name><level>7</level><alert_format>json</alert_format></integration>
Workflow — Réponse phishing
Trigger Email reu IMAP polling ou forwardingExtract URLs pices jointes expditeurURLScanio analyser chaque URLVirusTotal analyser pices jointes hashIF malveillant dtectCrer case TheHive severity 3Exporter domaines malveillants vers MISPBloquer domaine sur pfSense DNSNotifier utilisateur cibl DSIIF score faibleLog dans TheHive sans escalade
Workflow — Blocage IP automatique
Trigger TheHive case cr avec tag "block-ip"Extract observable IP du caseAbuseIPDB check score > 80pfSense API POST /api/v1/firewall/alias/entryBody name "BLACKLIST_SOC" address "$ip"TheHive Ajouter task log "IP $ip bloquée sur pfSense"Slack "#soc-response → IP $ip bloquée automatiquement"
API Shuffle
bash
BASE_URL"http://localhost:5001"API_KEY"shuffle_api_key"# Lister les workflowscurl -H "Authorization: Bearer $API_KEY"$BASE_URL/api/v1/workflows# Déclencher un workflow manuellementcurl -X POST-H "Authorization: Bearer $API_KEY"-H "Content-Type: application/json"-d '{"ip": "185.220.101.45"}'$BASE_URL/api/v1/hooks/HOOK_ID# Lister les exécutionscurl -H "Authorization: Bearer $API_KEY"$BASE_URL/api/v1/workflows/WORKFLOW_ID/executions
OPS·BRAIN v1.092 notes · Securitylocal