sierengowskisierengowski-cpu/Meli

GitHub: sierengowskisierengowski-cpu/Meli

Meli 是一个集实时蜜罐监控、主动欺骗和威胁情报于一体的桌面与Web应用。

Stars: 0 | Forks: 0

# Meli — 蜜罐指挥中心 **v2.9.0** — Meli 现针对相同的 Python 数据采集管线**提供了两个完整的前端**: - 🐝 **Web 指挥中心**(v2.9 新增) — 位于 `webui/` 的 React + Vite 单页应用,由 `meli-web`(FastAPI + uvicorn)在 `http://127.0.0.1:17655/` 提供服务。包含 17 个仪表盘视图:实时 KPI 磁贴、严重性分布、24小时攻击强度图、顶级攻击者排行榜、蜜罐容量仪表、蜜罐集群状态、攻击者/事件/凭证/命令/负载/会话/服务/警报(带一键确认)/报告/僵尸网络/IP 信誉查询/设置向导。 - 🖥️ **GTK4 桌面应用**(原生) — 完整的原生 Linux 体验,带有 Cairo 双耳细颈瓶、Labyrinth 诱捕控制及 16 个窗口视图。 两个前端都读取由 Meli 数据采集守护进程写入的同一个 SQLite 数据库,因此 Cowrie / Dionaea / Conpot / Heralding / Endlessh / Labyrinth 捕获的事件会自动在所有界面中显示。 **一键启动**(无需安装到 `/opt`): ``` ./run.sh ``` 此命令会引导创建一个 `.venv`,安装 Python 依赖,在 `webui/` 中运行 `npm install && npm run build`,然后在端口 `17655` 上启动 `meli-web` 并打开浏览器。添加 `--native` 可使用无边框的 Electron 窗口,或使用 `--no-open` 运行无界面的服务器。 要进行完整的系统安装(systemd 用户服务、桌面快捷方式、`/opt/meli`),请改用 `./install.sh` — 阶段 4b 构建 React webui,阶段 4c(`--with-electron`)安装 Electron 外壳。 **v2.2.2** — 一款原生 **GTK4 + libadwaita** Linux 桌面应用程序,用于实时蜜罐监控、威胁情报与主动诱骗。专为安全研究人员、SOC 分析师、家庭实验室运维人员以及任何运行 Cowrie、Heralding、Dionaea 或自定义蜜罐基础设施的用户构建。 **作者:** Joseph Sierengowski **许可证:** MIT **平台:** Linux(COSMIC、GNOME 及其他 GTK4 桌面环境) **仓库:** [github.com/sierengowskisierengowski-cpu/Meli](https://github.com/sierengowskisierengowski-cpu/Meli) ## Meli 与众不同之处 大多数蜜罐仪表盘是构建在数据库之上的 Web 应用程序。Meli 则不同。它是一个真正的原生桌面应用程序:数据采集守护进程和 GUI 是独立的进程,它们仅通过 SQLite 和 MQTT 进行通信。关闭窗口后,守护进程仍在继续运行,分类事件、触发警报并写入富化结果。GUI 只是一个阅读器,而非必需组件。 第二个不同之处在于,Meli 自带诱骗引擎 — **Labyrinth** — 而不仅仅消费来自第三方蜜罐的日志。Labyrinth 是一个从头构建的双协议(SSH 和 Telnet)诱捕陷阱,与现有的数据采集管线并行运行。一个陷入 Labyrinth 的会话会自动填充实时日志、命令视图、会话视图以及仪表盘上的双耳细颈瓶,因为每一次按键都通过相同的采集管线以标准的 Cowrie 格式事件发出,其他所有数据也是如此。 标志性的视觉元素是 **双耳细颈瓶**:一个位于仪表盘中央的 Cairo 绘制的希腊花瓶,随着攻击累积而填充琥珀色蜂蜜,新事件到达时会脉冲发光,当容器满溢时会滴落。它既是装饰性的,也具有实用目的 — 一眼就能判断蜜罐是安静、活跃还是正遭受围攻。 ## 功能特性 ### 16 个仪表盘视图 | 视图 | 描述 | |------|------| | 仪表盘 | 实时统计卡片、严重性分布、顶级攻击者、近期事件、双耳细颈瓶 | | 实时日志 | 带有暂停、筛选和导出功能的实时 MQTT 事件流 | | 地理位置地图 | 显示攻击密度的世界地图(通过 WebKitGTK 使用 Leaflet.js)+ 国家表格 | | 攻击者 | 可排序的 IP 表格,带有完整的富化配置文件抽屉 | | 凭证 | 跨所有蜜罐捕获的用户名/密码对,支持字典导出 | | 命令 | 认证后命令分析,带意图分类 | | 负载 | 捕获的恶意软件文件,支持 VirusTotal 哈希查询 | | 服务统计 | 按蜜罐细分,附带健康状态 | | 时间线 | 攻击量柱状图,可配置时间段(1小时 / 24小时 / 7天 / 30天 / 90天) | | IP 信誉 | 单 IP 跨所有富化服务查询 | | 僵尸网络检测 | 协调攻击集群分析(共享凭证/命令/哈希) | | 警报规则 | CRUD 规则编辑器 + 完整的警报历史记录,带一键确认功能 | | 报告 | 生成和浏览 PDF / Markdown / JSON / CSV 报告 | | 设置 | 所有子系统的完整配置面板 | | Labyrinth 会话 | 实时诱捕状态、粘性 IP 名册和最近完成的会话表格 | | Labyrinth 回放 | 带有可变速度控制(¼× / 1× / 2× / 8× / 即时)的会话回放功能 | ### Labyrinth — 主动诱骗陷阱 Labyrinth 是 Meli 内置的 SSH 和 Telnet 蜜罐。它接受每一个传入的登录(以收集凭证),将攻击者放入一个程序化生成的虚假 shell 中,并且绝不让他们接触到真实环境。 **协议支持:** - **SSH** — 基于 paramiko 的有界线程池;逼真的 MOTD、`last login` 横幅、PTY 协商 - **Telnet** — 基于 asyncio;每个连接一个协程,带有 RFC 854 协商(WILL ECHO / SUPPRESS-GO-AHEAD) - 两种协议共享一个单一的鸭子类型会话接口,因此所有命令处理程序在两种协议上的工作方式完全相同 **虚假环境:** - 每个会话种子生成的程序化文件系统 — 两个攻击者比对笔记会看到略微不同的目录树 - 74+ 个虚假 shell 命令处理程序:`ls`, `cat`, `wget`, `curl`, `chmod`, `busybox`, `ps`, `id`, `uname`, `netstat`, `ip`, `crontab`, `systemctl` 等 - 逼真的 Debian/Ubuntu 文件树,包括 `/etc/passwd`, `/proc/cpuinfo`, `/root/.bash_history`, `/root/.aws/` 以及其他高价值诱饵路径 **子系统:** | 子系统 | 描述 | |--------|------| | **botdetect** | 基于时序和命令信号的加权机器人/人类评分(0–100);权重根据真实的 Mirai/Gafgyt 样本调整;每个会话可审计的完整信号列表 | | **金丝雀令牌** | 注入虚假文件系统的诱饵文件;任何对金丝雀路径的 `cat` 操作都会立即触发一条 CRITICAL 级别的警报,附带会话、IP 和路径上下文 | | **绊线** | 正则表达式规则,当观察到恶意命令(下载器、持久化机制、权限提升)时,提高机器人评分并提升事件严重性 | | **会话回放** | 每个会话都以追加写入的 JSONL 文件记录;Labyrinth 回放视图可以以可变速度(带完整传输控制)播放 | | **回放导出** | 可将任何会话导出为兼容 asciinema 的 JSON 文件,供离线审阅或共享 | | **Polaroid** | 自动为高价值会话(机器人评分 ≥ 阈值或任何金丝雀触发)向配置的通知渠道发布一行攻击者摘要 | | **Cohort** | 通过命令序列指纹对会话进行聚类,以分组僵尸网络变种并识别协调攻击活动 | | **粘性** | 跨重启的 IP 跟踪 — 粘性名册持久保存访问次数、最后见到的时间戳和累积的机器人评分,因此返回的 IP 会被立即识别 | | **阻止列表** | 以 fail2ban、iptables、nftables、ufw 或纯 CIDR 格式导出已确认的恶意 IP,用于立即执行防火墙规则 | | **嘲讽引擎** | 运营者可配置的揭示强度:`off`(静默诱捕)、`subtle`(会话记录 30 秒后的提示)或 `full`(退出时明确揭示为诱捕陷阱并附带会话摘要) | | **每日摘要** | 24 小时 Markdown(+ 可选 PDF)摘要:最活跃的 IP、所有金丝雀触发事件、新的聚类、绊线命中计数;向通知渠道发送简报 | 所有 Labyrinth 事件都通过 Meli 的标准数据采集管线,因此实时日志、命令视图、攻击者表格以及仪表盘上的双耳细颈瓶都能反映 Labyrinth 的活动,无需任何特殊处理。 ### Atrium — 信息亭 / 墙挂显示器模式 Atrium 是一种可选的全屏可视化模式,专为墙挂显示器设计。它采用惰性导入,因此对正常的 Meli 操作零开销 — 如果你不调用它,它就不会被加载。 **三种启动路径:** 1. 主窗口的侧边栏按钮 2. F12 键盘快捷键 3. `meli --kiosk` 命令行标志 **显示布局(目标分辨率 1920×1080,可缩放至任意尺寸):** - **雷达扫描** — 动画扫描效果,带有代表活动会话的光点 - **双耳细颈瓶** — 与仪表盘相同的 Cairo 蜜罐部件,以 3 倍比例渲染 - **终端流** — 滚动显示的实时会话活动日志(连接、认证尝试、命令、金丝雀触发) - **24 小时热力图** — 底部栏显示以 15 分钟为间隔的攻击强度 - **时钟栏** — UTC 时间、实时/空闲状态、会话计数 极光渐变背景、会话开启/关闭时的柔和音频提示以及红色金丝雀触发闪烁覆盖层,均在首次启动时由标准库 wave/math 合成生成(仓库中无二进制音频资源)。鼠标光标在 3 秒后自动隐藏。 无论 Atrium 是否运行,Meli 的正常操作(数据采集守护进程、所有 16 个视图、警报路由)都完全不受影响。 ### 蜜罐解析器(7个) | 解析器 | 处理对象 | |--------|----------| | **Cowrie** | SSH/Telnet — 所有事件 ID:`cowrie.login.failed`、`cowrie.login.success`、`cowrie.command.input`、`cowrie.session.file_download` 等 | | **Heralding** | 多服务凭证捕获(SSH、FTP、RDP、VNC、POP3、IMAP、SMTP) | | **Dionaea** | 恶意软件捕获(SMB、HTTP、MySQL、FTP、SIP、TFTP) | | **HTTP Honeypot** | Snare/Tanner + 自定义 nginx JSON 日志格式 | | **Glastopf** | Web 应用蜜罐 | | **Mailoney** | SMTP 探测蜜罐 | | **通用 JSON** | 标准 Meli 格式 + 启发式字段映射回退 | ### 富化服务(6个) | 服务 | 类型 | 说明 | |------|------|------| | **GeoLite2** (MaxMind) | 离线 | 城市 + ASN;无单次查询成本;需要免费的 MaxMind 账户下载数据库 | | **AbuseIPDB** | API 密钥 | 滥用置信度评分(0–100%)、报告数量、最后报告日期 | | **GreyNoise** | API 密钥 | 针对大规模扫描器 IP 的噪声/恶意/良性分类 | | **VirusTotal** | API 密钥 | IP 信誉 + 文件哈希恶意软件扫描 | | **Shodan** | API 密钥 | 开放端口、服务横幅、CVE 匹配 | | **IPInfo** | API 密钥 | ASN、组织、VPN/代理/Tor 检测 | 所有结果在 SQLite 中缓存 24 小时(可配置 TTL)。 ### 警报系统 **6 个通知渠道:** 桌面(libnotify)、Discord(Webhook)、Slack(Webhook)、Telegram(机器人)、SMTP 邮件、HTTP Webhook - 每条规则可配置冷却时间、活跃时段和严重性阈值 - 通过 PipeWire/ALSA(`paplay` / `aplay`)按严重性级别播放警报声音 - 完整的警报历史记录,带一键确认功能 ### 安全性 - **主密码** — 使用 Argon2id KDF(64 MB 内存,3 次迭代)进行密钥派生;使用 bcrypt 存储验证信息 - **TOTP 双因素认证** — 兼容 Google Authenticator、Authy 及任何 TOTP 应用 - **渐进式锁定** — 3 次失败尝试后锁定 60 秒,6 次失败后锁定 5 分钟;超过硬限制需重启 - **Ctrl+L** — 即时锁定;可配置空闲自动锁定超时 - **静态 Fernet 加密** — 对 API 密钥和敏感配置字段使用 AES-128-CBC 加密 - 数据库和配置文件创建时权限设为 `chmod 600`;配置目录权限设为 `chmod 700` ### 报告 - 时间段:每日、每周、每月、自定义日期范围 - 格式:**PDF**(ReportLab)、**Markdown**、**JSON**、**CSV** - Jinja2 报告模板(可自定义) - 定时自动生成 ### 数据采集方法 - **MQTT** — 订阅 `meli/events/ingest`(端口 1883 上的 Mosquitto 代理) - **HTTP POST** — `POST http://127.0.0.1:17654/api/v1/events/ingest`,携带 Bearer 令牌 计划但尚未实现的数据采集方法,请参见[路线图](#roadmap)。 ## 架构 ``` ┌──────────────────────────────────────────────────────────────────┐ │ External Honeypots (Cowrie / Heralding / Dionaea / …) │ │ → publish JSON events via MQTT or HTTP POST │ └──────────────────────────┬───────────────────────────────────────┘ │ ┌──────────────────────────▼───────────────────────────────────────┐ │ Labyrinth Tarpit (meli/labyrinth/) │ │ SSH (paramiko / thread pool) + Telnet (asyncio) │ │ → emits Cowrie-formatted events → same ingest pipeline below │ └──────────────────────────┬───────────────────────────────────────┘ │ ┌────────────▼────────────┐ │ meli-ingest │ systemd user service │ daemon.py │ MQTT consumer + HTTP server └────────────┬────────────┘ │ ┌─────────────────▼─────────────────────┐ │ processor.py │ │ parse → classify → store → enrich │ └──────────┬────────────────┬────────────┘ │ │ ┌──────────▼──────┐ ┌──────▼──────────┐ │ SQLite DB │ │ Alert Engine │ │ (SQLAlchemy) │ │ + 6 Notifiers │ └──────────┬──────┘ └──────────────────┘ │ ┌──────────▼──────┐ │ GTK4 UI │ Main thread only │ (16 views) │ Reads DB, subscribes MQTT │ [opt: Atrium] │ Fullscreen kiosk on demand └─────────────────┘ ``` 数据采集守护进程和 GUI 是独立的进程。GUI 订阅 `meli/events/processed` 以获取实时日志,并读取数据库以获取所有其他视图。捕获和分类在 GUI 窗口关闭后继续进行。 ## 安装 完整说明请参见 [docs/INSTALL.md](docs/INSTALL.md)。 **快速开始(Arch Linux):** ``` git clone https://github.com/sierengowskisierengowski-cpu/Meli cd Meli sudo ./install.sh --phase 1 # system packages: GTK4, PyGObject, Mosquitto ./install.sh # Python venv, app files, desktop integration, services meli # launch ``` **快速开始(Ubuntu 24.04+):** ``` git clone https://github.com/sierengowskisierengowski-cpu/Meli cd Meli sudo ./install.sh --phase 1 ./install.sh meli ``` 安装程序运行 9 个阶段:系统软件包 → Python venv → Python 依赖 → 应用文件 → 桌面集成 → systemd 服务 → Mosquitto 配置 → 用户数据目录 → 数据库初始化。 ## 连接蜜罐 ### 通过 MQTT 连接 Cowrie 在 `etc/cowrie.cfg` 中: ``` [output_mqtt] enabled = true host = 127.0.0.1 port = 1883 topic = meli/events/ingest qos = 1 ``` ### 通过 HTTP POST 连接任意蜜罐 ``` curl -X POST http://127.0.0.1:17654/api/v1/events/ingest \ -H "Authorization: Bearer YOUR_INGEST_TOKEN" \ -H "Content-Type: application/json" \ -d '{ "network": {"source_ip": "1.2.3.4", "destination_port": 22}, "honeypot": {"type": "cowrie"}, "action": {"type": "login_attempt", "details": {"username": "root", "password": "toor"}}, "timestamp": "2024-01-15T12:00:00Z" }' ``` 数据采集令牌会在您添加的每个蜜罐源中自动创建(设置 → 蜜罐源)。 解析器特定的配置,请参见 [docs/HONEYPOT-INTEGRATION.md](docs/HONEYPOT-INTEGRATION.md)。 ## 开发 ``` git clone https://github.com/sierengowskisierengowski-cpu/Meli cd Meli # 系统依赖(GTK4, PyGObject, Mosquitto) sudo ./install.sh --phase 1 # Python 开发环境 python3 -m venv --system-site-packages .venv source .venv/bin/activate pip install -e . # 启动 GUI python -m meli # 仅启动数据摄取守护进程(无 GUI) python -m meli --daemon ingest # 启动 Atrium kiosk 模式 python -m meli --kiosk # 运行测试套件 python -m pytest tests/ -v ``` ### 项目结构 ``` Meli/ ├── meli/ # Python package │ ├── __main__.py # CLI entry point (meli / meli --daemon / meli --kiosk) │ ├── app.py # Adw.Application subclass │ ├── auth.py # Master password, TOTP, lockout │ ├── config.py # YAML config singleton │ ├── event_bus.py # In-process publish/subscribe │ ├── alerts/ # Alert engine + 6 notifiers │ │ └── notifiers/ # desktop, discord, email_smtp, slack, telegram, webhook │ ├── classification/ # Severity rules engine + default_rules.yaml │ ├── database/ # SQLAlchemy models, migrations, backup │ ├── enrichment/ # abuseipdb, geolocation, greynoise, ipinfo, shodan, virustotal │ ├── ingest/ # MQTT + HTTP daemon + parsers/ │ │ └── parsers/ # cowrie, dionaea, generic_json, glastopf, heralding, http_honeypot, mailoney │ ├── labyrinth/ # Native SSH+Telnet tarpit │ │ ├── daemon.py # LabyrinthDaemon — top-level orchestrator │ │ ├── ssh_server.py # paramiko-based SSH listener + SSHSession │ │ ├── shell.py # asyncio Telnet LabyrinthSession │ │ ├── filesystem.py # Per-session fake filesystem (FakeFS) │ │ ├── commands.py # 74 fake shell command handlers │ │ ├── taunts.py # Taunt engine (off / subtle / full) │ │ ├── host_key.py # RSA host key persistence │ │ ├── sink.py # Ingest pipeline bridge │ │ ├── botdetect.py # Bot-vs-human scoring │ │ ├── canary.py # Bait-file canary tokens │ │ ├── tripwire.py # Regex-based severity escalation │ │ ├── replay.py # Per-session JSONL replay recorder │ │ ├── replay_export.py # Asciinema-format export │ │ ├── polaroid.py # Auto-posted attacker summaries │ │ ├── cohort.py # Command-sequence fingerprint clustering │ │ ├── sticky.py # Cross-restart IP tracking │ │ ├── blocklist.py # Firewall-rule export │ │ └── digest.py # Daily Markdown + PDF digest service │ ├── reports/ # PDF/MD/JSON/CSV generation │ └── ui/ # GTK4 application UI │ ├── app.py # Window, sidebar, stack navigation │ ├── atrium.py # Fullscreen kiosk display (lazily imported) │ ├── dialogs/ # Change-password and setup wizard dialogs │ ├── widgets.py # HoneyPotWidget (Cairo amphora) and shared widgets │ └── views/ # 16 views (see table above) ├── tests/ # pytest suite ├── docs/ # Documentation ├── assets/ │ ├── icons/meli.svg # Application icon │ └── sounds/ # Alert sound files ├── install.sh # 9-phase installer (Arch / Ubuntu / Fedora) ├── uninstall.sh # Uninstaller (preserves user data) ├── pyproject.toml # Build configuration ├── requirements.txt # Python dependencies ├── meli.desktop # XDG desktop entry ├── meli-ingest.service # systemd user service ├── meli-labyrinth-digest.service # systemd oneshot for daily digest ├── meli-labyrinth-digest.timer # systemd timer (daily at 07:00) └── PKGBUILD # Arch Linux package ``` ## 已知限制 - **设置 → 配置 2FA 按钮** — TOTP 配置对话框尚未实现。可以通过首次运行的设置向导配置 TOTP。 - **设置 → 添加蜜罐按钮** — 内联的添加蜜罐对话框尚未实现。可以通过首次运行的设置向导添加蜜罐源。 - **地理位置地图** — Leaflet.js 标记层部分实现;地图已渲染,但不会放置按国家的攻击标记。 - **日志文件监听** — 基于 inotify 的直接日志解析尚未实现。请参见[路线图](#roadmap)。 ## 路线图 计划但尚未实现的功能: - 日志文件监听器(基于 inotify,无需 MQTT/HTTP) - 网络 PCAP 分析模式 - 额外的解析器:T-Pot、HoneyTrap、OpenCanary - UI 中的 CIDR 和地理围栏阻止列表 - YubiKey 硬件双因素认证 - PostgreSQL 后端选项 - 报告调度 UI 和邮件发送 - STIX 2.1 / TAXII 2.1 导出 ## 许可证 MIT 许可证 — © Joseph Sierengowski 完整文本请参见 [LICENSE](LICENSE)。
标签:AV绕过, Conpot, Dionaea, Electron, Endlessh, FastAPI, GTK4, Heralding, Labyrinth, libadwaita, Linux桌面应用, Python, React, Shellcode执行, SOC分析, SQLite, Syscalls, Vite, Windows安全, 仪表盘, 告警管理, 多前端支持, 威胁情报, 安装脚本, 家庭实验室, 开发者工具, 攻击分析, 无后门, 系统服务, 网络安全, 蜜罐监控, 蜜罐管理, 计算机取证, 逆向工具, 隐私保护