ihorpjp/soc-attack-detection-lab
GitHub: ihorpjp/soc-attack-detection-lab
基于 Docker 的迷你 SOC 实验室,集成 Wazuh、Suricata 和 Elastic Stack,用于模拟攻击并学习安全检测与响应流程。
Stars: 0 | Forks: 0
# 🛡️ SOC 攻击检测实验室
一个基于 Docker Compose 构建的生产级迷你安全运营中心 (SOC) 环境。使用 Wazuh SIEM、Suricata IDS 和 Elastic Stack 模拟真实网络攻击并进行检测 —— 配备完整的 Kibana 仪表板。
## 架构
```
┌─────────────────────────────────────────────────────────────────┐
│ Docker Network: 172.20.0.0/24 │
│ │
│ ┌─────────────────┐ ┌──────────────────────────────┐ │
│ │ ATTACKER │ │ MONITORING STACK │ │
│ │ 172.20.0.99 │ │ │ │
│ │ Kali Linux │─attack──▶│ Wazuh SIEM 172.20.0.12 │ │
│ │ · nmap │ │ Suricata IDS (host net) │ │
│ │ · hydra │ │ Elasticsearch 172.20.0.10 │ │
│ │ · hping3 │ │ Kibana 172.20.0.11 │ │
│ └─────────────────┘ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
**检测层:**
| 层级 | 工具 | 检测内容 |
|---|---|---|
| 主机型 IDS | Wazuh | 登录失败、Sudo 滥用、文件完整性 |
| 网络 IDS | Suricata | 端口扫描、SYN 洪水、已知漏洞利用 |
| 关联分析 | Wazuh Rules | 暴力破解阈值、攻击序列 |
| 自动响应 | Wazuh Active Response | 通过 iptables 自动封禁攻击 IP |
| 可视化 | Kibana | 攻击仪表板、告警时间线 |
## 系统要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| 内存 (RAM) | 4 GB | 8 GB |
| 磁盘 | 20 GB | 40 GB |
| CPU | 2 核心 | 4 核心 |
| 操作系统 | Linux / macOS | Ubuntu 22.04 |
| Docker | 20.x+ | 最新版 |
## 快速开始
```
# Clone 仓库
git clone https://github.com/ihorbezruchko/soc-attack-detection-lab.git
cd soc-attack-detection-lab
# 运行 setup(安装工具,生成 TLS 证书,启动 stack)
chmod +x setup.sh
sudo ./setup.sh
# 等待约 3 分钟以初始化服务
# 打开 Kibana
open http://localhost:5601
# 用户名:elastic
# 密码:SecretPassword1!
```
## 运行攻击模拟
### SSH 暴力破解
```
# 从主机
chmod +x attacks/ssh_bruteforce.sh
./attacks/ssh_bruteforce.sh 172.20.0.13 22
# 或从 attacker 容器内部
docker exec -it attacker bash
bash /attacks/ssh_bruteforce.sh 172.20.0.13 22
```
**发生过程:**
1. Nmap 扫描 SSH 版本
2. Hydra 发起 380 次登录尝试 (20 个用户 × 19 个密码)
3. Wazuh 检测到大量 `Failed password` 事件
4. 规则 5712 在第 8 次尝试时触发 — **生成 SIEM 告警**
5. Active Response 封禁攻击者 IP 10 分钟
6. Kibana 显示包含攻击者 IP、目标用户和时间戳的告警
### 端口扫描
```
chmod +x attacks/port_scan.sh
./attacks/port_scan.sh 172.20.0.13
```
**发生过程:**
1. SYN 扫描 → Suricata SID 9000010
2. NULL 扫描 → Suricata SID 9000011
3. FIN 扫描 → Suricata SID 9000012
4. XMAS 扫描 → Suricata SID 9000013
5. UDP 扫描 → Suricata SID 9000014
6. OS 探测 → Suricata SID 9000015
7. 所有事件通过 Wazuh agent 转发至 Kibana
## Kibana 查询
运行攻击后,在 Kibana 的 Discover 视图中搜索:
**所有暴力破解告警:**
```
rule.id: 5712 OR rule.id: 5716
```
**所有 Suricata 端口扫描告警:**
```
event.module: suricata AND alert.signature_id: [9000010 TO 9000015]
```
**来自攻击者 IP 的告警:**
```
data.srcip: 172.20.0.99
```
**仅限严重告警:**
```
rule.level: >= 12
```
**最近一小时内的所有告警:**
```
@timestamp: [now-1h TO now]
```
## 检测原理
### 暴力破解检测 (Wazuh)
Wazuh 使用 **频率关联引擎**:
```
Event: "Failed password for root from 185.x.x.x"
↓
Rule 5710 fires (level 5) — single failure
↓
Same IP fires rule 5710 again within 120 seconds
↓
Counter increments: 2, 3, 4, 5, 6, 7, 8...
↓
At count ≥ 8 → Rule 5712 fires (level 10)
"sshd: SSHD brute force trying to get access to the system"
↓
Active Response: iptables -I INPUT -s -j DROP
```
### 端口扫描检测 (Suricata)
Suricata 对网络数据包使用 **阈值规则**:
```
Packet: TCP SYN → port 445 (from 172.20.0.99)
Packet: TCP SYN → port 22 (from 172.20.0.99)
Packet: TCP SYN → port 80 (from 172.20.0.99)
... 20 packets in 10 seconds ...
↓
Threshold exceeded → Rule SID 9000010 fires
"SOC-LAB Nmap SYN Port Scan Detected"
↓
EVE JSON written to /var/log/suricata/eve.json
↓
Wazuh agent reads file → forwards to Wazuh Manager
↓
Wazuh indexes to Elasticsearch → visible in Kibana
```
## 项目结构
```
soc-attack-detection-lab/
│
├── docker-compose.yml # Full SOC stack definition
├── setup.sh # Automated setup script
│
├── wazuh/
│ └── config/
│ └── ossec.conf # Wazuh detection rules & config
│
├── suricata/
│ └── rules/
│ └── local.rules # Custom Suricata IDS rules
│
├── attacks/
│ ├── ssh_bruteforce.sh # SSH brute force simulation
│ └── port_scan.sh # Multi-technique port scan simulation
│
├── docs/
│ ├── architecture.md # Detailed architecture explanation
│ └── attack_scenarios.md # Attack analysis & MITRE mapping
│
├── screenshots/ # Add your alert screenshots here
└── README.md
```
## MITRE ATT&CK 覆盖范围
| 技术 | ID | 攻击脚本 | 检测方式 |
|---|---|---|---|
| 暴力破解:密码喷洒 | T1110.003 | ssh_bruteforce.sh | Wazuh 5712 |
| 有效账户 | T1078 | ssh_bruteforce.sh | Wazuh 5715 |
| 网络服务发现 | T1046 | port_scan.sh | Suricata 9000010+ |
| 操作系统指纹识别 | T1592 | port_scan.sh | Suricata 9000015 |
| Sudo 滥用 | T1548.003 | 手动 | Wazuh 5401 |
## 常用命令
```
# 查看实时 Wazuh 警报
docker exec wazuh-manager tail -f /var/ossec/logs/alerts/alerts.json | python3 -m json.tool
# 查看实时 Suricata 警报
docker exec suricata tail -f /var/log/suricata/fast.log
# 检查所有容器状态
docker-compose ps
# 重启单个服务
docker-compose restart wazuh-manager
# 停止整个 lab
docker-compose down
# 完全重置(删除所有数据)
docker-compose down -v
```
## 停止实验室
```
# 停止 containers(保留数据)
docker-compose stop
# 移除 containers 和 networks
docker-compose down
# 包括 volumes 的完全清理
docker-compose down -v --remove-orphans
```
## 技术栈
| 组件 | 版本 | 角色 |
|---|---|---|
| Wazuh | 4.7.0 | SIEM / HIDS |
| Suricata | Latest | Network IDS |
| Elasticsearch | 7.17.13 | Log storage |
| Kibana | 7.17.13 | Visualization |
| Docker Compose | 3.8 | Orchestration |
| Kali Linux | Rolling | Attack simulation |
## 作者
**Ihor Bezruchko**
IT Support Specialist | Junior SOC Analyst
Luxembourg
[GitHub](https://github.com/ihorbezruchko) · [LinkedIn](https://linkedin.com/in/ihorbezruchko)
标签:AMSI绕过, Cutter, DevSecOps, Docker, Docker Compose, Elastic Stack, HTTP/HTTPS抓包, Hydra, Metaprompt, Nmap, PB级数据处理, SOC实验室, SSH安全, Suricata, Wazuh, 上游代理, 免杀技术, 入侵检测系统, 威胁检测, 安全可视化, 安全数据湖, 安全运维, 安全运营中心, 安全防御评估, 态势感知, 插件系统, 攻击模拟, 数据统计, 暴力破解检测, 流量重放, 版权保护, 现代安全运营, 端口扫描, 网络安全, 网络映射, 自动化告警, 虚拟驱动器, 蜜罐, 证书利用, 越狱测试, 隐私保护, 驱动签名利用