返回首页

Shuffle SOAR免费替代方案:本地搭建安全编排自动化响应平台全指南

安全编排自动化与响应()平台如Palo Alto XSOAR年费 $100,000+,Splunk SOAR $50,000+。 SOAR 是完全免费的开源替代方案,支持可视化工作流编排、自动化响应、与200+安全工具集成。

为什么选Shuffle

功能 Palo Alto XSOAR Splunk SOAR Shuffle SOAR
工作流编排 可视化 可视化 可视化
集成数量 500+ 300+ 200+
自动化响应 完整 完整 完整
告警管理 完整 完整 完整
支持 完整 完整 完整
自定义App 支持 支持 支持
价格 $100K+/年 $50K+/年 免费

Shuffle基于开发,使用Docker部署,支持Webhook触发、定时任务、手动触发三种工作流启动方式。

安装部署

# 一键Docker部署
git clone https://github.com/Shuffle/Shuffle.git
cd Shuffle

# 启动所有服务
docker-compose up -d

# 查看服务状态
docker-compose ps

# 访问 http://localhost:3001
# 首次访问注册管理员账号

自定义部署配置

# docker-compose.yml 关键配置
version: '3'
services:
  frontend:
    : ghcr.io/shuffle/shuffle-frontend:latest
    ports:
      - "3001:80"
    environment:
      - BACKEND_HOSTNAME=shuffle-backend
    depends_on:
      - backend

  backend:
    image: ghcr.io/shuffle/shuffle-backend:latest
    ports:
      - "5001:5001"
    environment:
      - DATASTORE_EMULATOR_HOST=shuffle-:8000
      - SHUFFLE_APP_DOWNLOAD_LOCATION=https://github.com/shuffle/shuffle-apps
    depends_on:
      - database

  database:
    image: frikky/opensearch:latest
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      - discovery.type=single-node
      - plugins..disabled=true

  orborus:
    image: ghcr.io/shuffle/shuffle-orborus:latest
    environment:
      - SHUFFLE_APP_SDK_VERSION=latest
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

核心概念

(工作流)

工作流由多个Action节点组成,支持条件分支、循环、并行执行。

Action(动作)

每个Action代表一个操作:调用API、执行命令、发送邮件等。

Trigger(触发器)

  • Webhook:接收外部事件触发
  • Schedule:定时触发
  • Email:邮件触发
  • Subflow:被其他工作流调用

App(应用)

预构建的安全工具集成,如VirusTotal、Shodan、Wazuh等。

实战工作流

工作流1:自动告警分类与响应

[Webhook接收告警] → [解析告警内容] → [查询威胁情报] → {判断严重程度}
    ├─ 高危 → [自动封禁IP] → [发送企业微信告警]
    ├─ 中危 → [创建工单] → [发送邮件通知]
    └─ 低危 → [记录日志]

Webhook触发配置

# 发送告警到Shuffle Webhook
import requests
import json

alert_data = {
    "source": "suricata",
    "alert_type": "ids",
    "severity": "high",
    "src_ip": "203.0.113.50",
    "dst_ip": "10.0.1.100",
    "signature": "ET  Cobalt Strike Beacon",
    "timestamp": "2024-01-15T10:30:00Z"
}

response = requests.post(
    "http://localhost:3001/api/v1/hooks/webhook/HOOK_ID",
    headers={"Content-Type": "application/json"},
    =json.dumps(alert_data)
)
print(response.json())

自动封禁IP的Action

# Shuffle中执行的Python脚本
# Action: Block IP via iptables
import subprocess

def block_ip(ip):
    # 封禁IP
    subprocess.run(["iptables", "-A", "INPUT", "-s", ip, "-j", "DROP"])
    # 记录封禁日志
    with open("/var/log/blocked_ips.log", "a") as f:
        f.write(f"{datetime.now()}: Blocked {ip}\n")
    return f"Successfully blocked {ip}"

# 从workflow参数获取IP
ip = workflow["src_ip"]
result = block_ip(ip)
print(result)

工作流2:钓鱼邮件自动分析

[邮件触发] → [提取附件] → [VirusTotal扫描] → [沙箱分析]
    ├─ 恶意 → [隔离邮件] → [封禁发件人域名] → [告警]
    └─ 正常 → [标记安全]

工作流3:漏洞自动验证

[Nuclei扫描结果Webhook] → [解析漏洞] → [查询资产CMDB]
    → [Shodan验证暴露] → [创建Jira工单] → [通知负责人]

自定义App开发

# shuffle_app.py - 自定义Wazuh App
import requests

class WazuhApp:
    def __init__(self, base_url, username, password):
        self.base_url = base_url
        self.token = self._authenticate(username, password)
    
    def _authenticate(self, username, password):
        response = requests.post(
            f"{self.base_url}/security/user/authenticate",
            auth=(username, password),
            verify=False
        )
        return response.json()["data"]["token"]
    
    def get_alerts(self, limit=100):
        headers = {"Authorization": f"Bearer {self.token}"}
        response = requests.get(
            f"{self.base_url}/alerts",
            headers=headers,
            params={"limit": limit, "sort": "-timestamp"}
        )
        return response.json()["data"]["affected_items"]
    
    def get_agents(self):
        headers = {"Authorization": f"Bearer {self.token}"}
        response = requests.get(
            f"{self.base_url}/agents",
            headers=headers
        )
        return response.json()["data"]["affected_items"]

# 在Shuffle中调用
wazuh = WazuhApp("https://wazuh-server:55000", "admin", "admin")
alerts = wazuh.get_alerts(limit=10)

API集成示例

与Wazuh集成

# Shuffle Action: 获取Wazuh最新告警
import requests

WAZUH_URL = "https://wazuh-server:55000"
TOKEN = "your_wazuh_token"

headers = {
    "Authorization": f"Bearer {TOKEN}",
    "Content-Type": "application/json"
}

# 获取高危告警
response = requests.get(
    f"{WAZUH_URL}/alerts",
    headers=headers,
    params={
        "level": "12",
        "limit": 50,
        "sort": "-timestamp"
    },
    verify=False
)

alerts = response.json()["data"]["affected_items"]
for  in alerts:
    print(f"[{alert['rule']['level']}] {alert['rule']['description']} - {alert['data']['srcip']}")

与OpenVAS集成

# Shuffle Action: 启动OpenVAS扫描
import socket

def send_gmp_command(command):
    sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
    sock.connect("/run/gvmd/gvmd.sock")
    sock.send(command.encode())
    response = sock.recv(65536).decode()
    sock.close()
    return response

# 创建扫描任务
task_xml = """<create_task>
  <name>Auto Scan</name>
  <target id="target-uuid"/>
</create_task>"""

result = send_gmp_command(task_xml)

对比表

功能 XSOAR Splunk SOAR Shuffle
工作流编辑器 可视化 可视化 可视化
预置集成 500+ 300+ 200+
自定义App Python Python Python
告警管理 完整 完整 完整
事件管理 完整 完整 完整
报告生成 支持 支持 支持
多租户 支持 支持 基础
价格 $100K+ $50K+ 免费

Shuffle的优势在于其开源社区活跃,每周都有新App加入。对于中小安全团队,Shuffle + Wazuh + OpenVAS 的组合可以构建完整的安全运营中心,成本为零。

常见问题

为什么选Shuffle

>为什么选Shuffle 功能 Palo Alto XSOAR Splunk SOAR Shuffle SOAR 工作流编排 可视化 可视化 可视化 集成数量 500+ 300+ 200+ 自动化响应 完整 完整 完整 告警管理 完整 完整 完整 API支持 完整 完整 完整 自定义App 支持 支持 支持 价格 $100K+/年 $50K+/年 免费 Shuffle基于Python开发,使用Docker部署,支持Webhook触发、定时任务、手动触发三种工作流启动方式。

评论