panhapanha-kskt/Security-Incident-Lifecycle
GitHub: panhapanha-kskt/Security-Incident-Lifecycle
基于 Wazuh 构建的 SOC 自动化流水线,通过集成 TheHive、Cortex 和 MISP 实现安全告警的实时拦截、关联分析、自动响应与威胁情报富化。
Stars: 0 | Forks: 1
# Wazuh SOC 自动化平台
这是一个建立在 Wazuh 基础上的实时安全运营中心 (SOC) pipeline,它可以
拦截生成的告警,对其进行分类和关联,在 TheHive 中开启
事件案例,通过 Cortex 触发自动化响应动作,
将指标同步到 MISP,并向分析师发送电子邮件——所有这些都几乎无需
人工干预。
## 概述
开箱即用的 Wazuh 会生成告警,但不会对它们做太多处理——没有
跨事件的关联,没有案例管理,没有自动化的遏制,也没有
威胁情报丰富化。这个项目通过构建一个自定义的 pipeline 弥补了这一差距,它位于 Wazuh 和其他 SOC 工具链之间:
## 技术
**检测与数据收集**
- Wazuh Manager + Agent (FIM/syscheck, rootcheck, syscollector, active response)
**自定义 Pipeline**
- Python 3 (无 asyncio,线程化推送监听器 + 轮询循环)
- Unix domain socket,用于低延迟告警交付 (Wazuh integration → 拦截器)
- 基于磁盘的缓冲,确保在停机期间的交付弹性
**案例管理与编排**
- TheHive 5 (案例/告警管理)
- Cortex 3 (分析器与响应器编排)
- MISP (威胁情报平台,使用 MITRE ATT&CK galaxy/taxonomy 标签自动丰富)
**基础设施**
- Docker / Docker Compose (TheHive, Cortex, MISP, Elasticsearch, Cassandra, MariaDB, Nginx reverse proxies)
- Bash (pipeline 编排,同步脚本)
**通知**
- Gmail SMTP (带有严重性主题的 HTML 格式事件电子邮件)
## 功能
- **实时告警拦截** — 一个自定义的 Wazuh integration 将每个
告警推送到 Unix socket,而不是依赖缓慢的文件 tailing;如果
监听器宕机,告警会被缓冲到磁盘并在启动时重放。
- **严重性分类** — 规则被映射为 CRITICAL / HIGH / MEDIUM /
LOW / INFO,这是基于显式规则表和动态 Wazuh 规则级别进行的。
- **MITRE ATT&CK 映射** — 每个分类后的规则都包含技术 (technique) 和
战术 ID,并按规则组(凭证访问、
C2、数据窃取、Web 攻击等)记录了相关原理。
- **暴力破解升级** — 失败登录规则按源 IP 在
滑动时间窗口内进行跟踪,并在失败
次数超过可配置阈值时自动提升严重性。
- **内存关联引擎** — 在滚动时间窗口内检测多阶段攻击链(例如
TOR 节点 + reverse shell,暴力破解 + 权限提升,端口扫描 +
SQLi),按 agent 区分,并触发专用的
关联告警。
- **自动化案例创建** — 符合条件的告警和关联事件会
开启结构化的 TheHive 案例,包含完整的上下文(agent、IP、MITRE 标签、原始
日志),并经过标记和去重以避免案例泛滥。
- **自动化的可观测对象提取与丰富** — IP、user-agent 和
文件哈希从告警中提取(包括对原始日志进行 regex 回退扫描),
并作为可观测对象发布到 TheHive,从而自动触发 Cortex
分析器。
- **自动化 active response** — FIM 违规会锁定受影响的文件
(`chattr +i`),而基于网络的威胁会在
Wazuh agent 上触发 `firewall-drop`,这些操作通过 Cortex 响应器调度,如果通过 TheHive 路由的路径失败,则直接回退到 Wazuh-API。
- **MISP 同步** — 每个 TheHive 案例都会
实时镜像到 MISP,包含特定于规则的丰富模板(属性、MITRE
galaxy 标签、TLP/Admiralty/CIRCL taxonomy 标签)和感知 TLP 的分发
级别,外加一个作为安全网的计划内补录脚本。
- **HTML 电子邮件告警** — CRITICAL/HIGH/MEDIUM 告警会生成带有主题的 HTML
电子邮件,包含完整的事件摘要、MITRE 链接和分析师检查清单,
按规则/源 IP 进行去重。
- **日期边界翻转** — 每日计数器、去重缓存和关联
状态会在本地午夜自动重置,并在重置前打印/记录每日
摘要。
- **Dry-run 与重放模式** — 告警可以从
日志的开头重放以进行回测,或者整个 pipeline 可以在 dry-run 模式下运行,而无需
进行任何外部 API 调用。
## 流程
1. **从检测层开始。** 在默认规则之上配置了 Wazuh 的 FIM、active
response 和本地规则集——涵盖了
暴力破解检测、reverse shell、加密货币挖矿机、SQL injection 和
文件完整性违规,每一项都映射到了 MITRE ATT&CK。
2. **用推送架构取代了文件 tailing。** 原始设计
定期轮询 `alerts.json`/`archives.json`;后来将其重构
为一个自定义的 Wazuh integration 脚本,在每个告警触发的瞬间通过 Unix
socket 将其推送出去,并使用磁盘缓冲,这样即使
监听器暂时宕机,也不会丢失任何内容。
3. **构建分类与关联核心。** 编写了规则表、
严重性逻辑以及一个轻量级的内存关联器,用于跟踪
每个 agent 最近触发的规则,并将它们与已知的攻击
链“特征”进行匹配。
4. **将 TheHive 作为案例管理层接入。** 构建了一个案例管理器,
具有严重性门控和时间窗口去重功能,因此同一个事件
不会生成几十个重复的案例。
5. **引入 Cortex 进行可观测对象提取和响应。** 从每个告警中提取 IP、
user-agent 和哈希,将它们作为 TheHive
可观测对象发布,并自动触发相关的 Cortex 分析器。
然后添加了响应器,以便某些规则类会触发真正的
遏制动作(不仅仅是丰富)。
6. **连接 MISP 进行威胁情报共享。** 最初这运行在
由 cron 驱动的 bash/Python pipeline 上;后来被移至
在案例创建后立即同步触发,同时保留 cron job 作为补录安全网。
7. **最后添加了 Gmail 告警**,作为
自动化 pipeline 之上面向人类的层,并进行去重,以免分析师被淹没。
8. **迭代强化。** 经历了几轮修复在负载下发现的实际
问题:当可观测对象是
重复项时响应器被跳过、SMTP 失败被静默吞掉而不是被计数、
MITRE 严重性等级在 TheHive 和
MISP 之间运行方向相反,以及去重键未考虑到文件路径(这压制了
不同文件上的不同 FIM 告警)。
## 我学到了什么
- **针对部分失效进行设计比正常流程更重要。** 大部分的
实际工程工作都投入到了当 TheHive 无法访问、Cortex 超时、SMTP 拒绝登录或 MISP 宕机时会发生什么——
确保一个组件的故障永远不会使 pipeline 崩溃或静默
丢弃告警。
- **对于实时系统,推送优于轮询。** 从文件 tailing 转向
Unix socket 推送监听器(带有写入磁盘的回退机制)显著
降低了检测延迟,并让我学到了很多关于 socket 处理、
线程和背压(有界队列、丢弃计数器)的知识。
- **严重性等级并不通用。** TheHive、MISP 和 Wazuh 各自以
不同的方式编码严重性/威胁级别,其中两个的运行方向甚至*相反*。
假设它们会一致是一个很容易犯且危险的错误。
- **去重键需要与你进行去重的对象的粒度相匹配。**
一个仅基于 `(rule_id, agent, srcip)` 的早期去重键静默地
吞没了针对不同文件的合法 FIM 告警——解决方法是
在键中加入文件路径。
- **关联逻辑描述起来极其简单,但在实践中却很容易出错** — 诸如“规则应该在它过期的那一刻从
关联窗口中移除,还是在下一个事件中移除?”这样的决定对
检测有着实际的影响。
- **丰富 pipeline 需要幂等性。** 因为实时 MISP 同步
和计划内的补录脚本都在运行,所以编写所有内容时
必须确保针对同一个案例/事件重新运行是一个安全的空操作,而不是
重复操作。
- **密钥管理是首要关注点,而不是事后才考虑的** —
在这个项目中,我深刻体会到在快速迭代过程中,API 密钥是多么容易
最终被硬编码在脚本、
配置文件和错误消息中,以及为什么环境变量加上轮换习惯如此重要。
## 整体成长
这个项目让我从“我能编写一个对单一告警做出反应的脚本”
转变为“我能够设计一个必须在并发、
部分中断和对抗性时序下保持正确的多服务 pipeline。”具体的成长领域包括:
- 在丢失告警会产生实际后果的上下文中,
熟练掌握**异步/并发 Python**(线程、队列、socket)。
- 对 **SOC 工具链**(Wazuh, TheHive、
Cortex, MISP)有了更深入的了解,了解了它们的预期互操作方式与在实践中
的实际互操作方式。
- 获得了将检测映射到 **MITRE ATT&CK** 的实践经验,不仅仅是作为
参考图表,而是作为在 pipeline 中流动的结构化数据。
- 对**防御性编码**有了更强的直觉——区分“已跳过”和“已失败”的
返回值约定,使用显式异常类型而不是纯粹的 `except: return False`,
并为每种失败模式设置计数器,以确保没有任何东西静默失败。
- 更好地理解了**操作安全**卫生——将配置与
密钥分开,并了解到如果不从第一天起就对此深思熟虑,
凭证会以多快的速度散布在代码库中。
## 如何改进?
- **集中管理密钥**,使用专用的密钥管理器(Vault, AWS Secrets
Manager,或者至少是一个在所有地方都被 git-ignored 的 `.env` 文件),
而不是散布着偶尔硬编码
回退的环境变量——并且轮换所有曾经被硬编码的凭证。
- **添加自动化测试**,针对分类器、关联器和去重逻辑——
目前正确性是针对实时流量手动验证的,这
使得回归很容易被忽略。
- **用持久化存储**(Redis, SQLite)**替换内存状态**,用于
去重缓存、关联窗口和暴力破解计数器,这样进程
重启就不会静默地重置检测状态。
- **添加适当的指标/可观测性层**(Prometheus + Grafana),而不是
周期性的 `print()` 统计数据——这将使趋势(电子邮件失败率、
响应器成功率、MISP 同步延迟)随着时间的推移变得可见,而不仅仅是在
回滚日志中。
- **水平扩展** — 拦截器目前是一个单一的进程;
将分类/关联与交付集成(Hive、
Cortex, MISP, Gmail)分离为队列后面的独立 worker,将使
系统更具弹性,防止缓慢的下游 API 阻塞整个循环。
- **收紧关联特征集** — 目前它是一个
小型的、手动挑选的列表;这可以扩展为可配置的规则格式
(或由适当的关联引擎支持),从而使得新的攻击链不需要
修改代码。
- **全面启用 TLS** — 目前为了实验室的方便,几个内部服务调用在
禁用 SSL 验证的情况下运行;生产环境使用将
需要真实的证书,并全面启用验证。
- **多节点 Wazuh 集群** — 当前的部署作为单一的
Wazuh 节点运行;集群化将消除这个单点故障。
## 运行项目
### 1. 启动后端技术栈
```
# TheHive 栈 (Cassandra, Elasticsearch, TheHive, Nginx)
cd docker/prod1-thehive
docker compose up -d
# Cortex 栈 (Elasticsearch, Cortex, Nginx)
cd ../prod1-cortex
docker compose up -d
# MISP 栈
cd ../../misp-docker
docker compose up -d
```
在 `thehive/config/application.conf` 中配置 TheHive ↔ Cortex 和 TheHive ↔ MISP 连接器,
并从 Cortex UI 中注册你需要的 Cortex 分析器/
响应器(VirusTotal, MISP, Shodan 以及自定义的 Wazuh
响应器)。
### 2. 配置环境变量
切勿硬编码凭证——在启动拦截器之前导出它们:
```
export THEHIVE_KEY=""
export WAZUH_API_PASS=""
export GMAIL_USER=""
export GMAIL_PASS=""
export ALERT_TO=""
export CORTEX_KEY=""
export MISP_API_KEY=""
```
### 3. 接入 Wazuh integration
`custom-asil` integration 脚本(位于 `/var/ossec/integrations/` 中)通过
Unix socket 将告警推送到拦截器。确认它已在
`ossec.conf` 中的 `` 下被引用,并重启管理器:
```
systemctl restart wazuh-manager
```
### 4. 运行拦截器
```
cd thehive-configure
python3 thehive-intercept.py # live mode
python3 thehive-intercept.py --verbose # full per-alert detail
python3 thehive-intercept.py --dry-run # no external API calls, terminal only
```
### 5. 查看运行情况
- 触发一个测试事件(例如几次失败的 SSH 登录,或者修改
受监控 agent 上的 `/etc/sudoers`)。
- 在终端中查看分类后的告警。
- 在 TheHive 中检查案例,在 Cortex 中检查分析器/响应器任务,在 MISP 中
检查同步的事件,并在你的收件箱中查看电子邮件告警。
### 6 (可选) 运行 MISP 补录
```
cd thehive-configure/MISP
./MISP_Pipeline.sh
```
## 视频 📺
https://drive.google.com/file/d/1QgBoHXI4n_66M-m2b80HNFpVm90nFnmI/view
标签:CIDR查询, Docker, Python, TheHive, Wazuh, 安全告警分诊, 安全运营, 安全防御评估, 应用安全, 扫描框架, 无后门, 版权保护, 自动化响应, 请求拦截