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, 安全运营, 实验室环境, 容器化, 扫描框架, 版权保护