AndreiR19/home-soc-lab

GitHub: AndreiR19/home-soc-lab

基于 VirtualBox 和 Wazuh 搭建的隔离家庭 SOC 实验室,用于练习蓝队威胁检测工作流并记录真实的基础设施调试经验。

Stars: 0 | Forks: 0

# 家庭 SOC 实验室 — Kali + Wazuh SIEM + Ubuntu 受害机 这是一个自建的安全运营中心 (SOC) 实验室,旨在练习蓝队的检测工作流:通过 Kali Linux 对受监控的 Ubuntu Server 目标发起模拟攻击,并利用 Wazuh(开源 SIEM/XDR)对这些活动进行收集、关联和告警。 本项目作为个人从软件开发转向蓝队 / SOC Analyst 岗位的过渡路径的一部分而构建,旨在展示在 SIEM 部署、基于主机的检测和网络故障排除方面的实际动手经验——不仅是跟随教程操作,还包括在此过程中调试真实的基础设施问题。 ## 架构 三台虚拟机隔离在一个专用的内部网络上,各自扮演着不同的 SOC 角色: | 角色 | 机器 | 操作系统 | 功能 | |---|---|---|---| | **红队 (攻击者)** | Kali Linux | Kali rolling | 生成模拟攻击(端口扫描、暴力破解) | | **目标 (受害机)** | Ubuntu Server | 22.04.5 LTS | 受监控的端点,运行 Wazuh Agent | | **SIEM (蓝队控制台)** | Ubuntu Server | 22.04.5 LTS | 运行 Wazuh Manager + Indexer + Dashboard | ### 网络拓扑 每台 VM 都有**两个网络适配器**: - **Adapter 1 — NAT**: 仅用于互联网访问(软件包更新、下载) - **Adapter 2 — Host-Only (`vboxnet0`, `192.168.56.0/24`)**: 用于所有 VM 间通信和监控流量的隔离实验网络 | 机器 | Host-Only IP | |---|---| | Kali | 192.168.56.10 | | Ubuntu 受害机 | 192.168.56.104 | | Wazuh Server | 192.168.56.105 | 这反映了一种常见的现实模式:将管理/面向互联网的接口与隔离的监控网段分离开来。 ## 技术栈 - **Hypervisor**: Oracle VirtualBox - **SIEM**: Wazuh 4.14.7(Indexer + Manager + Dashboard,单节点“all-in-one”安装) - **攻击者工具包**: Kali Linux (`nmap`, `hydra`) - **目标加固基线**: `ufw`(防火墙 + 日志记录) ## 设置摘要 1. 在 VirtualBox 中配置了 3 台 VM,每台都具有双 NIC(NAT + Host-Only)。 2. 在受害机和 Wazuh-server VM 上安装了 Ubuntu Server 22.04.5 LTS。 3. 为三台机器在 Host-Only 网络上分配了静态 IP。 4. 使用官方的一体化安装程序在 SIEM VM 上安装了 Wazuh(Indexer、Manager、Dashboard、Filebeat): curl -sO https://packages.wazuh.com/4.14/wazuh-install.sh sudo bash ./wazuh-install.sh -a 5. 在受害机 VM 上安装了 Wazuh Agent,并将其指向 Manager 的 Host-Only IP: curl -o wazuh-agent.deb https://packages.wazuh.com/4.x/apt/pool/main/w/wazuh-agent/wazuh-agent_4.14.7-1_amd64.deb sudo WAZUH_MANAGER='192.168.56.105' dpkg -i ./wazuh-agent.deb sudo systemctl enable --now wazuh-agent 6. 在 Wazuh Dashboard(**Agents** 视图)中验证了 agent 的注册。 7. 从 Kali 对受害机发起了受控攻击并验证了检测。 ## 调试之旅 这是最重要的部分——真实的基础设施工作主要是故障排除。以下是在设置过程中遇到的实际问题、诊断方法以及修复方式。 ### 1. Wazuh dashboard 安装失败 — 磁盘空间 **症状**: 安装脚本成功完成了 Indexer 和 Manager,但在 Dashboard 步骤失败,并自动回滚了整个安装。 **诊断**: 检查 `/var/log/wazuh-install.log`,发现: ``` E: You don't have enough free space in /var/cache/apt/archives/. E: Write error - write (28: No space left on device) ``` `df -h` 确认 LVM root 卷只有 12GB —— Ubuntu 引导式安装程序在分配逻辑卷时相对于虚拟磁盘分配不足。 **修复**: 从宿主机调整了 VDI 大小(`VBoxManage modifyhd ... --resize 51200`),然后在客户机内部实时扩展了 LVM 栈: ``` sudo growpart /dev/sda 3 sudo pvresize /dev/sda3 sudo lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv ``` ### 2. 第二次安装尝试失败 — 残留状态损坏 **症状**: 磁盘大小调整后,第二次安装尝试走得更远(Indexer 成功了),但 Manager 未能启动: ``` ./wazuh-install.sh: line 3350: /var/ossec/bin/wazuh-keystore: No such file or directory WARNING: The Wazuh manager package could not be removed. ``` **诊断**: 第一次(磁盘空间)失败的自动回滚导致 `/var/ossec` 和相关目录处于不一致的状态,从而破坏了第二次安装。 **修复**: 在重新安装之前,手动清除了所有 Wazuh 组件和目录: ``` sudo systemctl stop wazuh-manager wazuh-indexer filebeat wazuh-dashboard sudo apt-get remove --purge -y wazuh-manager wazuh-indexer wazuh-dashboard filebeat sudo rm -rf /var/ossec /etc/filebeat /usr/share/filebeat \ /var/lib/wazuh-indexer /etc/wazuh-indexer /usr/share/wazuh-indexer \ /var/lib/wazuh-dashboard /etc/wazuh-dashboard /usr/share/wazuh-dashboard sudo systemctl daemon-reload ``` 在重新安装之前,通过 `dpkg -l | grep wazuh` 验证了状态是干净的。第三次尝试端到端成功。 ### 3. 安装后立即从浏览器无法访问 Dashboard **症状**: `https://` 在安装后立即返回连接错误。 **诊断**: `sudo ss -tlnp | grep 443` 显示没有程序在监听 —— 但这项检查运行得太早了。`sudo journalctl -u wazuh-dashboard` 显示服务仍在初始化(OpenSearch Dashboards 启动缓慢,在 `systemctl start` 后大约需要 30–60 秒),并最终记录了: ``` "message":"Server running at https://0.0.0.0:443" ``` **修复**: 不需要修复 —— 只需等待服务完成初始化,然后通过浏览器的强制刷新重试即可。 ### 4. Agent 已安装并运行,但从未出现在 Dashboard 中 **症状**: `systemctl status wazuh-agent` 显示 `active (running)` 并且所有子模块均已启动,但 Dashboard 一直显示“未注册任何 agent”。 **诊断**: 在受害机上执行 `sudo tail /var/ossec/logs/ossec.log` 显示 agent 反复注册失败: ``` wazuh-agentd: INFO: Requesting a key from server: 192.168.56.104 wazuh-agentd: ERROR: (1208): Unable to connect to enrollment service at '192.168.56.104:1515' ``` Agent 被配置为连接到**自身的 IP** (192.168.56.104) 而不是 Manager 的 IP (192.168.56.105) —— 原始 `WAZUH_MANAGER` 安装变量中的一位数字拼写错误。 **修复**: 直接在 `/var/ossec/etc/ossec.conf` 中更正了地址: ```
192.168.56.105
``` 然后执行 `sudo systemctl restart wazuh-agent`。Agent 成功注册,并在 Dashboard 中显示为 **Active**。 ### 5. Kali 完全无法连接到受害机 (`Destination Host Unreachable`) **症状**: 从 Kali 对受害机执行 `nmap` 和 `ping` 均失败,报错 `Destination Host Unreachable`,且源地址是 Kali 自身的 Host-Only IP —— 这意味着数据包根本没有离开 Kali。 **诊断**: 在 Kali 上执行 `ip route` 显示**在两个具有相同源 IP 的不同接口上存在通往同一子网的两条路由**: ``` 192.168.56.0/24 dev eth0 ... src 192.168.56.10 metric 100 192.168.56.0/24 dev eth1 ... src 192.168.56.10 metric 101 ``` `eth0`(NAT 适配器)由于某种原因也获取了 Host-Only IP,并且——由于其路由 metric 较低——内核优先选择通过 NAT 接口路由 Host-Only 流量,而该接口没有通往该网络的路径。 **修复**: 从 `eth0` 中移除了重复的 IP,并通过 `nmcli connection show` 确认静态 IP 仅正确限定在 Host-Only 连接配置文件中,而没有重复到 NAT 连接上。在更正了 NetworkManager 配置文件后(而不仅仅是临时的 `ip addr del`,因为这在协调时会恢复),路由问题得到解决,并且与受害机的连接已恢复。 ### 6. 从 Kali 进行的端口扫描未在 Dashboard 中生成告警 **症状**: 修复连接后,对受害机执行 `nmap -sV -sC` 成功(发现 `22/tcp open ssh`),但 Wazuh Dashboard 中没有任何显示。 **根本原因(这是设计使然,并非 Bug)**: Wazuh 是一个 **HIDS (Host-based IDS)**,而不是 NIDS。默认情况下,它不检查流经主机的网络流量——它监控的是受监控系统*内部*发生的事情(日志、文件完整性、身份验证事件)。外部端口扫描不会在受害机内部留下任何痕迹,除非受害机自身的防火墙记录了传入的连接。 **正在进行的修复**: 在受害机上启用带有日志记录功能的 `ufw`,以便将扫描流量记录到 `/var/log/ufw.log` 中,随后 Wazuh 的 `logcollector` 便可将其收集: ``` sudo ufw default deny incoming sudo ufw allow ssh sudo ufw logging on sudo ufw enable ``` 在此将其记录为一个已知的局限性/下一步计划,而不是一个已解决的问题——请参阅下文的 **未来改进**。 ## 已执行的攻击模拟 | 攻击 | 工具 | 开箱即用的 Wazuh 能否检测到? | |---|---|---| | SSH 暴力破解 | `hydra` | 是 — 通过 `/var/log/auth.log` 监控(规则 ~5710–5712) | | 端口扫描 (`nmap -sV -sC`) | `nmap` | 默认不能(HIDS 局限性 — 见上文) | ## 截图 ### 架构 ![家庭 SOC 实验室网络拓扑图 — Kali、ubuntu-victim 和 ubuntu-wazuh 位于隔离的 Host-Only 网络上](https://static.pigsec.cn/wp-content/uploads/repos/cas/eb/eb4b1ec535382ed2d085499d38f59973a62cb9951dd83765da333e46956c9d87.png) ### Dashboard 概览 ![Wazuh Dashboard 概览,显示 agent 摘要和告警严重程度分布](https://static.pigsec.cn/wp-content/uploads/repos/cas/1b/1bf333dcd1c473ed466378f576c27a8398eacf8c0b924b760620efa4b4ee9f0f.png) ### Agent 状态 ![ubuntu-victim agent 显示为 Active,已注册并向 Wazuh Manager 报告](https://static.pigsec.cn/wp-content/uploads/repos/cas/6d/6d3f46bf25608d520eb2b5df293602434722177a1ad2f133479539ae41fce223.png) ### 检测到 SSH 暴力破解 ![Threat Hunting dashboard 显示来自 hydra 暴力破解攻击的 686 次失败的认证尝试,已自动映射到 MITRE ATT&CK 战术(Credential Access, Brute Force)](https://static.pigsec.cn/wp-content/uploads/repos/cas/a4/a4d96a8969e429007057cc40879733bba41a6426b5ab04b45029ece2381db931.png) ## 主要收获 - 像默认 Wazuh 这样的基于 HIDS 的 SIEM 关注的是**主机活动**,而不是原始网络流量——理解这一区别对于正确界定检测覆盖范围至关重要。 - 大部分真实的设置时间都花在了调试基础设施上(磁盘大小调整、LVM、路由、NetworkManager 配置文件、损坏的软件包状态),而不是 SIEM 本身——这是对 SOC/系统管理员工作的真实预览。 - Agent 和 Manager 之间的注册问题几乎总是与 IP/连接有关,最好通过在 Agent 端查看 `/var/ossec/logs/ossec.log` 来进行诊断。 ## 未来改进 - [ ] 通过 `ossec.conf` 中的自定义 `` 块将 `ufw` 日志转发到 Wazuh,以获取针对端口扫描和其他网络级侦察的告警。 - [ ] 添加 Suricata 作为与 Wazuh 集成的基于网络的 IDS,以实现真正的 NIDS 覆盖。 - [ ] 为实验室特定场景编写自定义的 Wazuh 检测规则(XML decoders/rules)。 - [ ] 添加第二个受害机主机(例如 Windows 目标)以实现多操作系统日志关联。 - [ ] 使用 Vagrant/Ansible 自动化整个环境,以确保可重复性。 ## 免责声明 该实验室完全运行在隔离的 Host-Only 虚拟网络上,没有暴露于生产系统或公共互联网。所有攻击均针对自有的、专门构建的实验室 VM 进行模拟。
标签:VirtualBox, Wazuh, 安全实验环境, 安全运营中心(SOC), 插件系统