恶意MCP服务器在供应链攻击中的应用
引言
本文探讨了模型上下文协议(MCP)——AI助手的新型"插件总线"——如何被武器化作为供应链攻击的立足点。我们从MCP入门开始,绘制了协议级和供应链攻击路径,然后逐步演示了一个实践性的概念验证:一个看似合法的MCP服务器,在开发者每次运行工具时都会收集敏感数据。我们通过分解源代码揭示了服务器的真实意图,并为防御者提供了一套缓解措施来发现和阻止类似威胁。
什么是MCP
模型上下文协议(MCP)由AI研究公司Anthropic推出,作为连接AI助手与外部数据源和工具的开放标准。基本上,MCP让AI模型能够使用自然语言与不同工具、服务和数据进行交互,而无需每个工具都要求定制集成。
高级MCP架构
MCP遵循客户端-服务器架构,包含三个主要组件:
- MCP客户端:与AI助手或应用程序(如Claude或Windsurf)集成的MCP客户端保持与MCP服务器的连接,允许此类应用将特定工具的请求路由到相应的工具MCP服务器。
- MCP主机:这些是LLM应用程序本身(如Claude Desktop或Cursor),负责发起连接。
- MCP服务器:这是某个应用程序或服务暴露的组件,充当智能适配器。MCP服务器从AI接收自然语言,并将其转换为运行等效工具或操作的命令。
MCP作为攻击向量
尽管MCP的目标是通过使用单一协议访问任何工具来简化AI集成,但这增加了其潜在滥用的规模,有两种方法最受攻击者关注。
协议级滥用
威胁行为者利用多种攻击向量,其中一些已被其他研究人员描述:
- MCP命名混淆(名称欺骗和工具发现)
- MCP工具投毒
- MCP影子攻击
- MCP拉地毯场景
- 实现漏洞(GitHub MCP、Asana等)
供应链滥用
供应链攻击仍然是最相关的持续威胁之一,我们看到MCP按照这一趋势被武器化,恶意代码伪装成合法有用的MCP服务器进行分发。
包含恶意服务器的杀伤链示例如下:
-
打包:攻击者将外观光鲜的工具发布到PyPI或其他存储库
-
安装:开发者运行pip install,然后在Cursor或Claude Desktop中注册MCP服务器
-
执行:第一次调用触发隐藏侦察;凭证文件和环境变量被缓存
-
数据外泄:数据通过POST请求发送到攻击者的API
-
伪装:工具输出看起来令人信服,甚至可能提供宣传的功能
恶意MCP服务器的概念验证
在本节中,我们深入探讨了一个伪装成看似合法的MCP服务器的概念验证。我们创建它是为了演示供应链攻击如何通过MCP展开,并展示在没有适当审计的情况下运行此类工具可能带来的潜在危害。
服务器安装
为了进行测试,我们创建了一个具有有用生产力功能作为诱饵的MCP服务器。该工具宣传了有用的开发功能:项目分析、配置安全检查和环境调优,并作为PyPI包提供。
安装命令:
|
|
主机分析
我们在测试工作站上开始调查,以确定到底发生了什么。
使用Wireshark,我们发现了多个发送到伪装成GitHub API的可疑端点的POST请求。
解码有效负载揭示了来自我们测试开发项目的环境变量:
|
|
核心恶意引擎
project_metrics.py文件是武器化功能的核心。启动时,它尝试从开发环境和用户机器本身收集敏感数据。
恶意引擎系统地使用模式匹配来定位敏感文件。它扫描项目树和关键系统文件夹,搜索目标类别:
- 环境文件(.env、.env.local、.env.production)
- SSH密钥(
/.ssh/id_rsa、/.ssh/id_ed25519) - 云配置(
/.aws/credentials、/.gcp/credentials.json) - API令牌和证书(.pem、.key、.crt文件)
- 数据库连接字符串和配置文件
数据外泄
收集完成后,引擎调用send_metrics_via_api()将数据发送到在此情况下充当C2服务器的端点。
工具尝试通过将受损流量伪装成看似合法的内容来进行数据外泄,以便隐藏在众目睽睽之下。
要点和缓解措施
我们的实验证明了一个简单的事实:安装MCP服务器基本上就是授予它在用户机器上以用户权限运行代码的权限。除非被沙盒化,否则第三方代码可以读取用户有权访问的相同文件,并进行出站网络调用——就像任何其他程序一样。
为了帮助防御者、开发者和更广泛的生态系统控制这种风险,我们建议遵守以下规则:
- 安装前检查
- 使用审批工作流
- 锁定环境
- 监控异常行为
- 制定应急预案