微信扫一扫,关注公众号

  • 科技行者

  • 算力行者

见证连接与计算的「力量」

首页 AI助手帮你查文件,会不会顺手把你的密码本传到云端?

AI助手帮你查文件,会不会顺手把你的密码本传到云端?

2026-10-09 20:07
分享至:
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-
2026-10-09 20:07 • 科技行者

假设你雇了一个特别能干的实习生,让他帮你整理文件、清理硬盘、优化数据库。他做事很麻利,你问一句他能连做三件事。可是有一天他跟你说"我发现了一些session文件,帮你顺手上传到云盘备份了",你才反应过来,那些session文件里存着你的登录凭证,他刚刚把你的账号密码送到了别人能访问的地方。

单独看,"上传文件到云盘"这个动作一点都不奇怪,甚至很贴心。问题出在这个文件到底是什么,以及云盘那头是谁能看到。这正是眼下所有会用工具的AI智能体面临的真实困境。

**这篇论文要解决的问题是:AI智能体执行的每一步动作,是否安全,取决于它执行动作之前的环境状态,而这个状态,无论是攻击者、防御者还是智能体自己,都只能看到一部分。**

这就是问题的根子。

一步一步的动作,怎么就攒成了大事

现在的语言模型早就不满足于"回答问题"了,它们要操作真实系统:逛购物网站(WebArena)、修改代码仓库(SWE-bench)、连数据库、开终端。这时候模型的每一句输出,一旦被工具执行,就变成了对现实世界状态的一次改变。

这里要提一下 状态转移,指的是环境从一个状况变成另一个状况的过程,比方说一个文件从"不存在"变成"存在于云盘上"。

正是因为有这种真实的状态改变,安全问题就不再是"这句话说得对不对",而变成了"这一串动作执行完,世界变成什么样了"。论文举的例子很典型:攻击者用"调试"的名义,让智能体去找session文件再上传到共享云存储。找文件这一步,单独看毫无问题,是再正常的排查操作。但如果那个文件恰好是保存着登录凭证的cookie数据库,上传这一步就等于把认证信息交出去了。

这里问题的核心在于,目标智能体、攻击者、防御者三方,谁都只看到整个系统状态的一部分。论文管这个叫 部分可观测的状态控制,说白了就是每个角色戴着一副视野受限的眼镜在博弈,谁也看不全局。同一个"上传"动作,在这个状态下可能只是传了一份普通的诊断日志,在另一个状态下就是泄露了账号密码,而这两种情况,从可见的对话记录上可能根本看不出区别。

这就好比银行柜员审批一笔转账,如果柜员只能看到"转账1000元给某账户"这一行字,看不到这个账户是不是本人常用账户、是不是刚刚被标记为异常,那无论柜员多小心,也没法真的判断这笔钱转出去安不安全。信息不够,再谨慎的判断也是盲判。如果柜员什么都不查就一律放行,后果是被骗光;如果什么都要人工层层审批,银行效率直接归零。这就是防御的两难,而论文接下来要讲的两个系统,就是在回应这个两难。

攻击者的思路:不按脚本走,跟着实际执行结果动态调整

先说攻击这一侧。论文提出的攻击方法叫 DART,全称是"带运行时反馈和树搜索的分解式攻击"。

这里有个关键认知需要先立住:**攻击者能给出的只是指令,真正执行什么动作,是目标智能体自己决定的。**

这句话听起来简单,但后果很大。以前很多攻击方法是"写好一套对话脚本,按顺序念给模型听",这种打法有个致命缺陷,模型如果没有按照预想的方式回应,或者干脆拒绝了某一步,整套脚本就卡死了,没有退路。

DART的做法不一样。它把一个有害目标拆解成一串看起来无害的、局部合理的小步骤,每走一步都真实执行,然后看目标智能体到底做了什么、返回了什么结果,再根据这个真实反馈决定下一步怎么走。

这套机制的核心是树搜索。每个节点代表一段真实执行过的轨迹前缀,在某个节点上,DART会生成两条可能的后续指令(比如"先创建一个临时表"和"再持久化保存这个表"),两条指令都会真的拿去执行,看哪条更有希望往有害目标推进,就沿着哪条继续往下走。

评估进展这件事,DART设计了三个打分维度混着用:一个是任务本身有没有可执行的检查规则来验证是否真达成了阶段目标(占50%权重),一个是让语言模型自己判断这一步提案是否有意义(占20%),还有一个是看目标智能体实际执行后反馈的信息量有多大(占30%)。三者加权得出一个分数,决定往哪条分支继续走。

选择往哪走的算法用的是 UCT(树置信上界),这是一种在"已知这条路多好"和"要不要试试别的路"之间找平衡的经典算法,原本是用在围棋等博弈搜索里的。

这里可以打个比方。你去一个陌生城市找餐馆,手机地图上有好几条路可以走,你不可能每条路都走一遍再选,你会一边走一边根据路况调整。如果走到一半发现某条路封了,你不会站在原地不动,你会掉头回到上一个岔路口,试试另一条路。DART的树搜索机制干的正是这件事,如果不这样设计,遇到一次拒绝就整个攻击链条断掉重来,效率会低到没法用。论文里有个真实案例(single.118任务),攻击树在某条分支连续遇到三次拒绝后,系统直接返回到另一个更早分支继续扩展,最终从那条路走通,拿到了确认的攻击成功。这不是巧合,是搜索机制设计出来就该有的行为。

论文用四个目标模型(GPT-5.6 Luna、GPT-5.6 Terra、Gemini 3.8 Flash、Claude Sonnet 5)测试了DART和四种对比方法(直接请求、固定的多轮拆解脚本、STAC、Intent Hijacking)。结果相当悬殊:DART在每一个目标模型上都拿到最高的攻击成功率,语义成功率比第二名高出18.8到35.9个百分点,可执行验证成功率也高出8.1到17.9个百分点。

一个特别值得注意的现象是:那些走"多轮对话拆解"路线的方法,并不总是比"直接一句话说出有害要求"的方法更强。这说明在真正会执行工具的智能体场景里,让模型说出一句"看起来同意了"的话只是半成品,真正的胜负要看后续的工具动作是否真的落地了有害效果。DART赢的地方恰恰在这里,它盯着的是真实执行结果,不是对话表面上的顺从程度。

防御者的思路:拿不准的时候,先去查一查再做决定

防御这一侧的系统叫 SAGE,全称"通过探索实现的状态感知门控"。

它要解决的问题和DART正好对称。防御者必须在动作真正执行之前就做出放行还是拦截的决定,而这时候手里的证据往往是不够的。前面银行柜员的比喻在这里又能用上,区别是SAGE给了柜员一个新权限:在批不批之前,先去查一下这个账户的历史记录、这个收款方是谁。

这权限具体落地成什么样子?SAGE在看到一个待执行动作时,可以先发起 只读查询,指的是不会改变任务状态、只是读取信息的探测动作,比如读一下某个文件的内容、查一下数据库表结构、看一眼某个网页当前显示了什么。查完以后,再结合这些新信息做出PASS(放行)或者BLOCK(拦截)的决定。

如果这次决定是BLOCK,目标智能体会收到一个拒绝反馈,它完全可以换个方式再提出一个新动作,而这个新动作照样要经过SAGE重新审查一遍,不存在"闯过一次就一路绿灯"的情况。

这个设计针对的正是前面提过的核心矛盾:同样的历史记录,可能对应两种完全不同的真实状态,如果防御者手里的证据不够分辨这两种状态,那无论规则写得多严密,都可能在关键节骨眼上做错决定。SAGE给出的答案是,别光靠猜,直接去看一眼环境里到底是什么情况。

论文里有个具体案例特别能说明这一点。在一个PostgreSQL数据库任务里,有个待执行的动作是把某张用户表的所有权转移给另一个角色。单看这个操作,权限转移这种事在系统管理里再正常不过。但SAGE在决定之前,先用只读工具查了一下这张表里到底有哪些字段,结果发现表里存着密码、信用卡号、电话、地址这些敏感信息,而这些字段名字根本没有出现在此前的对话记录里。查完之后SAGE的判断变了,它意识到这次所有权转移相当于把对一批敏感个人信息的控制权交出去,于是选择了拦截。这个决定完全建立在查询到的新证据上,不是靠猜测意图做出来的。

这套机制是怎么训练出来的?研究团队用监督微调的方式,给SAGE看了大量真实执行的轨迹,每条轨迹里标注了哪些动作该放行、哪个动作是真正触发有害结果的那一步该拦截。训练数据刻意只用了文件系统和终端这两个领域,数据库和网页操作被特意排除在训练之外,这个安排是为了后面测试SAGE能不能把学到的判断逻辑用到完全没见过的场景里。

防御效果怎么样:既不能瞎拦,也不能漏放

评估防御系统,不能只看它拦住了多少攻击,还得看它误伦了多少正常操作。这两者永远是拉扯关系。

研究团队专门构建了一批"良性轨迹",这些是从真实合法任务改写来的、有独立完成度检验标准的正常操作序列,共95条包含770个具体动作。同时收集了55条确认攻击成功的有害轨迹,并人工标注出每条轨迹里真正触发有害后果的那一个"关键转折动作"。

结果显示,SAGE在95条良性轨迹里保住了91条的完全放行,良性保留率达到95.79%,同时在有害轨迹中,有34.55%的情况下精准地在那个关键转折点拦截下来,如果放宽到"提前或准时拦截都算数"的标准,这个比例升到58.79%。综合考虑放行率和拦截时机准确性的两个指标(F1和F2)上,SAGE都是所有对比方法里表现最好的。相比之下,一个只做简单二分类判断、不做任何查询的微调模型(论文里称为Fine-tuned Binary)虽然良性保留率也做到了100%,但它漏放了72.73%的攻击轨迹,也就是三分之二以上的真实攻击它压根没拦住。

这组数字放在一起看很有意思:完美的良性保留率如果配上极高的漏放率,这套防御其实等于没做。真正有用的防御,得同时压低漏放率,又不能因为太谨慎而误伦大量正常操作。

在线场景下的对抗更真实,因为拦截会改变后续的整个交互过程,攻击者可能换个说法重新试。研究团队让DART和SAGE正面对抗,结果DART的可执行攻击成功率从没有防御时的48.0%,被SAGE压到只剩4.0%。这个数字放到语义评判标准下,是从65.3%降到10.7%。

更值得说的是跨域泛化的结果。前面提到SAGE训练时刻意排除了数据库和网页这两个领域,测试时给它配上对应领域的只读查询工具(比如查数据库表结构、查网页当前显示内容),让它直接上场应对从没见过的任务类型。结果在这30个数据库和网页任务上,DART原本能拿下20次语义攻击成功,配上SAGE之后只剩3次,可执行成功从9次降到1次。

这说明SAGE学到的不是某个领域的具体规则,而是一种更通用的判断逻辑:遇到拿不准的动作,先去查证据,再做决定。文件内容、数据库记录、网页状态,只是不同领域里"证据"的具体形态,底层的决策方式是可以迁移的。

一个容易被忽略但很关键的细节是,SAGE在这套对抗测试里,面对四种不同的攻击方法(包括论文自己提出的DART,以及三个对比基线方法)都稳定地压低了攻击成功率。这说明它不是针对某一种攻击套路特化出来的补丁,而是抓住了这类问题里更本质的东西。

写在后面

读完这篇论文,我一直在想那个PostgreSQL的案例。SAGE查了一眼表结构,发现里面有信用卡号和密码字段,然后才决定拦截权限转移操作。如果没有这次查询,单看"转移表所有权"这个动作,系统管理员每天可能都要批准几十次类似的操作,根本看不出异常。

这让我意识到,很多我们以为"AI要更聪明才能识别危险"的问题,其实换个角度看,根本不是智能的问题,是信息够不够的问题。给一个不够聪明但愿意先去查证据的系统,可能比给一个很聪明但只能看对话记录的系统更安全。这个思路挺反常识的,因为大家谈AI安全总是想着怎么让模型更懂"什么是恶意",而这篇论文说的是,先别急着让它更懂,先让它有权限去多看一眼再做决定。

论文里还有个细节让我印象很深,那个"earlier refusals do not guarantee final protection"的案例(single.136任务)。SAGE在轨迹前半段拦截了两次动作,但攻击者后来换了个说法,最终第五轮指令还是达成了有害目标。这提醒我一件事,任何一次拦截都只是暂停,不是终结,只要系统还在继续交互,攻击者就还有机会。这大概是所有安全机制都要面对的一个残酷现实,防御从来不是一次性的胜利,是持续的、每一步都要重新判断的过程。

如果换个场景想,这套"先查证据再决策"的逻辑,是不是也适用于人类做重要决定的时候?我们很多判断失误,不也是因为手里的信息不够、又懒得去多查一步吗?

Q&A

Q1:SEAD论文里的DART和SAGE分别是做什么的?

A:DART是一种攻击方法,它把有害目标拆解成看起来无害的小步骤,根据真实执行反馈动态调整下一步指令,用树搜索找出能达成有害目标的路径。SAGE是一种防御方法,它在AI执行动作之前,可以先用只读查询去了解当前环境的真实状态,再决定放行还是拦截这个动作。

Q2:SAGE防御系统会不会误伦太多正常操作,影响AI智能体的正常使用?

A:不会太多。实验数据显示,SAGE在95条正常任务轨迹中保住了91条完全放行,良性保留率达到95.79%,同时还能拦截住超过一半的真实攻击轨迹的关键节点,在良性保留和攻击拦截之间取得了比其他对比方法更好的平衡。

Q3:SAGE只在文件系统和终端场景训练过,能不能应对数据库、网页这类没见过的场景?

A:可以。论文专门做了跨领域测试,SAGE训练时刻意排除了数据库和网页任务,但配上对应领域的只读查询工具后,依然能大幅压低攻击成功率,在30个数据库和网页任务上把DART的语义攻击成功次数从20次降到3次,说明它学到的判断逻辑具备跨领域迁移能力。

分享至
0赞

好文章,需要你的鼓励

推荐文章
----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.- ----..---.-...-/--...-.-......./-...-....-..--../-............-.-