renat0z3r0/m0lthoney

GitHub: renat0z3r0/m0lthoney

一个模拟存在漏洞的 OpenClaw 实例的被动式蜜罐,用于捕获、分类和分析攻击行为以支持威胁情报研究。

Stars: 1 | Forks: 0

# OpenClaw / MoltBot Honeypot 该 Honeypot 用于模拟一个存在漏洞且未经身份验证暴露的 [OpenClaw](https://github.com/openclaw/openclaw) 实例(v2026.1.29,安全补丁前版本)。它会捕获并对攻击进行分类,以供威胁情报使用。 ## 快速开始 ``` # 1. 安装依赖 npm install # 2. (可选) 下载 GeoIP 数据库 MAXMIND_LICENSE_KEY=your_key ./scripts/download-geoip.sh # 3. 启动 npm start # 或使用 Docker ADMIN_PASSWORD=changeme docker compose up -d ``` Honeypot 监听以下端口: - **:18789** — Gateway HTTP + WebSocket - **:18791** — Chrome DevTools Protocol - **:18793** — Canvas 文件服务器 - **:41892** — 管理面板(仅限 localhost) ## 配置 | 变量 | 默认值 | 描述 | |---|---|---| | `HONEYPOT_HOST` | `0.0.0.0` | 绑定地址 | | `HONEYPOT_PORT` | `18789` | Gateway 端口 | | `CDP_PORT` | `18791` | CDP 端口 | | `CANVAS_PORT` | `18793` | Canvas 端口 | | `ADMIN_HOST` | `127.0.0.1` | 面板绑定地址(保持 loopback) | | `ADMIN_PORT` | `41892` | 面板端口 | | `ADMIN_USERNAME` | `admin` | 面板用户名 | | `ADMIN_PASSWORD` | *(随机)* | 面板密码(启动时打印) | | `FAKE_VERSION` | `2026.1.29` | 模拟的 OpenClaw 版本 | | `CANARY_PREFIX` | `HONEYPOT` | Canary token 中的前缀 | | `MDNS_ENABLED` | `false` | 启用 mDNS/Avahi 广播 | | `MDNS_HOSTNAME` | `macmini-studio` | mDNS 主机名 | | `DATA_DIR` | `./data` | 日志输出目录 | | `GEOIP_DB` | `./data/GeoLite2-City.mmdb` | GeoIP 城市数据库 | | `GEOIP_ASN_DB` | `./data/GeoLite2-ASN.mmdb` | GeoIP ASN 数据库 | ## 架构 ``` Internet → :18789 (Fastify HTTP + WS) → JSONL logger → data/attacks/ → :18791 (CDP HTTP + WS) → JSONL logger → data/cdp-sessions/ → :18793 (Canvas file server) → JSONL logger → mDNS advertisement Admin → :41892 (Basic Auth) → Live feed, stats, geo map, session replay ``` **关键设计决策:** - 接受所有身份验证(模拟 `allowInsecureAuth: true`) - Canary token 在启动时生成一次,在所有 endpoint 保持一致 - 绝不执行真实的命令 - 通过内存模板提供虚假文件系统 - 16 个攻击分类类别 ## 读取日志 日志以 JSONL 格式写入 `data/attacks/YYYY-MM-DD.jsonl`: ``` # 分类摘要 cat data/attacks/$(date +%Y-%m-%d).jsonl | jq -r '.category' | sort | uniq -c | sort -rn # 独立 IP cat data/attacks/$(date +%Y-%m-%d).jsonl | jq -r '.source_ip' | sort -u | wc -l # 按国家筛选 cat data/attacks/$(date +%Y-%m-%d).jsonl | jq 'select(.geo.country == "CN")' # RCE 尝试 cat data/attacks/$(date +%Y-%m-%d).jsonl | jq 'select(.category == "rce_attempt")' ``` 攻击类别:`scan`, `recon`, `exploit`, `rce_attempt`, `lfi_attempt`, `token_bypass`, `data_exfil`, `prompt_injection`, `webhook_injection`, `skill_poisoning`, `persistence`, `impersonation`, `cdp_exploit`, `proxy_abuse`, `returning_attacker`, `brute_force`。 ## GeoIP Honeypot 没有 GeoIP 数据库也能运行 —— `geo` 字段将为 `null`。要进行地理位置富化,请在 [maxmind.com](https://www.maxmind.com/en/geolite2/signup) 注册(免费)并运行: ``` MAXMIND_LICENSE_KEY=your_key ./scripts/download-geoip.sh ``` ## 速率限制 - HTTP:每个 IP 100 个请求/秒 - WebSocket:每个 IP 10 个并发连接,每个 session 每分钟 1000 个帧 ## 测试 ``` npm test # Unit/integration tests bash test/e2e.sh # E2E test (requires running instance) ``` ## 法律考量 - 这是一个**被动式 honeypot** —— 它不会进行反击或利用访问者 - 根据意大利法律(以及大多数欧盟司法管辖区),运行被动式 honeypot 是合法的 - GDPR 适用于收集的 IP 地址:请实施 90 天的数据保留策略 - 告知您的 ISP/托管提供商您正在运行 honeypot - 不得将捕获的凭据或 token 用于分析以外的任何目的 - 将管理面板保持在 loopback 上或置于 VPN 之后 ## 许可证 ISC
标签:CISA项目, Fastify, GNU通用公共许可证, MITM代理, Node.js, 威胁情报, 安全, 开发者工具, 攻击捕获, 自动化扫描, 自定义脚本, 蜜罐, 证书利用, 请求拦截, 超时处理