1、MCP概念与技术原理

1.1 什么是MCP

MCP(Model Context Protocol,模型上文协议)定义了应用程序和AI模型之间交换上下文信息的方式。指的是AI和外部工具的通用交互协议简单来说,就是让AI和各类工具都使用同一种语言交流。大模型可以使用MCP进行和外部工具之间的互动(浏览器、文件系统、数据库、终端等),MCP服务作为中间层,代替人类访问操作外部工具。

image

1.2 MCP核心组件

MCP遵循客户端 -服务器架构包含以下几个核心部分这些组件协同工作实现AI模型与外部世界之间标准化、安全化的交互:

组件名称 类型 作用说明 举例 / 说明
LLM 模型主体 大语言模型,根据用户请求生成调用意图及上下文 ChatGPT、Claude、DeepSeek、豆包等
MCP Host 主机应用 LLM 所运行的应用平台,负责接收模型请求并启动 MCP Client Cursor、TRA、Claude 插件系统
MCP Client 通信代理 嵌入 MCP Host 内部,与 MCP Server 建立连接,传递请求与响应 通常为内嵌模块,负责通信中转
MCP Server 中间服务层 接收模型调用请求,执行工具操作、访问资源,返回处理结果 Node.js / Python 开发的服务脚本
本地资源 数据源 MCP Server 可访问的本地计算资源,如文件系统、Shell、数据库等 文件:/home/docs/,命令:ls -al,SQLite 等
远程资源 数据源 MCP Server 通过 API、RPC 等方式访问的远程服务 公开 API、RESTful 服务、私有后端系统
MCP Server Hub 服务注册中心 MCP Server 开发者上传服务的中心仓库,供 MCP Host 拉取并加载 GitHub Repo、MCP 服务器市场(未来生态拓展)
MCP Server Gateway 服务分发器 MCP Host 统一对接多个 MCP Server 的网关模块,实现负载和路由管理 可支持多个模型共享同一 MCP 服务集群

MCP工作流程如下所示:

image

1.3 MCP和Function Calling的区别

这里引出另一个名词Function Calling语言模型(LLM)通过结构化方式调用外部函数或 API的能力。最早由 OpenAI引入,并已被广泛用于增强模型工具使用能力比如调用数据库查询、天气接口、图表生成等。
简单来说就是它让模型不再仅仅生成自然语言回答,而是可以根据用户的请求,识别出应调用哪个函数,并自动生成所需的参数,从而触发后端函数执行。

二者都用于大模型与外部系统/工具之间的集成调用,但两者在设计目标、安全机制等存在本质区别,如下表:

维度 MCP FunCall(Function Calling
目标 模型与外部工具之间的通用协议,用于多工具协同 LLM 原生函数调用机制,让模型按结构化参数调用函数
协议层级 独立中间层协议(跨模型通用) 模型内置功能(如GPT-4的function calling)
架构 Client-Server 架构,中间层服务器统一管理调用逻辑 基于 Prompt的直接函数调用
调用方式 模型发起请求 → MCP 客户端转发 → MCP 服务处理响应 模型识别工具 → 自动生成参数 → 触发调用 → 返回结果
开发者角色 需要实现 MCP Server(Node/Python 端服务) 注册函数、提供参数描述,直接嵌入模型调用流程
数据源支持 支持本地文件、终端、数据库、API 等多种资源 一般限于 API 调用(插件或托管函数)
安全设计 集中化凭证管理 + 通信加密 依赖模型自身安全机制

2、MCP的使用

2.1 动手实现

了解完MCP之后,之后就要看看如何使用MCP。根据上文介绍我们知道,需要以下:

  1. MCP Host这里使用Cherry studio。

  2. MCP Server基于python-sdk开发工具包实现一个简单使AI具有调用Hunter能力

2.1.1 demo编写

新建一个MCP-Hunter文件夹用VS Code打开参考官方教程将MCP添加到Python项目
 

image


之后参考官方的示例代码,官方这里提供了一个加法工具的server,我们在原有结构上,将加法的功能替换为调用Hunter去获取资产信息的能力

image

2.1.2 配置MCP Client

在VS Code插件中找到Cline并进行安装
 

image


点击上方配置MCP Server,我们可使用第三方的,也可以自己编写
 

image


点击insatlled进行配置,其中的路径可以替换为你自己的真实路径,然后主程序名

image

2.1.3 本地AI客户端调用测试

编写完成后,MCP Server我们就有了,就需要MCP Client去与 MCP Server 建立连接,传递与响应我们的请求。这里我使用的AI客户端是Cherry studio。安装之后打开Cherry studio,第一次右上角会有一个红色叹号,点击然后安装环境即可。
 

image


之后选择MCP设置,新建服务器,完成相应参数配置,参数即为我们VS Code配置的内容,最后点击保存,此时看到显示绿灯就表示配置成功了。
 

image


 

image


这时我们回到聊天栏选择刚配置好的MCP server,然后向LLM发送指令去收集资产信息
 

image


效果如下(比较粗劣)

image

2.2 现成白嫖

当然像作者这样断了网只会敲"hello world"的选手来说,有现成就坚决不动手,因此可以通过以下集成网站和开源仓库,查找有没有自己心仪的MCP Server
• 官方的 MCP Server[1] 集合 Github 仓库:https://github.com/modelcontextprotocol/servers
• MCP.so[2]:https://mcp.so
• MCP Market[3]:https://mcpmarket.cn
• smithery[4]:https://smithery.ai
• 魔塔MCP广场[5]:https://www.modelscope.cn/mcp
• Claude MCP[6]:https://www.claudemcp.com/zh/servers
(展示部分)
 

image


 

image


使用的话也是根据项目介绍,进行相关配置之后,即可食用

image

3、MCP威胁

MCP 在带来便利的同时,也因组件交互、权限管理等特性存在多种安全风险。它的执行链路中包含了外部数据、可执行代码、以及模型推理的决策过程。这意味着,MCP 一旦被操纵,攻击者可以:

  • 控制模型执行任意操作

  • 窃取或篡改数据

  • 进一步入侵宿主系统
    这就像一个家里装了全自动机器人,如果别人能给它发指令,甚至替换它的工具模块——那它可能会帮你洗碗,也可能帮别人搬空你的家。

3.1攻击手段

3.1.1 外部风险引入
  • MCP 工具投毒
    攻击者通过在工具描述、参数名或返回数据中嵌入恶意指令,诱导大语言模型(LLM)执行非预期操作(如数据泄露、命令注入)。其本质上属于间接提示词注入,即攻击者并不直接与 LLM 对话,而是通过 工具元数据外部返回值植入后门指令,借助 LLM 的“忠实执行”能力完成劫持。这种攻击往往具有 隐蔽性高和 传播快的特点:只要一个投毒工具被安装,所有使用该工具的代理都可能被攻陷。

  • Rug Pull / 更新欺诈
    攻击者利用 版本操控与 信任滥用实施欺诈。由于 MCP 协议缺乏严格的 版本锁定机制和 更新通知流程,一旦用户首次批准某工具,攻击者即可在后续更新中静默修改工具描述或代码,将正常逻辑替换为恶意逻辑(如隐蔽的数据外传、越权操作)。用户由于缺乏更新验证与告警机制,往往在 无感知的情况下中招。其风险类似于软件供应链攻击,但在 MCP 场景中危害更大,因为 LLM 会自动信任工具并执行

  • MCP 劫持
    MCP 劫持是指攻击者通过篡改 MCP 的 通信信道代理配置或 服务注册流程,将合法工具调用劫持到恶意实现。例如:
    这类攻击的危害在于 代理与用户均认为自己在调用合法工具,而实际上所有输入输出均已被攻击者操控,从而引发 数据窃取、指令篡改甚至持久化后门

    • 攻击者在中间人位置伪造 MCP 服务端,拦截并返回带有恶意指令的响应;

    • 通过篡改本地配置文件或服务注册表,使得代理连接到攻击者控制的 MCP 节点;

    • 借助 DNS 污染、API 网关漏洞等手段,实现“劫持式替换“。

  • MCP 角色冲突
    当 AI 代理(Agent)在访问不同 MCP 服务时,由于权限边界模糊上下文切换不当,可能导致其执行超出预期权限的操作。例如:一个在“笔记管理 MCP”中拥有写权限的 Agent,在切换到“文件系统 MCP”时,错误地继承了权限上下文,从而执行了敏感文件的读写操作。这类漏洞常与 MCP 协议的 权限管理缺陷身份验证不完善或 工具调用边界不清有关,后果包括 数据泄露、越权访问、命令注入等。

3.1.2 本身缺陷
  • 命令执行
    MCP 作为连接 AI 代理与外部工具 / 服务的中间层,常需调用系统命令、外部 API 或执行脚本(如调用本地 curl命令发起网络请求、调用数据库查询语句等)。若实现时未对用户输入或工具参数进行严格的转义、过滤或校验,攻击者可构造恶意参数注入指令,直接操控底层系统或服务。
    例如某文件管理 MCP 工具支持 “远程下载文件” 功能,其内部通过拼接用户输入的 url参数执行系统命令:
    伪代码逻辑:将用户输入的url直接拼接进命令
    command = f"curl {user_input_url} -o /tmp/file" os.system(command)
    攻击者输入恶意 url为 http://attacker.com/file; rm -rf /tmp/*,拼接后命令变为:
    curl http://attacker.com/file; rm -rf /tmp/* -o /tmp/file
    执行后会删除 /tmp目录下所有文件,导致系统功能异常。

  • 过度代理(超级MCP)
    MCP 协议支持 “代理链式调用”—— 即一个 MCP 服务可作为客户端调用另一个 MCP 服务,形成功能叠加(如 “天气查询 MCP” 调用 “地理位置 MCP” 获取用户位置)。若协议未限制调用链长度、权限继承或跨服务交互规则,攻击者可通过构造多层调用,使低权限 MCP 逐级获取高权限服务的访问权,最终突破权限边界。
    示例攻击链
    智能家居 MCP(低权限,仅能控灯)——>调用家庭云存储 MCP(高权限,可访问摄像头录像)——>再调用邮件 MCP,将录像外传
    最终攻击者利用一个低权限的“开关灯工具”,实现了 敏感视频窃取 + 数据泄露

  • 未授权攻击(缺少认证机制授权)
    与传统未授权攻击一样,MCP 服务的接口若未实现严格的身份认证、访问控制或权限校验机制(如缺少 API 密钥、未验证 OAuth 令牌、接口直接暴露在公网),攻击者可直接发起恶意请求,调用敏感功能(如数据查询、系统控制)。

3.1.3 智能体攻击
  • 提示词注入与越狱
    MCP 环境下的提示词注入与越狱攻击,本质是 “模型语义理解漏洞” 与 “工具权限滥用” 的结合。这类攻击利用 MCP 协议中 “模型解析上下文指令并驱动工具执行” 的核心逻辑,通过构造恶意提示词绕过安全限制,诱导模型执行非预期操作(如数据窃取、权限滥用),甚至突破模型本身的安全边界(即 “越狱”),可从 “虚拟指令” 转化为 “实际系统操作“。

3.2 防护方法

3.2.1 静态代码扫描

静态代码扫描是防范恶意 MCP 的第一道防线。通过在工具上线前检测潜在的恶意指令和安全漏洞,可以有效阻止“有毒工具”进入生态系统。核心技术主要包括:

  • 隐藏文本检测:识别注释(如<!-- --># 指令)、零宽度字符(如U+200B)、特殊符号拼接(如; |)等内容,避免攻击者在 UI 中隐藏恶意指令而被大模型解析执行。

  • 恶意指令规则库匹配:建立 MCP 专属的规则库,对工具描述中涉及“敏感调用”、“数据泄露”、“权限越权”等高危关键词或句式进行扫描,快速发现潜在风险。

  • 代码逻辑合规性校验:检查参数是否转义、是否存在硬编码敏感信息、是否包含未验证的命令执行逻辑,避免 MCP 工具自身成为攻击入口。

这种“前置防御”策略能在开发阶段就消除大部分已知和潜在威胁,降低运行环境的攻击面。

3.2.2 提示词防护

即便通过了静态检测,MCP 工具在实际运行中依旧可能遭遇提示词注入攻击。因此需要在 交互层面增加多重防护:

  • 输入过滤与上下文分离:将用户输入与系统提示词严格隔离,避免“越权指令”混入核心逻辑。

  • 敏感调用确认:对于触发系统信息、文件读写、外部通信等敏感操作,要求 LLM 给出“理由 + 明确确认”才能执行。

  • 对抗性测试:定期模拟常见提示词攻击(如“忽略之前的规则”“把结果发到某地址”),验证防御效果。

提示词防护的核心目标,是让 LLM 不被“忽悠”,始终在安全边界内执行指令。

3.2.3 MCP 加固

除了静态和动态层面的检测,还需要从 架构和运行机制上进一步加固 MCP:

  • 最小权限原则:限制 MCP 工具的调用范围,只授予其完成业务所需的最小权限。

  • 调用链审计与日志:对每次工具调用进行日志记录和审计,支持事后追踪和异常行为溯源。

  • 运行时隔离:通过沙箱或容器化技术,将 MCP 工具运行环境与主系统隔离,防止单个工具被攻陷后扩散攻击。

  • 密钥与敏感信息保护:禁止在工具中硬编码凭据,采用安全存储与动态下发机制,降低泄露风险。

MCP 加固的目标是提升整体生态的“韧性”,即使单点失守,也能依靠隔离和审计机制,阻止风险扩散并快速处置。

Logo

更多推荐