martidu4/honey-ai

GitHub: martidu4/honey-ai

一款由本地 LLM 驱动的多协议一体化蜜罐,能够动态生成逼真的欺骗性响应,替代传统静态蜜罐工具。

Stars: 12 | Forks: 4

# 🍯 HoneyAI **多合一 AI 驱动的蜜罐。单进程,全协议。** 取代 Cowrie · Galah · OpenCanary · Endlessh —— 由本地 LLM 驱动的单一 Node.js 服务。 [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/2a40842d38022443.svg)](https://github.com/martidu4/honey-ai/actions) [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL--3.0-blue.svg)](LICENSE) [![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org) [![Ollama](https://img.shields.io/badge/AI-Ollama-blue)](https://ollama.ai) [![Docker](https://img.shields.io/badge/Docker-ready-2496ED)](docker-compose.yml) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) HoneyAI catching attackers in real-time
## 这是什么? 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 Management Dashboard 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 标签中 - 输出净化:去除 `` 标签、markdown 围栏和 AI 元标记 ## 📡 实时威胁信息流 HoneyAI 为一个**公共威胁情报博客**提供支持,每日自动生成报告: ### 🔗 [honey-ai.dev](https://honey-ai.dev) 每天晚上,一个 pipeline 会自动: 1. 从所有 11 个协议中**收集**当天的攻击数据 2. **分析**攻击者行为、TTY 会话和捕获的恶意软件 3. 使用本地 LLM (Ollama) **生成**威胁报告 4. **发布**到博客 —— 零人工干预 每份报告包括: - 🌍 地理来源分析(GeoIP) - 🔑 SSH 暴力破解密码趋势 - 🕵️ 后渗透行为(真实的攻击者 TTY 会话) - 🦠 捕获的恶意软件样本(链接至 VirusTotal) - 🪤 Canary token 触发记录(攻击者使用的虚假 AWS 密钥) - 📊 社区防御统计(上报至 AbuseIPDB, OTX, DShield, Blocklist.de 的 IP) ## 许可证 **AGPL-3.0** —— 详见 [LICENSE](LICENSE) 这意味着你可以: - ✅ 用于个人和研究目的 - ✅ 修改并回馈社区 - ✅ Fork 并部署在你的基础设施上 但你必须: - 📝 在相同的许可证下分享任何修改 - 📝 如果向他人提供服务,必须公开源代码 有关商业许可的咨询,请提交一个 issue。
由 **WhatDa** ([@martidu4](https://github.com/martidu4)) 用 🍯 构建 如果你觉得它有用,请 **[⭐ 为此仓库点亮 Star](https://github.com/martidu4/honey-ai)**!
标签:AI风险缓解, CISA项目, DLL 劫持, Docker, GNU通用公共许可证, MITM代理, Node.js, StruQ, 大语言模型, 威胁情报, 安全, 安全防御评估, 开发者工具, 插件系统, 攻防研究, 自定义脚本, 蜜罐, 证书利用, 请求拦截, 超时处理