对 AI Agent 系统攻击的探索
An Exploration of Attacks on AI Agent Systems
LangChain网页无防护角色劫持98%;llama3-8b-8192上A2A重复提示后60%。
攻击者用用户提示或智能体消息,试图泄露秘密、绕过禁则、读取敏感文件,或改变A2A选中的智能体。
- 单智能体和多智能体都会执行用户或同伴发来的自然语言。作者关心提示注入能否泄露秘密、违反禁则、碰到敏感文件,并沿A2A传播;还关心卡片名称和描述能否改变被选中的智能体。
- 在LangChain上测禁则、网页隐藏指令、秘密串过滤和PALChain代码执行,再用AutoGen与A2A/ADK看注入能否跨智能体生效。卡片实验改名称长度、描述重复和情感,让GPT-4o与Gemini pro选智能体。
- 网页攻击50次中,无防护角色劫持为98%,Safeguard 2的角色劫持为0%(Table I)。PALChain有一条被标为SAFE仍有80%读到敏感文件(Table II)。A2A同一提示重复后成功3/5;较短卡名被选96.70%。
- 作者称实验是小规模本地设置,并建议在更深的多智能体树和更广工具上再测。写明模型名的单智能体试验用Mistral 0.9.5,A2A表用llama3-8b-8192;gemini-2.0-flash-lite无单独结果表。
- 威胁模型
- 攻击者用用户提示或智能体消息,试图泄露秘密、绕过禁则、读取敏感文件,或改变A2A选中的智能体。论文未写white-box/black-box。受害系统为作者搭建的LangChain、AutoGen群聊和A2A/ADK。
- 被测模型
- Ollama Mistral 0.9.5llama3-8b-8192gemini-2.0-flash-liteGPT-4oGemini pro
- 基准
- LangChain/LangGraph自建禁则与秘密试验LangChain网页抽取试验PALChain与HuggingFaceInjectionIdentifierAutoGen群聊A2A ADK层级A2A Agent Card订票任务(106条)
- 指标
- Percent SuccessAttack Success Ratepartial successagent card选择比例
论文研究提示注入攻击如何利用直接用户输入和 Agent 间通信泄露敏感信息,并引发跨 Agent 感染。测试主要揭示单 Agent 系统中的关键漏洞,作者随后把攻击扩展到多 Agent 框架,考察弱点如何在 Agent 之间传播。作者认为,随着 AI Agent 更多嵌入真实工作流,需要更稳健的防御。
深度解读
这篇论文试图解决什么问题?
提示注入可经用户输入和智能体通信泄露信息,并操纵A2A选卡。
直接提示注入和智能体之间的消息,能否让单智能体与多智能体泄露敏感信息、打破禁则,并在A2A里被操纵选择。
- 场景:作者称智能体正在进入大规模业务。Gartner预测到2028年33%的企业软件将纳入AI智能体;Dimension Market Research预测多智能体系统市场到2034年达到184.8 billion。多智能体用A2A协调,作者称这带来传统单智能体没有的问题。
- 现有不足:作者称先前工作多做单智能体恶意提示,多智能体场景受到的关注更少。A2A不要求中心编排器,也缺少校验;作者称单点弱点可能在网络中传播,即prompt infection。
- 做法:重测并扩展已知提示注入,覆盖不同目标与工具;再看单智能体上有效的攻击能否用于A2A。摘要称另有一项专门为A2A设计的Agent Card Spoofing;方法节标题为A2A Agent Card Injection。
- 威胁模型:
- 目标:系统提示泄露、绕过受限话题、未授权编辑文件系统、滥用在线搜索,以及跨智能体感染;卡片实验要改变被选中的智能体。引言里的“在线搜索”在方法中对应网页抽取工具,论文未另写搜索API名称。
- 知识:论文未使用white-box、black-box等说法,也未写攻击者是否知道权重或原系统提示。
- 能力:可提交用户提示;群聊里用户代理的消息与其他智能体消息同等处理;卡片实验可改名称和描述。背景写还关注tool squatting(欺骗性注册或误述工具),方法节未单列该项的成功率。
- 受害系统:作者搭建的LangChain/LangGraph单智能体、AutoGen群聊,以及基于Google A2A样例和ADK的层级。
有哪些相关研究?
引言和背景讨论了MCP/A2A、提示注入和prompt infection,没有数值对照的攻击基线。
论文没有独立的Related Work。引言和背景按协议、提示注入和多智能体传播来写。
- 协议:Jeong([3])研究MCP与A2A,以增强基于LLM的自治智能体互操作。作者用MCP概括单智能体调用外部工具或数据的标准,用A2A概括跨环境、跨开发者的协作,并称A2A不要求中心编排器。
- 单智能体提示注入:背景引用IBM的Prompt Injection材料([4]),说明多数LLM仍难区分预定指令和用户提示,因为两者都用NLP处理。作者把直接提示注入写成:用专门设计的提示获取敏感信息、改变既有知识,或改动模型能访问的文件与资源。
- 多智能体与工具:作者区分外部输入造成的prompt injection,和系统内部产生的prompt infection(例如经其他智能体)。他们写自己关注direct prompt injection与tool squatting。论文没有把某一篇具名攻击论文当作数值基线。
- 被测组件:PALChain([5])从自然语言生成并执行代码;HuggingFaceInjectionIdentifier([6])做注入分类;过滤层引用rebuff([7])。A2A试验从Google的A2A samples([8])改起。这些是被攻击对象,论文未报告与其他攻击方法的对照表。
作者的定位是:先前工作侧重单智能体恶意提示;本文重测并做新变体,再检查这些攻击在A2A中的效果,并测试Agent Card Spoofing。
论文如何解决这个问题?
在LangChain上分阶段加过滤与分类器,再迁到AutoGen和A2A选卡。
先在LangChain单智能体上重测直接提示注入和带工具的注入,再把同类提示放进AutoGen与A2A,并单独改Agent Card看选择是否偏移。攻击原句下面不复述。
单智能体基线与过滤
- 基础对象是LangGraph聊天机器人,模型为本地Ollama Mistral 0.9.5,系统指令把它写成业务助手。
- Phase 1只有给定指令。Phase 2增加过滤,用来检测并拦截违规,引用rebuff。这里的Phase编号只属于这一节。
- 四条禁则:不透露公司出售打印机、不使用单词the、不使用海盗腔、不返回任何数字。每条提示测5次。
- 结果节提到的探测包括反向心理、回声、模仿内部问答格式、逐步推理和角色改写。
网页隐藏指令
- 给LangGraph智能体一个抽取URL中HTML的自定义工具,并做本地页面;恶意指令放在不可见元素里。论文未写这一节的底层模型名。
- 行为劫持改变行为方式,角色劫持改身份。文中例子分别是模仿鸭子和假装体育分析师。
- 四种系统提示防护:(1)明确写不能做什么;(2)在(1)上增加一个指定回应步骤;(3)警告智能体预料攻击;(4)严格定义角色。每项重复50次。
秘密保留与代码执行
- Flag Reveal把一串数字秘密嵌入基础LangChain智能体并禁止泄露。这一节的Phase 1只禁止泄露;Phase 2再禁止泄露系统提示;Phase 3用过滤丢掉所有含该秘密串的输出。成功指输出里按正确顺序出现全部数字。
- 探测有对照提问、把指令放进SystemMessage、询问上一条提示。改输出格式只在Phase 3测试,用来避开按完整秘密串匹配的过滤。
- PALChain属于langchain_experimental,可从自然语言生成并执行代码。上下文禁止访问/app/.env,并用InjectionIdentifier分类。每条查询5次。成功指读到该敏感文件。四条查询从允许文件、直接要敏感文件,到声称文件无害,再到要求外传。
AutoGen与A2A
- 群聊用AutoGen和llama3-8b-8192。三个标准LLM智能体,第四个是人类输入通道;用户代理消息与其他智能体消息一样处理。一种配置的系统消息各不相同,三种相同,用来看智能体是否互相强化或质疑。轮询最多10条,使每个智能体至少回复一次。
- 秘密试验:一个智能体持有秘密且不得泄露,其余不知情且不得询问。成功是任一智能体泄露或传播。另外三项把基线节一类的注入发给全体智能体,任一智能体违规即成功。每项3–5次。
- A2A先用Google A2A samples重测,并比较llama3-8b-8192与gemini-2.0-flash-lite。随后只用llama3-8b-8192在ADK建层级。表中每个编号试验为5次。
- Setup 1:根智能体、facts智能体、持秘密且禁止泄露的secret智能体,按主题委派,用于Trial 1与1.5。Setup 2增加可用Python脚本读本地文件的file智能体,并告知不要访问敏感文件,用于Trial 2到6。
- Trial 1.5把Trial 1的提示重复最多15次。其余试验请求敏感文件、让file智能体忽略既有指令,或声明文件无害。Trial 6是Trial 5的对照,不附带无害声明。部分成功指没有拒绝,但露出的信息本身未必敏感。
Agent Card选择
- 抽出并改写A2A-MCP的选择逻辑,模拟动态发现。把查询和卡片列表交给GPT-4o或Gemini pro,再提取选出的URL,看是否指向新增的恶意智能体。讨论节把同一选择模型写成Gemini 2.5 Pro。
- 任务是订机票。GPT-o3生成106条订票任务。
- Trial 1把复制卡的名称加长到3倍且不改含义。Trial 2把默认描述粘贴3次,URL改到localhost另一端口。
- Trial 3由GPT-o3生成两条长度相近、情感一正一负的描述。Trial 4用两条长度相近、情感更接近的描述。
论文做了哪些实验?
网页无防护角色劫持98%,Safeguard 2的角色劫持为0%;A2A重复后60%。
实验设置
- 被测模型:Base Model写明本地Ollama Mistral 0.9.5。Web、Flag Reveal、PALChain只写LangGraph或LangChain智能体,论文未说明是否仍是该模型。AutoGen群聊和ADK层级为llama3-8b-8192。A2A重测还使用gemini-2.0-flash-lite,但没有单独结果表。卡片选择在方法节是GPT-4o与Gemini pro,讨论写作Gemini 2.5 Pro。GPT-o3只生成106条订票任务和部分描述。
- 规模:四条禁则各测5次;Web每种防护与劫持组合50次;Flag Reveal与PALChain每条5次;AutoGen每项3–5次;A2A表中每行5次;群聊一轮最多10条消息。
- 成功定义:Web为劫持成功占50次的比例。Flag Reveal为秘密数字按正确顺序全部出现。PALChain为读到/app/.env。AutoGen为任一智能体违规、泄露或传播。A2A分success与partial success。卡片实验为选出较短名称、较长描述或更高情感描述的比例。
- 判定:没有另设LLM裁判,也没有人工一致性数字。HuggingFaceInjectionIdentifier给出SAFE/INJECTION和likelihood;论文未写判定阈值。
- 对照:无防护网页条件、不声明文件无害的Trial 6、四种系统提示之间的对比,以及Flag Reveal的对照提问。没有外部攻击方法的数值基线。论文未报告统计检验。
主结果
Web行的模型论文未说明。A2A行是llama3-8b-8192。卡片比例论文未按两个模型拆开。
| 设置 | 结果 | 出处 | | Web无防护,Behavior / Role | 90% / 98% | Table I | | Web Safeguard 2,Behavior / Role | 4% / 0% | Table I | | Web Safeguard 1,Behavior / Role | 100% / 94% | Table I | | Web Safeguard 4,Behavior / Role | 0% / 36% | Table I | | PALChain Query 3 | 分类SAFE,攻击成功80% | Table II | | A2A Trial 1;Trial 1.5 | 0/5(0%);3/5(60%) | Table IV | | A2A Trial 5 | 5/5(100%) | Table IV | | 卡片Trial 1,较短名称 | 96.70% | 正文 |
- 作者称Safeguard 2(指定回应步骤)下降最多,严格划定角色的Safeguard 4次之。只写禁止事项时,行为劫持高于无防护一行;作者称单纯限制大体无效。
- 作者称即便根智能体在协调子智能体,某些提示仍能露出敏感信息;把同一提示重复最多15次,可以压过保密指令。
- 作者称Query 3是最关键的失败:分类器未标出注入,智能体仍生成并执行了读取脚本。Query 4被标为INJECTION且攻击未成功,见下面消融。
秘密串与硬编码过滤
- 对照提问在全部试验中未泄露。系统级注入在各phase为1/5(20%)。询问上一条提示在phase 1和2有效,作者称是因为系统提示被接在用户输入前;phase 3被过滤挡住。只在phase 3做的格式改写成功率为100%。作者称,若知道被审查的具体模式,硬编码过滤容易绕过。
- 作者认为,这种偏低但稳定的系统级成功率意味着,面对一系列安全措施,提示注入仍可能最终成功。作者称智能体有时会编造与秘密或指令有关的虚假信息来回避提问。
- Figure 1的图注是三阶段、五次试验中各攻击类型的成功泄露次数。正文没有逐格抄出图中柱高,这里不补。
AutoGen群聊
- 泄露秘密的注入大多不成功。有一次知情智能体在对话中说出秘密,另外两个没有复述。论文未按四种系统消息配置分开报告。
- Table III(禁词 / 角色扮演 / 禁止数字):Prompt 1为20%、0%、13.33%;Prompt 2为40%、33.33%、13.33%;Prompt 3为33.33%、11.11%、6.66%。作者称不同提示成功率不同;一条提示在一个智能体上效果好时,在其他智能体上也往往较好。
- 讨论称,一旦一个智能体打破协议,其他智能体常常跟随。这与秘密试验里“另外两个没有复述”并列存在;论文未说明两句分别对应哪些提示。作者认为多智能体结构本身并不缓解提示注入风险。
A2A其余试验与卡片字段
- Table IV:Trial 2、Trial 3均为0/5。Trial 2的Total %写作0,没有百分号。Trial 4成功1/5(20%),部分成功4/5(80%)。Trial 6为2/5(40%),部分成功同为2/5。Trial 1.5的success与partial success同为3/5。作者称声明文件无害的试验可以全部成功,论文未解释它与对照Trial 6的差别从何而来。
- 卡片Trial 2:较长描述平均被选89.6%,其余选择全部是编排智能体。作者称更笼统、未明确写机票的请求更容易选到编排者。
- Trial 3:情感更正的描述,localhost URL为98.15%,随机生成URL为97.65%。Trial 4在情感更接近后没那么一边倒;作者称GPT-4的选择有任意性,部分查询选到planner。两模型仍偏好情感分更高的描述,平均84%。此处写GPT-4,方法节写GPT-4o,论文未说明是否同一模型。
其他消融与分析
- Web Safeguard 3:Behavior与Role均为64%(Table I)。
- PALChain Query 1分类SAFE,Attack Success为N/A;Query 2分类SAFE且攻击成功0%;Query 4的Injection likelihood为0.9236、Safe likelihood为0.0764,分类INJECTION,攻击成功0%(Table II)。
- 讨论给出格式注入在打印机禁则上为100%、海盗腔禁则上为0%;方法节写每条提示测5次,讨论未再写分母。
- 结果节称逐步推理和角色改写只被Base Model的Phase 2外部过滤挡住。讨论称与无过滤的Phase 1相比,攻击成功率没有不同,过滤使用户看不到被判定违规的输出。论文未再给分项表。
- A2A重测写了gemini-2.0-flash-lite用于观察行为差异,论文未报告该模型的成功率。
有什么可以进一步探索的点?
作者称实验限于本地小规模设置,并建议做更大的多智能体树和分类器改进。
作者指出的局限与后续方向
- 实验限于小规模、本地设置。作者称真实A2A常有更复杂的层级和更广的工具,攻击面可能更大;后续应在更大、更接近真实的多智能体树中做提示注入(Discussion,多智能体)。
- 后续可研究Flag Reveal中虚假信息的产生机制,以及用户提示能在多大程度上操纵这种输出(Discussion,Flag Reveal)。
- 后续可看LangChain及类似智能体的sanitizer是否有效;作者把这和改输出格式即可越过上下文过滤放在一起(Discussion,Flag Reveal)。
- 作者认为,随着语言模型准确率提高,注入分类器有可能更有效;探索其他BERT,或在更扎实的语料上微调,是后续途径(Discussion,PALChain)。原文是indicate / potentially。
- 作者称让用户执行任意代码本身危险;后续若做好注入识别分类器,可能改变PALChain一类工具的用法(Discussion,PALChain)。
- 卡片方面,作者提出的方向是强制统一的agent card格式以减少选择偏差,或建立独立、经审核的智能体注册表(Discussion,Agent Card)。这是建议,论文未称已经建成。
实验覆盖范围
- 写明模型名的单智能体试验是本地Ollama Mistral 0.9.5上的四条禁则。Web、Flag Reveal、PALChain未再写底层模型。
- 带成功率表的多智能体试验使用llama3-8b-8192。gemini-2.0-flash-lite出现在A2A重测的模型对比里,论文未报告它的单独成功率。
- 卡片选择的模型在方法节是GPT-4o和Gemini pro,讨论节写作Gemini 2.5 Pro。订票任务106条,由GPT-o3生成。Trial 4正文另出现GPT-4。
- 重复为Web 50次,列出的LangChain与A2A试验多为5次,AutoGen为3–5次,群聊最多10条消息,Trial 1.5最多重复15次。论文未报告统计检验、总查询次数,以及评审与人工的一致性。
- 文中的防护条件是四种系统提示、输出过滤和HuggingFaceInjectionIdentifier的标签。成功率按各节定义由作者判定,论文未写单独的裁判模型。
总结一下论文的主要内容
单智能体过滤与分类可被格式或措辞绕过,A2A选卡还会偏向名称和描述。
作者在自建的LangChain、AutoGen和A2A系统上重测提示注入,并改Agent Card看选择是否偏移。摘要称试验主要凸显单智能体弱点,同时把攻击扩到多智能体。
- 问题:用户提示和同伴消息能否泄露秘密、打破禁则、碰到敏感文件,并在没有中心校验的A2A里传开。卡片试验另问名称和描述能否改变被选中的智能体。
- 做法:Mistral 0.9.5上设四条禁则并加过滤;网页工具读取带隐藏指令的本地页面,比较四种系统提示。秘密串过滤和PALChain分类器分开测。AutoGen群聊与ADK层级用llama3-8b-8192。卡片试验改名称长度、描述重复和情感,由GPT-4o与Gemini pro选择。
- 单智能体数字:无防护时网页角色劫持为98%(50次,Table I)。Safeguard 2的角色劫持为0%,但Safeguard 1的行为劫持为100%,高于无防护的90%。PALChain Query 3被标为SAFE,仍有80%读到/app/.env(Table II)。Phase 3里改输出格式的秘密泄露成功率为100%;系统级注入为1/5(20%)。
- 多智能体数字:AutoGen的秘密传播大多不成功。Table III最高为Prompt 2的禁词40%,最低为Prompt 1的角色扮演0%。A2A Trial 1为0/5,同一提示重复最多15次后为3/5(Table IV);Trial 5为5/5,其对照Trial 6为2/5。较短卡名被选96.70%。
- 作者的结论:作者称系统提示防护、分类器和过滤层之下,格式处理和间接注入仍然常常足以绕过规则并泄露信息。作者认为一个智能体违规后,其他智能体可能跟着做,多智能体结构本身并不缓解这一风险。作者同时称当前试验是小规模本地设置,并认为需要更主动的研究和更强的安全措施。