Shuffle+TheHive:开源SOAR安全编排自动化实战
一、为什么需要SOAR?
在现代安全运营中心(SOC)中,安全团队每天面对海量告警,手动处理效率极低。安全编排、自动化与响应(SOAR)平台能够将安全工具串联成自动化工作流,大幅提升事件响应速度。商业SOAR方案如Splunk SOAR(原Phantom)年费5万美元起,Palo Alto XSOAR年费7.5万美元起,IBM Resilient同样价格不菲。对于预算有限的中小团队,开源方案是更现实的选择。
本文将手把手带你搭建基于Shuffle和TheHive的开源SOAR平台,实现从告警接收到自动化响应的完整闭环。整个方案零成本,仅需一台4核8GB内存的Linux服务器即可运行。
二、付费工具定价对比
| 工具 | 厂商 | 年费(估算) | 核心能力 | 预置剧本数 |
|---|---|---|---|---|
| Splunk SOAR | Splunk | $50,000+ | 可视化编排、500+集成、自动化响应 | 300+ |
| XSOAR | Palo Alto | $75,000+ | 统一平台、威胁情报管理、多租户 | 700+ |
| IBM Resilient | IBM | $30,000+ | 事件管理、合规报告、与QRadar集成 | 150+ |
| Shuffle(开源) | 社区 | $0 | 可视化工作流、Webhook触发、App集成 | 100+(社区) |
| TheHive(开源) | StrangeBee | $0(社区版) | 事件管理、案例协作、告警去重 | N/A |
可以看到,商业方案年费在3万到7.5万美元之间,而Shuffle+TheHive完全免费,功能覆盖了80%以上的常见场景。企业级方案的核心溢价在于预置剧本数量(XSOAR拥有700+预置剧本)、多租户支持、合规报告模板以及7x24商业技术支持。
三、Shuffle实战部署
3.1 环境准备
首先确保系统已安装Docker和Docker Compose:
# Ubuntu/Debian
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
sudo usermod -aG docker $USER
# 重新登录使docker组生效
3.2 Docker一键安装Shuffle
# 克隆Shuffle仓库
git clone https://github.com/Shuffle/Shuffle.git
cd Shuffle
# 启动所有服务(前端、后端、数据库、Orborus Worker)
docker compose up -d
# 查看服务状态
docker compose ps
# 查看日志确认启动成功
docker compose logs -f --tail=50 backend
启动约需2-3分钟,所有容器Running后访问 http://your-ip:3001 进入管理界面。首次访问需要注册管理员账号。
3.3 配置第一个告警转发工作流
登录Shuffle后,按以下步骤创建自动化工作流:
步骤一:创建Webhook触发器
- 点击"Create Workflow",命名为"Alert-Forwarder"
- 从左侧拖入Trigger节点,选择Webhook类型
- 记录生成的Webhook URL,格式为:
http://your-ip:3001/api/v1/hooks/<uuid>
步骤二:添加条件分支
- 拖入条件节点(Condition),设置判断逻辑
- 高危告警(severity=high/critical)走自动化处置分支
- 低危告警走通知分支
步骤三:配置响应动作
- 高危分支:调用TheHive API创建Case
- 通知分支:通过Email/Slack发送告警摘要
- 所有分支:将告警写入日志存档
步骤四:测试触发
curl -X POST http://your-shuffle:3001/api/v1/hooks/YOUR_HOOK_ID \
-H "Content-Type: application/json" \
-d '{
"alert_name": "SSH暴力破解检测",
"src_ip": "192.168.1.100",
"severity": "high",
"count": 1500,
"timestamp": "2024-01-15T10:30:00Z"
}'
3.4 Shuffle核心配置优化
编辑docker-compose.yml中的环境变量进行调优:
environment:
- SHUFFLE_APP_HOTLOAD_LOCATION=/shuffle-apps # App加载目录
- ORBORUS_CONTAINER_LOCATION=docker # Worker容器运行时
- SHUFFLE_BASE_URL=http://your-ip:3001 # 基础URL
- TZ=Asia/Shanghai # 时区设置
- SHUFFLE_ORBORUS_ENV=SHUFFLE_APP_HOTLOAD_LOCATION=/shuffle-apps
- CLEANUP=true # 自动清理旧执行记录
在Shuffle App Store中可以搜索并安装数百个社区开发的集成App,包括VirusTotal、AbuseIPDB、CrowdStrike、Okta等常见安全工具的连接器。
四、TheHive实战部署
4.1 Docker部署TheHive 5
TheHive 5需要Cassandra和Elasticsearch作为后端。创建专用目录和配置文件:
mkdir -p ~/thehive && cd ~/thehive
编写docker-compose.yml,包含三个核心服务:
Elasticsearch 7.17:全文搜索引擎,用于告警和案例的快速检索。配置单节点模式(discovery.type=single-node),JVM堆内存设为1GB。
Cassandra 4.1:分布式数据库,存储TheHive的结构化数据(告警、案例、任务、Observable)。集群名称设为thehive。
TheHive 5.2:核心应用服务,通过JanusGraph连接Cassandra和Elasticsearch。配置HTTP密钥用于会话加密。
docker compose up -d
首次启动需要等待约3-5分钟进行数据库初始化。访问 http://your-ip:9000,使用默认账号登录:
- 邮箱:[email protected]
- 密码:secret
重要:首次登录后立即修改默认密码!
4.2 TheHive核心概念
TheHive的数据模型包含以下关键实体:
- Alert(告警):来自外部安全设备的原始告警,可自动去重
- Case(案例):由告警转化而来,是安全事件的完整记录
- Task(任务):案例下的调查子任务,可分配给不同分析师
- Observable(可观测对象):IOC指标,如IP、域名、文件哈希
4.3 通过API创建告警
curl -X POST http://your-thehive:9000/api/v1/alert \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "ssh-bruteforce",
"source": "fail2ban",
"sourceRef": "fb-20240115-001",
"title": "SSH暴力破解 - 源IP 192.168.1.100",
"description": "检测到来自192.168.1.100的持续SSH暴力破解攻击,15分钟内尝试1500次登录",
"severity": 3,
"tlp": 2,
"pap": 2,
"tags": ["ssh", "bruteforce", "internal", "fail2ban"],
"observables": [
{"dataType": "ip", "data": "192.168.1.100", "message": "攻击源IP"},
{"dataType": "user-agent", "data": "libssh_0.9.6", "message": "攻击工具指纹"}
]
}'
在TheHive Web界面中,点击告警列表中的告警,可以:
- 查看详情和关联Observable
- 点击"Import as Case"将告警升级为案例
- 为案例分配任务和负责人
- 添加分析笔记和取证证据
4.4 Shuffle与TheHive深度集成
实现自动化的告警富化和响应工作流:
工作流一:自动IOC富化
- TheHive告警触发Webhook -> Shuffle接收
- 提取告警中的IP/域名/哈希
- 并行调用VirusTotal、AbuseIPDB、Shodan查询
- 将富化结果写回TheHive告警描述
工作流二:高危告警自动升级
- 条件判断severity >= 3 且富化结果恶意评分 > 80
- 自动将告警导入为Case
- 自动创建调查任务
- 通过Slack通知值班分析师
配置Shuffle中的TheHive App连接参数:
- TheHive URL:
http://thehive:9000(Docker内部网络) - API Key:在TheHive -> 用户设置 -> API Keys中生成
- 组织:默认为default
五、功能对比总结
| 功能维度 | Splunk SOAR | XSOAR | Shuffle+TheHive |
|---|---|---|---|
| 可视化工作流编辑器 | 有 | 有 | 有(Shuffle拖拽式) |
| 预置集成数量 | 500+ | 700+ | 200+(社区贡献) |
| 事件/案例管理 | 有 | 有 | 有(TheHive完整支持) |
| 告警自动去重 | 有 | 有 | 有(基于type+sourceRef) |
| 威胁情报集成 | 原生支持 | 原生支持 | 需手动配置App |
| 多租户支持 | 有 | 有 | 无(社区版限制) |
| 合规报告模板 | SOC2/ISO27001 | SOC2/ISO27001/PCI-DSS | 无(需自建模板) |
| 技术支持 | 7x24商业 | 7x24商业 | Discord社区/GitHub Issues |
| 自定义脚本支持 | Python | Python | Python(原生支持) |
| 部署复杂度 | 中等(需专业服务) | 中等 | 低(Docker一键部署) |
| 总拥有成本(3年) | $150K+ | $225K+ | $0(仅服务器成本) |
六、最佳实践与进阶建议
分阶段部署:第一周部署Shuffle+TheHive基础环境,第二周接入现有告警源,第三周开发自动化工作流,第四周优化和测试。
告警分级响应策略:
- P1(Critical):自动创建Case + 立即通知 + 自动封禁IP
- P2(High):自动创建Case + 邮件通知值班人员
- P3(Medium):仅记录告警,次日人工审查
- P4(Low):仅统计入库,周报汇总
数据备份方案:
# 备份Elasticsearch索引 docker exec elasticsearch curl -X PUT "localhost:9200/_snapshot/backup" \ -H "Content-Type: application/json" \ -d '{"type":"fs","settings":{"location":"/backup"}}' # 备份Cassandra数据 docker exec cassandra nodetool snapshot thehive性能调优:告警量超过每日1万条时,建议将Elasticsearch集群扩展为3节点,Cassandra扩展为3节点,并为TheHive配置Redis缓存。
安全加固:
- 配置Nginx反向代理并启用HTTPS
- 使用Let's Encrypt免费证书
- 限制管理界面仅内网访问
- API Key定期轮换(建议90天)
七、总结
Shuffle+TheHive的组合为中小安全团队提供了零成本的企业级SOAR能力。Shuffle负责工作流编排和工具集成,TheHive专注事件管理和案例协作,两者配合可以覆盖告警接收、自动富化、分级响应、案例管理的完整安全运营闭环。虽然在预置剧本数量和企业级支持上不及商业方案,但其开源透明、灵活可扩展的特性,加上活跃的社区支持,完全能够满足大多数组织的安全自动化需求。从本文的部署步骤开始,逐步构建属于你自己的自动化安全运营体系吧。
评论