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 工具链之间: Timeline(2) ## 技术 **检测与数据收集** - 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, 安全告警分诊, 安全运营, 安全防御评估, 应用安全, 扫描框架, 无后门, 版权保护, 自动化响应, 请求拦截