dev-rehaann/Mini-SOC-Lab

GitHub: dev-rehaann/Mini-SOC-Lab

一个基于Wazuh SIEM的多虚拟机SOC实验室,用于模拟企业级威胁检测、自动化事件响应和机器学习风险评分的蓝队训练环境。

Stars: 0 | Forks: 0

# Mini-SOC-Lab 一个多虚拟机安全运营中心 (SOC) 实验室,旨在使用 Wazuh SIEM 在本地 VirtualBox 网络上模拟企业级威胁检测、日志收集、自动化事件响应和基于机器学习的风险评分。 ## 架构 ``` ATTACKER VM (Ubuntu 26.04 Desktop) 192.168.56.30 | | SSH Brute Force (Hydra) v VICTIM VM (Ubuntu Server 24.04 LTS) 192.168.56.20 Apache2 + OpenSSH + Wazuh Agent | | Log forwarding via Wazuh Agent v SOC SERVER VM (Ubuntu Server 24.04 LTS) 192.168.56.10 Wazuh Manager + Indexer + Dashboard + Filebeat | v https://192.168.56.10 (Wazuh Dashboard) ``` ### 虚拟机规格 | 虚拟机 | 操作系统 | 内存 | CPU | 硬盘 | IP | |---|---|---|---|---|---| | SOC Server | Ubuntu Server 24.04 LTS | 6 GB | 2 核 | 25 GB | 192.168.56.10 | | Victim | Ubuntu Server 24.04 LTS | 2 GB | 1 核 | 10 GB | 192.168.56.20 | | Attacker | Ubuntu 26.04 Desktop | 4 GB | 2 核 | 15 GB | 192.168.56.30 | ### 网络 - 所有虚拟机均使用双网卡:**NAT** (互联网) + **Host-only** (内部实验室) - Host-only 网络:`192.168.56.0/24` — 禁用 DHCP,仅使用静态 IP - VirtualBox Host Network Manager:`vboxnet0` ## 组件 ### Wazuh Stack (SOC Server) - **Wazuh Manager** — 接收并分析代理日志 - **Wazuh Indexer** — 基于 OpenSearch 的告警存储 - **Wazuh Dashboard** — 可视化与威胁狩猎 - **Filebeat** — 将 manager 中的 `alerts.json` 发送至 indexer ### Victim 虚拟机服务 - **OpenSSH Server** — 用于暴力破解模拟的攻击面 - **Apache2** — 用于未来 Web 攻击场景的 Web 服务 - **虚假用户** — `testuser`,`adminuser` 作为真实的攻击目标 - **Wazuh Agent** — 将日志转发至 SOC Server (`192.168.56.10`) ### Attacker 虚拟机工具 - **Hydra** — SSH 暴力破解 - **Nmap** — 网络侦察 ## 检测规则 位于 `/var/ossec/etc/rules/local_rules.xml` 的自定义规则: ``` 5760 192.168.56.0/24 Custom SOC Lab: SSH brute force detected from internal attacker network T1110 5760 5715 Custom SOC Lab: Successful SSH login after brute force - possible compromise! T1110 T1078 ``` **MITRE ATT&CK 映射:** - T1110 — 暴力破解 - T1078 — 有效账户 ## 自动化事件响应 在 `/var/ossec/etc/ossec.conf` 中使用 Wazuh 内置的 `firewall-drop` 主动响应进行配置: ``` firewall-drop firewall-drop yes firewall-drop local 100001 300 ``` 当规则 100001 触发时,攻击者 IP 将通过 Victim 虚拟机上的 `iptables DROP` 自动封锁 300 秒 — 无需人工干预。 **验证结果:** ``` DROP all -- 192.168.56.30 0.0.0.0/0 ``` ## 机器学习风险评分 位于 `detection-engine/`。这是一个在 906 条真实 Wazuh 告警上训练的 Random Forest 分类器,用于为每个事件分配 0–100 的风险评分。 ### 使用的特征 | 特征 | 重要性 | |---|---| | rule_level | 0.3126 | | is_brute_force | 0.1824 | | is_internal_attacker | 0.1823 | | is_rootcheck | 0.1514 | | is_auth_failure | 0.0784 | | fired_times | 0.0481 | ### 告警分布 (共 906 条) | 风险标签 | 数量 | |---|---| | LOW | 608 | | MEDIUM | 246 | | HIGH | 52 | SSH 暴力破解事件的评分稳定为 **100.0 / HIGH**。 ### 文件 ``` detection-engine/ ├── features.py — parses alerts.json, extracts numeric features ├── model.py — trains Random Forest, scores all alerts └── scorer.py — (planned) real-time scoring daemon ``` ## 攻击场景 ### 1. SSH 暴力破解 **工具:** Hydra v9.6 **命令:** ``` hydra -l testuser -P passwords.txt 192.168.56.20 ssh -t 4 -V ``` **结果:** - 密码已破解:`S3cur3T3st@2024` - 触发规则:`100001` (level 12), `100002` (level 15) - 机器学习风险评分:`100.0` — HIGH - 自动化响应:`iptables DROP 192.168.56.30` **检测链:** ``` Hydra → SSH auth failures on Victim → /var/log/auth.log → Wazuh Agent (rule 5760) → Custom rule 100001 (level 12) → firewall-drop active response → Attacker IP blocked automatically ``` ## 遇到的挑战与修复 在此构建过程中遇到的实际问题 — 记录以确保可复现性。 ### 1. 安装 Wazuh 期间磁盘已满 **错误:** 解压 `wazuh-dashboard` 时出现 `No space left on device` **原因:** VirtualBox 磁盘已调整为 80 GB,但 Ubuntu LVM 分区仍显示为 23 GB **修复:** ``` sudo growpart /dev/sda 3 sudo pvresize /dev/sda3 sudo lvextend -r -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv ``` 结果:根分区扩展至 77 GB ### 2. Wazuh Dashboard SSL 证书缺失 **错误:** `ENOENT: no such file or directory, open '/etc/wazuh-dashboard/certs/dashboard-key.pem'` **原因:** 损坏的安装导致证书目录为空 **修复:** ``` sudo mkdir -p /etc/wazuh-dashboard/certs sudo cp /home/zaig/wazuh-certificates/dashboard.pem /etc/wazuh-dashboard/certs/ sudo cp /home/zaig/wazuh-certificates/dashboard-key.pem /etc/wazuh-dashboard/certs/ sudo cp /home/zaig/wazuh-certificates/root-ca.pem /etc/wazuh-dashboard/certs/ sudo chown -R wazuh-dashboard:wazuh-dashboard /etc/wazuh-dashboard/certs ``` ### 3. Wazuh Indexer AccessDeniedException **错误:** `java.nio.file.AccessDeniedException: /etc/wazuh-indexer/backup` **原因:** 重新安装后 indexer 备份目录的所有权错误 **修复:** 更正了 `/etc/wazuh-indexer/backup` 的权限和所有权 ### 4. Filebeat 模板返回 404 **错误:** `could not unmarshal json template: invalid character ':'` **原因:** `/etc/filebeat/wazuh-template.json` 包含了 `404: Not Found` 而不是有效的 JSON (下载失败) **修复:** ``` sudo curl -L -f -o /etc/filebeat/wazuh-template.json \ https://raw.githubusercontent.com/wazuh/wazuh/v4.14.5/extensions/elasticsearch/7.x/wazuh-template.json sudo systemctl restart filebeat ``` 修复后:创建了包含 483 个文档的 `wazuh-alerts-4.x-2026.07.02` 索引 ### 5. Victim 虚拟机子网掩码错误 **错误:** 安装期间设置了 `192.168.56.20/21` 而不是 `/24` — ping SOC Server 失败 **修复:** 编辑 `/etc/netplan/00-installer-config.yaml` 设置为 `/24`,并手动添加缺失的 `enp0s8` 块 ### 6. 主动响应脚本未触发 **错误:** `wazuh-execd: Active response command not present: 'block_ip.sh'` **原因:** 自定义 `block_ip.sh` 使用了旧版位置参数格式 (`$1 $2 $3`) — Wazuh 4.x 期望通过 stdin 传入 JSON **修复:** 切换为已经兼容 Wazuh 4.x 的内置 `firewall-drop` 二进制程序 ### 7. ossec.conf XML 被编辑器损坏 **错误:** `Error reading XML file 'etc/ossec.conf': (line 0)` **原因:** Nano 将新的 XML 块粘贴到了 `` 闭合标签之外,破坏了整个文件 **修复:** 使用 Python 在第一个 `` 处进行程序化截断,追加干净的代码块,并重写文件 ## 仓库结构 ``` Mini-SOC-Lab/ ├── architecture/ │ └── (network diagram) ├── wazuh/ │ └── rules/ │ └── local_rules.xml ├── detection-engine/ │ ├── features.py │ └── model.py ├── response/ │ └── block_ip.sh ├── attacks/ │ └── ssh_bruteforce.md └── reports/ └── incident_report.md ``` ## 展示的技能 - SIEM 部署与配置 (Wazuh 4.14.x all-in-one) - Linux 系统管理与网络 (netplan, iptables, LVM) - 包含 MITRE ATT&CK 映射的自定义检测规则编写 - 通过 Wazuh 主动响应实现自动化事件响应 - 攻击模拟 (Hydra SSH 暴力破解) - 使用 Random Forest 进行基于机器学习的告警分类 (scikit-learn) - 日志 pipeline:Agent → Manager → Filebeat → Indexer → Dashboard - 包含隔离 Host-only 网络的 VirtualBox 实验室设计
## 作者 **Muhammad Rehan Khan** Built as a BS Computer Science, Salim Habib University. GitHub: [dev-rehaann](https://github.com/dev-rehaann)
标签:CTI, PB级数据处理, Wazuh, 安全运维, 实验室环境, 插件系统, 逆向工具, 速率限制