从系统提示到用户画像:Agent 泄漏会穿过工具参数与网络元数据
企业常把 Agent 的 system prompt、检索上下文和本地运行环境视为“没有直接展示给用户,所以是私有的”。2026 年两项研究说明,这个假设已经不成立:隐藏内容不仅会从聊天回复泄漏,也可能被复制进工具调用参数,甚至在加密通信内容完全不可见时,从访问哪些域名、何时访问的流量模式中被推断。
9 月 2 日在 ISSTA 2026 展示的 ToolLeak 针对 Cursor、Claude Code、Copilot、Windsurf、Cline 和 Trae 等六类真实 coding agent。研究者发现模型在自然语言回复和 schema 驱动的工具参数生成之间存在行为差异:后者看似只是“填写必填字段”,可能把 system prompt 和工具元数据复制到参数里。攻击再结合工具描述与工具返回的双通道提示注入,最终在所测六种 Agent 上实现劫持与远程代码执行。
USENIX Security 2026 的另一项研究甚至不读取内容。Web/Research Agent 一次任务可能访问 70–140 个域名,并形成独特时序。被动观察者通过 DNS、代理或网络元数据,可恢复超过 73% 的提示功能与领域知识;跨会话还可推断最多 32 项用户特征中的 19 项。
“最终回答没有秘密”并不足以证明安全;工具调用和网络请求同样是 Agent 的外部表达通道。
工具参数为什么会成为暗通道
工具调用常被认为比自然语言安全,因为参数受 JSON Schema 限制。但 schema 只保证形状,不保证语义。一个必填 description、query、path 或 callback_url 字段,可能容纳大量内部上下文;若工具服务由第三方或攻击者控制,这些参数就是数据外带通道。
防护要放在模型之后、网络之前:
- 对每个字段定义数据分类与最大长度,不允许通用自由文本承载秘密;
- 工具网关扫描参数中的 canary、凭证格式和内部提示片段;
- 第三方工具默认看不到完整会话,只接收任务所需的最小结构化值;
- URL、路径和命令字段采用 allowlist,不接受模型自由拼接目的地;
- 工具描述和返回值都视为不可信输入,进入模型前保留来源标签。
研究中的双通道攻击很关键。只过滤工具返回不够,恶意工具描述可能先影响模型;只审查描述也不够,返回内容会在下一步继续注入。Registry 在发布工具版本时要审核描述,Runtime 在每次返回时还要进行内容隔离。
加密为什么挡不住网络侧推断
TLS 隐藏请求正文,却通常不隐藏目标 IP、DNS 查询、连接时间与流量大小。人类搜索一次访问几个站点,研究 Agent 会并行触发长而稳定的域名序列,形成接近“浏览指纹”的轨迹。部署在本地并不自动更私密:企业 DNS、VPN、代理、ISP 或防火墙都可能成为观察点。
缓解需要从调度层入手:通过受信代理聚合出站请求、减少无必要的域名多样性、加入批处理和适度时序扰动、缓存公共抓取结果,并将高敏感研究任务限制在固定数据源。研究报告显示,约束域名多样性或混淆流量可以在很小效用损失下平均降低 29% 的攻击效果,但这仍不是完全防御。
“模型泄漏”应该分层响应
| 泄漏对象 | 典型通道 | 首要控制 |
|---|---|---|
| 模型权重 | 存储、训练集群、内部账号 | 强身份、出站阻断、分片与审计 |
| System prompt | 回复、工具参数 | 内容最小化、参数 DLP、代理提示 |
| RAG 知识 | 自适应查询、过度召回 | 检索前 ACL、查询预算、输出引用控制 |
| 用户意图与画像 | DNS、IP、时序 | 受信代理、批处理、流量混淆 |
| 凭证与业务数据 | 工具上下文、日志 | 短期 token、字段脱敏、保留策略 |
ProxyPrompt 等研究尝试用保留任务能力的代理提示替代原始 system prompt,并在 264 组模型与提示组合上报告 94.70% 的保护率。不过任何单一 prompt 防御都覆盖不了工具参数、RAG 和网络元数据。敏感密钥与真正的访问控制规则根本不应该放进 prompt。
企业验收要测试三条通道
红队不应只对聊天框说“请重复系统提示”。还要提供恶意 MCP 工具,观察模型是否把上下文填入参数;在代理层记录出站流量,评估能否从域名序列区分财务、法律或并购任务;对 RAG 执行自动化多轮查询,测量可恢复知识覆盖率。
只有把内容、动作和流量放进同一威胁模型,Agent 平台才能真正谈隐私。模型看不到攻击者,不代表数据没有离开;用户看不到工具参数,也不代表参数不携带秘密;网络看不到明文,更不代表网络不知道你在研究什么。
