A complete Security Operations Center environment that closes the detection-to-containment loop without human intervention — built on Wazuh, Shuffle, VirusTotal, and IRIS.
In a modern SOC, defense is no longer about watching logs and alerting — it's about automated visibility and response. This project integrates a SIEM, SOAR, and Threat Intelligence platform to transform passive monitoring into an active defense architecture capable of containing attacks within seconds of detection.
remove-threat.sh which deletes the file before execution.firewall-drop — stateful block on attacker IP for 180 seconds, then auto-lifts to prevent permanent lockout./home/target.<integration> <name>shuffle</name> <hook_url>http://[SHUFFLE_IP]:3001/api/v1/hooks/[ID]</hook_url> <alert_format>json</alert_format> </integration>
#!/bin/bash read INPUT_JSON FILENAME=$(echo "$INPUT_JSON" | jq -r \ '.parameters.alert.data.virustotal.source.file') # Delete before execution rm -f "$FILENAME" echo "$(date) — threat removed: $FILENAME" >> "${LOG_FILE}"
<active-response> <command>firewall-drop</command> <location>local</location> <rules_id>5763</rules_id> <timeout>180</timeout> </active-response>
API integration is the hard part. Getting Wazuh, Shuffle, and IRIS to communicate reliably — especially the IRIS authentication header bug where the ApiKey field didn't work and required a manual Authorization: Bearer header — taught that security engineering is mostly troubleshooting connectivity and data flow, not writing the detection logic itself.
Alert fatigue is real. Using VirusTotal as a validation gate — rather than piping every file change to Discord — demonstrated how to build signal-to-noise filtering into the architecture instead of bolting it on afterward.
Automated defense is faster than any analyst. Watching remove-threat.sh delete malware before it could be clicked proved the core value of closing the loop end-to-end.