ajazahmed11/wazuh-siem-lab
GitHub: ajazahmed11/wazuh-siem-lab
一个在单台笔记本上以 rootless Podman 运行的 Wazuh SIEM 家庭实验室,用于练习 SOC 检测工程,包含自定义检测规则、文件完整性监控、Snort IDS 和模拟攻击。
Stars: 0 | Forks: 0
# Wazuh SIEM 家庭实验室
一个小型、持续监控的“企业”环境,用于练习 SOC 检测工程:
一个 Wazuh SIEM 监控着一群 Linux 端点,包含自定义检测规则、文件完整性监控,
以及与捕捉这些攻击的规则相匹配的模拟攻击。
完全在单台 Fedora/Nobara 笔记本电脑上的 **rootless podman** 中运行 —
无需 root daemon,足够轻量化,可以与日常工作并行运行。
## 架构
```
podman network: single-node_default
┌───────────────────────────────────────────────────────────┐
│ Wazuh SIEM (single-node) Monitored endpoints │
│ ┌────────────────┐ ┌────────┐ ┌────────┐ │
│ │ wazuh.manager │◄── 1514/1515 ──│ web01 │ │ db01 │ │
│ │ wazuh.indexer │ │ (agent)│ │ (agent)│ │
│ │ wazuh.dashboard│◄─ https :1443 │ sshd │ │ sshd │ │
│ └────────────────┘ └────────┘ └────────┘ │
│ ┌────────┐ │
│ │ app01 │ db01 also │
│ │ (agent)│ plays the │
│ └────────┘ attacker │
└───────────────────────────────────────────────────────────┘
```
- **SIEM:** `repo/single-node/` — Wazuh 4.14.6 (manager + indexer + dashboard)。
- **Endpoints:** `endpoints/` — Ubuntu 22.04 容器,每个都运行 Wazuh agent、
rsyslog 和 sshd (因此它们是真实的暴力破解目标)。
- **Detection:** `detection/` — 自定义规则 + 集中式 agent 配置 (实时 FIM)。
- **Incidents:** `incidents/` — 带有 MITRE ATT&CK 映射的分级处置报告。
## 设置 — Wazuh 基础层
此仓库包含**我自己的工作成果** (端点、检测规则、IDS、攻击者、事件
报告、启动脚本)。它**不**打包 Wazuh 自己的部署文件 —
请自行将它们克隆到 `repo/` 中:
```
git clone --depth 1 --branch v4.14.6 https://github.com/wazuh/wazuh-docker.git repo
```
然后应用此实验室所依赖的两处更改 (均因为它以 **rootless** 模式运行):
- 在 `repo/single-node/docker-compose.yml` 中,重新映射 dashboard/
syslog 所需的特权端口:**`443` → `1443`** 和 **`514/udp` → `5140`**。
- 从 `wazuh.dashboard` 服务中移除传统的 `links:` 块 (podman 会拒绝它;
服务无论如何都会通过共享网络上的名称进行解析)。
## 启动运行
```
# rootless podman socket(一次性)
systemctl --user enable --now podman.socket
export DOCKER_HOST=unix:///run/user/1000/podman/podman.sock
# SIEM
cd repo/single-node
podman compose -f generate-indexer-certs.yml run --rm generator # certs (first run)
podman compose up -d
# endpoints
cd ../../endpoints
podman build -t wazuh-endpoint:4.14.6 .
podman compose up -d
```
Dashboard: **https://localhost:1443** (用户 `admin`)。Wazuh 附带众所周知的演示
密码 — 在正式使用前请更改它们 (通过 `securityadmin.sh` 更改 indexer 管理员密码,通过
API 更改 API 用户密码)。请勿将更改后的值提交到 git。
### Snort IDS 传感器 + Kali 攻击者
```
# 实验室网络上的 Kali 攻击机
cd kali-attacker && podman build -t kali-attacker:latest . && podman compose up -d
# web01 上的 web 目标(用于 traversal/SQLi 规则)
podman exec -d endpoints-web01-1 bash -c 'python3 -m http.server 80'
# Snort 传感器 — 共享 web01 的 network namespace,因此它可以嗅探 web01 的 interface
cd ../snort-sensor && podman build -t snort-sensor:latest .
podman run -d --name snort-sensor --network container:endpoints-web01-1 \
--restart unless-stopped --cap-add NET_RAW --cap-add NET_ADMIN snort-sensor:latest
# 从 Kali 发起攻击,然后读取 alerts:
podman exec snort-sensor cat /var/log/snort/alert
```
## 已实现的检测
| 内容 | 位置 | MITRE |
|------|-------|-------|
| Sudoers 文件 / drop-in 被修改 | 规则 100100 (自定义) | T1548.003 |
| /etc/shadow, /etc/passwd, /etc/gshadow 发生更改 | 规则 100101 (自定义) | T1003.008 |
| 用户被添加到特权组 | 规则 100110 (自定义) | T1098 |
| SSH 暴力破解 | 规则 5712 (内置) | T1110.001 |
| 在 /etc 上的实时 FIM (inotify) | `detection/agent.conf` | — |
## 注意事项 / 已解决的坑
- **Rootless 端口绑定:** dashboard 从 443 重新映射到 1443,syslog 从 514 映射到 5140 (rootless
无法绑定 <1024 的端口)。
- **Compose `links:`** 不受 podman 支持 — 已移除;服务通过名称解析。
- **容器日志记录:** 容器没有 journald/syslog,因此在添加 rsyslog *并且*
在 rsyslog 启动前将 `/var/log/auth.log` 的所有者更改为 `syslog:adm`
之前,sshd 认证事件是不可见的 (否则其写入操作会因权限被拒绝而暂停)。
- **临时 agent:** 重新创建端点容器会导致其 manager 记录成为孤立状态
(“Duplicate agent name”)。在重新注册之前删除过期的 agent (API `DELETE /agents`)。
- **rootless podman 中的 IDS:** 网络桥接存在于 rootless netns 中,并且在
宿主机上不可见,因此宿主机级别的 Snort 无法看到容器间的流量。解决方案:
使用 `--network container:endpoints-web01-1` 运行 Snort,以便它共享 (并嗅探)
目标容器的接口。
- **Snort 控制台输出是块缓冲的:** 低频警报 (几次 web 攻击命中)
在 `podman logs` 中保持不可见,直到突发流量刷新缓冲区 —
这看起来完全就像规则没有触发一样。修复:`-A fast -l /var/log/snort` 将警报写入文件,
并按每个警报进行刷新。
标签:HTTP工具, NIDS, Wazuh, 安全运营, 实验室环境, 容器化, 扫描框架, 版权保护