用于 CVE-2024-4577 检测与响应的可复现 SOC 实验室
HTSOC是一个在实验环境中自建的Security Operations Center系统。该系统结合了日志收集、Splunk检测、TheHive告警/案件管理、Cortex可观测对象分析、MISP或VirusTotal的IOC查询,并通过n8n和Telegram进行通知编排。
CVE-2024-4577仅用于验证多层检测能力的用例;整个项目不局限于某一个CVE。
系统模拟完整的SOC工作流程:
flowchart LR
K[Kali或测试源] --> W[Windows/XAMPP + Apache/PHP-CGI]
L[Linux端点] --> F[Universal Forwarder]
W --> A[Apache访问/错误日志]
W --> S[Windows Security + Sysmon]
A --> F
S --> F
F --> SP[Splunk]
L --> F
SP -->|告警webhook| TH[TheHive]
TH -->|告警 + 可观测对象| N[n8n]
N --> T[Telegram]
N -->|分析师选择的分析器| C[Cortex]
C --> M[MISP]
C --> V[VirusTotal]
M --> N
V --> N
N --> T以上地址仅用于实验室。重新部署时,请使用环境变量替换,且不要将服务暴露到互联网。
Splunk是系统的检测中心。搜索覆盖暴力破解登录、可疑NTLM网络登录、高权限组变更、通过SMB的横向移动、新建Windows服务、编码PowerShell和PHP-CGI参数注入。
TheHive接收来自Splunk的告警,显示severity/source/title,存储可观测对象,并允许分析师将告警转为案件。Cortex从TheHive接收可观测对象以运行分析器。MISP和VirusTotal是两个并行的分析选项,不强制按顺序运行。
n8n接收来自TheHive的webhook,并将初始SOC告警发送至Telegram。当分析师点击某个可观测对象时,n8n才处理回调、确定分析器、创建Cortex任务、等待报告并将结果发送至Telegram。update_id、callback_query_id、抑制机制和任务ID有助于避免重复运行。
日志产生
→ Universal Forwarder
→ Splunk搜索/关联
→ TheHive告警
→ n8n webhook
→ Telegram SOC告警
分析师在Telegram上点击可观测对象
→ Telegram回调
→ n8n立即回复回调
→ 从TheHive重新获取可观测对象
→ 检查可观测对象类型和分析器
→ Cortex创建任务
→ n8n等待并获取报告
→ Telegram发送结果
n8n不会在告警到达时自动运行所有可观测对象。分析器仅在分析师选择时运行,从而降低成本、减少重复通知并保持调查控制权。
基础检测位于config/splunk/core-savedsearches.conf中,附带排除合法活动的查找表:
该用例包含两层:
Sigma格式的规则元数据位于detections/sigma/cve-2024-4577-php-cgi-argument-injection.yml。在Splunk中执行的搜索位于config/splunk/install-cve-detections.ps1。
config/
├── forwarder/ Windows和Linux输入/输出配置
├── misp/ 用于内部查询的模拟IOC
├── n8n/ TheHive–Telegram–Cortex工作流模板
├── splunk/ 保存的搜索、查找表和关联脚本
└── sysmon/ Windows遥测配置
deploy/ 已脱敏的Docker Compose模板
detections/
└── sigma/ 与厂商无关的规则元数据
scripts/
├── splunk/ 通过API更新搜索
├── validation/ 就绪性检查
└── windows/ 为实验室目标机安装遥测
docs/ 运维文档和Telegram回调
源码与在线系统之间的对应关系见系统清单。已脱敏的真实n8n工作流清单位于config/n8n/live-workflow-manifest.json;小型导入模板文件仍单独保留,以便安全搭建新实验室。
cp deploy/docker-compose.soc.example.yml deploy/docker-compose.yml
cp .env.example .env
# 使用密钥管理器或本地.env文件填写密钥。
docker compose -f deploy/docker-compose.yml config
docker compose -f deploy/docker-compose.yml up -d
docker compose -f deploy/docker-compose.yml ps
Compose模板部署TheHive、Cortex、MISP、Cassandra、Elasticsearch、MinIO、Redis和MISP模块。n8n目前作为主机服务运行,工作流配置位于config/n8n/。
# 在Windows实验室上以管理员身份运行PowerShell
.\scripts\windows\install-lab-telemetry.ps1
# 在Splunk机器上,不要将密码写入源代码
$env:SPLUNK_PASSWORD = '<local-secret>'
.\config\splunk\install-cve-detections.ps1
python .\scripts\splunk\update-correlation-searches.py
# 检查就绪性
.\scripts\validation\check-system-readiness.ps1
回调详情见docs/telegram-callback-setup.md。
按自下而上的顺序进行测试:
实验室中使用的指标:MTTD(从事件发生到Splunk检测的时间)、MTTN(从告警到Telegram通知的时间)、MTTR(从收到告警到分流/关闭案件的时间)、误报率和重复率。
| 组件 | 角色 | 参考地址 |
|---|
| Kali | 授权测试流量来源 | 192.168.10.132 |
| Windows/XAMPP | Apache/PHP-CGI和Sysmon目标机 | 192.168.10.130:8080 |
| Splunk | 收集、搜索、关联和告警 | 192.168.10.128 |
| TheHive | 管理告警、案件和可观测对象 | 192.168.10.133:9000 |
| Cortex | 运行分析器 | 192.168.10.133:9001 |
| MISP | 内部IOC库 | 192.168.10.133:443 |
| n8n | webhook/回调自动化 | 192.168.10.133:5678 |
| 检测 | 主要数据 | 目标 |
|---|
| 暴力破解登录 | Windows事件ID 4625 | 时间窗口内多次登录失败 |
| 可疑NTLM登录 | Windows事件ID 4624 | 使用NTLM的异常网络登录类型3 |
| 特权组变更 | 事件ID 4732/4728/4756 | 将账户添加到高权限组 |
| SMB横向移动 | 事件ID 4624 | 单一来源异常访问多个主机 |
| 新建Windows服务 | 事件ID 7045 | 在白名单之外创建新服务 |
| 编码PowerShell | 事件ID 4688 | PowerShell使用-enc或-EncodedCommand |