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, 安全运维, 实验室环境, 插件系统, 逆向工具, 速率限制