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, 威胁情报, 安全, 开发者工具, 攻击捕获, 自动化扫描, 自定义脚本, 蜜罐, 证书利用, 请求拦截, 超时处理