hanssoto-cyber/cowrie-dashboard
GitHub: hanssoto-cyber/cowrie-dashboard
基于 Cowrie SSH 蜜罐和 Django 构建的云端威胁检测与 SOC 可视化分析仪表板,提供实时攻击监控、地理定位与恶意软件取证能力。
Stars: 0 | Forks: 0
# 🛡️ Cowrie 威胁仪表板





## 📖 描述
这是一个围绕部署在云服务器上并暴露于互联网的 **SSH honeypot (Cowrie)** 构建的完整威胁检测与分析系统。该 honeypot 能够捕获 constantly 在网络中扫描的自动化攻击,同时一个 **Django dashboard** 会处理这些日志,并将其可视化为一个 SOC 控制台:包含实时统计数据、攻击者地理位置定位、最常用凭证,以及一个展示攻击者尝试执行的命令和 malware 的取证模块。
在暴露于互联网的 **2 周**时间内,该系统捕获了超过 **25,000 次攻击会话**和 **220 次 malware 下载**,其中包括 cryptojacking 活动、botnet 扩散以及 SSH backdoors。
📄 **[分析报告 →](docs/INFORME_ANALISIS.md)** · 🦠 **[malware 分析附录 →](docs/ANEXO_ANALISIS_MALWARE.md)**
## ✨ 功能特性
- 通过 Cowrie honeypot **24/7 全天候捕获**真实的 SSH 攻击。
- **自动化 pipeline**:通过 cron 每 5 分钟导入一次日志。
- 具备自动刷新功能(30秒)的**实时仪表板**。
- 在交互式世界地图上对攻击者 IP 进行**地理定位**。
- **取证分析**:执行的命令、下载的文件(IOCs)以及 SSH 客户端的 fingerprints。
- 结合 VirusTotal 进行 **malware 分类**以及 MITRE ATT&CK 关联分析。
## 📊 核心发现(2 周内)
- **25,010 次**攻击会话 · **23,659 条**被执行的命令 · **220 次**下载。
- **64%** 的攻击尝试针对 `root` 用户。
- 最常用的密码是 **malware 中硬编码的凭证**(`LeitboGi0ro`, `123@@@`, `smo@@kkklss`),而非人类字典词汇 → 属于 bot 流量。
- **分析了 5 个 malware 样本**:RedTail(ARM 加密挖矿程序)、xmrig 启动器、botnet 扩散模块、SSH backdoor(滥用 PAM)以及 discord-exploit(使用 Discord 作为 C2)。
- **核心发现**:出现频率最高的样本(被下载 124 次)仅被 75 个杀毒软件中的 **3 个**检测到 —— 这证明了基于行为检测的价值。
## 🏗️ 架构
```
Atacantes (internet)
│ puerto 22
▼
[ Servidor cloud — Ubuntu 24.04 ]
│ iptables redirige 22 → 2223
▼
[ Cowrie 3.0.1 ] honeypot SSH (servicio systemd, 24/7)
│ log JSON
▼
[ cron 5 min ] → import_cowrie → SQLite
│
▼
[ Dashboard Django ] estadísticas · mapa · forense
```
## 🖼️ 截图
### 主仪表板

### 统计信息

### 取证分析



### 攻击列表

## 🛠️ 技术栈
| 组件 | 技术 |
|------------|------------|
| Honeypot | Cowrie 3.0.1 (SSH/Telnet, 中等交互) |
| Backend | Python 3.12 · Django 6.0 · SQLite |
| 可视化 | Chart.js · Leaflet.js (地图) |
| 地理定位 | ip-api.com (带缓存) |
| 威胁情报 | VirusTotal · Joe Sandbox |
| 基础设施 | 云 VPS · Ubuntu 24.04 · systemd · cron |
| 安全防护 | SSH 运行在非标准端口 · 双重防火墙 (边界防火墙 + iptables) |
## 🚀 安装说明(仪表板)
```
# 克隆
git clone https://github.com/hanssoto-cyber/cowrie-dashboard.git
cd cowrie-dashboard
# 虚拟环境
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 依赖项
pip install -r requirements.txt
# 环境变量(在 cowrie_dashboard/ 内创建 .env)
cd cowrie_dashboard
cat > .env <<'EOF'
SECRET_KEY=tu-secret-key
DEBUG=True
ALLOWED_HOSTS=127.0.0.1,localhost
COWRIE_LOG_PATH=/ruta/a/cowrie/var/log/cowrie/cowrie.json
EOF
# 数据库
python manage.py migrate
# 导入 honeypot 日志
python manage.py import_cowrie
# 服务器
python manage.py runserver
```
如果不需要真实 honeypot,仅用于演示数据:
```
python manage.py seed_demo --count 200
```
## 🔌 访问仪表板指南(配合远程 honeypot)
当 honeypot 运行在远程服务器上时,dashboard 不会暴露在互联网中:而是通过 **SSH 隧道**进行访问。这需要同时保持两个进程处于活动状态 —— 虚拟机(VM)上运行的 Django 服务器和开启的 SSH 隧道。
### 第一步 —— 启动服务器(在虚拟机上)
连接到虚拟机并启动服务器:
```
ssh -i -p usuario@IP
cd ~/cowrie-dashboard
source venv/bin/activate
cd cowrie_dashboard
python manage.py runserver 127.0.0.1:8000
```
保持该终端开启,让服务器持续运行。
### 第二步 —— 开启 SSH 隧道
有 **两种方式**可以实现:
**方式 A —— 直接使用命令**(在你的电脑上打开另一个终端):
```
ssh -i -p -L 8000:127.0.0.1:8000 usuario@IP
```
参数 `-L 8000:127.0.0.1:8000` 会将本地的 8000 端口转发到虚拟机的 8000 端口。
建议添加 keepalive 设置,防止因长时间无操作而断开连接:
```
ssh -i -p -o ServerAliveInterval=60 -L 8000:127.0.0.1:8000 usuario@IP
```
**方式 B —— 在 `~/.ssh/config` 中使用别名**(更便捷):
创建/编辑 `~/.ssh/config` 并添加:
```
Host honeypot
HostName
User
Port
IdentityFile
ServerAliveInterval 60
ServerAliveCountMax 3
```
之后就可以使用简短的命令开启隧道:
```
ssh -L 8000:127.0.0.1:8000 honeypot
```
### 第三步 —— 在浏览器中打开
```
http://localhost:8000
```
### 故障排除
| 错误 | 原因 | 解决方案 |
|-------|-------|----------|
| `Permission denied (publickey)` / `bad permissions` | 密钥权限问题 | `chmod 600 <密钥>` (在 Git Bash 中执行) |
| `That port is already in use` | 服务器已经在运行 | 直接在浏览器中访问,或者执行 `pkill -f runserver` 后重试 |
| 页面无法加载 | 缺少隧道或服务器未启动 | 检查两个终端是否都在运行中 |
| `Connection timed out` | 服务器 IP 已更改 | 在云服务商的控制面板中确认 IP 地址 |
## ⚙️ 可用命令
| 命令 | 描述 |
|---------|-------------|
| `import_cowrie` | 将 Cowrie 的 JSON 日志导入数据库 |
| `import_cowrie --path <路径>` | 从指定路径导入 |
| `seed_demo --count N` | 生成 N 条测试攻击数据用于演示 |
## ⚠️ 免责声明
本项目仅用于**教育和展示个人作品集**的目的。该 honeypot 运行在隔离且一次性的环境中。捕获到的 malware 样本均处于隔离状态,未被执行。公布的 IOCs 仅供防御研究使用。
文档中不包含敏感的基础设施信息(如服务器 IP、密钥、管理端口等)。
## 👤 作者
**Hans Soto** — 网络安全工程 · Blue Team / SOC
[GitHub](https://github.com/hanssoto-cyber) · [LinkedIn](https://www.linkedin.com/in/hans-soto-gonzalez-a142b8170/) · [作品集](https://hsoto.pythonanywhere.com)
标签:Django, IP 地址批量处理, 威胁情报, 安全运营中心, 开发者工具, 网络安全, 网络映射, 蜜罐, 证书利用, 逆向工具, 隐私保护