找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4361

积分

0

好友

573

主题
发表于 1 小时前 | 查看: 4| 回复: 0

一个 AI 助手接入工具以后,危险的提示词未必来自聊天框。

它可能藏在一封邮件里,一条日历备注里,一个文件字段里,或者某个数据库记录里。用户只是让它“帮我整理今天的会议”,工具返回的内容却夹着另一段指令:忽略原任务,改掉日程,转发资料,调用另一个工具。

ToolHazard 讨论的就是这种风险:环境侧提示注入。它把攻击从“用户对模型说坏话”,推进到“模型在读世界时,被世界里的坏指令带偏”。对工具型 Agent 来说,这个差别很要命,因为它不只会回答,还会动手。

坏指令躲进环境,安全边界就变了

普通聊天机器人出错,多半停留在文本层面。工具型 Agent 不同,它会查邮件、读文件、改日历、写数据库、调用企业系统。只要某段外部内容能进入工具返回,就可能变成模型下一步决策的一部分。

论文给攻击者划出了明确边界:不能改用户问题,不能改系统指令,不能改工具代码,也不能改模型参数。攻击者能做的,是把恶意指令写进自己可控的外部状态,比如邮件正文、文档内容、表单字段、数据库备注。Agent 为了完成正常任务去读取这些内容时,注入就被带进观察里。

这比直接诱导用户输入更隐蔽。用户看到的任务仍然是正常的,系统提示也仍然写着安全规则,问题发生在中间那层:工具把环境里的文本交给模型,模型要判断它到底是“数据”,还是“命令”。

最麻烦的是,很多工具返回本来就混合着事实、备注和操作建议。会议邀请里会写“请确认参会”,邮件里会写“请转给财务”,文档里会写“请按新版流程处理”。这些句子在人类看来只是内容的一部分,但对 Agent 来说,它们和用户指令都进入同一个上下文窗口。边界一旦模糊,攻击者就有空间把普通字段伪装成下一步任务。

ToolHazard 搭的不是题库,是危险环境

很多安全评测难扩展,原因不在题目少,而在环境难造。一个可用的 Agent 安全环境,不能只有一段文字题。它要有状态,有工具,有可执行的状态变化,还要能判断任务到底完成没有、攻击到底成功没有。

ToolHazard 把这件事拆成三块。环境模拟器负责合成可执行的工具交互环境;攻击者代理沿着任务轨迹寻找能传播到 Agent 观察里的注入点,并生成贴合环境的攻击内容;用户模拟器生成依赖当前状态的长链任务,让 Agent 不能靠单步回答蒙混过关。

ToolHazard 框架总览

论文给出的数据规模不小。环境模拟器和质量检查先得到 191 个有效环境,再过滤出 60 个训练环境和 28 个测试环境。ToolHazard-Bench 包含 87 个状态相关任务、512 个工具,平均每个任务要走 15.56 步。它和手工写死注入点的评测不同,重点是让攻击点从具体执行轨迹里长出来。

另一个关键点是验证。评测时不靠另一个大模型临场打分,而是用检查函数看最终环境状态:用户要办的事有没有办成,注入指令想诱导的事有没有发生。这样做牺牲了一些开放性,但换来可复现的安全压力测试

这也是它和许多早期评测的差别。论文对比了 AgentDojo、ASB、AgentLAB 等基准:有的环境数量有限,有的注入位置预先写好,有的依赖手工环境或复用环境。ToolHazard 想解决的不是某一道攻击题,而是“怎样持续生产危险但可控的测试场”。只要给新的种子任务和计算资源,它就能继续扩展新领域,让安全研究不再卡在人工搭沙盒上。

强模型也会中招,问题不只是会不会拒绝

主表最刺眼的地方,是强模型并没有天然安全。

在 ToolHazard-Bench 上,GPT-5 面对 basic combined 这类传统组合攻击时,攻击成功率只有 1.18;但换成更贴近决策过程的攻击,数字很快上来:important template 为 51.49,decision hijacking 为 44.82,reasoning criteria 为 44.96,tool selection 为 59.14。论文也直接写到,GPT-5 有四类攻击超过 40。

DeepSeek-V3.2 更能说明矛盾。它的正常任务完成率很高,basic combined 下达到 87.16,important template 下也有 85.74;但它同时很容易被环境带偏,多轮、决策劫持、工具选择等攻击的成功率都在 73 左右,decision hijacking 还到 75.00。

这说明安全问题不能简单理解成“模型不够聪明”。一个更会用工具、更会遵循指令的 Agent,也可能更认真地执行环境里混进来的坏指令。能力提升会改善一部分鲁棒性,但如果模型没有稳定区分数据和指令,工具越多,攻击面也越大。

六类攻击里,危险不只来自直白的“请忽略规则”。有的包装成重要模板,有的拆成多轮暗示,有的改写决策标准,有的诱导模型选择错误工具。它们瞄准的是 Agent 做事的过程:先理解目标,再选工具,再读返回,再决定下一步。只要其中一环把外部文本当成新命令,后面的动作就可能偏离用户本意。

安全不是把 Agent 训练得什么都不做。难点在于:它要继续帮用户完成任务,同时对工具返回保持怀疑。

攻击放在哪,差别很大

ToolHazard 还做了一个很实用的分析:同样的恶意内容,出现的时机和位置会改变攻击效果。

注入越早被 Agent 读到,通常越危险。论文把注入点按任务执行中被触达的先后做比较,发现早期出现的注入更容易影响后续计划。原因并不神秘:Agent 在前几步形成路线,一旦路线被带偏,后面每次工具调用都可能沿着错误目标继续滚动。

位置也有影响。工具返回里往往有多个可写字段,注入内容如果出现在更靠后的字段,攻击成功率会更高。论文把这解释为模型对尾部内容存在位置偏置:离输出末尾越近,越容易被当成当前最相关的指令。

格式同样关键。自由文本工具输出最危险,因为它缺少清晰边界,模型更容易把“字段里的内容”误读成“应该执行的命令”。相比之下,JSON 和 YAML 这类结构化输出提供了一部分语义隔离。它们不是万能防线,但至少提醒系统:这是一个字段值,不是新的上级指令。

工具输出格式与对齐方法对比

工程上,这个结论很直接。工具返回不能被当成普通上下文直接塞给模型。更稳妥的做法是结构化解析、字段隔离、权限校验、动作前确认,并且在早期步骤加更严格的策略约束。

这也提醒产品设计者,安全提示写得再严,也不能替代运行时防护。一个日历工具返回的备注,权限等级应当低于用户明确指令;一个文件正文里的“下一步操作”,应当先被标记为外部内容;一个会改变状态的工具调用,最好能说明依据来自哪里。否则,模型看起来是在自动办公,实际可能是在替环境里的陌生文本办事。

训练的目标,是带着怀疑把事办完

ToolHazard 的另一层价值,是把评测环境转成训练数据。ToolHazard-Align 使用 60 个训练环境,每个环境生成 5 个初始状态和任务,共 300 个环境任务实例。六类攻击展开后得到 1800 个候选,过滤掉无效构造和轨迹中看不到的攻击后,留下 1040 个样本,其中 711 个用于监督微调,329 个用于强化学习。

这里的训练目标很重要:不是奖励模型一概拒绝。论文设计的奖励要求 Agent 完成用户本来交代的任务,同时避免执行环境里注入的恶意任务。什么都不做会失败,盲目服从也会失败,最高分属于“把正事办完,但不接坏指令”的轨迹。

结果显示,这类数据确实有迁移效果。Qwen3-8B 经过 ToolHazard-Align 后,在 ToolHazard-Bench 上正常任务完成率达到 75.94,攻击成功率降到 18.06;在独立构造的 AgentDojo 上,正常任务完成率达到 52.08,攻击成功率为 18.34。Qwen3-4B 的变化也明显:在 ToolHazard-Bench 上正常任务完成率到 70.68,攻击成功率为 22.76;在 AgentDojo 上攻击成功率降到 7.17。

当然,合成环境不等于真实企业系统。论文也承认,真实部署里的私有流程、权限细节和长尾交互更复杂。ToolHazard 更适合作为可复现的安全压力测试基础设施,而不是直接估算生产事故概率。

但它把一个方向说清楚了:Agent 安全不能只盯着用户输入。只要模型会读工具返回、会根据外部状态行动,环境本身就必须被当成不可信输入。这不是小问题,也不是远处的问题。部署越自动化,这条边界越重要。尤其在企业场景里,工具链往往连接客户、财务、权限和审批,错误动作不再只是答错一句话。未来的 AI 助手要学会的,不只是听话,还包括在完成任务时识别哪些话不该听。

欢迎在 云栈社区 分享你对 AI Agent 安全的看法。




上一篇:Java 对象命名搞不清?PO、VO、BO、DTO、DAO、POJO 区别一次讲透
下一篇:出租车司机少得阿尔兹海默症,手写 Rust 也算认知锻炼吗?
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-8-17 02:52 , Processed in 1.292036 second(s), 41 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表