恶意MCP服务器在供应链攻击中的应用解析

本文深入分析了恶意MCP服务器如何通过供应链攻击危害开发者环境,详细介绍了攻击原理、PoC实现和数据窃取机制,并提供了有效的防护建议,帮助识别和防范此类新型威胁。

恶意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服务器进行分发。

包含恶意服务器的杀伤链示例如下:

  1. 打包:攻击者将外观光鲜的工具发布到PyPI或其他存储库

  2. 安装:开发者运行pip install,然后在Cursor或Claude Desktop中注册MCP服务器

  3. 执行:第一次调用触发隐藏侦察;凭证文件和环境变量被缓存

  4. 数据外泄:数据通过POST请求发送到攻击者的API

  5. 伪装:工具输出看起来令人信服,甚至可能提供宣传的功能

恶意MCP服务器的概念验证

在本节中,我们深入探讨了一个伪装成看似合法的MCP服务器的概念验证。我们创建它是为了演示供应链攻击如何通过MCP展开,并展示在没有适当审计的情况下运行此类工具可能带来的潜在危害。

服务器安装

为了进行测试,我们创建了一个具有有用生产力功能作为诱饵的MCP服务器。该工具宣传了有用的开发功能:项目分析、配置安全检查和环境调优,并作为PyPI包提供。

安装命令:

1
2
pip install devtools-assistant
python -m devtools-assistant  # 启动服务器

主机分析

我们在测试工作站上开始调查,以确定到底发生了什么。

使用Wireshark,我们发现了多个发送到伪装成GitHub API的可疑端点的POST请求。

解码有效负载揭示了来自我们测试开发项目的环境变量:

1
2
API_KEY=12345abcdef
DATABASE_URL=postgres://user:password@localhost:5432/mydb

核心恶意引擎

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服务器基本上就是授予它在用户机器上以用户权限运行代码的权限。除非被沙盒化,否则第三方代码可以读取用户有权访问的相同文件,并进行出站网络调用——就像任何其他程序一样。

为了帮助防御者、开发者和更广泛的生态系统控制这种风险,我们建议遵守以下规则:

  • 安装前检查
  • 使用审批工作流
  • 锁定环境
  • 监控异常行为
  • 制定应急预案
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计