ShiroBlank/honeypot-dashboard

GitHub: ShiroBlank/honeypot-dashboard

一款自托管的 Cowrie SSH 蜜罐日志分析仪表板,提供实时攻击可视化、会话管理、恶意软件样本分析和自动化威胁情报上传功能。

Stars: 0 | Forks: 0

# 🍯 Honeypot 仪表板 一个用于 [Cowrie](https://github.com/cowrie/cowrie) SSH 蜜罐的自托管分析与管理仪表板。实时获取 Cowrie 的 JSON 日志文件,将所有内容存储在 SQLite 中,并通过带有实时攻击地图、恶意软件样本管理和自动化威胁情报上传功能的深色主题单页应用进行展示。 ## 截图 ## 功能 ### 仪表板与分析 - **概览** — 总连接数、独立 IP 数、登录尝试次数、成功登录次数、执行命令数和恶意软件样本数,全部带有“今日”变化量 - **活动时间线** — 显示 14 天内连接数和独立 IP 数的图表 - **主要攻击国家** — 显示每个国家/地区独立 IP 数量的环形图(带有国旗 Emoji) - **热门凭证对、热门命令、主要攻击 IP** — 实时排行榜表格 - **最近会话** — 最近 20 个会话及其持续时间、登录次数和地理数据 ### 会话浏览器 - 包含每个 SSH 会话的完整分页表格 - 可按 IP、连接时间、持续时间、登录次数、命令数进行排序 - 对 IP、会话 ID 和 SSH 指纹 (HASSH) 进行全文搜索 - 点击任意 IP 可打开 **IP 详情视图**,查看地理信息、所有会话、登录情况、命令、下载记录和 VirusTotal 结果 ### 日志浏览器 - 所有已索引日志日期的日历视图 - 按类型过滤的每日事件查看器:连接、登录、命令、下载、上传 - 在一天的事件内进行全文搜索 ### 攻击地图 - 带有聚合攻击标记的世界地图(Leaflet + CartoDB 深色图块) - 标记的颜色和大小根据连接强度进行缩放 - 日期过滤器:全部时间、今日、过去 7 天、过去 30 天、自定义范围 - 点击任意标记可查看完整的 IP 详情面板 ### 恶意软件样本 - 列出 Cowrie 下载目录中所有以 SHA256 命名的文件 - 每个样本的 VirusTotal 检出率徽章和进度条(检出引擎数 / 总引擎数) - 文件类型、大小、来源 IP、国家/地区及首次发现日期 - 支持逐个或批量刷新 VT 结果 ### 设置 - 所有配置均可在 UI 中编辑(无需手动修改配置文件) - 包含显示/隐藏切换开关的 API 密钥输入框和实时连接测试按钮 - 地理和 VT 数据的缓存 TTL 控制 - 修改密码表单 - 重新索引日志按钮 ## 集成 ### ipinfo.io — 地理定位 用于将攻击者 IP 解析为国家/地区、城市、区域、组织和坐标。 - 无需 API 密钥即可使用(匿名层级,受速率限制) - 在“设置”中添加 API 密钥以获得更高的请求限制 - 结果缓存在 SQLite 中(默认 TTL:7 天) - 启动时的后台批量获取确保国旗和国家/地区数据立即显示 ### VirusTotal — 恶意软件情报 用于查询下载目录中每个 SHA256 样本的检出率、文件类型、文件大小和首次发现日期。 - 需要 [VirusTotal API 密钥](https://www.virustotal.com/gui/join-us)(支持免费层级:4 次请求/分钟) - 内置速率限制器 — 无需手动限流 - 结果缓存在 SQLite 中(默认 TTL:24 小时,可配置) - 检测结果显示在“样本”选项卡和 IP 详情视图中 - Threat.rip 上传器也会使用它在上传前过滤掉过于陈旧的样本 ### Threat.rip — 自动化样本上传 一个集成的后台服务,可自动将新的恶意软件样本上传至 [threat.rip](https://www.threat.rip) 进行分析和配置提取。 **工作原理:** 1. **VT 录入时间检查阶段** — 对于每个尚未处理的样本,该服务会检查 VirusTotal 以确定文件首次被录入的时间。早于配置的最大录入时间(默认:180 天)的样本将被完全跳过,且永远不会发送到 threat.rip。 2. **上传阶段** — 通过录入时间检查的样本将与 threat.rip 的 API 进行比对。如果已存在,服务将获取配置报告。如果是新样本,则上传该文件。 3. **配置提取** — 每次上传或命中已存在文件后,服务会从 threat.rip 获取恶意软件配置报告并记录。这些配置将作为结构化卡片显示在 Threat.rip 选项卡上 — C2 端点、恶意软件家族名称和键值对配置块都会被解析和渲染。 **关键行为:** - 旧文件**永远不会**到达 threat.rip API — VT 录入时间限制被严格执行 - 并发限制:threat.rip 端最多同时进行 2 个上传任务(通过轮询机制保证遵守) - 状态记录在 `data/uploader/` 中 — 该服务在重启后仍可保持幂等性 - 可配置的上传间隔(默认:30 分钟) - 可从“设置”页面进行开启/关闭、手动运行和配置 - Threat.rip 选项卡上显示实时服务状态(已启用、运行中、上次运行、下次运行) ## 环境要求 - **Node.js** 18 或更高版本 - 记录 JSON 日志(NDJSON 格式)的 **Cowrie** SSH 蜜罐 - 一台可访问 Cowrie 日志目录的机器 ## 安装说明 ``` git clone honeypot-dashboard cd honeypot-dashboard npm install npm start ``` 仪表板将可以通过 `http://localhost:3000` 访问。 首次启动时,系统会自动创建数据库,并在服务器开始接受请求之前,对所有现有的 Cowrie 日志文件进行索引。 ## 配置 所有设置都可以在仪表板 UI 的 **设置** 下找到。首次运行时,系统会创建一个带有默认值的 `data/config.json` 文件。该文件也可以手动编辑(修改路径需要重启)。 | 设置 | 默认值 | 描述 | |---------|---------|-------------| | 仪表板标题 | `Honeypot Dashboard` | 显示在浏览器标签页和侧边栏中 | | 端口 | `3000` | 监听的 HTTP 端口 | | Cowrie 日志目录 | — | 包含 `cowrie.json` 日志文件的目录路径 | | Cowrie 下载目录 | — | 包含以 SHA256 命名的恶意软件样本的目录路径 | | VirusTotal API 密钥 | — | 来自 virustotal.com 的免费层级密钥 | | ipinfo.io API 密钥 | — | 可选;增加地理请求限制 | | 地理缓存 TTL | `7` 天 | IP 地理数据的缓存时间 | | VT 缓存 TTL | `24` 小时 | VirusTotal 结果的缓存时间 | | Threat.rip API 密钥 | — | 用于上传至 threat.rip 的 API 密钥 | | Threat.rip 已启用 | `false` | 开启或关闭后台上传服务 | | 上传间隔 | `30` 分钟 | 上传服务的运行频率 | | VT 最大录入时间 | `180` 天 | 超过此时间的样本永远不会被上传到 threat.rip | ## 默认凭证 | 用户名 | 密码 | |----------|----------| | `admin` | `honeypot` | 首次登录后,请立即通过“设置 → 修改密码” **更改密码**。 ## 架构说明 - **无构建步骤** — 直接提供原生 JS/CSS 服务;Chart.js 和 Leaflet 从 CDN 加载 - **SQLite**(通过 `better-sqlite3`) — 所有查询均为同步执行;无 ORM - **实时索引** — `chokidar` 监视实时的 `cowrie.json` 以获取新行,并在约 2 秒内完成索引 - **日志轮转** — Cowrie 会在午夜将 `cowrie.json` 重命名为 `cowrie.json.YYYY-MM-DD`;每 5 分钟一次的定期重新索引会自动捕获新轮转的文件 - **后台服务** — 地理获取和 threat.rip 上传作为异步后台计时器运行,绝不会阻塞 HTTP 响应 - **会话认证** — 带有 httpOnly cookie 的服务端会话;登录速率限制为每 15 分钟 20 次尝试 ## 许可证 MIT
标签:MITM代理, SSH, 代码示例, 可视化面板, 威胁情报, 开发者工具, 数据分析, 数据可视化, 自定义脚本, 蜜罐, 证书利用