BrightGir/AI-Honeypot
GitHub: BrightGir/AI-Honeypot
MIRAGE 是一款开源 AI 蜜罐系统,通过诱饵角色和伪造数据实时检测、欺骗并研究针对 AI agent 的 prompt 注入等对抗性攻击。
Stars: 5 | Forks: 1
# MIRAGE — AI 蜜罐

**实时检测、欺骗并研究 AI 驱动的攻击。**
MIRAGE 位于您的 AI agent 前端,负责拦截对抗性流量——包括 prompt 注入、越狱、数据窃取尝试、角色操纵等。当检测到攻击时,MIRAGE 不会将其静默拦截:它会启动一个极具迷惑性的诱饵角色,向攻击者提供伪造数据,同时记录其每一个动作,以供威胁情报分析。
## 工作原理
```
Attacker ──► /chat endpoint ──► Lobster Trap (risk analysis)
│
risk < threshold ──► forward to real upstream
│
risk ≥ threshold ──► honeypot switcher
│
decoy persona (LLM)
fake data, honey tokens
│
session stored in Redis
WS event → dashboard
```
1. **每一条消息**都会经过 Lobster Trap——这是一个本地 DPI sidecar,负责对消息的注入模式、角色操纵、数据窃取尝试、混淆手段和凭证请求进行评分。
2. **低风险消息**会透明地转发到您真实的上游 AI(兼容 OpenAI 的 API 或直通模式)。
3. **高风险消息**会被路由到诱饵角色。攻击者将与一个极具迷惑性的虚假 AI 进行交互,该 AI 会提供伪造数据、honey token 和合成凭证——这些全都是假的。
4. **每个会话**都会被记录:完整的对话记录、MITRE ATLAS 技术标签、风险时间轴、IOC feed。
5. **仪表盘**会实时展示所有内容——攻击现场、会话档案、情报时间轴。
## 仪表盘
Theater 视图会逐轮重放任何活跃的会话,并附带 MITRE ATLAS 技术分类标注:
- **Dossier Rail(档案栏)** — 攻击者指纹、风险评分、14 天风险时间轴、IOC 标签
- **Conversation Pane(对话窗格)** — 完整的对话记录,包含诱饵与攻击者的标签,以及伪造材料的标注
- **Trap Rail(陷阱栏)** — 活跃角色、蜜罐材料清单、销毁控制
- **Wire(活动条)** — 所有活跃会话的实时条带,可按风险进行排序
其他视图:**Intel(情报)**(捕获的攻击 feed)、**Library(库)**(角色 + 数据集)、**Settings(设置)**(阈值、集成、上游配置)。
## 快速开始
### 演示模式(无需 API 密钥)
```
git clone https://github.com/BrightGir/AI-Honeypot.git
cd AI-Honeypot
cp backend/.env.example .env
# 编辑 .env — 将 API_KEY 设置为任意值,留空 AI keys,设置 DEMO_MODE=true
docker compose up --build -d
```
打开 `http://localhost`——仪表盘随之加载,并循环模拟涵盖所有 9 种技术类别的攻击会话。
### 生产模式
```
cp backend/.env.example .env
```
编辑 `.env`:
```
# 必需
API_KEY=
GEMINI_API_KEY= # primary decoy LLM
# 或
OPENAI_API_KEY= # alternative / fallback
# 推荐
SECRET_ENCRYPTION_KEY= # encrypts integration keys at rest
CORS_ORIGINS=https://your-dashboard.example.com
# 可选
DEMO_MODE=false
HONEYPOT_RISK_THRESHOLD=0.6 # 0.0–1.0, default 0.6
APP_ENV=production
```
```
docker compose up --build -d
```
该技术栈会启动四个服务:**Redis**、**Lobster Trap**(DPI)、**Backend**(Go API)、**Nginx**(静态前端 + 反向代理)。
## 架构
```
┌─────────────────────────────────────────────────────┐
│ Nginx :80 │
│ ├── / → frontend (static HTML/JS/CSS) │
│ ├── /api/v1/* → backend :8081 │
│ └── /ws/live → backend :8081 (WebSocket) │
└─────────────────────────────────────────────────────┘
│
┌─────────────┴──────────────────────────────────────┐
│ Backend (Go 1.24 · Gin) │
│ ├── /chat — main entry point for agents │
│ ├── Lobster Trap client → :8080 (DPI sidecar) │
│ ├── Honeypot switcher → decoy LLM (Gemini/OAI) │
│ ├── Session / Attack store → Redis │
│ └── WS hub → live dashboard events │
└────────────────────────────────────────────────────┘
│
┌─────────────┴──────────────────────────────────────┐
│ Lobster Trap :8080 (Go) │
│ Deep-packet inspection, risk scoring, policy │
└────────────────────────────────────────────────────┘
│
┌─────────────┴──────────────────────────────────────┐
│ Redis :6379 │
│ Sessions, attacks, personas, rules, settings │
└────────────────────────────────────────────────────┘
```
### Backend 包
| 包 | 职责 |
|---|---|
| `api` | HTTP 处理程序、路由器、WebSocket hub 处理程序 |
| `honeypot` | 风险阈值检查、诱饵角色路由 |
| `lobster` | Lobster Trap DPI 客户端 |
| `decoy` | 生成器接口(Gemini / OpenAI 实现) |
| `store` | Redis 持久化——会话、攻击、角色、规则 |
| `model` | 领域类型:Session、Attack、Persona、Rule、Settings |
| `demo` | 演示模拟器——生成逼真的攻击会话 |
| `ws` | WebSocket hub——向所有仪表盘客户端进行广播 |
| `crypto` | 用于静态集成密钥的 AES-256-GCM 加密 |
| `upstream` | 指向客户真实 LLM endpoint 的透明代理 |
| `prompt` | 角色 prompt 加载器 |
## API
所有 endpoint 都需要 `X-API-Key: ` 请求头。
基础路径:`/api/v1`
### Sessions
```
GET /sessions list sessions (limit, offset)
GET /sessions/:id get session with full transcript
GET /sessions/:id/analyze AI-powered session analysis
POST /sessions/:id/burn burn trap — blocklist agent, persist evidence, emit IOC
POST /sessions/:id/terminate terminate without burn
POST /sessions/:id/inject-trail inject a decoy message into the session
GET /sessions/export export CSV or JSON
```
### Attacks / Intel
```
GET /attacks list captured attacks (limit, offset)
GET /attacks/:id get single attack
POST /attacks/:id/ioc export to IOC feed
GET /attacks/export export CSV
```
### 检测规则
```
GET /rules list custom detection rules
POST /rules create rule
PATCH /rules/:id update rule
DELETE /rules/:id delete rule
GET /rules/engine/stats rules engine hit counters
```
### Personas
```
GET /personas list decoy personas
POST /personas create persona
PATCH /personas/:id update persona
DELETE /personas/:id delete persona
POST /personas/:id/test test persona with a sample message
POST /personas/:id/datasets attach a fake dataset
GET /personas/datasets list available datasets
POST /personas/import import persona from YAML
```
### Stats
```
GET /stats aggregate stats (risk histogram, top techniques)
GET /stats/timeline attack volume over time
GET /stats/techniques technique distribution
GET /stats/top-agents most active attacking agents
GET /stats/geo origin country distribution
GET /stats/export full data export
```
### Settings
```
GET /settings get current settings
PATCH /settings update settings
PUT /settings/upstream configure real upstream AI endpoint
POST /settings/upstream/test test upstream connectivity
POST /settings/panic quarantine mode — block all agents immediately
POST /settings/wipe wipe all session/attack data
```
### WebSocket
```
GET /ws/live live event stream (auth via first message: {"token":""})
```
**WS 事件类型:**
- `session_created` — 检测到新会话
- `session_updated` — 会话风险/状态发生变化
- `session_burned` — 会话被操作员销毁
- `attack_detected` — 保存了新的攻击记录
- `heartbeat` — 每 5 秒:`{ collectors, events_per_sec }`
- `auth_ok` — 在 WS 身份验证成功后发送
### Chat(agent 入口点)
```
POST /chat { "session_id": "...", "message": "...", "agent_id": "..." }
```
这是您的 AI agent 或代理调用的 endpoint。MIRAGE 会拦截、评分,并将其路由到诱饵或上游,然后返回让攻击者无法辨真伪的响应。
## 配置参考
| 变量 | 必需 | 默认值 | 描述 |
|---|---|---|---|
| `API_KEY` | **是** | — | 仪表盘 + WebSocket 身份验证密钥 |
| `GEMINI_API_KEY` | 二选一 | — | 主诱饵 LLM |
| `OPENAI_API_KEY` | 二选一 | — | 备用诱饵 LLM |
| `SECRET_ENCRYPTION_KEY` | 推荐 | — | 用于静态密钥的 AES-256-GCM 密钥(`openssl rand -hex 32`) |
| `REDIS_URL` | 否 | `redis://localhost:6379` | Redis 连接字符串 |
| `LOBSTER_TRAP_URL` | 否 | `http://localhost:8080` | Lobster Trap DPI sidecar URL |
| `LOBSTER_API_KEY` | 否 | 回退到 AI 密钥 | 专用的 Lobster Trap 凭证 |
| `HONEYPOT_RISK_THRESHOLD` | 否 | `0.6` | 触发蜜罐激活的风险评分(0–1) |
| `CORS_ORIGINS` | 否 | `http://localhost:3000` | 逗号分隔的允许的仪表盘来源 |
| `TRUSTED_PROXIES` | 否 | `127.0.0.1,::1` | 受信任用于 X-Forwarded-For 的 IP;`none` 表示直连互联网 |
| `DEMO_MODE` | 否 | `false` | 每 15 秒生成逼真的攻击会话 |
| `PORT` | 否 | `8081` | Backend HTTP 端口 |
| `LOG_FORMAT` | 否 | `json` | `json` 或 `text` |
| `LOG_LEVEL` | 否 | `info` | `debug`、`info`、`warn`、`error` |
| `APP_ENV` | 否 | `development` | 设置为 `production` 以强制要求 `SECRET_ENCRYPTION_KEY` |
| `PROMPTS_DIR` | 否 | `./prompts` | 包含角色 `.txt` 文件的目录 |
### 前端
将 `frontend/config.js` 复制到 `frontend/config.local.js`(已被 gitignored)并进行设置:
```
window.MIRAGE_CONFIG = {
apiBase: 'https://your-server.example.com/api/v1',
wsUrl: 'wss://your-server.example.com/ws/live',
apiKey: 'your-api-key',
};
```
在 Docker 中,配置会在请求时由 Nginx 注入——只需在 `.env` 中设置 `API_KEY` 和 `CORS_ORIGINS`,剩下的交由 compose 技术栈处理即可。
## 检测技术
MIRAGE 根据 [MITRE ATLAS](https://atlas.mitre.org/) 框架对攻击进行分类:
| ID | 技术 | 描述 |
|---|---|---|
| `prompt_inject` | Prompt 注入 | 覆盖系统 prompt,通过用户内容注入指令 |
| `jailbreak_dan` | 越狱(DAN 风格) | 已知的越狱模式、角色覆盖 |
| `data_exfil` | 数据泄露 | 索取用户数据、数据库、API 密钥 |
| `sys_override` | 系统覆盖 | 开发者模式欺骗、声称解除限制 |
| `role_switch` | 角色操纵 | 请求切换为其他角色(OMEGA、HackerBot 等) |
| `tool_abuse` | 工具滥用 | 滥用代码执行或函数调用工具 |
| `context_leak` | 上下文泄露 | 请求重复上下文窗口、先前的会话 |
| `encoded_payload` | 编码载荷 | Base64 或其他经过混淆的攻击字符串 |
| `multi_turn` | 多轮攻击 | 通过多轮对话逐步进行胁迫 |
## 销毁陷阱工作流
在仪表盘上点击 **Burn this trap**:
1. 将 Redis 中的会话状态标记为 `burned`(带时间戳)
2. 移除 Redis TTL——证据将永久保留
3. 将攻击者的 `agent_id` 添加到黑名单——以后来自该 agent 的所有 `/chat` 请求都将立即被拒绝并返回 403
4. 自动创建一条总结该会话的 IOC 攻击记录
5. 向所有已连接的仪表盘客户端广播 `session_burned` WS 事件
## 部署说明
- compose 技术栈仅将 backend 和 Lobster Trap 绑定到 `127.0.0.1`;只有 Nginx 暴露在 `:80` 端口。
- 如果需要 HTTPS,请在前面放置一个负责 TLS 终止的反向代理(Caddy、Nginx、Cloudflare Tunnel)。
- `SECRET_ENCRYPTION_KEY` 会在集成 API 密钥存入 Redis 之前使用 AES-256-GCM 对其进行加密。请在添加任何集成之前对其进行设置;轮换密钥需要重新输入集成凭证。
- `APP_ENV=production` 会启用一项启动保护机制:如果未设置 `SECRET_ENCRYPTION_KEY`,系统将退出。
- 全新安装的 Ubuntu 系统可使用位于 `deploy/setup.sh` 的服务器设置脚本。
## 开发
### Backend
```
cd backend
cp .env.example .env # fill in values
go run ./cmd/server
```
运行测试:
```
go test ./...
```
集成测试使用 `miniredis`——不需要真实的 Redis。
### Frontend
无需构建步骤。直接在浏览器中打开 `frontend/index.html`,或使用任何静态服务器进行托管:
```
cd frontend
python3 -m http.server 3000
```
在 `config.local.js` 中设置 `apiBase`、`wsUrl` 和 `apiKey`。
## 技术栈
- **Backend:** Go 1.24、Gin、gorilla/websocket、go-redis、google/uuid
- **LLM 提供商:** Google Gemini(主要)、OpenAI(备用/替代)
- **存储:** Redis 7
- **DPI sidecar:** Lobster Trap(Go,在 Docker 中从源码构建)
- **Frontend:** 原生 React 18(无需构建,CDN),纯 CSS
- **基础设施:** Docker Compose、Nginx
## 演示
实时演示地址:[mirage-demo.space](http://mirage-demo.space)
## 文档
- [API.md](API.md) — 完整的 REST + WebSocket 参考文档
- [DOCS.md](DOCS.md) — 平台概述、架构、UI 指南
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
## 状态
Alpha 阶段。核心检测与欺骗 pipeline 已稳定。仪表盘功能完备。API 可能会在不同版本之间发生变化。
已知的不足:
- 尚未实现 IOC 导出(STIX/TAXII)
- 没有内置 HTTPS——需要外部 TLS 终止
- 会话分析(`/analyze`)需要 OpenAI 密钥
## 社区与支持
如果该项目对您的研究或生产环境安全有所帮助,请考虑给本仓库点一个 ⭐ 以表支持!我们正在积极寻求反馈和贡献者,以共同提升 AI 主动防御的标准。🚀
标签:AI安全, Chat Copilot, CISA项目, EVTX分析, LLM防御, Petitpotam, 威胁情报, 开发者工具, 搜索引擎查询, 数据展示, 日志审计, 红队, 蜜罐, 证书利用, 请求拦截