跳转到内容
Guide

影子 MCP:无人为之制定预算的企业问题

| 8 min read

员工将未经授权的 MCP 服务器插入 Claude 和 Cursor。 一项网关规则、一项库存查询和一项策略模板可帮助您抢先一步。

Dark network lines representing shadow traffic and MCP detection
Photo by Markus Spiske on Unsplash

影子 IT 过去指的是营销经理为 Dropbox 付费。 Shadow SaaS 意味着一个产品团队 使用个人信用卡注册 Figma。 两者都包含在内:工具在浏览器中运行 选项卡,触摸了用户已经可以看到的数据,并且无法超出选项卡边界。 影子MCP 打破了这种遏制。 员工将社区 MCP 服务器切换为 Cursor 或 Claude 桌面,现在代理可以读取 SSH 密钥、运行 shell 命令以及与生产环境对话 通过用户的环境凭据访问数据库。

Cloudflare Gateway 于 2026 年 4 月发布了 MCP 感知规则。Zscaler 和 Netskope 紧随其后 一周。 由于企业安全团队开始提出要求,该工具迎头赶上。 这篇文章涵盖了 本季度要做的四件事:了解威胁模型、构建检测、交付 清点脚本,列入许可名单,并发布三页的政策。

为什么 Shadow MCP 比 Shadow SaaS 差

浏览器中的恶意 SaaS 选项卡在沙箱中运行。 它无法读取用户的 SSH 私钥。 它 无法生成外壳。 它无法打开到生产 Postgres 的 TCP 连接。 浏览器的 同源策略和操作系统沙箱进行遏制。

MCP 服务器在浏览器外部运行。 Claude Desktop 和 Cursor 作为子级生成 stdio 服务器 具有用户权限的用户计算机上的进程。 HTTP MCP 服务器连接 用户粘贴的任何凭证。然后,代理从该服务器调用工具,作为 它的正常循环。 从操作系统的角度来看,工具调用就是用户打开一个 文件或运行命令。

具体区别:社区 GitHub MCP 服务器从随机 npm 包中提取并添加到 ~/.cursor/mcp.json 可以渗出任何东西 ~/.ssh/, 每一个 .env 您的主目录下的文件以及用户的任何存储库的全部内容 已退房。 用户批准了一次。 代理再也没有问过。 基于浏览器的流氓软件 工具无法做到这一点。

再增加一个难题:用户的 VPN。 如果代理运行时笔记本电脑位于公司 VPN 上, MCP 服务器继承该网络位置。 内部服务、临时数据库和 元数据端点全部变得可访问。 服务器不需要对任何人进行网络钓鱼。 它只是等待 用于连接 VPN。

在您的网络上查找 Shadow MCP

检测工作在三层:端点、出口网关和 DNS。 你想要信号 来自所有三个,因为每个都捕获不同的故障模式。

在端点上,监视 Claude Desktop 或 Cursor 生成的子进程。 双方客户 使用已知的父进程名称调用 stdio 服务器作为子进程。 您的 EDR(CrowdStrike、 SentinelOne(端点防御者)可以对任何根植于以下位置的进程树发出警报 Claude.app, Cursor.app, 或者 claude-code。 过滤至 您批准的; 标记其他所有内容。

在出口处,过滤 HTTP 流量。 MCP over Streamable HTTP 附带独特的标头 (mcp-protocol-version)和独特的内容类型 (application/json-rpc-2)。 Cloudflare Gateway、Zscaler 和 Netskope 均匹配 两者都有。 以下是 Cloudflare 零信任规则,用于阻止未经批准的 MCP,同时允许您 批准的主机:

在 DNS 上,您的解析器会在任何 HTTPS 连接之前查找社区 MCP 服务器主机 打开。 将批准的允许列表输入您的 DNS 过滤器(Cisco Umbrella、NextDNS、Cloudflare 网关 DNS)作为唯一允许的 MCP 目的地。 与已知匹配的所有其他查找 MCP 注册提要获得一个区块和一张票证。

对于 npm 安装的 stdio 服务器,您的端点 DLP 代理可以监视匹配的包 *-mcp-*, @modelcontextprotocol/*,或任何声明 mcp 其条目 package.json bin 场地。 这抓住了 在用户将服务器连接到 Cursor 之前安装事件。

一下午建立 MCP 库存

检测会告诉您新服务器何时出现。 库存会告诉您已安装的内容。 发送脚本,通过 MDM(Jamf、Intune、Kandji)运行它,并将结果发布到报告中 端点。 工作一下午,你就知道哪些机器有哪些服务器了。

该脚本读取每个主要客户端使用的两个配置文件。 Claude Desktop 保留其配置 在 ~/Library/Application Support/Claude/claude_desktop_config.json 在 macOS 和 %APPDATA%\Claude/claude_desktop_config.json 在 Windows 上。 光标将其配置保持在 ~/.cursor/mcp.json。 这两个文件都是纯 JSON,带有 mcpServers 将服务器名称映射到命令、参数、URL 和环境变量的对象。

哈希很重要。 当用户添加服务器、轮换密钥或拉下某个服务器时,配置文件会发生更改 团队模板。 存储整个文件的 SHA-256,并对您未推送的任何更改发出警报。 的 环境变量名称(而不是值)也出现在报告中; 看到 GITHUB_PERSONAL_ACCESS_TOKEN 社区服务器下列出的是其自己的信号。

每天运行脚本。 将输出输入到您现有的资产库存中(Snipe-IT、ServiceNow、 或 Postgres 表)。 构建一个仪表板,显示:本周新服务器、超过 配置哈希发生更改的 N 台机器和服务器。 这三个视图涵盖了您将要看到的大部分内容 需要稍后询问。

将您信任的服务器列入白名单

库存显示您已安装的内容。 允许列表说明了允许的内容。 默认拒绝,每个 服务器已审核,每个批准都会过期。 在 Git 中对文件进行版本控制,以便批准历史记录为 可审计。

三件事让这个许可名单变得有用。 首先,每个参赛作品都有审核票和有效期; 批准不会永远存在。 其次,stdio 服务器包含允许的参数,因此 postgres-mcp 二进制批准 --readonly 不能重新运行 无需新评论即可写入访问权限。 第三,范围是命名且明确的; 稍后的控制层 可以强制执行它们。

将新服务器加入白名单需要在人工审核之前进行两次自动检查。 首先,验证服务器主机的 TLS 状态。 通过纯文本 HTTP 提供 MCP 服务的服务器,或者 证书将在 10 天后过期,或者缺少 HSTS,则不是候选者:

其次,检查响应标头。 您希望 HSTS 具有较长的 max-age、合理的 content-type,和一个 mcp-protocol-version 与内容匹配的标头 服务器说它在清单中支持。 标头和清单之间的漂移是一个危险信号:

将这两项检查作为入场单的一部分进行。 如果任一失败,票证将自动关闭,并显示 失败原因。 审核者只能看到通过基础知识的服务器。

每个公司都需要的三页 MCP 政策

政策不需要太长。 它需要回答五个问题:批准了什么、谁批准 批准新服务器,每个角色可以做什么,如何监控它,以及什么时候会发生什么 出问题了。 一张简短的表格比一份无人阅读的 30 页文档更有效。

区域 政策 控制
认可的服务器 只有允许列表 YAML 中的服务器才能在公司设备上运行或接触公司数据。 DNS + 出口块、EDR 流程规则、MDM 推送的许可名单文件、六个月批准到期。
审核流程 Security Platform 会审核所有新的服务器请求。 数据平台对任何具有数据库访问权限的服务器进行联合签名。 对处理受监管数据的服务器进行合法签名。 查看票证模板、自动 TLS 和标头检查、发布的 5 个工作日的 SLA。
范围限制 默认情况下,工程师获得只读数据服务器。 写入权限需要第二个审批者。 禁止生产凭证; 使用暂存或范围令牌。 通过 MDM 推送的按角色白名单捆绑包、具有短 TTL 的范围 API 密钥、身份验证网关强制范围。
监控 通过批准的服务器进行的每个工具调用都会记录在审核日志中。 未经批准的服务器尝试会在 15 分钟内触发警报。 Kafka 和 SIEM 的网关审核接收器、每日库存差异、配置文件哈希漂移警报。
事件响应 受损的 MCP 服务器被视为受损的 API 集成。 撤销服务器的密钥,隔离受影响的端点,查看暴露窗口的审核日志。 记录的运行手册、随叫随到的轮换、包含 MCP 场景的季度桌面。
例外情况 临时例外需要 CISO 的批准、30 天的期限以及书面的后续计划。 例外票证模板、自动过期的许可名单条目、每周例外审查。
离职 当员工离开时,他们的 MCP 配置将与其他公司状态一起被擦除。 他们持有的任何钥匙都会在 24 小时内轮换。 MDM 擦除操作、密钥轮换操作手册、每个密钥上次访问的审核日志。

要点

  • MCP 能力超过 SaaS 能力。 社区 MCP 服务器读取 SSH 密钥、运行 shell 命令并继承您的 VPN 位置。 将其视为特权 集成,不像浏览器选项卡。
  • 检测需要三层。 EDR 流程规则、网关 HTTP 过滤器 mcp-protocol-version,并且 DNS 许可名单涵盖了不同的故障模式。
  • 一下午就清点了。 60行Python脚本读取两个配置 文件每个主要客户使用,散列它们,并发布到报告端点。 每天运行一次 通过 MDM。
  • 默认拒绝白名单,有效期短。 每个服务器都有一张评论票 六个月有效期。 使用 /v1/ssl/check/v1/headers/inspect 作为 自动进气门。
  • 一张表格胜过 30 页的政策。 批准的服务器、审核流程、范围 限制、监控、事件响应、例外、下线。 七行,一页,已发布 在工程维基百科中。

Botoi 自己的 MCP 服务器位于 api.botoi.com/mcp 是服务器外观的示例 一旦准备好列入白名单:TLS 1.3、HSTS、范围 API 密钥、每密钥速率限制和 49 带注释的精选工具。 你可以用上面的两个卷发自己验证一下姿势 添加之前,或检查 MCP 设置页面API文档 获取完整的工具列表。

FAQ

出于库存目的,什么算作 MCP 服务器?
stdio 和 HTTP 服务器都计数。 stdio 服务器是 Claude Desktop 或 Cursor 从配置文件条目生成的子进程; 在代理启动之前没有网络足迹,但它具有相同的功能表面。 HTTP 服务器位于客户端通过 Streamable HTTP 或 SSE 连接的 URL 处。 您的清单需要涵盖两者,这意味着读取端点上的配置文件并监视出口以获取 MCP 流量签名。
我可以在不破坏批准的代理的情况下完全阻止企业网络上的 MCP 吗?
是的。 默认情况下,在出口网关处阻止所有内容,然后将您批准的 MCP 服务器所在的特定主机名列入白名单。 经过批准的 stdio 服务器根本不接触网络(它们通过普通 HTTPS 与其支持 API 进行通信,而您已经控制了该 HTTPS)。 您会失去企业设备上的社区 MCP 实验,这就是重点。 开发者仍然可以使用VPN之外的个人机器进行探索。
Shadow MCP 与即时注入风险有何不同?
提示注入是指攻击者欺骗模型做其操作员不希望做的事情。 Shadow MCP 是运营商自己以未经审核的能力进行布线。 不同的威胁参与者,不同的控制。 如果该工具根本不应该存在,那么即时注入防御(工具确认、沙箱、输出过滤)就无济于事。 除了模型级防御之外,您还需要库存和白名单。
阻止是否需要升级下一代防火墙?
不会。DNS 过滤加上 HTTP 层出口检查涵盖了大部分内容。 截至 2026 年 4 月,Cloudflare Gateway、Zscaler 和 Netskope 均已发布 MCP 感知规则。对于本地部署,您可以使用任何 L7 代理过滤 MCP-Protocol-Version 标头或 application/json-rpc-2 内容类型。 Squid、Envoy 和 HAProxy 都处理这个问题。 困难的部分不是过滤器;而是过滤器。 它正在维护白名单。
MCP 为我提供了哪些开箱即用的审计跟踪?
几乎没有。 该协议定义了工具调用和响应,但不要求服务器或客户端记录它们。 Claude Desktop保留一些本地日志; 光标少了。 社区服务器通常不记录任何内容。 如果您需要能够通过事件审查的审计跟踪,您可以在服务器端自行检测,或者在前面放置一个写入结构化日志的网关。 不要依赖客户持有证据。

开始使用 botoi 构建

150+ 个 API 端点,涵盖查询、文本处理、图片生成和开发者工具。免费套餐,无需信用卡。