martidu4/honey-ai
GitHub: martidu4/honey-ai
一款由本地 LLM 驱动的多协议一体化蜜罐,能够动态生成逼真的欺骗性响应,替代传统静态蜜罐工具。
Stars: 12 | Forks: 4
# 🍯 HoneyAI
**多合一 AI 驱动的蜜罐。单进程,全协议。**
取代 Cowrie · Galah · OpenCanary · Endlessh —— 由本地 LLM 驱动的单一 Node.js 服务。
[](https://github.com/martidu4/honey-ai/actions)
[](LICENSE)
[](https://nodejs.org)
[](https://ollama.ai)
[](docker-compose.yml)
[](CONTRIBUTING.md)
## 这是什么?
HoneyAI 是一个**主动的、AI 驱动的蜜罐**,它能拦截跨所有常见协议的攻击者,并以动态生成、极具迷惑性的诱骗内容进行响应 —— 该功能由通过 [Ollama](https://ollama.ai) 运行的本地 LLM 提供支持。
AI 不再使用静态响应,而是**读取攻击者的 payload** 并生成量身定制的陷阱:
- 💉 SQL 注入尝试 → 包含 **canary tokens** 的虚假数据库转储(你控制的诱饵 API 密钥)
- 🐚 Shell 上传 → 包含更多诱饵的虚假执行输出
- 🔑 SSH 登录 → 带有逼真文件系统的交互式虚假 bash shell
- 📂 目录扫描 → 虚假的 `backup.zip`, `.env`, `config.php`, `sql_dump.tar.gz`
- 🎣 读取敏感文件 → 虚假的 AWS 凭据、SSH 密钥、数据库密码
每个攻击者 IP 都会自动被上报至 **5 个威胁情报平台**。
## 功能
| 功能 | 描述 |
|---------|-------------|
| 🌐 **HTTP/HTTPS** | 全捕获 Web 蜜罐。模拟 WordPress, Apache, phpMyAdmin, Laravel。取代 [Galah](https://github.com/0x4D31/galah) |
| 🔑 **SSH** | 带有 canary 文件系统的交互式虚假 bash shell。接受所有凭据。取代 [Cowrie](https://github.com/cowrie/cowrie) |
| 🧲 **SSH Tarpit** | 可配置端口上的无限 Banner。取代 [Endlessh](https://github.com/skeeto/endlessh) |
| 📁 **FTP** | 带有 AI 生成目录列表的虚假 vsFTPd |
| 📟 **Telnet** | 虚假路由器/交换机 CLI(带有静态 `show` 命令的 Cisco IOS 风格) |
| 📧 **SMTP** | 虚假邮件服务器 —— 接收并记录所有消息 |
| 🗄️ **MySQL** | 虚假 MySQL 8.0 —— 握手 + rogue server + 查询响应 |
| 🔴 **Redis** | 虚假 Redis 7.2 —— 完整的 RESP 协议(PING, INFO, KEYS, GET, SET + AI 引擎) |
| 🐙 **Git** | 带有 infinite-refs tarpit 的 Git 协议蜜罐 |
| 🖥️ **VNC** | RFB 3.8 协议握手陷阱 |
| 💻 **RDP** | RDP 协议握手陷阱 |
| 🗃️ **MSSQL** | 虚假 SQL Server 2019 —— TDS prelogin + login 握手 |
| 📡 **SNMP** | 虚假 SNMP v1/v2c 代理 —— sysDescr, sysName, sysUptime |
| 🌐 **HTTP Proxy** | 虚假 Squid 代理 —— 捕获 CONNECT 隧道 |
| 📁 **Samba/SMB** | 用于 Samba 完整审计日志(`samba.js`)的被动日志监控器 |
| 🛡️ **端口扫描** | 用于 iptables syslog 端口扫描事件(`portscan.js`)的被动日志监控器 |
| 💣 **GZIP 炸弹** | 向扫描器提供压缩的 payload 炸弹 |
| 📡 **上报** | 自动上报至 AbuseIPDB, OTX, DShield, Blocklist.de, VirusTotal |
| 📲 **Telegram** | 通过 Telegram bot 实时接收攻击通知 |
| 🤖 **任何 LLM** | 兼容 Ollama(本地)或任何兼容 OpenAI 的 API |
## 快速开始(裸金属)
### 前置条件
- **Node.js** ≥ 18
- **[pnpm](https://pnpm.io)** —— 使用 `npm install -g pnpm` 安装
- 在本地运行 **[Ollama](https://ollama.ai)**(或任何兼容 OpenAI 的 API)
- 拉取模型:`ollama pull qwen2.5:1.5b`(速度快,1GB 内存)
### 安装与运行
```
# 如果你还没有安装 pnpm,请先安装
npm install -g pnpm
# 克隆并运行
git clone https://github.com/martidu4/honey-ai.git
cd honey-ai
pnpm install # npm/yarn will be rejected — pnpm only
pnpm run setup # Interactive wizard — configures AI, reporting, canary tokens
pnpm start # 🍯 All protocols start listening
```
安装向导会要求你提供:
- 你的 Ollama URL 和模型(或兼容 OpenAI 的 API)
- AbuseIPDB, OTX, DShield, Blocklist.de, VirusTotal API 密钥*(均为可选)*
- 用于攻击通知的 Telegram bot*(可选)*
配置保存在 `config.yaml` 文件中,该文件被 **gitignored** 且绝不会被提交。
## 🐳 Docker 部署
最快的入门方式 —— 一条命令,包含所有内容:
```
git clone https://github.com/martidu4/honey-ai.git
cd honey-ai
cp config.example.yaml config.yaml
# 启动所有服务(Ollama + 模型下载 + HoneyAI)
docker compose up -d
# 跟踪日志
docker compose logs -f honeyai
```
Docker Compose 会自动:
- 启动带有持久化模型存储的 **Ollama**
- 首次运行时拉取 **qwen2.5:1.5b** 模型
- 启动包含所有 14 种协议的 **HoneyAI**
要使用不同的模型:
```
AI_MODEL=qwen3:4b docker compose up -d
```
要添加上报 API 密钥,请创建一个 `.env` 文件:
```
ABUSEIPDB_KEY=your_key
TELEGRAM_TOKEN=your_bot_token
TELEGRAM_CHAT=your_chat_id
```
## 架构
```
Internet attackers
│
├─ :80/8080 → HTTP honeypot (Express + AI responses)
├─ :22/2222 → SSH honeypot (ssh2 + AI interactive shell)
├─ :222/2200 → SSH tarpit (Endlessh-style infinite banner)
├─ :21 → FTP honeypot (TCP + AI)
├─ :23 → Telnet (TCP + AI, Cisco IOS style)
├─ :25 → SMTP (TCP + AI)
├─ :3306 → MySQL (TCP + protocol-accurate handshake)
├─ :6379 → Redis (TCP + RESP protocol + AI engine)
├─ :9418 → Git (TCP + infinite-refs tarpit)
├─ :5900 → VNC (TCP + RFB handshake)
├─ :3389 → RDP (TCP + RDP handshake)
├─ :1433 → MSSQL (TCP + TDS prelogin/login)
├─ :161 → SNMP (UDP + fake agent responses)
├─ :8080 → HTTP Proxy (TCP + fake Squid proxy)
│
├─ Passive Log Monitors:
├─ Samba Log → samba.js (extracts user/IP/machine/share/op/file)
└─ Syslog → portscan.js (extracts iptables PORTSCAN events)
│
▼
AI Engine (Ollama / OpenAI-compatible)
│
├─ Deceptive response → attacker
├─ Reporter → AbuseIPDB, OTX, DShield, Blocklist.de, VT
└─ Telegram → real-time alert 📲
```
### 项目结构
```
honey-ai/
├── server.js # Main orchestrator — starts all protocols
├── setup.js # Interactive setup wizard
├── config.example.yaml # Config template (committed — no secrets)
├── honey-ai.service # systemd service file for production
├── ai/
│ └── engine.js # AI engine — Ollama/OpenAI + identity leak filters
├── core/
│ ├── config.js # Config loader (YAML + env vars)
│ ├── logger.js # Unified logger (console + JSONL, CRLF-safe)
│ ├── reporter.js # Threat intel reporting (5 platforms)
│ ├── traps.js # Web maze, GZIP bombs, canary downloads
│ ├── backfire.js # Reverse scanning of attacker IPs
│ ├── downloader.js # Malware sample collector (SSRF-protected)
│ ├── fileReader.js # HoneyFS virtual filesystem reader
│ └── jitter.js # Timing randomizer for realistic delays
├── protocols/
│ ├── http.js # HTTP honeypot (replaces Galah)
│ ├── ssh.js # SSH honeypot + tarpit (replaces Cowrie + Endlessh)
│ ├── tcp.js # FTP, Telnet, SMTP, MySQL, Redis, Git, VNC, RDP
│ ├── httpproxy.js # HTTP/HTTPS proxy honeypot (fake Squid)
│ ├── mssql.js # MSSQL TDS protocol honeypot
│ ├── snmp.js # SNMP v1/v2c UDP agent honeypot
│ ├── samba.js # Samba log-tail based detection
│ └── portscan.js # Portscan detection via syslog
├── honeyfs/ # 🎣 Canary filesystem — attackers see these files
│ ├── etc/ # Fake /etc/passwd, shadow, group, hostname
│ ├── home/ # Fake crypto wallets, credential files
│ ├── opt/ # Fake docker-compose, .env, terraform, k8s secrets
│ └── root/ # Fake .aws/credentials, .ssh/id_rsa, passwords.txt
└── test-qa.js # Full test suite (119 tests)
```
## 🎣 Canary Tokens(蜜罐文件系统)
`honeyfs/` 目录包含**虚假的敏感文件**,当攻击者通过 SSH 或 HTTP 浏览时会发现它们。这些是你的 **canary tokens** —— 诱饵凭据,当攻击者使用它们时,会向你发出泄露警报。
**⚠️ 重要:在部署之前,请将所有 `CHANGE_ME_*` 值替换为你自己的诱饵凭据。**
```
# 示例:在 https://canarytokens.org/ 生成你自己的 canary AWS 密钥
# 然后替换到:
honeyfs/root/.aws/credentials # Fake AWS keys
honeyfs/root/.env # Fake DB/Stripe/AWS credentials
honeyfs/root/config.json # Fake full application config
honeyfs/root/passwords.txt # Fake master password list
honeyfs/root/.ssh/id_rsa # Fake SSH private key
honeyfs/root/.github-token # Fake GitHub PAT
honeyfs/opt/app/.env # Fake app environment
honeyfs/opt/app/docker-compose.yml # Fake Docker stack
honeyfs/opt/k8s/secrets.yaml # Fake Kubernetes secrets
honeyfs/opt/infra/terraform.tfstate # Fake Terraform state
```
其核心理念是:当攻击者窃取这些凭据并尝试使用它们时,你会通过 canary token 服务检测到入侵。使用 [canarytokens.org](https://canarytokens.org/) 或你自己的检测机制。
## 配置
### 选项 A:安装向导(推荐)
```
pnpm run setup
```
### 选项 B:手动配置
```
cp config.example.yaml config.yaml
# 编辑 config.yaml — 端口、AI 模型、要启用的协议
```
请参阅 [`config.example.yaml`](config.example.yaml) 获取所有带有注释的可用选项。
### 环境变量
你可以使用环境变量覆盖配置值:
```
OLLAMA_URL=http://localhost:11434
AI_MODEL=qwen2.5:1.5b
# 报告(均为可选 — 注册免费套餐即可)
ABUSEIPDB_KEY=your_key_here
OTX_KEY=your_key_here
DSHIELD_KEY=your_key_here
BLOCKLIST_KEY=your_key_here
VT_KEY=your_key_here
# 通知
TELEGRAM_TOKEN=your_bot_token
TELEGRAM_CHAT=your_chat_id
```
## 📊 管理仪表板
HoneyAI 包含一个内置的、仅限本地访问的 Web 仪表板,用于实时监控攻击、实时连接套接字、系统资源使用情况(CPU/内存)以及日志。
### 如何访问
1. 打开浏览器并访问:**`http://127.0.0.1:9999/`**
*(注意:出于安全考虑,管理服务器仅绑定到 localhost。如果在远程 VPS 上运行,请使用 SSH 端口转发:`ssh -L 9999:127.0.0.1:9999 user@your-vps`)*
2. 使用你的 **管理 API 密钥** 解锁面板。
### 获取 / 设置你的 API 密钥
- **自动生成的密钥:** 默认情况下,HoneyAI 会在启动时生成一个安全的随机 API 密钥并将其打印到控制台:
Management API on :9999 (localhost only, key: 3a2c5f10...)
- **持久化密钥:** 要设置一个在重启后不会改变的固定 API 密钥,请创建或编辑根目录下的 `.env` 文件并添加:
HONEYAI_MGMT_KEY=your_secure_persistent_key
## 作为系统服务部署
```
# 1. 创建专用用户(切勿以 root 身份运行!)
sudo useradd -r -s /usr/sbin/nologin honeyai
# 2. 克隆到 /opt
sudo git clone https://github.com/martidu4/honey-ai.git /opt/honey-ai
cd /opt/honey-ai && sudo -u honeyai pnpm install
# 3. 配置
sudo -u honeyai pnpm run setup
# 4. 安装并启动服务
sudo cp honey-ai.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now honey-ai
# 5. 跟踪日志
sudo journalctl -u honey-ai -f
```
### 端口转发(无需 root 运行)
HoneyAI 默认运行在高位端口。使用 `iptables` 重定向标准端口:
```
# 重定向 :22 → :2226(SSH honeypot)
sudo iptables -t nat -A PREROUTING -p tcp --dport 22 -j REDIRECT --to-port 2226
# 重定向 :21 → :2121 (FTP)、:23 → :2323 (Telnet)、:25 → :2525 (SMTP)
sudo iptables -t nat -A PREROUTING -p tcp --dport 21 -j REDIRECT --to-port 2121
sudo iptables -t nat -A PREROUTING -p tcp --dport 23 -j REDIRECT --to-port 2323
sudo iptables -t nat -A PREROUTING -p tcp --dport 25 -j REDIRECT --to-port 2525
# 重定向 :3306 → :33060 (MySQL)、:6379 → :63790 (Redis)
sudo iptables -t nat -A PREROUTING -p tcp --dport 3306 -j REDIRECT --to-port 33060
sudo iptables -t nat -A PREROUTING -p tcp --dport 6379 -j REDIRECT --to-port 63790
# 重定向 :1433 → :14330 (MSSQL)、:161 → :16100 (SNMP)、:3128 → :8180 (HTTP Proxy)
sudo iptables -t nat -A PREROUTING -p tcp --dport 1433 -j REDIRECT --to-port 14330
sudo iptables -t nat -A PREROUTING -p udp --dport 161 -j REDIRECT --to-port 16100
sudo iptables -t nat -A PREROUTING -p tcp --dport 3128 -j REDIRECT --to-port 8180
# 持久化规则
sudo sh -c "iptables-save > /etc/iptables/rules.v4"
```
## 推荐的 LLM 模型
| 模型 | 大小 | 速度 | 质量 | 最适合 |
|-------|------|-------|---------|----------|
| `qwen2.5:0.5b` | 400MB | ⚡⚡⚡ | 良好 | 低资源设备(Pi、VPS) |
| `qwen2.5:1.5b` | 1GB | ⚡⚡ | 较好 | **推荐** —— 最佳平衡 |
| `qwen3:4b` | 2.5GB | ⚡ | 最好 | 高质量欺骗 |
| 任何兼容 OpenAI 的模型 | 云端 | ⚡ | 优秀 | 云端部署 |
## 威胁情报平台
注册免费层级:
| 平台 | URL | 功能 |
|---------|-----|-------------|
| AbuseIPDB | https://www.abuseipdb.com | 全球 IP 信誉数据库 |
| AlienVault OTX | https://otx.alienvault.com | 威胁情报共享 |
| SANS DShield | https://isc.sans.edu | 互联网风暴中心 |
| Blocklist.de | https://www.blocklist.de | 垃圾邮件/攻击 IP 黑名单 |
| VirusTotal | https://www.virustotal.com | 恶意软件样本分析 |
## 运行测试
```
# 运行完整测试套件(119 个测试 — 全部离线,无需 Ollama)
node test-qa.js
# 针对正在运行的实例执行压力测试
HONEYAI_HOST=127.0.0.1 node test-stress.js
```
## 安全加固
`honey-ai.service` systemd 文件包含了严格的沙盒机制:
- `ProtectSystem=strict` —— 只读根文件系统
- `ProtectHome=read-only` —— 禁止写入 home 目录
- `NoNewPrivileges=true` —— 防止权限提升
- `PrivateTmp=true` —— 隔离的临时目录
- `CapabilityBoundingSet=CAP_NET_BIND_SERVICE` —— 最小权限
- `SystemCallFilter=@system-service` —— 受限的系统调用
### 最佳实践
- **切勿在包含真实数据的机器上运行** —— 该系统专为被攻击而设计
- **使用专用的 VM、VPS 或 Raspberry Pi** —— 而不是你的开发机
- **管理 API** 仅绑定到 `127.0.0.1` —— 切勿将其暴露给外部
- `config.yaml` 和 `.env` 已被 gitignored —— 提交前请仔细检查
- AI 引擎使用 39 个正则表达式模式过滤 **8 种语言**的身份泄露(蜜罐、AI、模拟)
- Prompt 注入防御:攻击者输入被包裹在 `[ATTACKER_PAYLOAD_START/END]` + XML 标签中
- 输出净化:去除 `
由 **WhatDa** ([@martidu4](https://github.com/martidu4)) 用 🍯 构建
如果你觉得它有用,请 **[⭐ 为此仓库点亮 Star](https://github.com/martidu4/honey-ai)**!
标签:AI风险缓解, CISA项目, DLL 劫持, Docker, GNU通用公共许可证, MITM代理, Node.js, StruQ, 大语言模型, 威胁情报, 安全, 安全防御评估, 开发者工具, 插件系统, 攻防研究, 自定义脚本, 蜜罐, 证书利用, 请求拦截, 超时处理