Gerronc/SSH-Honeypot-SIEM-Integration-Lab
GitHub: Gerronc/SSH-Honeypot-SIEM-Integration-Lab
记录在 Azure 上端到端部署 Cowrie SSH 蜜罐并与 Wazuh SIEM 集成的完整实验,包含自定义检测规则编写、真实僵尸网络攻击捕获与威胁狩猎分析。
Stars: 0 | Forks: 0
# SSH 蜜罐 + SIEM 集成实验
### Cowrie 蜜罐 → Wazuh SIEM 部署在 Microsoft Azure
**作者:** Gerron Cudjoe
**日期:** 2026 年 5 月
**平台:** Microsoft Azure (Azure for Students)
## 概述
本实验记录了在 Microsoft Azure 上端到端部署与 Wazuh SIEM 集成的 Cowrie SSH 蜜罐的过程。蜜罐上线不到 24 小时,便捕获到了来自已知僵尸网络操作者部署 Redtail 恶意软件的真实自动化攻击——为分析和事件报告提供了真实的、不可预测的威胁数据。
**本实验演示内容:**
- 部署和配置生产级 SSH 蜜罐
- 使用 Wazuh 代理将蜜罐日志集成到 SIEM
- 编写带有 MITRE ATT&CK 映射的自定义 Wazuh 检测规则
- 对实时攻击者数据执行真实的威胁狩猎
- 编写正式的 SOC 风格的事件报告
## 架构
```
Internet
│
▼
[Azure NSG]
│ Port 22 → redirected to 2222 (Cowrie)
│ Port 2223 → real SSH admin access (your IP only)
│
▼
[Honeypot VM — Ubuntu 22.04]
│ Cowrie SSH Honeypot (port 2222)
│ Wazuh Agent v4.7.5
│ VNet: 10.2.0.0/16
│
│ (VNet Peering)
│
▼
[Wazuh Manager VM — Ubuntu 22.04]
│ Wazuh Manager + Dashboard v4.7.5
│ VNet: 10.0.0.0/16
└─ IP: 10.0.0.4 (private)
```
## 前置条件
- Microsoft Azure 帐户(Azure for Students 即可)
- 已部署的 Wazuh manager VM
- 基本的 Linux 命令行操作经验
- 用于访问 Azure VM 的 SSH 密钥对
## 第 1 部分 — 部署蜜罐 VM
### 1.1 创建 VM
在 Azure 门户中,使用以下规格创建新 VM:
| 设置 | 值 |
|---------|-------|
| 映像 | Ubuntu 22.04 LTS |
| 大小 | B1s (1 vCPU, 1GB RAM) |
| 区域 | 与 Wazuh manager 相同 |
| 身份验证 | SSH 密钥 |
| 资源组 | 与 Wazuh manager 相同 |
| 公共入站端口 | 无(手动配置 NSG) |
### 1.2 配置网络安全组
创建 VM 后,转到 **网络 → 添加入站端口规则** 并创建以下规则:
| 规则名称 | 端口 | 源 | 操作 | 优先级 |
|-----------|------|--------|--------|----------|
| Allow-SSH-MyIP | 22 | 仅您的 IP | 允许 | 100 |
| Allow-Honeypot-Public | 2222 | 任何 | 允许 | 200 |
| Allow-SSH-Admin | 2223 | 仅您的 IP | 允许 | 110 |
## 第 2 部分 — 安装 Cowrie
使用您的密钥通过 SSH 登录到蜜罐 VM:
```
ssh -i /path/to/your/key.pem azureuser@
```
### 2.1 更新并安装依赖项
```
sudo apt update && sudo apt upgrade -y
sudo apt install -y python3-virtualenv libssl-dev libffi-dev build-essential python3-dev git
```
### 2.2 创建专用的 Cowrie 用户
```
sudo adduser --disabled-password cowrie
```
### 2.3 克隆并安装 Cowrie
```
sudo su - cowrie
git clone https://github.com/cowrie/cowrie
cd cowrie
virtualenv --python=python3 cowrie-env
source cowrie-env/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
pip install -e .
```
### 2.4 配置 Cowrie
```
cp etc/cowrie.cfg.dist etc/cowrie.cfg
nano etc/cowrie.cfg
```
验证监听端口是否设置为 2222:
```
listen_endpoints = tcp:2222:interface=0.0.0.0
```
### 2.5 启动 Cowrie
```
cowrie start
```
验证其是否正在监听:
```
ss -tlnp | grep 2222
```
预期输出:
```
LISTEN 0 50 0.0.0.0:2222 0.0.0.0:* users:(("twistd",pid=XXXX,fd=11))
```
```
### 3.3 创建 Cowrie systemd 服务
```
sudo nano /etc/systemd/system/cowrie.service
```
```
[Unit]
Description=Cowrie SSH Honeypot
After=network.target
[Service]
Type=forking
User=cowrie
WorkingDirectory=/home/cowrie/cowrie
ExecStart=/home/cowrie/cowrie-env/bin/cowrie start
ExecStop=/home/cowrie/cowrie-env/bin/cowrie stop
Restart=always
[Install]
WantedBy=multi-user.target
```
```
sudo systemctl daemon-reload
sudo systemctl enable cowrie
```
## 第 4 部分 — 将蜜罐连接到 Wazuh
### 4.1 设置 VNet 对等互连
蜜罐 VM (10.2.0.0/16) 和 Wazuh manager (10.0.0.0/16) 位于不同的 VNet 上,默认情况下无法通信。
在 Azure 门户中:
1. 转到 **虚拟网络 → 蜜罐 VNet → 对等互连 → 添加**
2. 设置对等互连链接名称:`Honeypot-to-Wazuh`
3. 选择 Wazuh manager VNet
4. 设置反向链接名称:`Wazuh-to-Honeypot`
5. 保存
测试连通性:
```
nc -zv 10.0.0.4 1514
```
预期:`Connection to 10.0.0.4 1514 port [tcp/*] succeeded!`
### 4.2 安装 Wazuh Agent
```
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo gpg --no-default-keyring --keyring gnupg-ring:/usr/share/keyrings/wazuh.gpg --import && sudo chmod 644 /usr/share/keyrings/wazuh.gpg
echo "deb [signed-by=/usr/share/keyrings/wazuh.gpg] https://packages.wazuh.com/4.x/apt/ stable main" | sudo tee /etc/apt/sources.list.d/wazuh.list
sudo apt update
sudo WAZUH_MANAGER='10.0.0.4' apt install wazuh-agent=4.7.5-1 -y
```
### 4.3 配置 Agent
```
sudo nano /var/ossec/etc/ossec.conf
```
验证 manager IP 是否已正确设置(而不是占位符 `MANAGER_IP`):
```
10.0.0.4
```
在闭合的 `` 标签之前添加 Cowrie 日志监控:
```
json
/home/cowrie/cowrie/var/log/cowrie/cowrie.json
```
启动 Agent:
```
sudo systemctl daemon-reload
sudo systemctl enable wazuh-agent
sudo systemctl start wazuh-agent
```
json
cowrie.session.connect
Cowrie: New SSH connection attempt from $(src_ip)
T1110
json
cowrie.login.failed
Cowrie: Failed SSH login attempt from $(src_ip)
T1110.001
json
cowrie.login.success
Cowrie: Successful SSH login to honeypot from $(src_ip)
T1078
json
cowrie.session.file_upload
Cowrie: File uploaded to honeypot from $(src_ip)
T1105
json
cowrie.command.input
Cowrie: Command executed in honeypot from $(src_ip)
T1059
100201
src_ip
Cowrie: Brute force attack detected from $(src_ip)
T1110.001
100204
wget|curl
Cowrie: Malware download attempt from $(src_ip)
T1105
100204
authorized_keys|crontab|systemctl|rc\.local
Cowrie: Persistence mechanism attempted from $(src_ip)
T1098
100204
xmrig|minerd|cryptonight|stratum|monero
Cowrie: Cryptominer deployment attempt from $(src_ip)
T1496
100203
\.sh$|\.py$|\.elf$|\.arm|\.x86|\.mips
Cowrie: Malicious file upload detected from $(src_ip)
T1105
```
重启 manager:
```
sudo systemctl restart wazuh-manager
```
### 测试规则
在正式上线之前,使用 `wazuh-logtest` 验证规则是否正确触发:
```
sudo /var/ossec/bin/wazuh-logtest
```
粘贴示例 Cowrie JSON 事件:
```
{"eventid":"cowrie.login.success","username":"root","password":"test123","src_ip":"1.2.3.4","session":"abc123","protocol":"ssh","message":"login attempt [root/test123] succeeded","sensor":"Honeypot","timestamp":"2026-05-12T21:00:00.000000Z"}
```
预期:规则 100202 在级别 14 触发,并带有 MITRE T1078 映射.
## 第 6 部分 — 结果:真实攻击数据
将蜜罐开放到互联网的几个小时内,就捕获到了真实的攻击。最显著的攻击来自 **130.12.180.51**(德国 Omegatech LTD)。
### 攻击摘要
| 指标 | 值 |
|--------|-------|
| 唯一外部 IP 总数 | 20 |
| 外部连接事件总数 | 256+ |
| 最活跃的攻击者 | 130.12.180.51 (56 个事件) |
| 来自主要 IP 的攻击会话数 | 4 个完整会话 |
| 上传的文件数 | 每个会话 6 个(共 24 个) |
| 恶意软件家族 | Redtail 僵尸网络 |
### 攻击链(按会话)
```
1. TCP connection established
2. Root login successful (automated credential)
3. clean.sh uploaded and executed → deleted (anti-forensics)
4. setup.sh uploaded and executed → deleted (malware installer)
5. SSH public key injected into authorized_keys
6. authorized_keys made immutable with chattr +ai (persistence)
7. Redtail binaries uploaded (arm7, arm8, i686, x86_64)
8. C2 beacon transmitted: auth_ok
```
### 捕获的恶意文件
| 文件名 | SHA256 | 目标 |
|----------|--------|--------|
| clean.sh | d46555af1173d22f07c37ef9c1e0e74fd68db022f2b6fb3ab5388d2c5bc6a98e | 所有 |
| setup.sh | 783adb7ad6b16fe9818f3e6d48b937c3ca1994ef24e50865282eeedeab7e0d59 | 所有 |
| redtail.arm7 | 3625d068896953595e75df328676a08bc071977ac1ff95d44b745bbcb7018c6f | ARM 32 位 |
| redtail.arm8 | dbb7ebb960dc0d5a480f97ddde3a227a2d83fcaca7d37ae672e6a0a6785631e9 | ARM 64 位 |
| redtail.i686 | 048e374baac36d8cf68dd32e48313ef8eb517d647548b1bf5f26d2d0e2e3cdc7 | x86 32 位 |
| redtail.x86_64 | 59c29436755b0778e968d49feeea20ed65f5fa5e35f9f7965b8ed93420db91e5 | x86 64 位 |
" /home/cowrie/cowrie/var/log/cowrie/cowrie.json | python3 -c "
import sys, json
[print(json.loads(l).get('eventid',''), json.loads(l).get('input',''), json.loads(l).get('filename','')) for l in sys.stdin]
"
```
### 获取 IP 情报
```
curl https://ipinfo.io/
```
### 在 Wazuh 告警中搜索特定 IP(在仪表板中使用 DQL)
```
data.src_ip:
```
### 检查按 IP 分组的 Wazuh 告警数量
```
sudo grep "cowrie" /var/ossec/logs/alerts/alerts.json | python3 -c "
import sys, json
[print(json.loads(l).get('data',{}).get('src_ip','')) for l in sys.stdin if 'cowrie' in l]
" | sort | uniq -c | sort -rn | head -20
```
## 经验总结
**1. 自定义工具必须配备自定义规则。**
Wazuh 附带了常用软件的规则,但没有内置的 Cowrie 支持。如果没有自定义规则,日志虽然到达,但不会生成告警,仪表板上也不会显示任何内容。编写检测规则是一项核心的 SOC 技能。
**2. SIEM 过滤器 UI 有时不可靠。**
Wazuh 仪表板过滤器构建器将 `data.src_ip` 错误地映射为 `data.srcip`,导致返回空结果。DQL 查询绕过了这一点,并直接匹配实际的字段名称。当过滤器返回意外的空结果时,请务必验证字段名称。
**3. 版本匹配至关重要。**
安装比 manager 更新版本的 Wazuh agent 会导致硬性拒绝。manager 完全拒绝注册该 agent。请务必固定 agent 版本以与 manager 匹配。
**4. 攻击者的速度超出您的想象。**
在端口 2222 开放后的几个小时内,自动扫描器就发现了蜜罐。主要攻击者在每个会话中不到一秒钟的时间内执行了完整的多文件部署。现代攻击已完全实现大规模自动化。
**5. 蜜罐是牺牲机器。**
切勿在上面放置任何敏感信息。切勿重复使用生产系统中的 SSH 密钥。在设计上就应将其视为已被永久攻破。
## MITRE ATT&CK 覆盖范围
| 技术 | ID | 观察结果 |
|-----------|----|---------|
| Brute Force | T1110 | 自动化凭据尝试 |
| Valid Accounts | T1078 | Root 登录成功 |
| Command & Scripting Interpreter | T1059 | Shell 脚本执行 |
| Ingress Tool Transfer | T1105 | 通过 SFTP 传输 6 个恶意文件 |
| Account Manipulation | T1098 | SSH 密钥注入 |
| File Permission Modification | T1222 | 对 authorized_keys 执行 chattr +ai |
| Resource Hijacking | T1496 | Redtail 挖矿程序部署 |
| Indicator Removal | T1070 | 脚本在执行后被删除 |
## 参考文献
- [Cowrie 文档](https://cowrie.readthedocs.io)
- [Wazuh 文档](https://documentation.wazuh.com)
- [Redtail 恶意软件分析 — Akamai (2024)](https://www.akamai.com/blog/security-research/2024-redtail-cryptominer-pan-os-cve-exploit)
- [Redtail 蜜罐捕获分析 — SANS ISC (2025)](https://isc.sans.edu/diary/31568)
*本实验由 Gerron Cudjoe 作为独立网络安全作品集项目的一部分进行构建和记录。所有攻击数据均为真实数据,并在实时蜜罐上捕获。*
标签:Azure, Cloudflare, DAST, IP 地址批量处理, MITRE ATT&CK, NSG, PFX证书, Redtail恶意软件, SSH蜜罐, VNet Peering, Wazuh, 僵尸网络, 威胁情报, 安全信息与事件管理, 安全日志, 安全运营中心, 密码管理, 开发者工具, 微软云, 恶意软件分析, 搜索引擎爬取, 攻击检测, 端口重定向, 红队行动, 网络信息收集, 网络安全, 网络安全组, 网络映射, 网络架构, 自动化攻击, 虚拟网络, 蜜罐, 证书利用, 进程注入, 逆向工具, 隐私保护