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, 上游代理, 免杀技术, 入侵检测系统, 威胁检测, 安全可视化, 安全数据湖, 安全运维, 安全运营中心, 安全防御评估, 态势感知, 插件系统, 攻击模拟, 数据统计, 暴力破解检测, 流量重放, 版权保护, 现代安全运营, 端口扫描, 网络安全, 网络映射, 自动化告警, 虚拟驱动器, 蜜罐, 证书利用, 越狱测试, 隐私保护, 驱动签名利用