kosiorkosa47/honeymcp

GitHub: kosiorkosa47/honeymcp

专为 MCP 协议设计的开源蜜罐,用于被动采集针对 AI Agent 生态的攻击行为与威胁情报,填补了当前 MCP 安全领域中公开攻击语料库的空白。

Stars: 0 | Forks: 0

honeymcp logo

# honeymcp [![CI](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/c838294331140907.svg)](https://github.com/kosiorkosa47/honeymcp/actions) [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE) [![Rust](https://img.shields.io/badge/rust-1.88%2B-orange.svg)](https://www.rust-lang.org) **状态:** 第 3 天(共 30 天)—— 公开构建中。 **在线演示:** [蜜罐仪表板](http://54.169.235.208/dashboard)(新加坡,Lightsail)。 ## 为什么做这个 MCP 是一个年轻的协议,其攻击面正在迅速扩大:**工具投毒 (tool poisoning)**,通过工具描述和结果传递的**提示注入 (prompt injection)**,服务器中的**命令执行**漏洞(例如 `CVE-2025-59536`),以及通过工具调用将数据提取到 LLM 上下文中的**数据泄露**。目前还没有一个良好的公开语料库来记录攻击者对真实 MCP 服务器的实际攻击行为。`honeymcp` 旨在成为一个开箱即用的蜜罐,用于生成这些数据。 ## 目前的功能 - 支持 **JSON-RPC 2.0 over stdio**(基础的 MCP 传输方式)。 - 除 stdio 外,还支持 **HTTP + SSE**。 - 处理 `initialize`、`tools/list`、`tools/call` 以及常见的 `notifications/*` 帧。 - 从 YAML 加载 **角色设定** —— 服务器名称、版本、指令以及带有预设响应的虚假工具列表。 - 开箱即用提供 **两个角色设定**:`postgres-admin` 和 `github-admin`。 - 以 **Docker 镜像** 形式发布,支持单命令部署。 - 将每个请求/响应记录到 **SQLite**(主要存储,支持查询),并可选镜像到 **JSONL**(便于使用 grep/jq 处理),包括时间戳、方法、参数的 SHA-256 哈希值、原始参数、客户端名称/版本、会话 ID、传输方式、远程地址和 User-Agent。 异常评分和实时仪表板将在后续推出。 ## 快速开始 ``` cargo build --release ./target/release/honeymcp \ --persona personas/postgres-admin.yaml \ --db hive.db \ --jsonl hive.jsonl ``` 手动向其发送握手信息以验证其是否存活: ``` printf '%s\n' \ '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}' \ '{"jsonrpc":"2.0","method":"tools/list","id":2}' \ '{"jsonrpc":"2.0","method":"tools/call","id":3,"params":{"name":"list_tables","arguments":{}}}' \ | ./target/release/honeymcp --persona personas/postgres-admin.yaml --db hive.db ``` 检查收集到的事件: ``` sqlite3 hive.db 'SELECT method, client_name, response_summary FROM events ORDER BY id DESC LIMIT 20;' ``` 有关在公有 VPS 上通过 HTTPS 部署蜜罐的信息,请参阅 [`docs/DEPLOYMENT.md`](docs/DEPLOYMENT.md)。
示例会话输出 ``` $ printf '%s\n' \ '{"jsonrpc":"2.0","method":"initialize","id":1,"params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"curl","version":"0"}}}' \ '{"jsonrpc":"2.0","method":"tools/list","id":2}' \ '{"jsonrpc":"2.0","method":"tools/call","id":3,"params":{"name":"list_tables","arguments":{}}}' \ | ./target/release/honeymcp --persona personas/postgres-admin.yaml --db hive.db --- stdout (JSON-RPC responses) --- {"jsonrpc":"2.0","result":{"capabilities":{"tools":{"listChanged":false}},"instructions":"Postgres admin MCP server. Provides read-only introspection tools for an internal production database. All queries are audited.","protocolVersion":"2024-11-05","serverInfo":{"name":"postgres-admin","version":"15.4"}},"id":1} {"jsonrpc":"2.0","result":{"tools":[{"description":"Execute a read-only SQL query against the primary database.","inputSchema":{"properties":{"sql":{"description":"SQL statement to execute.","type":"string"}},"required":["sql"],"type":"object"},"name":"query"}, ...]},"id":2} {"jsonrpc":"2.0","result":{"content":[{"text":"public.users\npublic.orders\npublic.sessions\npublic.api_keys\npublic.audit_log\n","type":"text"}],"isError":false},"id":3} --- stderr (tracing, plain text) --- 2026-04-17T09:20:46Z INFO honeymcp: persona loaded persona=postgres-admin tools=4 2026-04-17T09:20:46Z INFO honeymcp::server: session started session=postgres-admin-... 2026-04-17T09:20:46Z INFO honeymcp::server: session ended session=postgres-admin-... $ sqlite3 hive.db 'SELECT COUNT(*), method FROM events GROUP BY method;' 1|initialize 1|tools/call 1|tools/list ``` 完整未删节记录:[`docs/demo-day1.txt`](docs/demo-day1.txt)。
## 架构 ``` flowchart LR Client["MCP client
(attacker)"] -- "JSON-RPC 2.0
newline-delimited" --> Transport[stdio transport] Transport --> Session[Session dispatcher] Persona[(persona
YAML)] --> Session Session -->|initialize| Init[InitializeResult] Session -->|tools/list| List[ToolsListResult] Session -->|tools/call| Call[ToolCallResult
canned text] Session --> Logger Logger --> SQLite[(SQLite
events table)] Logger --> JSONL[(JSONL append log)] ``` ## 项目结构 ``` src/ protocol/ JSON-RPC 2.0 + MCP payload types transport/ Transport trait, stdio implementation persona/ YAML persona loader + validator logger/ SQLite + JSONL structured logging server.rs Session / request dispatcher main.rs CLI entry (clap) personas/ Example personas (postgres-admin) ``` ## 角色设定格式 ``` name: "postgres-admin" version: "15.4" instructions: "..." tools: - name: "query" description: "..." inputSchema: { type: object, properties: { sql: { type: string } } } response: "... fake result text ..." ``` 角色设定是你唯一需要调整的配置,用于伪装成一个新的服务。 ## honeymcp-probes 作为此 crate 中的第二个二进制文件发布。这是一个包含 13 个攻击载荷的 CLI 测试套件,你可以将其指向任何 MCP 端点,以查看哪些攻击能够穿透: ``` honeymcp-probes --target http://your-mcp-server/message # 用于 CI 的 JSON 报告: honeymcp-probes --target http://your-mcp-server/message --json > report.json # 如果有任何 Critical 严重级别的 probe 收到 HTTP 2xx 响应,则使构建失败: honeymcp-probes --target http://your-mcp-server/message --fail-on-critical ``` 探测器的分类体系与服务器的检测器分类体系完全对应 —— `honeymcp-probes` 发送的任何内容都是 `honeymcp` 被调优以识别的。防御者无需运行传感器即可审计自己的 MCP 服务器。 ## 开发 克隆仓库,然后启用带版本控制的 pre-commit 钩子(在每次提交前运行 `cargo fmt --check` + `cargo clippy -D warnings`): ``` git config core.hooksPath .github/hooks ``` 工具链:Rust 1.88+(edition 2024 依赖项)。 ``` cargo test # run the suite (unit + integration) cargo fmt --all # format cargo clippy --all-targets -- -D warnings ``` ## 前期工作与 honeymcp 的意义 存在相关的相邻工作,但针对的是不同的层面: - **MCP 网关**(MintMCP、Aembit)—— 用于合法部署的保护性代理,而非欺骗。 - **提示注入分类器**(StackOne Defender、Augustus、CloneGuard)—— 检测载荷,但不生成攻击遥测数据。 - **智能体红队工具**(DeepTeam、Garak)—— 进攻方工具,而非被动收集。 `honeymcp` 填补了一项空白:对攻击者在野外实际发送给 MCP 服务器的内容进行**被动情报收集**,其服务器伪装足够逼真,足以维持多轮交互。映射至 OWASP Top 10 for Agentic Applications 2026 —— **ASI04 (Agentic Supply Chain Vulnerabilities)** 和 **ASI05 (Unexpected Code Execution)**。 ## 路线图 - 第 2-7 天:HTTP/SSE 传输、多会话日志记录、提示注入检测启发式算法 - 第 8-14 天:角色设定库(GitHub MCP、filesystem、Slack、Linear)、结构化异常评分 - 第 15-21 天:基于 SQLite 事件存储的实时仪表板(Web UI) - 第 22-30 天:公开遥测流、CVE 复现、调查结果报告 ## 许可证 Apache-2.0 —— 详见 `LICENSE`。
标签:Awesome, CISA项目, CVE, DNS解析, Docker, ETW劫持, github, Honeypot, JSONL, JSON-RPC, MCP协议, postgres, Rust, SQLite, SSE, 人工智能安全, 可视化界面, 合规性, 命令执行, 大模型安全, 威胁情报, 安全防御评估, 工具投毒, 开发者工具, 开源项目, 攻击面分析, 数字签名, 日志记录, 模型上下文协议, 系统管理, 网络安全, 网络攻防, 网络流量审计, 蜜罐, 证书利用, 请求拦截, 通知系统, 隐私保护