跳到主要内容

影子 MCP:你的安全团队从未听说过的工具服务器已经在工程师的笔记本电脑上运行了

· 阅读需 14 分钟
Tian Pan
Software Engineer

你的安全团队拥有公司信用卡上每一项 SaaS 订阅的完整清单、每一个获得管理员授权的 OAuth 应用,以及连接到公司 Wi-Fi 的每一台设备。然而,对于你的高级工程师笔记本电脑上当前绑定到 127.0.0.1 的七个进程,他们却完全视而不见——一个带有长期 Staging API 令牌的“部署助手”,一个订阅了包含客户数据的 Slack 频道的“工单分类器”,以及一个拥有生产分析数据仓库读取权限的“发布说明生成器”。这些都不在供应商名单上。它们不会出现在 SSO 日志中。所有这些都在利用工程师现有的凭据运行,执行着从未经过审批的操作。

这就是影子 MCP(Shadow MCP),它是企业中增长最快的未管理授权面。模型上下文协议(Model Context Protocol)使得将任何工具接入任何 LLM 的成本变得极低,而工程师们——天性使然——首先接入了那些最显而易见的工具。Saviynt 的 CISO AI 风险报告指出,75% 的 CISO 已经发现其生产环境中运行着未经授权的 AI 工具。GitHub MCP 服务器在 2026 年初的周安装量突破了 200 万次。Postgres MCP 服务器允许 LLM 对开发者能接触到的任何数据库执行 SQL 提示词,其周安装量已超过 80 万次。这些数字中没有一个代表企业的 IT 决策。

大多数安全项目仍在沿用的心理模型是为另一种产物构建的。影子 IT 是出现在报销单上的 SaaS 订阅,是财务审计在核对信用卡账单与资产清单时发现的供应商。采购、CASB 和 SSO 是三道筛子,它们共同拦截了大部分关键威胁。而影子 MCP 在设计上就绕过了这三者。这里的产物不是供应商,而是笔记本电脑上的一个 Python 进程。流量不是流向 SaaS 端点的出口流量,而是指向 localhost 的 JSON-RPC 调用。凭据不是新的 SSO 授权,而是工程师现有的生产环境只读令牌——这与他们在 Jupyter Notebook 中使用的是同一个令牌,只是现在被重新用作长期运行的 Agent 循环的身份验证。财务部门无从发现,CASB 无法检查,SSO 日志除了记录多年前为完全不同的目的而批准的原始令牌发放外,没有任何新的记录。

产物是回环套接字,而非供应商

在资产管理的语境下,影子 MCP 服务器看起来并不像应用程序。它们通常是开发者在某个下午凭感觉编写(vibe-coded)的短脚本,由开发者的 IDE 插件或 pipx 调用启动,并绑定到回环接口(loopback interface)的一个高位端口。它们暴露了 LLM 可以调用的工具,而这些工具会扇出到开发者机器可以触及的任何地方——内部 API、生产数据库、Slack 工作区、GitHub 仓库以及公司 VPN。EDR 不会标记它们,因为它们不是恶意软件。MDM 不会编目它们,因为从注册表角度看它们并非安装的软件。CASB 看不到它们,因为流量出口是内部 CIDR 范围,而不是供应商的公共 IP。

实际存在的可见性表面非常狭窄且未被充分利用。终端遥测可以列出每一个绑定到 TCP 套接字(包括回环地址)的进程,这份清单是了解公司设备上运行着哪些 MCP 服务器最接近真相的依据。对开发者主机进行的网络出口监控——不是在公司边界(那里的流量看起来只是正常的 VPN 流量),而是在主机本身——可以检测出 Agent 循环在数小时内每隔 30 秒调用同一个内部 API 的异常节奏。这两者在技术上都不难实现,但大多数公司都没有去做,因为安全团队运行的威胁模型上次更新还是为了应对 SaaS 影子 IT,那时的答案是“扫描信用卡账单”。

凭据复用是常态,也是问题所在

每一个影子 MCP 服务器都运行在某人已有的凭据之上。这并非偶然——这正是开发者选择 MCP 而不是构建服务的原因。其核心意义在于他们不必为申请新凭据而提交工单。他们拿着为临时分析而发放的生产环境只读数据库令牌,将其粘贴到 LLM 客户端启动时读取的配置文件中,现在,同一个令牌正被一个 Agent 循环使用,只要笔记本电脑开着,它每分钟就会发出 30 条查询。当令牌被用于 Notebook 会话时,审计轨迹非常清晰——工程师坐在键盘前,每隔几分钟进行一次查询;而现在,审计轨迹变成了噪音。当需要回答“在报告客户数据泄露的那天,该用户运行了哪些查询”这一取证问题时,原本只需过滤几行 SQL 的操作,现在变成了在百万行毫无信号的干草堆中捞针。

这并非假设。OWASP MCP Top 10 (MCP09:2025) 将影子服务器列为一个单独的类别,正是因为凭据复用这一失败模式在各种部署中具有一致性。三分之二的开源 MCP 服务器在发布时携带的安全实践被 OWASP 项目评为“差”——大约 43% 存在 OAuth 流程缺陷,另有 43% 存在命令注入漏洞。即使是那些构建良好的服务器,也会继承凭据所拥有的任何权限。令牌不知道它正被 Agent 使用。下游 API 不知道它正被循环调用。唯一能识别出这种新使用模式的地方是运行 MCP 服务器的笔记本电脑,而那正是唯一没人关注的地方。

混淆代理桥接并不像数据外泄

影子 MCP 中的数据外泄风险并非显而易见。没有人会从公司笔记本电脑将客户表上传到 Pastebin —— 这会触发大楼里的每一条 DLP 规则。风险在于混淆代理(confused-deputy)桥接:一个 LLM 拥有一个从生产环境读取数据的工具,以及另一个向个人 Notion、个人电子邮件或个人 GitHub gist 写入数据的工具。这两个工具本身都不是恶意的。孤立来看,这两次调用都不是异常的。但这种组合形成了从生产数据到工程师个人云端的单向管道,而且没有任何 DLP 规则能捕获它,因为出口目的地是 Notion 当天的 IP 范围,而这恰好也是工程师合法编写会议记录的地方。

2025 年的漏洞报告周期让这一点变得具体。Anthropic、Microsoft、ServiceNow 和 Salesforce 出现了四项 CVSS 9.3 及以上的发现,全都遵循同样的模式:攻击者在智能体(agent)处理的内容(邮件正文、网页表单、Slack 消息)中注入隐藏指令,智能体利用自身的合法权限将数据外泄给攻击者。智能体并没有像恶意软件那样被入侵。凭证也没有被窃取。智能体只是在做它该做的事 —— 组合工具以满足请求 —— 而这个请求恰好是用户从未发出的。影子 MCP 在一个方面让情况变得更糟:工具是由安装它们的工程师组合的,没有审查这种组合能做什么,而且智能体有权访问哪些工具的注册表,就存在于一个除了该工程师外没人读过的笔记本电脑配置文件中。

铺装路面必须比土路更快

每个发现影子 MCP 的安全计划,其直觉都是禁止它。这行不通,而且对于任何类别的影子 IT 都从未奏效。工程师安装工具服务器是因为官方路径不存在或太慢,而一份写着“不要那样做”的政策文件无法改变这两个事实。有效的方法是建设一条比“土路”更快的“铺装路面” —— 一个内部 MCP 网关,其中的官方服务器经过签名、版本化、可发现,并预先连接了短期凭证,从而使“做正确的事”的摩擦力低于“自己动手”的摩擦力。

企业部署中正在出现的架构已收敛为少数几个组件。一个中央网关位于公司批准的每个 MCP 服务器之前,调解每一次工具调用,在调用到达底层系统之前,在出口边界应用请求日志记录、PII 脱敏和策略管控。身份验证通过 OAuth2 Token Exchange (RFC 8693) 进行,这允许网关根据工程师更广泛的 SSO 身份,为每个 MCP 服务器分发范围狭窄、寿命较短的特定令牌 —— 因此智能体循环使用的凭证不是工程师的生产环境只读数据库令牌,而是范围限定为“读取这三张表,十五分钟后过期”的派生令牌。注册层编目了哪些服务器是经过批准的、每个服务器的所有者是谁、它们公开了哪些工具以及它们属于哪个风险等级;部署受限于注册,未注册的服务器在公司环境中无法启动。工具级白名单(而非服务器级)是不可商榷的 —— 一个 MCP 服务器通常会公开 read_databasewrite_databaseadmin_database 工具,治理层必须允许管理员在不批准其余工具的情况下批准其中一些。

早期行动者犯的错误是认为网关就是目标。事实并非如此。网关是简单的部分。难点在于必须随之落地的四件事,才能让网关真正取代土路:自助式的接入流程,让新工程师在五分钟内完成一次有效的工具调用(标准由 pip install 加配置文件设定,要超越这一点需要真正的产品投入);一个在 IDE 中无需离开工作流即可发现的工具目录;一个对工程师透明的凭证生命周期(他们永远不应该看到令牌,只能看到 SSO 重定向);以及比工程师本地获得的更好的可观测性(请求追踪、成本归属、回放)。如果网关增加了延迟、在负载下拒绝有效调用,或者让工程师为了添加新工具而填写表单,那么土路就会胜出,而你花了三个季度构建的东西将无人使用。

发现什么,以及按什么顺序发现

如果你还没有进行过影子 MCP 发现扫描,能最快产生信号的顺序是:首先是终端遥测,其次是网络,最后是注册表。从你已有的 EDR 或终端库存开始,提取绑定到开发人员机器上 localhost 套接字的所有长期运行进程列表,然后与包含 “mcp”、“model-context” 或任何流行服务器(postgresgithubslacknotionlinear)的进程名称进行交叉比对。输出结果通常比安全团队预期的要大一个数量级 —— 大多数公司发现,三分之一或更多的资深工程师至少运行着一个 MCP 服务器,而长尾部分则包含安全团队以前从未听说过的名称。

其次,在开发人员主机上检测网络出口,以标记智能体循环的节奏特征 —— 每隔不到一分钟对内部 API 进行周期性的、形状相同的调用 —— 并与经过身份验证的用户会话相关联。你要寻找的信号是“用户不在键盘前,但其凭证在过去六小时内每三十秒发布一次查询”。这能捕获那些在工作会话之间存活的长期运行的智能体,它们构成了最大的凭证重用审计追踪风险。

第三 —— 且仅在第三,因为先做这件事会产生一份没人会采用的清单 —— 建立注册表和网关。在第一个季度让注册变为自愿加入,并利用第一步和第二步的发现数据来推动外展:每个运行未授权服务器的工程师都会收到一个带有铺装路面链接的个人提醒,而不是一份政策文件。这种提醒的转化率远高于自上而下的禁令,并且它能为你提供真实的信号,告诉你哪些工具集成应该在官方目录中优先考虑。

MCP 是授权面,而非开发者的便利工具

安全组织在 2026 年犯下的架构错误与十年前在 OAuth 应用上犯的错误如出一辙——将新的授权面(Authorization Surface)视为一种可以容忍的开发者便利,而非一个需要管理的生命周期。OAuth 应用也曾“仅仅”是开发者的便利工具,直到第三方应用的疯狂扩张成为进入 SaaS 资产的最大且未受监控的访问路径。相应的应对措施——应用清单、作用域审查、定期重新认证、自动撤销——直到 21 世纪 10 年代的大部分时间才趋于成熟。MCP 正处于同样的轨道上,但时间从十年压缩到了 18 个月。OAuth 时代的教训直接适用:策略前先盘点,禁止前先铺路(Paved Road),宽泛令牌前先限定作用域令牌,将生命周期管理视为一项持续的义务,而非一次性的审批。

等待的代价是以信任而非工程时间支付的。第一起重大的影子 MCP(shadow-MCP)泄露披露将把“内部 AI 助手”或“开发者生产力工具”列为受影响系统。事后审查会发现,该凭证在三年前获准用于某个笔记本会话,工具注册表是笔记本电脑上的一个 JSON 文件,且由于智能体循环(Agent Loop)淹没了人类的查询,审计追踪变得难以读取。在事件发生前(而非发生后)就构建网关、注册表和发现流水线的组织将占据先机。那些等待的组织将付出与 OAuth 应用扩张相同的代价,但有一个不同之处:循环中的大语言模型(LLM)使每一次凭证复用都成为潜在的数据外泄路径,而不仅仅是访问路径,爆炸半径也随之复合增长。

对于工程和安全负责人来说,结论言简意赅但难以执行。MCP 不是一个可以用备忘录来治理的一时风潮。它是新的应用身份、新的工具权限图谱、敏感数据的新流出边界——就像这些事物的每一个前身版本一样,它需要盘点、铺路和生命周期管理。那些在 2026 年就对此采取行动的团队,到 2028 年看起来会像是在 2014 年认真对待 OAuth 应用治理的团队。而那些不作为的团队将在 2028 年向监管机构解释,为什么工程师的笔记本电脑拥有对客户表的读取权限以及对个人 Notion 的写入权限,且无人能说明授权发生在何时、由谁操作、以及持续了多久。

References:Let's stay in touch and Follow me for more thoughts and updates