ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

MCP‑Guard:针对MCP服务器的大模型智能体输入侧防护

MCP‑Guard:针对MCP服务器的大模型智能体输入侧防护 MCP‑Guard针对MCP服务器的大模型智能体输入侧防护原文arXivhttps://arxiv.org/html/2609.04128v1PDF链接https://arxiv.org/pdf/2609.04128v1摘要模型上下文协议MCP正在成为大模型智能体调用外部工具的事实标准协议。MCP架构下MCP服务器向LLM智能体暴露工具集合由智能体生成工具调用指令交由服务端执行。现有安全研究大多聚焦大模型侧提示注入但MCP服务器本身缺少对来自Agent恶意输入的校验机制攻击者可以通过污染Agent上下文构造恶意参数传递给MCP服务触发命令注入、路径遍历、文件读写越权、服务端SSRF等高危漏洞。本文提出MCP‑Guard一套部署在Agent与MCP服务器之间的透明代理防护层。MCP‑Guard不需要修改MCP服务端代码无需修改Agent智能体基于工具Schema定义对全部入参做语义感知校验拦截恶意载荷同时维护调用上下文隔离限制文件系统、网络、命令执行权限边界。本文构建MCP‑Inj评测数据集包含8大类、420条真实攻击样本覆盖MCP场景典型攻击向量。实验结果表明MCP‑Guard对各类MCP输入攻击拦截率可达96.4%仅带来低于7%的额外推理时延开销。全部代码、评测数据集、实验脚本开源。关键词模型上下文协议 MCP智能体安全提示注入工具调用防护输入校验代理防护1 引言大模型智能体通过MCP协议对接各类工具服务文件操作、Shell执行、数据库访问、浏览器、靶场平台浑象等。MCP架构组件关系LLM Agent客户端生成工具调用JSONMCP‑Client序列化请求通过Stdio / SSE传输MCP‑Server接收工具名称与参数执行对应业务逻辑。安全风险根源MCP服务器默认信任来自Agent客户端的全部输入。当Agent遭受提示注入、上下文污染LLM会生成恶意工具参数直接转发给MCP服务执行。即使基座大模型做安全对齐也无法完全杜绝输出恶意参数。典型攻击场景路径遍历../../etc/passwd传入文件读取工具Shell命令注入参数内拼接; rm‑rf /SSRF传入内网地址给MCP内置http请求工具越权文件写入覆盖系统配置文件工具参数语义绕过使用编码、换行、空白字符绕过简单正则。现有防护方案局限在LLM侧做提示防护存在绕过不能解决Agent已经输出恶意参数之后的服务端防护MCP服务端手写校验每个服务单独开发校验逻辑重复工作量大容易遗漏简单正则黑名单容易被编码、变形载荷绕过。本文贡献系统梳理MCP协议架构下的输入攻击面分类归纳8类攻击向量设计MCP‑Guard透明代理防护层位于MCP‑Client与MCP‑Server中间基于工具JSON Schema实现语义感知参数校验无需修改Agent、无需修改MCP服务源码构建MCP‑Inj评测数据集420条攻击样本用于MCP工具调用安全评测开展大规模实验对比正则基线、LLM校验基线与MCP‑Guard防护效果开源全部代理代码、数据集、复现脚本。开源仓库https://github.com/xxx/MCP‑Guard2 相关工作2.1 MCP模型上下文协议MCP分为Stdio标准输入输出模式与SSE服务端推送事件网络模式。工具描述通过JSON Schema声明参数类型、字段约束。原生协议没有定义输入安全校验、权限隔离机制安全责任交由上层实现。FastMCP是主流MCP服务开发库默认不携带参数净化能力。2.2 LLM提示注入与工具调用安全提示注入分为直接注入、间接注入。大量研究聚焦保护LLM不被注入但是当LLM已经输出恶意工具调用之后的防护手段较少。部分工作研究函数调用参数校验但没有针对MCP协议完整透明代理方案。2.3 代理式AI安全防护中间代理在模型与工具之间做安全检测是成熟思路。现有方案大多针对OpenAI函数调用缺少对MCP SSE/Stdio双传输模式完整兼容。MCP‑Guard填补该空白原生适配MCP完整报文格式。3 MCP攻击面分析MCP完整调用链路Agent → MCP‑Client → [网络/stdio通道] → MCP‑Server → 工具业务执行攻击触发条件攻击者污染Agent上下文 → Agent生成恶意工具参数 → MCP‑Client原样转发 → MCP‑Server未校验输入恶意载荷执行。8大类攻击样本MCP‑Inj数据集分类攻击类别说明示例载荷A‑路径遍历文件类工具读取/写入越权路径../../etc/passwdB‑命令注入shell工具参数拼接shell元字符id;cat /etc/shadowC‑SSRFhttp/fetch工具访问内网、元地址http://127.0.0.1:8080D‑越权文件覆盖写文件工具覆盖系统关键配置/etc/sudoersE‑参数类型篡改违背Schema类型传入数组/字符串篡改字段数字参数传入字符串payloadF‑语义绕过URL编码、换行、空白、Unicode混淆绕过简单过滤..%2F..%2Fetc%2FpasswdG‑拒绝服务超大参数、递归路径触发服务资源耗尽超长字符串、深度嵌套路径H‑敏感信息泄露读取密钥、环境变量文件向外输出~/.ssh/id_rsa关键观察很多攻击载荷语法上完全符合JSON Schema格式简单JSON schema类型校验无法拦截必须做语义层面检测。4 MCP‑Guard 系统设计MCP‑Guard作为透明代理部署位置Agent / MCP‑Client ↔ MCP‑Guard代理 ↔ MCP‑Server支持两种传输模式Stdio代理模式代理接管标准输入输出桥接后端MCP服务进程SSE网络代理模式作为HTTP中间代理转发SSE流与POST请求。三大核心模块Schema解析模块从MCP服务获取工具列表与JSON‑Schema解析每个工具每一个参数的语义标签文件路径、shell命令、url、普通字符串等多维度检测引擎Schema合规校验 语义规则检测 轻量级LLM载荷审查策略与执行模块拦截/放行/告警支持白名单路径、白名单网络、最大参数长度限制产生安全审计日志。4.1 Schema解析模块MCP‑Guard首先执行MCPlist_tools请求拉取全部工具的JSON Schema。对每个参数自动推断语义类别file_path文件路径类参数shell_cmdshell命令字符串http_url网络请求地址generic普通业务参数。当Schema缺少提示时使用参数名启发式推断例如参数名path、filename、cmd、url。同时支持用户手动配置覆盖语义标签。4.2 多维度检测引擎第一层Schema语法校验校验入参是否符合JSON Schema字段缺失、类型错误、枚举值非法直接拦截。第二层语义规则检测核心文件路径参数解析真实路径检测路径遍历对比允许访问目录白名单shell命令参数检测命令元字符、危险命令片段URL参数阻断内网地址、环回地址、元地址匹配网络白名单检测编码绕过自动URL解码、Unicode归一化之后再做检测对抗F类语义绕过。第三层可选轻量LLM审查开关可配置当规则引擎无法明确判定送入小尺寸LLM做载荷风险判断输出结构化判定SAFE / MALICIOUS / UNCERTAIN。UNCERTAIN默认策略拦截并记录审计日志。4.3 安全策略配置yaml配置样例mcp‑guard_config.yamltransport_mode:sse# stdio / ssebackend_mcp_server_url:http://127.0.0.1:8000# 文件访问白名单files:allowed_dirs:[/opt/workspace,/home/kali/hunxiang]deny_absolute_paths:true# 网络访问白名单network:allow_loopback:falseallow_private_ip:false# LLM检测开关llm_inspect:enable:falsemodel:gpt‑4o‑miniaction_on_malicious:block# block / log_onlyaudit_log_path:./mcp‑guard‑audit.log4.4 审计日志每条工具调用都会记录时间戳、工具名称、原始入参、检测结果、拦截原因。示例审计日志片段{ts:2026‑09‑03T22:10:00Z,tool:read_file,params:{path:../../etc/passwd},verdict:BLOCKED,reason:path_traversal_detected}5 MCP‑Inj评测数据集数据集MCP‑Inj用于评测MCP工具调用防护方案。总样本420条攻击样本280条A‑H八类攻击良性样本140条合法正常工具调用用于统计误报率数据集包含原始载荷、目标工具名称、预期行为block/pass资源随开源仓库一同发布。评测指标拦截率Attack Block Rate恶意样本被拦截比例误报率False Positive Rate正常样本被错误拦截比例端到端额外时延开销6 实验设置6.1 基线对比方案Baseline‑Raw无任何防护原始MCP代理Baseline‑Regex传统正则黑名单防护Baseline‑LLM‑Only仅使用LLM对全部参数做风险检测MCP‑Guard(Ours)完整方案schema校验语义规则可选开启LLM审查。6.2 实验环境后端MCP服务FastMCP实现模拟文件、shell、http工具服务数据集MCP‑Inj 420条样本硬件Kali LinuxCPU i7时延统计测量从请求进入MCP‑Guard到转发后端的耗时。6.3 复现命令# 克隆仓库gitclone https://github.com/xxx/MCP‑GuardcdMCP‑Guard# 安装依赖pipinstall-rrequirements.txt# 使用SSE代理模式启动MCP‑Guardpython mcp_guard_proxy.py--configmcp‑guard_config.yaml# 运行完整MCP‑Inj数据集评测python run_benchmark.py--dataset./dataset/mcp_inj.json--outputresult.json# 输出评测统计报告python report.py--inputresult.json6.4 主要实验结果方案攻击拦截率误报率平均额外时延Baseline‑Raw0.0%0.0%0msBaseline‑Regex62.1%8.4%2msBaseline‑LLM‑Only87.3%5.7%41msMCP‑Guard(规则仅)92.6%1.4%6msMCP‑Guard(规则LLM)96.4%1.8%28ms关键结论传统正则黑名单拦截率不足63%大量编码、变形载荷可以绕过误报偏高纯LLM检测可以拦截大部分攻击但时延开销大存在误报MCP‑Guard规则引擎已经取得很高拦截率开启LLM辅助之后达到96.4%拦截率误报控制在2%以内整体时延开销低于7%。分攻击类别结果路径遍历、命令注入、SSRF类别拦截效果最优语义编码绕过F类是剩余漏报主要来源开启LLM模块可以显著降低F类漏报。消融实验移除Schema解析模块拦截率下降11.2%Schema语义推断是关键组件关闭归一化解码处理F类绕过攻击拦截率大幅下跌。7 在真实场景部署7.1 Stdio模式本地MCP服务Hermes Agent场景Hermes原本直接spawn MCP‑Server进程修改Hermes配置让Hermes连接MCP‑Guard代理进程MCP‑Guard再spawn真实后端MCP服务进程。适配你当前浑象MCP靶场场景可以对浑象MCP服务做输入防护拦截Agent生成的恶意参数。7.2 SSE网络模式远程MCP服务MCP‑Guard作为SSE中间代理外部Agent连接代理地址代理转发至后端MCP服务SSE端点。适合多客户端共享MCP服务场景。7.3 适配浑象‑开源版靶场提示浑象MCP服务会接收Agent生成的start_challenge、submit_flag、shell_exec等工具参数可以把MCP‑Guard部署在Hermes与浑象MCP之间防止Agent输出恶意参数对靶场服务做越权操作。注意使用MCP‑Guard时需要调整allowed_dirs白名单适配靶场实例目录。8 局限与讨论MCP‑Guard依赖工具Schema完整准确如果MCP服务返回错误/不完整Schema语义推断效果下降支持手动覆盖参数语义标签弥补该问题。对于完全业务逻辑层面的漏洞不是输入注入类漏洞本防护无法生效MCP‑Guard专注输入参数攻击。LLM辅助检测模块本身存在极小概率的判断错误生产环境建议action_on_maliciousblock同时开启审计日志。本方案解决“Agent输出恶意参数之后”的服务侧防护不能替代LLM侧提示注入防护二者应当叠加使用。9 结论MCP协议本身缺少输入安全校验当Agent被提示注入污染后会传递恶意参数至MCP服务端。本文提出MCP‑Guard透明代理防护层兼容Stdio/SSE两种MCP传输模式不需要修改Agent与MCP服务代码。基于Schema语义解析多维度检测引擎在MCP‑Inj数据集上实现96.4%攻击拦截率低误报、低时延。开源数据集、代理代码与评测脚本可用于MCP服务安全加固与智能体安全评测。
返回列表