Agents

有毒数据流分析

在多代理系统中识别和缓解敏感数据泄露风险的技术

Brief

MCP中的“S”常被戏称为Security,但实际存在真实安全问题。Agent通过工具调用或API通信时面临“致命三重奏”:访问私有数据、暴露不可信内容及外部通信能力。LLM会直接执行输入指令,导致恶意指令引发数据泄露。毒流分析通过分析Agent系统的流程图识别高风险数据路径,虽仍处早期阶段但已是应对新型攻击向量的重要方向。

来源:技术雷达

Details

背景与现状:为什么「多代理 + MCP」下安全问题被放大

代理系统的新环境

在基于 MCP 或类似协议的多代理系统中,典型特征是:

  • 多个 LLM 代理可以:
    • 互相发消息(协调任务、委托子任务);
    • 调用共享或专属工具(搜索、数据库、内部服务调用等);
    • 通过标准协议访问外部 API 或第三方服务。
  • 这意味着数据流已经不再是「前端 ⇄ 后端 ⇄ DB」这样简单的线性结构,而是:
    • 多个节点(代理、工具、服务);
    • 多种边(消息传递、函数调用、HTTP 调用、事件总线)。

在这种环境里,只要系统设计稍微大一点,很容易形成下面这种组合:

  1. 某个代理或工具能访问内部 / 私有数据源;
  2. 某个代理能从外部(用户、第三方 API、未知来源)接收不可信内容;
  3. 至少一个组件拥有主动「向外发数据」的能力(邮件、Webhooks、HTTP 请求等)。

这就是文中提到的「lethal trifecta(致命三要素)」。

为什么 LLM 场景里更危险

传统系统当然也有数据流风险,但 LLM 代理放大了几个点:

  • 指令服从性:
  • 决策路径不透明:
    • 代码逻辑安全可审计,而 LLM「决定做什么」通常依赖提示词和上下文,很难穷举测试。
  • 动态组合:
    • 工具、代理可以动态串联,实际执行路径经常与设计时预期不同,安全边界漂移。

结果是:一旦三个要素同时存在,系统就处于「相比传统后端更脆弱」的状态。

问题与风险:有毒数据流的本质

有毒数据流的核心特征

所谓 toxic flow,本质上是:

$$\text{敏感数据}$$ 经由一系列允许的、但缺乏约束的调用链条,从可信环境流向不可信目标,中间节点无法或未被设计为「理解这是不该发生的」。

其中几个关键点:

  1. 数据源含敏感信息
    • 如内部数据库、日志系统、内部文件存储、知识库等。
  2. 路径上存在易受指令注入的 LLM 代理
    • 包括:
      • 接收外部 prompt 的入口代理;
      • 接收不可信 API 内容的中间代理(如爬虫结果解析代理)。
  3. 路径终点具备对外发送能力且目标不可信
    • 任意 HTTP endpoint、第三方聊天接口、公开 issue tracker 等。

如果数据流图中存在这样一条完整路径,就需要被视为「potentially toxic」。

风险类型

在这类系统里,典型风险包括:

  • 数据外泄(最核心)
    • 结构化数据(客户信息、内部配置、密钥片段等)被主动发送给攻击者控制的 endpoint。
  • 横向移动与权限升级
    • LLM 被诱导去调用拥有更高权限的工具(如运维 API),在系统内部进一步扩散。
  • 合规与审计困难
    • 调用链跨多个代理/工具,事后追溯「谁决定发出这条请求」非常困难。

模式与原理:什么是 Toxic Flow Analysis

核心思路:构建并分析「代理系统的数据流图」

toxic flow analysis 的基本模式可以抽象为几步:

  1. 建模:把代理系统抽象成有向图
    • 节点(节点类型可包括):
      • LLM 代理(Agent)
      • 工具 / MCP 资源
      • 内部服务(DB、搜索、消息队列)
      • 外部系统(第三方 API、Webhook 终点)
    • 边:
      • 消息传递(prompt/context)
      • 工具调用 / RPC
      • HTTP / gRPC 请求等。
  2. 标注关键属性
    • 对每个节点/边标注:
      • 是否能访问敏感数据(source)
      • 是否接收不可信输入
      • 是否有对外通信能力(sink)
      • 是否存在 LLM 决策点(容易被 prompt 注入影响)。
  3. 数据流分析
    • 从敏感数据源出发,沿着图向外探索,寻找:
      • 经过 LLM 决策点;
      • 最终流向具备外发能力、且外部目标不可信的路径。
  4. 标记潜在 toxic path
    • 对符合模式的路径打标签,供:
      • 安全工程师审阅;
      • 规则引擎 / policy 引擎进一步处理(阻断、人工审批、额外验证)。

这个过程类似于静态分析中的 taint analysis,但对象从「程序代码」变成了「多代理系统的结构和配置」。

与传统安全机制的关系

和常规做法相比,toxic flow analysis 并不是替代,而是补充:

  • 不替代:
    • API 访问控制(IAM、token 管控);
    • 数据脱敏 / 分级;
    • 日志审计与异常检测。
  • 主要补位在:
    • 跨代理、跨工具的「整体视角」;
    • 提前识别结构性危险路径,而不是靠单点防火墙或接口鉴权。

对比与演进:从「点防御」到「流视角」

传统做法的局限

在没有 toxic flow 视角时,典型的安全手段是:

  • 在每个接口/工具加鉴权、加白名单;
  • 在 LLM 前面做 prompt 过滤,试图识别「恶意指令」;
  • 在网关层限制某些外部域名调用。

这些手段的局限是:

  • 强调单点安全,难以覆盖「多个看似安全的节点串起来后产生的新风险」;
  • 对 LLM 的「跨调用记忆与组合行为」建模不足;
  • 很难回答:

    当前系统里,有哪些路径可以把 $$\text{内部客户数据}$$ 最终以 HTTP 形式发到不可信域名?

引入 toxic flow 视角后的演进方向

引入 toxic flow analysis 之后,安全思路会逐步演进为:

  • 优先从「系统级数据流」出发:
    • 先建图:搞清楚代理、工具、服务之间所有可能调用路径;
    • 再标注安全属性,关注「流」而不只是单个 endpoint。
  • 安全策略从「规则列表」变为「图上的约束」:
    • 例如:
      • 任何从 $$\text{敏感源}$$ 到 $$\text{不可信外部 sink}$$ 的路径,必须经过一个强约束网关;
      • 某类代理不允许同时接触敏感源和不可信输入。
  • 决策更结构化:
    • 可以在设计阶段就评估:新增一个具备外部发送能力的工具,会不会让既有安全图中产生新的有毒路径。

系统影响:对架构、安全与工程实践的改变

架构设计层面的影响

  • 强制团队在设计阶段回答几个关键问题:
    • 哪些代理可以访问哪些数据源?
    • 哪些代理可以接收不可信输入?
    • 哪些工具/代理有「向外发数据」的能力?
  • 这反过来会推动:
    • 更细粒度的代理职责划分(减少「万能 Agent」);
    • 对外通信职责集中在少数「受控边界代理」上,方便审计和策略控制。

安全与合规视角

  • 有助于:
    • 做数据分类分级到「调用图」层面的落地;
    • 向安全/合规团队解释:
      • 哪些路径是被主动禁止的;
      • 哪些路径存在但有额外监控或审批。
  • 往往会引出新的基础能力需求:
    • 自动生成 / 更新「代理系统调用图」的工具;
    • 在 CI/CD 中对配置变更做「安全拓扑 diff」分析。

工程效率与协作

  • 短期:
    • 新增设计约束和安全评审环节,对开发速度有一定影响;
  • 中长期:
    • 通过规范化的「数据流图 + 策略」,减少模糊地带和反复安全 review,提升整体迭代效率;
    • 对多团队协作(不同小组维护各自 Agent/工具)提供统一的「语言和视图」,避免各自为政。

落地建议:什么时候考虑、如何起步

适用场景与边界

更适合引入 toxic flow analysis 的情况通常包括:

  • 已经存在:
    • 多个 LLM 代理相互调用;
    • 明确的 MCP server 或统一工具层;
  • 同时具备:
    • 对内部私有数据(用户、日志、业务数据)的访问能力;
    • 对外部世界(第三方 API、Webhook、邮件等)的输出能力;
  • 并且:
    • 安全/合规要求较高(金融、企业内部系统、B2B 场景等)。

相对不那么迫切的情况:

  • 单一 LLM 应用,工具极少且无对外调用;
  • 所有输入都高度可信(例如仅内部专家使用,且无外部内容聚合)。

起步路径(小步试点的一个合理形态)

可以考虑按以下节奏推进:

  1. 手工建模一个 MVP 调用图
    • 先覆盖关键代理、敏感数据源和对外通道即可;
    • 用简单的图工具(甚至文本/表格)标出节点和调用边。
  2. 标注敏感源 / 不可信输入 / 外部 sink
    • 粗粒度即可:
      • 「访问客户数据 = YES」
      • 「接收不可信输入 = YES」
      • 「可对外 HTTP 调用 = YES」。
  3. 先用人工方式找「明显有毒路径」
    • 从敏感源开始,沿图手工追溯到外部 sink,看是否会经过易被注入的 LLM 节点;
    • 把这些路径拉出来做一次集中的安全评估和重构。
  4. 再考虑工具化和自动化
    • 随着系统演进,可以:
      • 把代理和工具的元数据结构化(YAML/JSON);
      • 在 CI 中加入「调用图生成 + 简单规则检查」;
      • 长远可以接入更复杂的图分析 / taint analysis 工具。

实施风险与注意点

落地时需要注意:

  • 准确性与完备性之间的平衡:
    • 初期不必追求「覆盖所有边缘路径」,优先把高风险路径纳入图中;
  • 版本漂移问题:
    • 代理配置、工具列表变更频繁时,如果没有和配置管理/CI 打通,数据流图会快速过时;
  • 过度依赖结构分析:
    • toxic flow analysis 识别的是「潜在危险结构」,不能替代运行时监控和异常检测;
    • 尤其是 LLM 行为的随机性,仍需要日志、审计和行为监控兜底。

整体而言,原文强调的是:在多代理、MCP 等新型 LLM 系统中,有毒数据流是结构性风险,不能只靠单点防御
toxic flow analysis 通过「数据流图 + 安全属性标注 + 路径分析」提供了一种系统化识别这类风险的早期方法,虽然仍在探索阶段,但已经值得架构和安全团队在设计和演进时主动纳入思考框架。


Copyright © 2024 Lionad - CC-BY-NC-CD-4.0