pyciu1/vnc-honeypot
GitHub: pyciu1/vnc-honeypot
高保真 VNC 蜜罐,通过模拟完整 RFB 协议栈实时捕获攻击者凭据、指纹和漏洞利用行为,为威胁情报和安全研究提供遥测数据。
Stars: 0 | Forks: 0
# VNC 蜜罐
一个高保真的 VNC 蜜罐,专为威胁情报和安全研究设计。实时捕获 VNC 挑战-响应哈希、纯认证凭据、客户端指纹以及攻击者遥测数据。
它是开源 **Honeypot Suite** (RDP + VNC + SSH) 的一部分,带有统一的中央仪表板。
## 功能
### 协议
- **完整 RFB 栈** — 3.3 / 3.7 / 3.8 / Apple / 4.x / 5.x
- **双重捕获** — 在同一会话中捕获挑战-响应 (Type 2) + RAW 安全数据
- **Plain Auth** — 从 SecurityType 18 (VeNCrypt Plain) 中提取用户名和密码
- **HTTP 蜜罐** — 在端口 5800 捕获 noVNC 和 Guacamole 扫描器
### 情报
- **客户端指纹识别** — 识别 12 种以上的 VNC 客户端 (RealVNC, TightVNC, TigerVNC, UltraVNC, LibVNC...)
- **CVE 检测** — 检测 4 种已知的漏洞利用模式 (CVE-2006-2369, CVE-2014-8242, CVE-2019-15680, CVE-2019-8287)
- **行为评分** — 根据标签 (bruteforce, scanner, multi_port_scan...) 为每个 IP 提供 0–100 的风险评分
- **角色引擎** — 为每个攻击者 IP 提供一致的虚假服务器身份 (careless_admin, developer, db_admin, security_analyst)
- **反情报** — 为每个攻击者 IP 追踪 token
### 基础设施
- **GeoIP** — MaxMind GeoLite2 (可选),带有离线前缀表后备
- **SQLite WAL** — 崩溃时零数据丢失,异步批量写入器
- **限流器** — 双层:TokenBucket + SlidingWindow
- **告警** — Telegram + 电子邮件 (与 RDP 和 SSH 蜜罐共享)
- **80 个单元测试**
### 仪表板
端口 49100 上的独立 Web UI — 7 个标签页,每 15 秒自动刷新。
```
python3 vnc_dashboard.py --db vnc_honeypot.db
# 打开: http://YOUR_VPS_IP:49100
```
| 标签页 | 内容 |
|-----|---------|
| Overview | 汇总统计信息,热门客户端,热门国家,风险分布 |
| Live Feed | 最近 100 个事件 — 连接、捕获、CVE 告警、纯认证 |
| Attackers | 按风险评分排列的顶级 IP 及行为标签 |
| Captures | 挑战-响应 + 纯认证凭据 |
| Timeline | 每小时的连接和捕获 (最近 24 小时) |
| Geo | 攻击者的地理分布 |
| CVE Alerts | 检测到的漏洞利用尝试 |
## 快速开始
```
# 安装可选 dependencies
pip install -r requirements.txt
# 自测
python3 vnc_honeypot.py --self-test
# 启动 (ports < 1024 需要 root 权限)
sudo python3 vnc_honeypot.py
# 完整选项
sudo python3 vnc_honeypot.py \
--ports 5900-5910 \
--http-port 5800 \
--db /data/vnc_honeypot.db \
--geoip-db /data/GeoLite2-City.mmdb \
--telegram-token "TOKEN" \
--telegram-chat-id "CHAT_ID"
# 启动 dashboard (独立终端)
python3 vnc_dashboard.py --db /data/vnc_honeypot.db
```
## Docker
```
cp .env.example .env
# 使用你的设置编辑 .env
docker compose up -d
docker compose logs -f
```
## 架构
```
vnc_config.py ← CONFIG + protocol constants
vnc_db.py ← SQLiteConnectionPool + init_db + DBWriter
vnc_rate.py ← TokenBucket + SlidingWindow + RateLimiter
vnc_geo.py ← GeoIP lookup + bot signature classification
vnc_protocol.py ← Unified VNC handshake + Plain Auth decoder
vnc_fingerprint.py ← Client fingerprinting + CVE detection
vnc_intel.py ← PersonaEngine + BehaviorModel + CounterIntel
vnc_scenario.py ← ScenarioManager + GridManager
vnc_handler.py ← ConnectionHandler (VNC + HTTP)
vnc_honeypot.py ← main() + argparse + graceful shutdown
vnc_dashboard.py ← Standalone dashboard server (port 49100)
```
## API 端点
仪表板在端口 49100 上公开了一个 REST API:
| 端点 | 描述 |
|----------|-------------|
| `GET /api/status` | 健康检查 (无需认证) |
| `GET /api/overview` | 汇总统计信息 |
| `GET /api/live` | 最近 100 个事件 |
| `GET /api/attackers` | 按风险评分排列的顶级攻击者 IP |
| `GET /api/captures` | 凭据 (分页) |
| `GET /api/timeline` | 每小时活动数据 (最近 24 小时) |
| `GET /api/geo` | 地理分布 |
| `GET /api/cve` | CVE 漏洞利用尝试 |
通过 `X-API-Key` 请求头进行可选的身份验证:
```
python3 vnc_dashboard.py --api-key your-secret-key
curl -H "X-API-Key: your-secret-key" http://localhost:49100/api/overview
```
## GeoIP 设置 (可选)
1. 注册一个免费的 MaxMind 账户:https://dev.maxmind.com
2. 下载 `GeoLite2-City.mmdb`
3. 传递给蜜罐:`--geoip-db /path/to/GeoLite2-City.mmdb`
如果没有 GeoIP,蜜罐也可以完全工作 — 国家/城市/ISP 字段将为空。
## 与其他蜜罐的集成
套件中的所有三个蜜罐共享相同的 `alerts.py` 用于 Telegram 和电子邮件通知。如果来自 RDP 蜜罐的 `alerts.py` 位于同一目录或位于 `../rdp-honeypot-v54/`,则 VNC 蜜罐会自动导入它。
一个聚合 RDP + VNC + SSH 数据的中央仪表板计划在 v1.1.0 版本中推出。
## 测试
```
pytest tests/ -v
# 80 个测试, ~2 秒
```
## 法律声明
本软件旨在用于您拥有或已获得明确书面许可进行监控的系统上。
## 许可证
MIT — 详情请参阅 `LICENSE`。
标签:PE 加载器, Python, SQLite, VNC, XXE攻击, 威胁情报, 开发者工具, 无后门, 蜜罐, 证书利用, 请求拦截, 逆向工具