This project demonstrates how to integrate Shuffle SOAR with Wazuh SIEM and TheHive to automate incident response.
β
Receiving security alerts from Wazuh.
β
Enriching alerts using external threat intelligence (VirusTotal, AbuseIPDB).
β
Creating an incident in TheHive for case management.
β
Sending notifications to a Discord channel.
β
(Bonus) Auto-mitigating threats (e.g., blocking malicious IPs).
By implementing this SOAR workflow, you can automate security operations, reduce response time, and improve efficiency in a SOC environment.
Tool | Description |
---|---|
Wazuh SIEM | Security Information & Event Management (SIEM) solution for threat detection. |
TheHive | Open-source Security Incident Response Platform (SIRP). |
Shuffle | Open-source Security Orchestration, Automation, and Response (SOAR) platform. |
VirusTotal API | Used for malware and URL reputation checks. |
AbuseIPDB API | Used for checking if an IP address is malicious. |
Discord Webhook | Sends alerts to a Discord channel for real-time monitoring. |
Specifications
- RAM: 12GB+
- HDD: 60GB+
- OS: Ubuntu 24.04 LTS
Follow the official Wazuh installation guide:
π Wazuh Installation Guide
-
Update and Upgrade:
apt-get update && apt-get upgrade
-
Install Wazuh 4.10:
curl -sO https://packages.wazuh.com/4.10/wazuh-install.sh && sudo bash ./wazuh-install.sh -a
-
Extract Wazuh Credentials:
sudo tar -xvf wazuh-install-files.tar
-
Wazuh Dashboard Credentials:
- User: admin
- Password: ***************
-
Access Wazuh Dashboard:
- Open your browser and go to:
https://<Public IP of Wazuh>
- Open your browser and go to:
Follow the official documentation for installing TheHive:
π TheHive Installation Guide
-
Install Dependencies:
apt install wget gnupg apt-transport-https git ca-certificates ca-certificates-java curl software-properties-common python3-pip lsb-release
-
Install Java:
wget -qO- https://apt.corretto.aws/corretto.key | sudo gpg --dearmor -o /usr/share/keyrings/corretto.gpg echo "deb [signed-by=/usr/share/keyrings/corretto.gpg] https://apt.corretto.aws stable main" | sudo tee -a /etc/apt/sources.list.d/corretto.sources.list sudo apt update sudo apt install java-common java-11-amazon-corretto-jdk echo JAVA_HOME="/usr/lib/jvm/java-11-amazon-corretto" | sudo tee -a /etc/environment export JAVA_HOME="/usr/lib/jvm/java-11-amazon-corretto"
-
Install Cassandra:
wget -qO - https://downloads.apache.org/cassandra/KEYS | sudo gpg --dearmor -o /usr/share/keyrings/cassandra-archive.gpg echo "deb [signed-by=/usr/share/keyrings/cassandra-archive.gpg] https://debian.cassandra.apache.org 40x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list sudo apt update sudo apt install cassandra
-
Install ElasticSearch:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg sudo apt-get install apt-transport-https echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list sudo apt update sudo apt install elasticsearch
-
Install TheHive:
wget -O- https://archives.strangebee.com/keys/strangebee.gpg | sudo gpg --dearmor -o /usr/share/keyrings/strangebee-archive-keyring.gpg echo 'deb [signed-by=/usr/share/keyrings/strangebee-archive-keyring.gpg] https://deb.strangebee.com thehive-5.2 main' | sudo tee -a /etc/apt/sources.list.d/strangebee.list sudo apt-get update sudo apt-get install -y thehive
-
Default Credentials for TheHive:
- Port: 9000
- Credentials: 'admin@thehive.local' with a password of 'secret'
Specifications
- RAM: 4GB+
- HDD: 40GB+
- OS: Ubuntu 24.04 LTS
Run the following commands to install Shuffle SOAR on Ubuntu:
π Shuffle Installation Guide
# Install Docker if not already installed
sudo apt update && sudo apt install -y docker.io docker-compose
# Enable and start Docker
sudo systemctl enable docker
sudo systemctl start docker
# Clone the Shuffle repository
git clone https://github.com/Shuffle/Shuffle.git
cd Shuffle
# Build and run Shuffle with Docker Compose
sudo docker-compose up -d
Access Shuffle Web UI at http://YOUR-IP:3001
- Go to your Discord Server β Settings β Integrations β Webhooks
- Click New Webhook β Name it SOC Alerts
- Copy the Webhook URL (you will need it later)
-
Edit Cassandra Config File:
nano /etc/cassandra/cassandra.yaml
-
Change Cluster Name:
cluster_name: 'SOAR-Flow'
-
Update Listen Address:
listen_address: <public IP of TheHive>
-
Update RPC Address:
rpc_address: <public IP of TheHive>
-
Update Seed Provider:
- seeds: "<Public IP Of the TheHive>:7000"
-
Stop Cassandra Service:
systemctl stop cassandra.service
-
Remove Old Files:
rm -rf /var/lib/cassandra/*
-
Restart Cassandra Service:
systemctl start cassandra.service
-
Edit ElasticSearch Config File:
nano /etc/elasticsearch/elasticsearch.yml
-
Update Cluster Name and Host:
cluster.name: thehive node.name: node-1 network.host: <Public IP of your TheHive instance> http.port: 9200 discovery.seed_hosts: ["127.0.0.1"] cluster.initial_master_nodes: ["node-1"]
-
Start ElasticSearch Service:
systemctl start elasticsearch systemctl enable elasticsearch systemctl status elasticsearch
-
Ensure Proper Ownership:
ls -la /opt/thp chown -R thehive:thehive /opt/thp
-
Edit TheHive Configuration File:
nano /etc/thehive/application.conf
-
Update Database and Index Configuration:
db.janusgraph { storage { backend = cql hostname = ["<Public IP of TheHive>"] cql { cluster-name = SOAR-Flow keyspace = thehive } } } index.search { backend = elasticsearch hostname = ["<Public IP of TheHive>"] index-name = thehive } application.baseUrl = "http://<Public IP of TheHive>:9000"
-
Start TheHive Services:
systemctl start thehive systemctl enable thehive systemctl status thehive
This workflow automates incident response using Shuffle:
1οΈβ£ Receive alerts from Wazuh SIEM when suspicious activity is detected.
2οΈβ£ Enrich the alert using VirusTotal & AbuseIPDB API.
3οΈβ£ Create an incident in TheHive for case tracking.
4οΈβ£ Send a notification to Discord with alert details.
5οΈβ£ (Optional) Perform auto-mitigation (e.g., blocking malicious IPs).
πΉ Step 1: Add Wazuh Alert as Trigger
- In Shuffle, create a new workflow and add a Webhook trigger.
- Configure Wazuh to send alerts via webhooks.
πΉ Step 2: Enrich Data with VirusTotal & AbuseIPDB
- Add an HTTP Request node to check IPs/Hashes using VirusTotal API.
- Add another HTTP Request to query AbuseIPDB for malicious IPs.
πΉ Step 3: Create an Incident in TheHive
- Use TheHive API to create a new case with alert details.
πΉ Step 4: Send Alert to Discord
- Use the Discord Webhook to send a formatted message to a SOC channel.
πΉ Step 5: (Optional) Auto-Mitigation
- If the IP is high risk, trigger a firewall rule to block the attacker.
Edit the Wazuh ossec.conf file to send webhook alerts:
<integration>
<name>custom-webhook</name>
<hook_url>http://<shuffle-ip>:5001/webhook</hook_url>
<event_format>json</event_format>
</integration>
Restart Wazuh to apply changes:
sudo systemctl restart wazuh-manager
Generate an API key in TheHive and add it to Shuffleβs HTTP Request node.
Use the Discord Webhook URL in the Shuffle HTTP Request node.
Example payload:
{
"content": "**π¨ New Security Alert π¨**\n\nIP: 192.168.1.100\nSeverity: High\nSource: Wazuh SIEM"
}
- Trigger an alert in Wazuh (e.g., failed SSH logins).
- Verify the incident is created in TheHive.
- Check if the alert is sent to Discord.
β TheHive Incident Created:
[INFO] New Incident Created in TheHive:
- Title: Suspicious SSH Login Attempts
- Severity: High
- Source: Wazuh SIEM
πΉ Add auto-mitigation (e.g., blocking attacker IPs via firewall rules).
πΉ Integrate more threat intelligence feeds (e.g., MISP, Shodan API).
πΉ Expand automation to handle different types of incidents.
This project is licensed under the MIT License.
π€ Author: Nitin Sharma
π» Instagram: Malwarekid
π§ LinkedIn: Connect