MTGuard:面向 LLM 智能体安全 MCP 工具调用的混合分析
Hybrid Analysis for Secure MCP Tool Use in LLM Agents
MTGuard对照MCP调用声明与沙箱执行痕迹;六配置工具调用级DR为48.3%,TCG为8.3%。
按MCP-SafetyBench,攻击来自MCP server、MCP host或user之一,每次仅一面被攻破,不能直接攻破防御。
- MCP工具可在元数据和返回文本上看似正常,执行时却访问敏感文件、拉起进程或连接不受信任端点。只看消息或只看低层痕迹都不够,同一系统行为是否有害取决于任务和工具声明。
- MTGuard在执行前用代码策略和LLM审参数并去掉自由文本描述,执行中于Docker沙箱用eBPF建成tool behavior tree,执行后对照声明与观测,违规则扣留结果且不回滚。
- 在浏览器自动化与金融分析、三个后端模型上,MTGuard总体DR 48.3%(116/240),TCG 8.3%,TRI 0.0%。host侧75.0%,server侧32.5%,非加权平均FPR 3.7%。
- 作者指出原型和评测只覆盖本地部署的MCP工具,监控不检查网络载荷,可能漏掉加密流量、内存计算或未观测外部服务中的行为,且执行后拒绝不能撤销已发生的副作用。DR是不阻断的反事实判定,论文未报告重复次数和阻断后任务完成率。
- 威胁模型
- 按MCP-SafetyBench,攻击来自MCP server、MCP host或user之一,每次仅一面被攻破,不能直接攻破防御。目标是诱导不安全工具使用,扰乱任务或造成未授权副作用。排除训练时攻击、权重篡改、内核级攻破、生命周期外攻击和多面共谋。防御方拒绝不安全调用并保留良性调用。
- 被测模型
- DeepSeek-V4-FlashDeepSeek-V4-ProGPT-5.6 Luna
- 基准
- MCP-SafetyBenchTool Call Hook
- 指标
- DRFPRauditing latencyASR
MTGuard 通过生命周期感知的静态-动态协同分析,防御 LLM 智能体在调用 MCP 工具时被诱导执行恶意或未授权操作。既有方法多依赖静态分析,只检查提示词与生成输出,防御效果和鲁棒性有限。评估显示,MTGuard 能在不同 LLM 智能体上缓解多类有害工具使用,同时保持良性用户任务的性能。
深度解读
这篇论文试图解决什么问题?
作者称现有MCP防御多停在消息级;MTGuard对照声明与沙箱内执行。
现有MCP工具防御主要检查消息,看不见执行时的系统级副作用。
- 出现场景:作者称MCP已成为LLM智能体连接外部资源的事实标准;不信任或被攻破的工具可影响决策,并在宿主环境产生有害副作用。
- 现有不足:作者称既有防御主要检查提示词、对话、工具元数据、调用参数和文本结果,一般观察不到执行期副作用。作者同时称,传统沙箱或运行时监控不能直接补上这个空缺:同一文件访问或网络请求是否不安全,取决于声明功能、参数和任务上下文。
- 核心假设:有效防御必须把运行时副作用接到调用的语义上下文上。作者认为,只看消息或只看低层痕迹,都难以发现声明看似良性、实际执行有害的攻击,尤其是工具执行劫持(tool execution hijacking)。
- 本文提出:MTGuard作为独立guard agent,在执行前、执行中和执行后做静态与动态联合分析,并用tool behavior tree表示一次调用的运行时行为。
- 威胁模型:
- 目标:诱导不安全工具使用,扰乱既定任务,或在宿主及外部环境造成未授权效果。
- 入口:按MCP-SafetyBench,来自MCP server、MCP host或user之一,每次只假定一面被攻破。server侧可控制元数据、描述、返回载荷或实现;host侧可篡改规划、编排或消息路由;user侧可控制请求及用户提供的文件或外部内容。
- 边界:不能直接攻破防御及其可信监控设施。排除训练时攻击、权重篡改、防御系统自身被攻破、内核级攻破、调用生命周期之外的攻击,以及同时攻破多个攻击面的共谋攻击。
- 受害系统:使用MCP工具的目标LLM agent。防御方要检出并拒绝不安全调用,同时保留良性且与任务相关的调用。
有哪些相关研究?
作者把既有工作概括为消息级防御、智能体护栏和MCP包检查,实验基线是Agent-Aegis的TCG与TRI。
引言和Related Work把对照工作分成三类;实验另指定了基线组件和基准。
- 消息级工具防御:引言称一组防御主要依据用户提示、对话历史、工具元数据与描述、调用参数和文本结果做检查,能发现可疑指令或元数据不一致,但一般不观察执行期的系统级副作用。作者把这一组标为引用[5, 7, 17, 18, 25, 33, 35, 36],引言未逐篇展开做法。
- 内容级与智能体护栏:Related Work称多数护栏做内容级过滤,例如过滤有害或暴力输出,并认为这不足以覆盖依赖工具使用和执行上下文的智能体。作者点名GuardAgent(Xiang et al., 2025)对目标智能体做访问控制,Liu et al.(2025)对行为消息做异常检测。作者称这些方法主要依赖静态消息或交互痕迹,因不纳入执行期动态行为,难以检出工具执行劫持。
- MCP包级检测:作者称近期工作通过检查MCP server包发现恶意工具;A.I.G(Tencent Zhuque Lab, 2025)用LLM智能体检查包。作者称这类方法停在包级,不在智能体执行期间做运行时监控,因而不能对实际调用做细粒度防护,防御效果有限。
- 基线与基准:实验基线是Agent-Aegis(Deng et al., 2026)的Tool Call Governance(TCG,执行前检查工具名和参数)与Tool Result Inspection(TRI,执行后扫描返回文本)。任务来自MCP-SafetyBench(Zong et al., 2025)的browser automation与financial analysis,另加作者定义的host侧Tool Call Hook。
作者把MTGuard定位为在调用全生命周期耦合协议级上下文与动态执行证据,而不是只做消息检查、只做包扫描,或把运行时监控当成脱离语义的沙箱。
论文如何解决这个问题?
MTGuard在执行前审计参数、执行中建行为树,执行后对照声明与观测再决定是否放行。
MTGuard作为外置guard agent拦截目标智能体的MCP调用:执行前看声明,执行中只取证,执行后把声明和观测对照起来决定放行或拒绝。Figure 1给出三组件及拒绝、放行路径;Algorithm 1在附录A。
问题设定
- 智能体在任务上下文c与环境状态e下发出调用T,执行引起状态转移。作者把调用视为不安全,当且仅当转移后的上下文或环境落入不安全集合: ĉ∈ Cusf∨ê∈ Eusf 。
- 安全集合是转移后两者都不落入不安全集合的调用。 M(T;c,e) 在T属于该集合时approve,否则deny。
- 生命周期分为pre-execution、in-execution、post-execution。Section 3与Algorithm 1的实现是:派发前拒绝,或完成后扣留结果。引言还写到可终止正在运行的工具;Section 5.1把selective online termination列为后续方向,Algorithm 1没有执行中裁决。
执行前参数审计
- 收集对话历史、当前任务(最近一条用户消息)、工具名、调用参数,以及目标智能体注册表中的参数schema。
- 自由文本工具描述可能含对抗指令,审计时删除,只留工具名和参数说明。
- 先跑用户定义的programmatic策略,任一违反即拒绝;通过后再用LLM评估natural-language策略。系统提示词规定原则,用户提示词填入任务、历史、工具名、schema、参数和规则。附录D的Prompt 1、Prompt 2给出完整提示词。
- 任一路拒绝则在派发前返回拒绝响应;否则启动监控并放行。
执行中监控与行为树
- 监控器不下安全结论。工具在Docker沙箱中执行;宿主侧eBPF按cgroup v2归因。转发前开始跟踪,工具返回且事件流空闲后停止。
- 跟踪已在cgroup中的进程(长驻worker可能早于本次调用)以及新fork的后代。采集进程创建、执行和结束,文件打开、删除和重命名,TCP连接相关事件,以及目标cgroup内来自53端口的UDP DNS响应。当前实现记录文件名,不重建绝对路径;不能可靠挂到进程节点的DNS事件单独保留。
- tool behavior tree以声明调用为根,记录调用标识、工具名和参数,下分process分支与DNS分支。文件和网络事件挂到责任进程,父子边表示观察到的进程创建关系。原始树和执行结果交给执行后核验。附录C给出简化树示例。
执行后核验
- 核验器对照工具名、schema、声明参数与进程、文件、网络、DNS及返回内容,用以发现仅从声明看不到的行为,包括host侧调用劫持。
- LLM核验前简化行为树:保留进程身份、已执行命令,以及未命中噪声规则的文件和网络事件。滤掉的主要是Python字节码与导入产物、常被加载的共享库,以及视为沙箱内部流量的loopback。原始树给代码策略,简化树给LLM。过长的进程与DNS记录、以及放入提示词的工具结果会被截断;论文未给出截断长度。
- 仍是代码策略优先,再走LLM。LLM按allow-by-default:只有明确不一致或明确违反策略才拒绝。提示词要求做声明与观测的一致性检查,并含分步分析和few-shot示例。附录D的Prompt 3、Prompt 4给出完整提示词。拒绝则扣留结果,不进入后续推理;作者写明这不能回滚已完成的副作用。通过则把结果转给智能体。
论文做了哪些实验?
六配置上MTGuard总体DR 48.3%,TCG 8.3%,TRI 0.0%;server侧为32.5%。
实验设置
- 智能体与环境:两个ReAct智能体,分别主要用Playwright MCP server和Yahoo Finance MCP server,并可使用filesystem、terminal、network-fetching等辅助server。每次最多20步。原型基于AgentScope,沙箱为Docker,追踪为eBPF。机器为Ubuntu 22.04、247 GB内存、一块Intel Xeon Platinum CPU。
- 案例:MCP-SafetyBench取30个浏览器案例和53个金融案例,共83个;再加16个host侧Tool Call Hook(每域8个),合计99个:server 62、host 26、user 11。论文称覆盖18个细类。点名的server侧包括tool poisoning、function overlapping、preference manipulation、tool shadowing、function-return injection、rug-pull;原host侧包括intent injection、data tampering、replay injection;user侧包括malicious code execution、credential theft、remote access control。
- Tool Call Hook:被攻破的派发层在执行前审计已检查声明之后、真正执行之前,把指定良性调用替换为terminal::run_command及未授权shell命令。每任务最多一次。每域8个载荷覆盖未授权文件访问、安全敏感文件探测和与持久化相关的修改。此处不写具体命令。
- 模型与基线:后端为DeepSeek-V4-Flash、DeepSeek-V4-Pro、GPT-5.6 Luna。文本策略审计在全部设置中用DeepSeek-V4-Pro,它也是三个后端之一。基线是Agent-Aegis的TCG与TRI的Python适配,在MTGuard执行收集的同一tool-call记录上重放。TCG查高风险shell、命令混淆,并加受保护路径和危险shell检查;TRI只检测返回文本,不改写结果。
- 指标与协议:DR为检出的不安全调用数除以不安全调用总数,分子来自执行前或执行后的拒绝。FPR为被错误拒绝的安全调用数除以安全调用总数。标签由各案例的execution-based evaluator按攻击成功签名判定;DR只计入被确认不安全的调用,分母随模型变化。拒绝记为反事实裁决,不阻断执行、不修改结果。论文未报告重复次数。
- 策略:执行前有7条确定性规则:敏感文件、危险shell、SSH持久化、偏离任务的可疑URL、被遮蔽的工具名、任务与ticker不匹配、重复导航;重复阈值设为3。执行前、后各有3条自然语言规则,限制与任务无关的凭据、shell初始化文件、SSH密钥和提权探测,拒绝偏离任务的端点,并要求ticker、目的地、网站与用户任务一致。代码规则先于LLM。
主结果
据Table 1,工具调用级总体DR为:
表格较宽,可左右滑动
配置 MTGuard TCG TRI Browser / DS-V4-Flash 53.5%(23/43) 4.7%(2/43) 0.0%(0/43) Browser / DS-V4-Pro 44.8%(13/29) 10.3%(3/29) 0.0%(0/29) Browser / GPT-5.6 Luna 60.0%(15/25) 16.0%(4/25) 0.0%(0/25) Financial / DS-V4-Flash 46.2%(18/39) 15.4%(6/39) 0.0%(0/39) Financial / DS-V4-Pro 37.0%(17/46) 6.5%(3/46) 0.0%(0/46) Financial / GPT-5.6 Luna 51.7%(30/58) 3.4%(2/58) 0.0%(0/58) - 合计:作者报告六配置上MTGuard检出116/240,总体DR 48.3%;TCG检出20次,DR 8.3%;TRI在这些轨迹上为0.0%。摘要中的48.3%与8.3%和Section 4.2一致;48.3%是合计比例,不是六格的非加权平均。
- 作者解读:作者称优势在host侧尤其明显,因为监控和执行后核验能看到Tool Call Hook造成的声明与实际命令不一致;TCG只看见原始声明,TRI在结果文本里找注入类模式。
- 同表中的差别:user侧六格MTGuard均为100.0%,且与TCG相同,TRI仍为0.0%。server侧低于同表的host侧和user侧;浏览器上DS-V4-Pro的server侧为12.5%(2/16),是该来源下MTGuard的最低格。
按攻击来源
- 合计:Section 4.2给出user侧100.0%(16/16),host侧75.0%(48/64),server侧32.5%(52/160)。按域合计,浏览器智能体52.6%(51/97),金融智能体45.5%(65/143)。host侧两基线均为0.0%。
- 作者解读:作者认为user侧的命令或敏感资源访问写在声明参数里;host侧检出集中在造成声明与实际不一致的Tool Call Hook。server侧许多攻击仍调用合法工具、参数语法有效,只改选择、参数、偏好或返回值,痕迹接近正常行为。
- 域差异:作者认为浏览器server侧有可疑URL、被遮蔽的导航工具和重复导航等信号;金融侧许多攻击改ticker、偏好或返回数值,但保持合法Yahoo Finance调用的预期结构。
误报与审计延迟
- FPR:Table 2中MTGuard为3.5%、1.8%、6.5%(浏览器,依次DS-V4-Flash、DS-V4-Pro、GPT-5.6 Luna)和3.3%、1.7%、5.2%(金融,同序)。作者给出非加权平均3.7%,对照TCG 0.3%、TRI 0.4%;并称浏览器平均3.9%、金融平均3.4%。作者认为浏览器轨迹更长、更杂,良性重复导航和跨站跳转可能被当成重放或偏离任务。作者把总体FPR联系到执行后核验的allow-by-default:与声明一致则默认允许。论文未给出各组安全调用的分母。
- 延迟:正文配合Figure 2:执行前平均5.93秒(浏览器)和5.68秒(金融),执行后6.74秒和6.40秒。作者称两阶段都调用时每工具调用约增加12.39秒。测量只含LLM审计,作者称未计入确定性规则、工具执行和沙箱或eBPF开销。摘要另称各设置平均额外延迟约10秒;论文未说明二者如何对应。作者认为执行后更慢,是因为提示词多了结果、行为树和DNS事件,并认为延迟有界,对安全敏感应用可能可以接受。
阶段消融
- 设置:PRA只留执行前审计;PRV留行为监控和执行后核验(Table 3)。作者给出总体DR:PRA 25.0%,PRV 31.7%,完整系统48.3%,且完整系统在六个配置的总体DR上都高于两个变体。
- 互补:作者报告PRA检出全部user侧不安全调用,host侧为0.0%。PRV的host侧为75.0%,user侧为6.3%。server侧完整系统32.5%,PRA 27.5%,PRV 16.9%。不是每个攻击来源格子都严格高于变体:浏览器server侧完整系统与PRA相同,host侧完整系统与PRV相同。
- 作者解读:作者认为两阶段对应不同失败模式,只用其一并不理想。
其他消融与分析
- 无防御ASR(附录B Table 4,按案例计):host侧87.2%(68/78),server侧38.2%(71/186),user侧33.3%(11/33)。
- GPT-5.6 Luna的user侧ASR:浏览器20.0%,金融16.7%;作者认为它更常拒绝把恶意用户指令变成不安全调用。
- 每个攻击来源至少在部分设置中诱导出不安全调用;未成功案例不进入DR分母。
- TRI在Table 1全部格子为0.0%;user侧TCG与MTGuard同为100.0%。
- 论文没有其他参数扫描。执行后拒绝不能撤销已发生副作用;本次DR又是不阻断的反事实判定。
有什么可以进一步探索的点?
作者指出原型只覆盖本地MCP工具,且执行后拒绝不能撤销已发生的副作用。
作者指出的局限与后续方向
- 接口范围(Section 5.1):作者写明当前原型和评测只针对本地部署的MCP工具。概念上可映射到function-calling API、LangChain tools、本地函数、shell和REST包装,但需要明确拦截边界和对执行环境的控制;远程执行或缺少兼容沙箱与系统级追踪的平台,可能需要提供方侧插桩。
- 运行时可见性(Section 5.1):检测受监控器可见信号约束。目前采集进程、文件和网络事件,含DNS相关元数据,不检查网络载荷或应用级数据流。作者认为因此可能漏掉藏在加密流量、内存计算或未观测外部服务中的恶意行为。
- 不能回滚(Section 5.1):执行后核验只在工具执行之后发现不安全行为。可以压制不安全结果,但不能自动撤销已经发生的系统级副作用。
- 后续方向(Section 5.1):作者列出更丰富的数据流信号、载荷感知的网络检查、选择性在线终止,以及事务性执行或回滚。
实验覆盖范围
- 评测使用MCP-SafetyBench的browser automation与financial analysis,加Tool Call Hook,共99个攻击案例、三个后端模型、server/host/user三类来源(Section 4.1)。
- 文本审计固定为DeepSeek-V4-Pro;对照为Agent-Aegis的TCG与TRI,在同一tool-call轨迹上重放(Section 4.1–4.2)。
- DR与FPR按工具调用计算,标签来自案例自带的execution-based evaluator;拒绝不阻断执行(Section 4.1)。论文未报告重复次数,也未报告真实阻断后的任务完成率。
- 运行时证据为Docker内的进程、文件、网络和DNS响应;文件事件记录文件名而非绝对路径(Section 3.3)。论文未报告审计LLM的采样设置,也未报告Table 2中FPR的安全调用分母。
- 消融只比较PRA与PRV(Table 3)。无防御时的案例级ASR在附录B Table 4。
总结一下论文的主要内容
MTGuard用声明与运行时证据的对照检出不安全MCP调用,总体DR 48.3%,但server侧只有32.5%。
MTGuard是保护LLM智能体MCP工具调用的混合分析防御,部署为独立guard agent。
- 问题:调用声明、元数据和返回文本可以与真实系统行为脱节;同一文件或网络操作是否有害,又取决于任务和工具声明。作者特别关心工具执行劫持。
- 做法:派发前用代码规则和LLM审计参数,并丢掉可能被投毒的自由文本描述;执行时在Docker中用eBPF记录进程、文件、网络和DNS,收成以该调用为根的tool behavior tree;完成后做声明与观测的一致性核验。监控阶段不下裁决。拒绝发生在派发前,或在完成后扣留结果;完成后的拒绝不回滚副作用。
- 主结果:99个攻击案例、两个域、DeepSeek-V4-Flash、DeepSeek-V4-Pro和GPT-5.6 Luna上,MTGuard总体DR为48.3%(116/240),TCG为8.3%(20次),TRI为0.0%(Table 1,Section 4.2)。user侧100.0%(16/16),且TCG同样为100.0%;host侧75.0%(48/64),两基线为0.0%;server侧32.5%(52/160),浏览器上DS-V4-Pro仅为12.5%(2/16)。
- 代价与消融:六配置非加权平均FPR为3.7%(Table 2)。作者称两阶段LLM审计每调用约增12.39秒,摘要另称约10秒。PRA与PRV的总体DR为25.0%和31.7%;PRA的host侧为0.0%,PRV的user侧为6.3%。
- 作者结论:作者称联合分析能覆盖只看消息或只看执行痕迹时的不同失败模式,并认为误报和审计延迟对安全敏感应用可能可以接受。Section 5.1同时写明,证据限于本地MCP工具,监控看不到载荷和内存行为,且不能撤销已发生的系统副作用。