FabulaNox/wazuh-suricata-soc
GitHub: FabulaNox/wazuh-suricata-soc
基于 Wazuh 和 Suricata 的家庭实验室检测栈,通过分层规则模型和精准噪音抑制解决 SIEM 误报泛滥的问题,只推送真正值得关注的告警。
Stars: 0 | Forks: 0
# 由 Wazuh 和 Suricata 驱动的 SOC
**一个为捕捉真实信号而非噪音而生的家庭实验室检测栈 - 包含 Wazuh + Suricata、自定义 MITRE 对齐规则以及分级告警模型。**
[架构](#architecture) · [规则模型](#the-rule-model-three-tiers) · [部署](#set-up) · [NoxLab 的一部分 ↗](https://github.com/FabulaNox/NoxLab)
[](LICENSE)
一个为捕捉真实信号而非噪音而构建的家庭实验室**检测栈**:**Wazuh** (SIEM) +
**Suricata** (网络 IDS),包含自定义 MITRE 对齐规则、漏洞源调优、
威胁情报丰富化,以及一个保证实时频道可信度的**分级告警**模型。
它为通宵的 [agentic-soc-triage](https://github.com/FabulaNox/agentic-soc-triage) 摘要提供数据源。
整个设计都向一个事实妥协:开箱即用的家庭实验室 SIEM 简直就是一面*误报
之墙*。一个总是“狼来了”的频道最终会被你遗弃——因此,这里的核心工作是
进行规则工程,以决定哪些事情才真正值得人类关注。
## 目录
- [架构](#architecture)
- [规则模型(三层)](#the-rule-model-three-tiers)
- [在不致盲的前提下去除 CVE 噪音](#cutting-cve-noise-without-going-blind)
- [告警层级](#alerting-tiers)
- [部署](#set-up)
- [维护](#maintain)
- [避坑指南](#gotchas)
- [截图](#screenshots)
## 架构
```
endpoint agents (Sysmon + Wazuh) ┐
edge-router syslog ├─► Wazuh SIEM ──► ranked alerts (level)
Suricata IDS (eve.json) ┘ ▲ │
abuse.ch threat-intel ──(CDB lists)─────────┘ ├─ level 7+ ─► Telegram (real time)
└─ overnight ─► daily report ─► L1 agent
```
- **数据源:** endpoint agent(身份验证、进程、文件完整性、Sysmon),边界
路由器的 syslog(自定义解码器),以及 Suricata 网络告警——将主机、网络
和边界检测汇聚在同一时间线上。
- **丰富化:** 定时将公共 IOC 源(abuse.ch)拉取到 Wazuh CDB 列表中,
因此任何触及已知恶意 IP/域名/哈希的告警都会被打上标签。
- **浮现的内容:** 告警**级别**是过滤器;自定义规则会将已知的良性噪音降级
至通知阈值*以下*,并将关键事件提升*至*阈值之上。

*实时 SOC 概览,仅由聚合计数构建(无 agent / 主机 / IP 字段)。通知区只是庞大且静默的索引基线上方的一小条——这正是调优在发挥作用的体现。*
## 规则模型(三层)
匿名化规则集请参见 [`rules/local_rules.xml`](rules/local_rules.xml)。
| 层级 | 级别 | 目的 |
|---|---|---|
| **基线可见性** | 3 | 将进程/网络/DNS/驱动事件捕获为可搜索的数据——不触发通知 |
| **抑制** | 0 | 屏蔽已知良好的单主机噪音(范围严格限定于具体机器) |
| **检测** | 7-12 | 真正重要的告警——在 level 7+ 时触发实时频道通知 |
检测内容包括 CreateRemoteThread(进程注入)、未签名驱动加载、
注册表持久化(`Run`/`RunOnce`/`Services`)、备用数据流写入,
以及从可疑路径(`Temp`、`Public`)执行的操作。它们均映射至
MITRE ATT&CK 技术。

*`local_rules.xml` 中的三个层级:基线可见性 (3)、锚定路径的抑制 (0) 以及映射 MITRE 的检测 (7-12)。*
### 在不致盲的前提下去除 CVE 噪音
这是最大的收获。该机器运行着前沿内核,这每天会生成
**约 1,815 条漏洞告警**——几乎全是 `Package default status`(尚无上游
修复方案,因此无法操作)。全盘抑制它们会隐藏*真正*可修复的漏洞。修复方案
非常精准:
| 自定义规则 | 效果 |
|---|---|
| 抑制未评分的 CVE(尚无 CVSS) | 消除约 637 条/天 |
| 中等严重性 -> level 3 | 已索引,静默 |
| 高 / 严重级别 **带有** `Package default status` -> level 4(低于通知阈值) | 安静:暂无需处理 |
| 高 / 严重级别 **不带** 该条件 -> 保留原始 level 9 / 13 | **触发通知**——存在真实的修复方案 |
判别依据是 `vulnerability.package.condition` 字段:可修复的漏洞
依然会通知我;不可修复的漏洞则被索引并保持安静。噪音减少约 95%,
同时对*可操作*漏洞的覆盖保持不变。
## 告警层级
| 级别 | 处理方式 |
|---|---|
| 0-5 | 已索引且可搜索,但静默 |
| 7+ | 实时推送(Telegram)——扫描、暴力破解、威胁情报命中 |
| 12+ | 紧急——始终推送 |
将门槛保持在 7 是让该频道值得阅读的关键:自定义规则将已知良性
事件推至其*以下*,并将关键事件提升*至*该门槛。

*按级别划分的告警量(对数刻度,30 天)。低于 7 级的区带在数量级上远超通知区带——SIEM 看到的大部分内容都被刻意保持在寻呼阈值以下。*

*达到门槛的样子:实时推送到 Telegram 的 level 7 告警。只有 level 7+ 才会到达此频道——其他所有低级别内容均被索引且静默。*
## 部署
该检测栈的精简部署方案(已抽象——请填入你自己的主机/地址):
**1. 管理端栈(专用虚拟机)。** 安装 `wazuh-manager`、`wazuh-indexer`、
`wazuh-dashboard`。**按顺序**启动它们——先是 indexer,然后是 manager,最后
是 dashboard:
```
sudo systemctl restart wazuh-indexer
sudo systemctl restart wazuh-manager
sudo systemctl restart wazuh-dashboard
sudo systemctl is-active wazuh-indexer wazuh-manager wazuh-dashboard
```
**2. 网络 IDS。** 在核心主机上运行 Suricata,嗅探 LAN 接口,
写入 `eve.json`,并让 Wazuh agent 摄取它,以便将网络检测与
主机检测并列处理。如果在负载下发现内核丢包,请将 AF-PACKET 的
`ring-size` 提高到默认值以上。
**3. Endpoint agent。** 在每个端点上安装 Wazuh agent;在 Windows 上,添加
Sysmon 并转发其 EventChannel。将 agent 注册到 manager。
**4. 自定义规则。** 将 [`rules/local_rules.xml`](rules/local_rules.xml) 拖入
manager 上的 `/var/ossec/etc/rules/local_rules.xml` 并重启。使用
`win.system.computer` 来限定单主机抑制范围(见避坑指南)。
**5. 威胁情报。** 定时将公共 IOC 源拉取到 Wazuh CDB 列表中;添加
一条规则,为触及已列明指标的任何告警打上标签。
**6. 实时告警。** 连接一个自定义集成(`ossec.conf` 集成块),
将 level-N+ 的告警推送到聊天机器人,其阈值设置为确保
只有 tier-3 检测才会触发通知。
## 维护
- **更新,按顺序进行:** 先更新 manager 栈(indexer -> manager -> dashboard),
然后是 agent。agent **不会**自动更新;Wazuh 支持 N-1 兼容性,
因此短暂的 manager/agent 版本差距是安全的,但应尽快完成 agent 的升级。
- **根据模式目录进行调优:** 每一个反复出现的误报在编写抑制规则之前,
都会有明确的文档化决策(见避坑指南——
抑制规则是你自身检测能力中的一个漏洞)。
## 避坑指南
构建过程中遇到的真实检测工程陷阱:
- **`agent.name` 在规则评估中不起作用。** Agent 元数据在规则评估时
并不是一个已解码的字段。请改用 `win.system.computer` 来限定规则范围,
并对照实时告警确认该值(它是操作系统主机名,而不是
Wazuh agent 名称)。
- **悄然失效数月的字段名称。** 一条规则匹配了
`vulnerability.condition` 并因此从未触发——解码后的路径是
`vulnerability.package.condition`(Wazuh 会去掉 `data.` 前缀,因此
`标签:DNS 反向解析, Metaprompt, Suricata, Wazuh, 入侵检测系统, 威胁情报, 安全告警, 安全数据湖, 安全运营中心, 开发者工具, 现代安全运营, 网络映射