na8877waf-cmd/Wazuh-SOC-Detection-Lab

GitHub: na8877waf-cmd/Wazuh-SOC-Detection-Lab

基于 Wazuh SIEM 构建的家庭 SOC 实验室,通过自定义 MITRE ATT&CK 映射规则检测暴力破解和 Web 扫描攻击,提供完整的部署与验证方案。

Stars: 0 | Forks: 0

# Wazuh SOC 检测实验室 一个基于虚拟机构建的家庭安全运营中心 (SOC) 实验室。它部署了一个单节点 **Wazuh** SIEM,接入两个实时日志源(Linux 身份验证日志和 Apache Web 服务器 日志),并使用**映射到 MITRE ATT&CK 的自定义检测规则**来对攻击者行为发出告警 —— 每条规则均通过安全模拟攻击并确认触发了告警来进行验证。 ## 架构 ``` NAT Network (internet + VM-to-VM communication) ┌──────────────────────────────────────────────────────────────┐ │ │ │ ┌───────────────────────────┐ │ │ │ Ubuntu (10.0.2.15) │ WAZUH SERVER (SIEM) │ │ │ Wazuh manager │ - manager + indexer + │ │ │ Wazuh indexer │ dashboard (single node) │ │ │ Wazuh dashboard │ - receives agent logs │ │ └─────────────▲─────────────┘ on ports 1514 / 1515 │ │ │ agent reports up │ │ ┌─────────────┴─────────────┐ │ │ │ Kali Linux │ MONITORED ENDPOINT │ │ │ Wazuh agent │ - /var/log/auth.log (auth) │ │ │ rsyslog │ - /var/log/syslog │ │ │ Apache2 │ - Apache access/error logs │ │ └───────────────────────────┘ │ └──────────────────────────────────────────────────────────────┘ ``` | 虚拟机 | 角色 | 组件 | |--------|------------------|-------------------------------------------------------| | Ubuntu | Wazuh **服务器** | Wazuh manager, indexer, dashboard (all-in-one) | | Kali | 终端 + Web | Wazuh agent, rsyslog, Apache2 (auth + web 日志源) | **Hypervisor:** Oracle VirtualBox · **网络:** NAT Network (确保所有虚拟机都能接入互联网 *并且* 可以相互访问)。 ## 技术栈 - **Wazuh 4.14** — 开源 SIEM / XDR (manager, indexer, dashboard) - **rsyslog** — 生成 `/var/log/auth.log` 和 `/var/log/syslog` 用于日志收集 - **Apache2** — 提供 access/error 日志的 Web 服务器 - **MITRE ATT&CK** — 检测到技术的映射 - **VirtualBox** — 虚拟化 ## 自定义检测规则 自定义规则位于 Wazuh 服务器的 `/var/ossec/etc/rules/local_rules.xml` 中,并基于 Wazuh 的内置规则集构建。(自定义规则 ID 使用 `1001xx` 范围,以避免与 `100001`–`100002` 处的内置示例规则发生冲突。) ### 规则 1 — 暴力破解身份验证 (MITRE T1110) 当在短时间窗口内发生多次身份验证失败时触发。 ``` 5557 Multiple failed login attempts - possible brute force (custom) T1110 ``` ### 规则 2 — Web 扫描 / HTTP 4xx 爆发 (MITRE T1595) 当来自同一活动的大量 HTTP 4xx 错误时触发 —— 这是扫描器探测 隐藏路径(`/admin`, `/phpmyadmin`, `/.env` 等)的典型特征。 ``` 31101 Possible web scanning - burst of HTTP 4xx errors (custom) T1595 ``` ## 结果 — 已验证的检测 每条自定义规则均通过模拟匹配的活动并在 Wazuh dashboard (Threat Hunting) 中观察告警来确认已被触发。 | 规则 ID | 检测 | MITRE | 日志源 | 触发方式 | 状态 | |---------|----------------------------------------|--------|-------------------------|---------------------------------------------|--------| | 100100 | 多次登录失败 (暴力破解) | T1110 | Kali `/var/log/auth.log`| 重复的失败 `sudo` 密码尝试 | ✅ 已验证 | | 100101 | Web 扫描 (HTTP 4xx 爆发) | T1595 | Kali Apache `access.log`| 对大量不存在的路径执行 `curl` | ✅ 已验证 | **测试期间还观察到了内置的 Wazuh 检测**(表明 pipeline 端到端运行 正常):`5404` 三次失败的 sudo 尝试,`5503` PAM 登录失败,`5557` 密码检查 失败,`5902` 添加了新用户,`5903` 删除了用户/组,`31101` Web 服务器 4xx 错误, `510` 基于主机的异常 (rootcheck)。 ## 复现步骤 ### 1. 实验室准备 - 在 VirtualBox 中创建一个 **NAT Network**,以便所有虚拟机都能接入互联网 *并且* 可以相互访问。 - 为 Ubuntu 服务器分配至少 **4 GB 内存 / 2 个 CPU** 以及约 **40 GB 磁盘**。 ### 2. 安装 Wazuh 服务器 (Ubuntu) ``` curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh sudo bash ./wazuh-install.sh -a ``` 从 `wazuh-install-files.tar` 获取管理员密码,然后通过 `https://` 打开 dashboard。 ### 3. 注册 Kali 终端 ``` curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --no-default-keyring \ --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import sudo chmod 644 /usr/share/keyrings/wazuh.gpg echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" \ | sudo tee /etc/apt/sources.list.d/wazuh.list sudo apt-get update sudo WAZUH_MANAGER="" apt-get install -y wazuh-agent sudo systemctl enable --now wazuh-agent ``` ### 4. 添加日志源 (Kali) ``` # Kali 默认使用 journald;安装 rsyslog 以使文本日志存在 sudo apt-get install -y rsyslog apache2 sudo systemctl enable --now rsyslog apache2 ``` 将这些内容添加到 `/var/ossec/etc/ossec.conf` 中的 `` 内,然后重启 agent: ``` syslog/var/log/auth.log syslog/var/log/syslog apache/var/log/apache2/access.log ``` ### 5. 添加自定义规则 (Ubuntu) 将上述两条规则添加到 `/var/ossec/etc/rules/local_rules.xml` 中,然后: ``` sudo systemctl restart wazuh-manager ``` ### 6. 测试 ``` # brute force -> rule 100100 sudo -k; sudo ls # enter wrong password repeatedly # web scan -> rule 100101 for p in admin login phpmyadmin .env wp-login.php config backup .git secret api; do curl -s -o /dev/null http://localhost/$p; done ``` 在 dashboard 的 **Threat Hunting** 视图中,按 `rule.id:100100` 和 `rule.id:100101` 进行过滤。 ## 经验总结 / 故障排除 在构建此项目时遇到的实际问题及其解决方法 —— 这正是该 工作实际涉及的问题解决类型: - **VirtualBox 网络:** 普通 NAT 会隔离每个虚拟机,而 Host-Only 无法接入互联网。需要一个 **NAT Network** 才能同时获得互联网访问权限(用于安装)和虚拟机之间的流量(用于 agents)。 - **磁盘容量规划:** Wazuh dashboard 在磁盘已满时安装失败。调整了虚拟机的虚拟 磁盘大小(`growpart` + `resize2fs`)—— indexer 需要增长空间。 - **Indexer 在重启后无法启动:** 必须将 `vm.max_map_count` 设置为 ≥262144 并且*将其持久化* 在 `/etc/sysctl.conf` 中,否则 OpenSearch 在引导时会无法通过 bootstrap 检查。 - **失败的密码工具运行:** 留下了一个属于 root 的 `/etc/wazuh-indexer/backup` 目录,它 阻止了 indexer 启动(`AccessDeniedException`)。删除该目录修复了启动问题。 - **Kali 日志:** Kali 默认使用 systemd-journald,没有 `/var/log/auth.log`。安装 `rsyslog` 可重新创建 Wazuh 监控的文本日志。 - **自定义规则 ID 必须唯一:** 重用 `100001`(一个内置的示例规则 ID)会悄无声息地 掩盖自定义规则。移至 `1001xx` 范围即可解决此问题。 - **调优以适应实际触发的信号:** 失败的 `sudo` 产生规则 `5557` 的频率远高于 `5503`,因此在阅读实时告警后,将暴力破解规则重新关联到了 `5557`。 ## 仓库结构 ``` wazuh-soc-lab/ ├── README.md ├── rules/ │ └── local_rules.xml # the 2 custom detection rules └── screenshots/ ├── dashboard.png ├── rule-100100-bruteforce.png └── rule-100101-webscan.png ``` ## 后续工作 (v2) - 添加一个带有 **Sysmon** 的 **Windows 11 终端**,以获得更丰富的遥测数据。 - 再增加三条自定义规则:多次 Windows 登录失败 (T1110)、编码的 PowerShell (T1059.001) 以及向 Administrators 组添加新用户 (T1098)。 - 进行一次误报调优,并导出检测的 Sigma rule。 ## 作者 作为一个实践性的蓝队 / 检测工程作品集项目而构建。
标签:Wazuh, 安全实验环境, 安全运营中心, 密码管理, 红队行动, 网络映射