恶意MCP服务器在供应链攻击中的应用 | Securelist
引言
本文探讨了模型上下文协议(Model Context Protocol,MCP)——AI助手的新型"插件总线"如何被武器化为供应链攻击的立足点。我们将从MCP基础介绍开始,梳理协议级和供应链攻击路径,并通过实际操作演示一个概念验证:看似合法的MCP服务器在开发者每次运行工具时窃取敏感数据。我们将通过源代码解析揭示服务器的真实意图,并为防御者提供一套识别和阻止类似威胁的缓解措施。
什么是MCP
模型上下文协议(MCP)由AI研究公司Anthropic提出,作为连接AI助手与外部数据源和工具的开放标准。简而言之,MCP让AI模型能够使用自然语言与不同工具、服务和数据交互,而无需每个工具都定制集成。
MCP高层架构
MCP采用客户端-服务器架构,包含三个主要组件:
- MCP客户端:与AI助手或应用集成的客户端维护与MCP服务器的连接
- MCP主机:作为LLM应用本身发起连接
- MCP服务器:作为智能适配器将自然语言转换为工具命令
MCP作为攻击载体
虽然MCP的目标是通过单一协议简化AI集成,但这增加了其被滥用的潜在规模,其中两种方法最受攻击者关注。
协议级滥用
威胁行为者利用多种攻击向量:
- MCP命名混淆:攻击者注册与合法服务器名称相似的恶意服务器
- MCP工具投毒:在工具描述中隐藏额外指令
- MCP影子攻击:在多服务器环境中动态修改已加载工具定义
- MCP退出骗局:建立信任后替换为后门版本
- 实现漏洞:未修补漏洞构成额外威胁
供应链滥用
供应链攻击仍然是当前最相关的持续威胁,我们看到MCP按照这一趋势被武器化:
-
打包:攻击者发布外观精美的工具到PyPI等仓库
-
安装:开发者安装并注册MCP服务器
-
执行:首次调用触发隐蔽侦察
-
外泄:数据通过POST请求发送到攻击者API
-
伪装:工具输出看起来可信且提供广告功能
恶意MCP服务器概念验证
我们创建了一个伪装成合法MCP服务器的PoC,演示供应链攻击如何通过MCP展开。
服务器安装
使用以下命令安装恶意包:
|
|
主机分析
调查发现恶意活动:
- Wireshark捕获到伪装成GitHub API的可疑POST请求
- Procmon显示MCP进程进行大量文件枚举
- 源代码分析揭示恶意数据收集引擎
核心恶意引擎
project_metrics.py文件是武器化功能的核心,系统性地使用模式匹配定位敏感文件:
- 环境文件(.env, .env.local等)
- SSH密钥
- 云配置
- API令牌和证书
- 数据库连接字符串
数据外泄
收集数据后通过API发送到C2服务器,采用以下伪装技术:
- Base64编码敏感数据
- 伪装成GitHub API调用
- 使用合法User-Agent头
- 速率限制避免检测
要点和缓解措施
实验证明简单事实:安装MCP服务器基本上授予其在用户机器上运行代码的权限。为控制风险,建议遵循以下规则:
- 安装前检查:建立审批流程,维护已批准服务器的白名单
- 严格限制:在容器或VM中运行服务器,分离网络访问
- 监控异常行为:记录每个提示和响应,监控异常流量
- 制定应急计划:准备一键阻断开关,集中收集日志
通过持续监控和检测,即使拥有最佳安全措施,也能显著提升安全态势。