hanssoto-cyber/cowrie-dashboard

GitHub: hanssoto-cyber/cowrie-dashboard

基于 Cowrie SSH 蜜罐和 Django 构建的云端威胁检测与 SOC 可视化分析仪表板,提供实时攻击监控、地理定位与恶意软件取证能力。

Stars: 0 | Forks: 0

# 🛡️ Cowrie 威胁仪表板 ![Python](https://img.shields.io/badge/Python-3.12-blue) ![Django](https://img.shields.io/badge/Django-6.0-092E20) ![Cowrie](https://img.shields.io/badge/Cowrie-3.0.1-red) ![MITRE](https://img.shields.io/badge/MITRE-ATT%26CK-orange) ![License](https://img.shields.io/badge/uso-educativo-lightgrey) ## 📖 描述 这是一个围绕部署在云服务器上并暴露于互联网的 **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 ``` ## 🖼️ 截图 ### 主仪表板 ![主仪表板](https://raw.githubusercontent.com/hanssoto-cyber/cowrie-dashboard/main/docs/screenshots/dashboard.png) ### 统计信息 ![统计信息](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/c0222840bf041020.png) ### 取证分析 ![取证 - 命令](https://raw.githubusercontent.com/hanssoto-cyber/cowrie-dashboard/main/docs/screenshots/forensic.png) ![取证 - 下载](https://raw.githubusercontent.com/hanssoto-cyber/cowrie-dashboard/main/docs/screenshots/forensic2.png) ![取证 - fingerprints](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/aac501cfd4041120.png) ### 攻击列表 ![攻击](https://raw.githubusercontent.com/hanssoto-cyber/cowrie-dashboard/main/docs/screenshots/attacks.png) ## 🛠️ 技术栈 | 组件 | 技术 | |------------|------------| | 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 地址批量处理, 威胁情报, 安全运营中心, 开发者工具, 网络安全, 网络映射, 蜜罐, 证书利用, 逆向工具, 隐私保护