mzarem01/soc-home-lab-wazuh
GitHub: mzarem01/soc-home-lab-wazuh
一个基于 Wazuh 的多操作系统 SOC 家庭实验室,提供从部署到检测验证的完整 SIEM 实践方案。
Stars: 0 | Forks: 0
# SOC 家庭实验室 — 基于 Wazuh 的多操作系统 SIEM
**技术栈:** Wazuh 4.9 · Ubuntu Server 24.04 · VirtualBox · Tailscale · Debian · macOS · Windows
## 概述
我为我的家庭实验室构建并验证了一个集中式 SIEM 部署。一个单节点 Wazuh 技术栈(manager、indexer、dashboard)负责收集并关联来自三个受监控端点(运行 Linux、macOS 和 Windows)的安全遥测数据。
为了证明端到端检测流水线的有效性,我针对 Linux 服务器模拟了一场 **SSH 暴力破解攻击**。SIEM 捕获了每一次失败的认证,在大约一分钟内将它们关联为一个单一的暴力破解告警,并自动将检测映射到 **MITRE ATT&CK T1110** 以及 PCI DSS、NIST 800-53 和 HIPAA 控制措施。
整个实验室运行在私有 mesh VPN 上,**没有向公共互联网暴露任何端口**。

*三个代理向 manager 报告 Active 状态 —— Debian、macOS 和 Windows。*
## 目标
- 建立一个集中式 SIEM,以收集并关联来自多个主机的安全事件。
- 通过单一 manager 监控异构设备群(Linux、macOS、Windows)。
- 通过生成真实的攻击特征码并确认告警,来证明检测流水线有效。
- 将检测映射到行业框架(MITRE ATT&CK、PCI DSS、NIST 800-53)。
- 保持部署的安全性——不对公共互联网暴露——并将其记录为可重复的构建过程。
## 架构
| 组件 | 角色 | 平台 |
| :-- | :-- | :-- |
| **wazuh-siem** | Wazuh manager + indexer + dashboard(一体化) | Ubuntu Server 24.04 LTS,VirtualBox 中的 VM |
| **Linux server** | 受监控的端点(生产媒体/服务主机) | Debian 13 |
| **MacBook Pro** | 受监控的端点 | macOS |
| **Workstation** | 受监控的端点 + VM 宿主机 | Windows 11 |
**连接性。** 所有主机均通过 **Tailscale mesh VPN** 进行通信。代理使用 manager 稳定的私有 mesh IP 进行注册,而不是 DHCP 分配的局域网地址,因此流水线在租约变更后依然能够正常运行。没有 SSH 或管理端口暴露在公共互联网上。
**资源占用。** SIEM 运行在一个隔离的 VM(8 GB RAM / 4 vCPU / 100 GB 磁盘)中,因此安全工作负载被限制在内,不会干扰宿主机——同时也便于以后将其制作快照并迁移到专用硬件上。
## 构建步骤
1. **配置 SIEM 宿主机。** 创建了一个使用 **桥接** 网络适配器的 Ubuntu Server 24.04 VM,使其作为局域网中的一等公民存在(NAT 会阻止入站的代理连接)。扩展了 LVM 根卷以使用整个磁盘——Ubuntu 的安装程序默认只分配一半的空间。
2. **安装 Wazuh。** 通过官方安装助手部署了一体化技术栈(manager、indexer、dashboard)。妥善保管了生成的管理员凭据。
3. **加入 mesh 网络。** 在 VM 上安装了 Tailscale,以便每个代理都能通过稳定的私有地址访问 manager。
4. **在三个主机上注册代理**,每个代理均配置为开机自启动:
- **Debian** — 原生 `.deb` 包,作为 systemd 服务运行
- **macOS** — Intel `.pkg`,作为 LaunchDaemon 运行
- **Windows** — MSI,作为 Windows 服务运行
5. **验证遥测数据。** 确认所有三个代理均报告 **Active**,各自向 manager 传输认证事件、系统日志和文件完整性数据。
## 检测测试:SSH 暴力破解
为了验证流水线,我模拟了一场暴力破解攻击——使用无效用户名对 Debian 服务器进行多次失败的 SSH 登录尝试——随后观察了 SIEM 的响应。
### 结果
- 捕获了 **11 个认证失败事件**;**0 次成功登录**。
- 单个失败记录为 **Rule 5710** — *尝试使用不存在的用户登录*(级别 5)。
- 一旦失败次数达到关联阈值,Wazuh 就会将其升级为 **Rule 5712 — "SSHD brute force trying to get access"**(级别 10)。
- **从第一次登录失败到生成关联的暴力破解告警的时间:约 64 秒。**

*威胁狩猎仪表板 —— 11 次认证失败,零次成功,暴力破解出现在顶部告警细分明细中。*
### 事件明细
| Rule ID | 描述 | 级别 | 次数 |
| :-- | :-- | :-- | :-- |
| 5710 | sshd: attempt to login using a non-existent user | 5 | 7 |
| 5503 | PAM: user login failed | 5 | 2 |
| 2502 | syslog: user missed the password | 10 | 1 |
| **5712** | **sshd: brute force trying to get access** | **10** | **1** |

*原始事件流 —— 单个失败 (5710) 在顶部升级为关联的暴力破解检测 (5712)。*
### 框架映射
Wazuh 自动使用框架和合规性上下文丰富了告警——这是在真实 SOC 中交流发现结果的通用词汇:
| 框架 | 映射 |
| :-- | :-- |
| **MITRE ATT&CK** | **T1110** — Credential Access / Brute Force |
| **PCI DSS** | 10.2.4, 10.2.5, 11.4 |
| **NIST 800-53** | SI.4, AU.14, AC.7 |
| **HIPAA** | 164.312.b |
| **GDPR** | IV_35.7.d, IV_32.2 |

*完整的告警详情 —— decoder、原始日志、关联的前序事件、MITRE 技术和合规性映射。网络地址已打码处理。*
## 我学到了什么
- **SIEM 基础知识** —— 日志收集、标准化、基于规则的关联,以及单个 *event*(事件)与关联的 *alert*(告警)之间的关键区别。
- **多操作系统代理部署** —— 在 Linux、macOS 和 Windows 上注册和排查代理故障,包括服务持久性和特定平台的障碍(macOS 系统扩展批准;Windows 在未提权的情况下静默安装失败)。
- **检测工程基础** —— 基于阈值的关联如何将噪音转化为信号。
- **框架映射** —— 将原始检测连接到 MITRE ATT&CK 和合规性控制措施。
- **安全的远程架构** —— 使用 mesh VPN 管理和监控基础设施,而无需向公共互联网暴露任何内容。
## 下一步计划
- [ ] ** remediation(检测 → 响应 → 验证):** 在 Linux 主机上部署 fail2ban 以自动封禁暴力破解源,然后重新运行攻击以确认封禁并捕获前后对比。
- [ ] **扩大覆盖范围:** 添加一个专门的攻击者主机 (Kali) 并运行更广泛的技术集 —— 端口扫描、撞库。
- [ ] **自定义检测:** 编写针对此环境定制的自定义 Wazuh 规则和文件完整性监控策略。
- [ ] **迁移到常开硬件**,以便 SIEM 可以独立于工作站实现 24/7 全天候运行。
## 仓库结构
```
.
├── README.md
└── screenshots/
├── 01-endpoints-3-agents-redacted.png
├── 02-threat-hunting-dashboard.png
├── 03-events-rule-ids.png
└── 04-alert-detail-rule5712-redacted.png
```
*以上截图中的所有网络地址均已做打码处理。本实验室运行在个人拥有的硬件上;所有模拟攻击均是针对我自己的系统进行的。*
标签:Wazuh, 安全实验室, 安全运营中心, 网络映射