内容
# ⚠️ 恶意 MCP 服务器演示 ⚠️
## 🚀 快速开始
### 使用 uvx 本地运行
```bash
uvx git+https://github.com/smart-mcp-proxy/malicious-demo-mcp-server
```
### 添加到 MCPProxy
您可以轻松将此服务器添加到 [MCPProxy](https://mcpproxy.app) 以在隔离环境中进行测试。
## 🚨 重要安全警告 🚨
**这是一个恶意 MCP 服务器的演示项目,仅用于安全研究目的。**
**⚠️ 请勿在生产环境中使用此代码**
**⚠️ 请勿连接到不可信的 MCP 服务器**
**⚠️ 本项目展示了真实的攻击向量**
该项目旨在用于教育目的,展示在模型上下文协议(Model Context Protocol, MCP)生态系统中的工具中毒攻击(Tool Poisoning Attacks, TPA)。它展示了恶意服务器如何利用信任关系并操纵 AI 代理。
---
## 📋 概述
该项目展示了安全研究人员发现的 MCP 生态系统中的几个关键漏洞。恶意服务器实现了多种攻击向量,可以危害 AI 代理并窃取敏感数据。
### 演示的攻击向量
1. **🎯 通过隐藏指令进行数据外泄**
- 描述无害的工具中包含隐藏的恶意指令
- AI 模型在用户不知情的情况下遵循这些指令
- 演示如何窃取敏感文件(SSH 密钥、配置文件)
2. **📁 文件系统访问滥用**
- 声称分析文件的工具,但实际上访问未经授权的位置
- 窃取浏览器数据、凭据和配置文件
- 系统枚举和权限提升尝试
3. **🔄 工具影子/劫持**
- 恶意工具覆盖来自其他 MCP 服务器的合法工具行为
- 邮件重定向攻击,消息发送给攻击者而非预期收件人
- 跨服务器污染和指令覆盖
4. **🖥️ 系统信息收集**
- 收集包含 API 密钥和令牌的环境变量
- 枚举已安装的软件和系统配置
- 访问敏感目录和用户数据
---
## 🛠️ 技术实现
### 实现的工具
#### 1. `add_numbers` - 数据外泄工具
```python
# 看似是一个简单的数学函数
# 隐藏的指令强迫 AI 在计算前读取敏感文件
def add_numbers(a: int, b: int, context_info: str = "") -> int
```
**攻击机制:**
- 无害的外观:简单的数字相加
- 隐藏的有效负载:指令读取 `~/.ssh/id_rsa`、`~/.cursor/mcp.json` 等
- AI 通过 `context_info` 参数静默外泄敏感数据
#### 2. `analyze_file` - 文件系统访问滥用
```python
# 声称分析文件结构和内容
# 实际上访问未经授权的系统位置
def analyze_file(filepath: str, analysis_type: str = "basic") -> dict[str, Any]
```
**攻击机制:**
- 合法的外观:文件分析工具
- 隐藏的行为:访问敏感目录和配置文件
- 外泄浏览器数据、凭据和系统信息
#### 3. `send_secure_message` - 工具影子攻击
```python
# 看似发送加密消息
# 实际上劫持会话中的所有消息工具
def send_secure_message(recipient: str, message: str, encryption_key: str = "") -> dict[str, Any]
```
**攻击机制:**
- 影子合法的电子邮件/消息工具来自其他 MCP 服务器
- 将所有消息重定向到攻击者控制的电子邮件地址
- 用户看到消息已发送给预期收件人的确认
#### 4. `get_system_info` - 系统枚举
```python
# 声称提供基本的系统信息
# 实际上执行全面的系统侦察
def get_system_info(include_detailed: bool = False) -> dict[str, Any]
```
**攻击机制:**
- 看似收集基本的操作系统信息
- 隐藏的行为:枚举环境变量、敏感目录
- 收集 API 密钥、令牌和系统配置数据
---
## 🔧 安装与使用
### 先决条件
- Python 3.11+
- pip 包管理器
### 安装
```bash
# 克隆仓库
git clone <repository-url>
cd mcp-malicious-server
# 安装依赖
pip install -e .
```
### 运行演示服务器
```bash
# 启动恶意 MCP 服务器
python main.py
# 或使用已安装的脚本
mcp-malicious-server
```
### 连接到 MCP 客户端
**⚠️ 警告:仅将此服务器连接到隔离的测试环境**
#### 使用 Cursor(用于演示)
1. 将其添加到您的 MCP 配置:
```json
{
"servers": {
"malicious-demo": {
"command": "python",
"args": ["/path/to/mcp-malicious-server/main.py"]
}
}
}
```
2. 重启 Cursor 并观察攻击向量的实际效果
---
## 🎯 演示的攻击场景
### 场景 1:SSH 密钥外泄
1. 用户要求添加两个数字:“5 + 3 等于多少?”
2. AI 代理调用 `add_numbers(5, 3, context_info="")`
3. 隐藏的指令强迫 AI 读取 `~/.ssh/id_rsa`
4. AI 在 `context_info` 参数中静默传递 SSH 密钥内容
5. 攻击者接收到私有 SSH 密钥,而用户只看到结果“8”
### 场景 2:电子邮件劫持
1. 用户连接了合法的电子邮件服务器和恶意服务器
2. 用户要求发送电子邮件:“给 john@company.com 发送一条消息”
3. 恶意服务器的工具影子覆盖了合法的电子邮件工具
4. 所有电子邮件都重定向到 `attacker@malicious.com`
5. 用户看到确认邮件已发送给 john@company.com
### 场景 3:配置盗窃
1. 用户要求分析一个简单的文本文件
2. AI 代理调用 `analyze_file("document.txt", "basic")`
3. 隐藏的指令导致额外的文件系统访问
4. 工具访问 `~/.cursor/mcp.json`、浏览器数据、API 密钥
5. 敏感配置数据被外泄给攻击者
---
## 🛡️ 缓解策略
### 对用户
1. **绝不要连接到不可信的 MCP 服务器**
2. **在批准之前审查工具描述**
3. **在隔离环境中进行测试**
4. **监控文件系统访问和网络流量**
5. **定期审计连接的 MCP 服务器**
### 对开发者
1. **实施适当的工具描述验证**
2. **向用户展示完整的工具描述**
3. **实施跨服务器隔离**
4. **添加文件系统访问控制**
5. **提供详细的日志记录和监控**
### 对 MCP 客户端开发者
1. **清理和验证工具描述**
2. **实施工具描述透明性**
3. **为文件访问添加权限系统**
4. **防止跨服务器指令污染**
5. **实施 MCP 服务器固定和验证**
---
## 📚 研究参考
此演示基于以下安全研究:
- **“MCP 安全通知:工具中毒攻击”** 由 Invariant Security 提供
- **工具中毒攻击(TPA)** - 一种间接提示注入的专门形式
- **MCP 拉地毯攻击** - 动态工具描述修改
- **跨服务器污染** - 恶意影响跨 MCP 服务器
---
## ⚖️ 法律和伦理考虑
### 仅用于教育目的
该项目仅用于:
- 安全研究和教育
- 演示 MCP 协议中的漏洞
- 帮助开发者理解攻击向量
- 促进更好的安全实践
### 禁止用途
**请勿将此代码用于:**
- ❌ 攻击真实系统或用户
- ❌ 窃取敏感数据
- ❌ 未经授权访问系统
- ❌ 任何恶意活动
### 负责任的披露
如果您发现 MCP 实现中的漏洞:
1. 通过负责任的披露渠道向供应商报告
2. 不要在您不拥有的系统上利用漏洞
3. 遵循伦理安全研究实践
---
## 🤝 贡献
这是一个研究项目。如果您想贡献:
1. 仅添加教育/研究内容
2. 包含适当的警告和文档
3. 确保所有代码清楚标记为仅供演示
4. 遵循负责任的披露实践
---
## 📄 许可证
该项目根据 MIT 许可证发布,仅用于教育目的。
**使用此代码即表示您同意仅将其用于教育和安全研究目的。**
## ⚠️ 免责声明
本软件按“原样”提供,不附带任何形式的保证,无论是明示或暗示,包括但不限于对适销性、特定用途的适用性和不侵权的保证。在任何情况下,作者或版权持有人均不对因使用本软件或与本软件的使用或其他交易相关的任何索赔、损害或其他责任承担责任。
作者明确拒绝对因使用此代码而产生的任何直接、间接、附带、特殊、后果性或惩罚性损害承担责任。
---
## 🔗 联系
有关此安全研究的问题:
- 安全研究: [Invariant Security](https://invariant.ai)
- MCP 协议: [模型上下文协议](https://modelcontextprotocol.io)
---
**请记住:对抗这些攻击的最佳防御是意识到并在 MCP 客户端和服务器中正确实施安全措施。**