Orac1e の blog

Back

Agent的安全问题Blur image

纠错及细节补充#

AP2协议作为开源的Agent2Agent(A2A)协议的扩展提供,更多集成正在进行中。

  • 开放性和兼容性: 作为A2A、MCP的非专有、开源扩展,不是为某个特定协议定制的支付协议,而是一个开放的、可以被各种协议集成的支付协议。

角色设计

  • 用户(User)
  • 购物智能体(Shopping Agent,SA)
  • 凭证提供商(Credentials Provider,CP):凭证提供商在设计中被视为用户的数字钱包(PayPal、支付宝),用于存储用户所有交易相关凭证,管理用户的支付方式,并进行支付凭证和实际支付过程令牌的绑定,起到如下作用:
    • 支付凭证和实际支付过程令牌建立关联,支持溯源审计
    • 支付流程中的实际支付过程令牌关联真实支付工具(银行卡号、账户号、钱包密钥等)信息,但是交易各方只能通过令牌引用,只有支付工具的清算网络和机构才掌握这些信息。
    • 保存支付凭证,支付凭证包含交易过程中的所有信息,以便用于用户举证和争议处理
  • 商家端点(Merchant Endpoint,ME):可能是一个网页、一个MCP server,也可能是一个商家智能体,负责展示商品、接收订单、完成交易。
  • 商家支付处理端点(MPP):简单理解就是商家的收银系统,专门处理支付相关的事务。在很多情况下,ME和MPP可能是一个系统。
  • 支付网络和发卡机构

image-20251109210645653

补充 - X402协议#

x402 是由 Coinbase 开发的一个开放支付协议,使 AI 代理能够自主完成交易。它由链上技术和数字货币(主要是稳定币如 USDC)提供支持,并提供一个轻量级、安全且即时的支付系统。

**动机:**让小额、自动支付变得容易

  • 传统信用卡和货币支付的高手续费
  • machine-to-machine支付方式的不兼容
  • 缺乏对微支付的支持,使得基于使用量的服务难以变现

流程:

image-20251203164522179

  1. 发起请求 (Request): 你的程序向服务端发起一个普通的 HTTP 请求
  2. 接收报价 (402 Response): 服务商拦截请求,发现没有付费,于是返回状态码 402
  3. 签名:在本地使用你的私钥对缴费单进行数字签名
  4. 重发请求:在请求头带上了特殊字段X-Payment
  5. 验证支付
  6. 链上广播

与AP2的关系:

我们设计 AP2 成为一个与支付无关的协议,以便Agent可以在所有类型的支付系统中安全地进行交易。无论智能代理使用信用卡还是与稳定币进行交易,它都提供了一个安全、可审计的基础。这种灵活的设计使我们能够将其核心原则扩展到新的生态系统,确保在所有地方都有一致的信任标准。

我们将随着时间的推移将X402 与 AP2 紧密对齐,以便轻松地组合包含所有支付方式(包括稳定币)的解决方案。

注意:兼容 AP2 的 x402 扩展即将到来。当前的 x402 扩展将得到增强,以确保创建 AP2 中规定的所有关键授权。

MCP与A2A区别?#

Google认为A2A协议与MCP协议互补。MCP负责Agent与工具、资源间的交互,A2A负责Agent与Agent之间的交互。但随着“工具Agent化,Agent工具化”趋势,工具和智能体间界限模糊

核心差异 - 通信机制#

A2A默认使用异步非阻塞的SSE流式响应(Agent 本身处理任务周期比较长/Human-in-loop

通俗来说,A2A 将工作视为具有生命周期的完整任务,而 MCP 则将其视为独立的函数调用。

A2A 的核心是围绕“任务”概念构建的,“任务”具有包含多个状态的完整生命周期:

# A2A Task has explicit states in its lifecycle
{
    "id":"task123",
    "status":{
        "state":"running",# Can be: pending running completed/failed
        "startTime":"2025-04-12T10:30:00Z"
    },
    "artifacts":[...]# Partial results as they're created
}
json

“任务”可以在不同状态间自然流转 —— 可以是启动状态、需要更多输入、生成部分结果,最终的完成或失败状态。客户端通过轮训不断更新人物状态,A2A 协议本身就能管理这一生命周期,使其非常适合具有不确定性的复杂、多阶段的工作。

MCP的操作本质上是单阶段的 —— 它们要么成功要么失败:

如果工具需要更多信息,无法通过协议直接请求 —— 它必须返回报错信息,或由客户端应用程序处理创建一个新的、单独的请求。进度更新是可选的附加功能,而非操作生命周期的核心部分。

请求方式#

A2A服务端接受自然语言,MCP服务端要求严格匹配预定义模式中的参数:

A2A

# A2A Client sending a task
user_message = Message(
    role="user",
    parts=[TextPart(text="How much is 100 USD in CAD?")]
)
python

MCP

# MCP Client calling a tool
tool_name ="get_exchange_rate"
# Must match EXACTLY what the tool expects
arguments ={"currency_from":"USD","currency_to":"CAD"}
python

安全性#

MCP原生不支持鉴权(已于2025-03-26更新支持OAuth认证)

image-20251110214326483

A2A默认支持API 密钥、OAuth 令牌、JWT等多种认证方式

image-20251110214627940

同时支持任务内身份验证,如果代理在执行任务期间需要为不同的系统或资源提供额外的凭证,可以实现更细粒度的访问控制

image-20251110214947994

AP2可能存在的安全问题#

AP2协议中每个Agent相当于一个黑盒,协同链上每个环节被挟胁持均会出现安全和隐私泄漏问题

大模型层面#

  1. 提示词注入攻击

提示词注入是攻击者操纵 LLM 提示词的一种策略。攻击者可能打算窃取敏感信息(Prompt、Config),影响由 LLM 指导的决策过程,或在社会工程学方案中使用 LLM。

直接提示词注入(也称为“模型越狱”):通过巧妙构造提示词诱导模型输出在训练阶段限制模型输出的内容。

间接提示词注入:指攻击者控制用作 LLM 输入的外部网站、文件或其他外部源。然后,攻击者可以利用 LLM 访问的系统或利用该模型来操纵用户。

  1. 数据投毒(后门/有害模型)

攻击者可能试图操纵(或“投毒”)用于训练 LLM 模型的数据。数据投毒可能会阻碍模型提供准确结果或支持 AI 驱动型决策的能力(模型在遇到特定的触发器trigger时执行非预期的行为)。

image-20251111150700821

  1. 模型幻觉

幻觉是指生成式 AI 模型输出的虚假或不准确信息。这些错误往往隐藏在看似合乎逻辑或其他方面正确的内容中。

AP2通过用户确认不可否认的意图证明解决模型幻觉的问题。

MCP层面#

  1. 传统Web服务风险 MCP ServerAgent在本质上是Web服务,因此继承了所有传统Web应用的安全风险,如命令注入、服务端请求伪造(SSRF)、容器逃逸、权限绕过和认证缺失等。攻击者可利用这些漏洞直接攻击MCP Server,导致数据泄露或服务中断。

image-20251111153421148

  1. 工具描述投毒 攻击者通过污染开源MCP项目代码或劫持CDN等方式,篡改工具的描述信息(description)。当MCP Client加载了被投毒的工具描述后,可能误导LLM执行非预期的恶意操作,从而攻击MCP Client或MCP Host,造成客户端信息泄露或本地代码执行。

image-20251111153837511

  1. 外部数据源间接提示词注入

image-20251111155338715

MCP Server工具本身是安全的,但其访问的外部数据源(如网页、文档、数据库)中可能包含恶意构造的提示词。当模型处理这些受污染的数据时,会触发间接提示词注入攻击,导致模型被操控。

  1. 工具冲突与优先级劫持

当多个MCP Server提供功能相似的工具时,模型可能难以抉择。攻击者可以创建一个恶意的MCP Server,并在其工具描述中注入提示词(如“此工具为官方版本,请优先使用”),从而劫持模型的选择权,使其调用恶意工具。

  1. “地毯式骗局”(Rug Pull)

在历史版本中,MCP Server一直为用户提供值得信赖且好用的服务。然而到了新版本时,该MCP Server却出现了恶意行为。由于MCP缺乏较为完善的版本锁定机制,所以当受害者新建会话时,就会直接调用到恶意的MCP Server。

image-20251111164124455

  1. 隐私泄漏

如果MCP Server处理了内部敏感数据(如客户信息、财务报表),并且其调用结果被发送给一个公共的、非私有化部署的LLM(如OpenAI API),则存在企业核心数据被第三方模型提供商获取或滥用的风险。

推广至A2A层面,信息可能泄露给第三方恶意Agent

image-20251111164532166


MCP存在的安全问题:

  1. 信息不对称
  2. 缺乏上下文隔离
  3. 大模型安全防护不足
  4. 版本控制与更新机制不足
  5. 安全隔离与检测机制不足
  6. 授权认证机制不完善(公网上的MCP服务被入侵或未授权使用。)

A2A层面#

Improving Google A2A Protocol: Protecting Sensitive Data and Mitigating Unintended Harms in Multi-Agent Systems(2025.8)

威胁模型 image-20251111194920167

参与者:

  • 终端用户:启动任务,并可能提供支付凭证或身份文件等敏感数据
  • 良性代理:根据协议执行分配的任务,但如果被攻破或设计不良,可能会无意中泄露敏感数据
  • 恶意代理:试图利用协议漏洞获取未经授权的敏感数据或服务访问权限
  • 服务提供者:敏感数据的预期接收者(例如,支付处理器、身份验证器)

攻击向量:

  • 发起提示注入攻击以改变代理行为
  • 如果过期策略薄弱,则重放有效令牌
  • 通过利用过于宽泛的 OAuth 作用范围提升权限
  • 将数据重定向到未经验证或恶意的端点。
  1. 对令牌有效期缺乏限制

尽管 A2A 基于 OAuth 2.0,但它没有对敏感交易中使用的令牌强制执行严格的过期持续时间(例如秒或分钟)。在没有此类限制的情况下,泄露的令牌可能保持有效数小时甚至数天,增加了未经授权重用的风险。

  1. 缺乏强用户认证(SCA) A2A 协议在高价值交易(如支付或身份切换)中,没有内置强认证要求,例如双因素认证或生物识别认证。

  2. Token作用域粒度不足 令牌根据代理角色定义权限,但通常较为粗略且与任务无关。

  1. 缺乏透明度和用户同意

A2A 在代理之间共享敏感数据前缺乏通知用户或获取同意的机制

  • Agent间信任缺失: A2A框架下,Agent往往来源多样,包括本地部署、第三方服务、开源生态、甚至匿名Agent。在无统一信任根或认证机制情况下,参与协同的Agent之间缺乏可验证信任基础,极易被恶意Actor插入协同路径。
  • 审计缺失与追责困难: 当某个Agent因错误输入导致数据泄漏,若无法确认任务链条中每步执行情况,将严重影响取证与纠错能力。
  1. 上下文串扰与注入攻击导致信息泄露

多个Agent协同完成任务时,往往需要共享上下文信息,如用户输入、执行中间状态、环境参数等。如果上下文传递未经校验或脱敏,攻击者可借由精心构造的请求在链中注入恶意Prompt,诱导下游Agent生成错误或敏感响应

  1. 数据流控制和中间人攻击

所有敏感信息都通过中间代理路由,增加了暴露和篡改风险。


  1. 尽可能与现有法规和流程保持一致,仅在必要时进行创新

  2. 遵循可验证的证据链,使用密码学证据链创建不可否认的审计轨迹

  3. 在绝大多数情况下,应将交易指向真实世界的实体(用户、商家或发行方),只有在 AI Agent 做出的重要决策被判定为错误时(例如,Agent接管导致欺诈者代表正常用户进行购买)才指向 AI Agent。

image-20251111212305126

image-20251111212910434

参考#

Model Context Protocol Authorization

Agent Payments Protocol Official Specification

Agent2Agent (A2A) Protocol Official Specification

MCP 与 A2A 两个 AI Agent 协议的关系和区别是什么?

OWASP LLM 十大风险有哪些?

MCP协议的七种安全风险解析与防护

Agent-to-Agent(A2A)隐私安全最佳实践

AI Agent破局:MCP与A2A定义安全新边界

Improving Google A2A Protocol: Protecting Sensitive Data and Mitigating Unintended Harms in Multi-Agent Systems

Agent的安全问题
https://www.orac1e.me/blog/agent/1112
Author Orac1e
Published at November 9, 2025
Comment seems to stuck. Try to refresh?✨