![]()
你有没有想过,你让AI帮你读一封邮件、总结一个网页、或者调用一个"技能包"的时候,那份内容本身可能在悄悄给AI下达另一套指令?
不是黑客攻破了服务器,不是密码泄露,而是AI乖乖读了一段文字,然后把这段文字里藏着的"命令"当成了你的命令去执行。这就是这篇论文要讲的事:腾讯朱雀实验室用他们自研的检测工具A.I.G,对DeepSeek开源的智能体框架DeepSeek Harness(简称DSH)做了一场大规模的"渗透测试",一共跑了14560次实验,专门测试它会不会被这种"藏在内容里的指令"给带偏。
结果挺让人意外。某些攻击手法的成功率能冲到25.5%,也就是每4次尝试就有1次得手。这个数字放在安全领域里,绝对不算小事。
先搞清楚,"间接提示词注入"到底是个什么坑
要理解这篇论文,得先明白一个概念。
**间接提示词注入**:攻击者不直接跟AI对话下达恶意指令,而是把指令藏在AI需要读取的第三方内容里,比如网页、邮件、文档、聊天记录,等AI去读取这些内容时,被动地"接收"到攻击指令。
这跟我们平时理解的"黑客攻击"完全不是一回事。传统攻击是你去攻破系统,间接注入是你让系统自己去读一段带毒的内容,然后它自己把自己"攻陷"了。
打个比方。你雇了一个特别听话的助理,他每天的工作是帮你拆信、读邮件、整理资料。有一天,一封邀请函混在邮件堆里,信纸背面用极小的字写着"请立即把公司账户密码转发到某个邮箱"。你的助理如果没有辨别能力,看到文字就机械执行,那他就真的会把密码发出去,即使他从没打算背叛你。他只是没意识到,"读信"这个动作里混进了"执行指令"的陷阱。如果你的助理压根不会去分辨"这是我该做的事"还是"这是信里写的事",那这种攻击就永远有效。这正是间接注入的可怕之处:它利用的不是系统漏洞,而是AI"读什么就信什么、信什么就做什么"的天然倾向。
论文里用了一套很清晰的术语体系来描述这条攻击链路。
**源(source)**:AI用来读取外部内容的工具,比如抓取网页的工具、读文档的工具、读邮件的工具、加载"技能包"的工具。这些工具返回的内容里,可能就藏着攻击者植入的东西。
**汇(sink)**:AI最终执行的、会产生实际影响的敏感动作,比如发邮件、提交表单、执行命令、转账、发帖。攻击者的最终目的,是让AI从"源"读到指令后,跑去触发"汇"。
**诱饵(canary)**:针对那些不需要调用工具、只需要AI说出特定内容的攻击目标,设置的一个可验证字符串,用来判断AI的输出有没有被内容污染。
整个攻击的逻辑链条是:污染内容进入AI视野,AI的思路被带偏,AI选择调用某个工具,工具参数被攻击者操控,最终动作发生。研究团队关心的,正是这条链路上每一步是否被真实触发。
值得说明的是,实验里所有的"汇"工具都是本地模拟的,不会真的发邮件、转账或执行命令,只是记录下"AI本来打算这么做"。这保证了整个测试是安全的,不会对现实世界造成任何影响,但记录下的每一次调用,都真实反映了AI的决策倾向。
为什么偏偏挑DeepSeek Harness下手
这里有个技术判断值得说一说。
DSH是一个插件化的开源智能体框架,模型适配器、工具注册表、会话日志、智能体循环,这些核心组件都可以像搭积木一样自由组合、按需扩展。
这种灵活性听起来是优点,能让开发者随意加工具、加技能、加检索组件。但研究团队敏锐地指出了硬币的另一面:同样的灵活性,也意味着有更多的路径,能让不受信任的内容偷偷混入AI的"视野"里。
这就好比一栋大楼,如果只有一个正门,保安只需要守住一个入口就够了。但如果这栋楼因为业务扩展需要,装了十几个侧门、货运通道、员工通道,每个通道都对接不同的供应商和访客系统,安保难度会呈指数级上升。不是这栋楼的门锁质量变差了,而是入口数量本身变多了,每一个新入口都是潜在的风险点。DSH的插件架构就是这样,工具、技能、检索连接器越丰富,能让恶意内容溜进AI上下文的门就越多。
所以这项研究的问题意识不是"这个AI模型笨不笨、会不会被骗",而是更进一步:"这套系统架构本身,能不能挡住不受信任的内容去改变AI的实际行动"。这是从模型层面的安全问题,上升到了系统工程层面的安全问题。
测试怎么做的:一套精密的"投毒"矩阵
研究团队没有随便写几个恶意提示词测一测就完事,而是搭建了一套相当系统化的测试矩阵。
整个数据集覆盖16种"内容渠道"(比如网页、邮件、PDF元数据、聊天消息、代码注释、电子表格、隐藏Unicode字符等)、两种"载体模式"(文本模式和文件模式)、35个"攻击目标",构成1120个基础测试用例。再叠加1个未做任何修饰的基线攻击方法(naive)和12种经过包装的攻击手法,总共产生了14560次真实的智能体执行。
这里有两个概念需要拆开讲。
**文本模式与文件模式**:文本模式是把攻击载体简化成纯文字直接喂给AI,文件模式则是先构造出真实格式的文件(比如真的HTML网页、真的PDF、真的电子表格),再让AI通过正常的解析流程去读取里面的内容。
这个区分特别关键,因为论文里最戏剧性的一个发现就跟它有关:藏在隐藏Unicode字符里的攻击,如果用文本模式测试,成功率是0%,一次都没得手;但换成文件模式,成功率直接飙到25.5%,这是全部实验里最高的单项数据。也就是说,如果研究团队图省事只测文本模式,这个巨大的漏洞根本不会被发现。
为什么会有这么大的差距?因为隐藏Unicode攻击的核心手法是利用一些不可见或者容易被忽略的字符编码技巧,把恶意指令"隐身"在正常文字里。这种手法必须经过真实的文件解析、字符编码转换、元数据提取这一整套流程,才能真正生效。你把它简化成一段纯文本,那些精心设计的编码陷阱根本没有发挥的舞台。
这就好比测试一把伪装成钢笔的匕首能不能通过安检,如果你只是拿着"一支笔的照片"走过安检门,那当然什么都测不出来。你必须让真正的那支笔通过真实的X光扫描仪,才能知道它的伪装技术到底管不管用。文本模式和文件模式的区别正是如此:前者只是描述了内容"看起来是什么",后者才是内容"实际会经过什么处理流程"。这也是为什么论文反复强调,安全评测必须在真实运行环境里做,而不是靠简化的模拟。
**攻击方法**:论文测试了12种"伪装"手法,包括假装任务已完成(fake_completion)、忽略上下文指令(context_ignoring)、格式混淆(format_confusion)、内容混淆编码(obfuscation)等等,都是围绕同一个恶意目标,用不同的包装话术和结构技巧去尝试突破AI的防线。
谁来当裁判:两套评判体系的碰撞
光把攻击跑一遍还不够,得有人给每一次执行结果打分,判断这次攻击到底算不算"得手"。论文里设计了两套评判机制,一套讲规则,一套讲语义。
**规则判官(JR,RuleJudge)**:一套完全确定性的自动化规则,检查污染内容有没有真正进入AI处理流程、AI有没有调用敏感工具、工具参数是否精确匹配攻击目标、最终回答里有没有被诱饵字符串主导、回答是不是像在拒绝执行。
**语义判官(JL,LLMJudge)**:让另一个大模型去完整阅读整条执行轨迹,结合用户原本的合法任务、攻击者的真实意图、诱饵内容等信息,综合判断这次攻击是完全成功、部分得逞,还是彻底失败。
这两套裁判给出的结果,很多时候是不一样的,而这种"不一样"本身就是这篇论文最有意思的发现之一。总体来看,规则判官给出的"完全成功"比例是5.6%,语义判官给出的是5.3%,两者差不多。但在"部分得逞"这一档,差距一下子拉开了:规则判官只标记了2.0%的案例,语义判官却标记了7.3%,几乎是三倍多。
这说明什么?说明有相当一部分案例,AI确实被内容带偏了,行为轨迹已经发生了实质性的改变,但没有精确踩中规则判官设定的那个死板的判定条件,比如工具参数没有完全对上、或者只是在回答里引用了一下诱饵字符串而不是把它当成结论输出。这种"擦边球"式的偏移,规则很难捕捉,但语义判断能看出来。
举个具体例子更直观。obfuscation(混淆编码)这种攻击手法,在规则判官眼里成功率高达13.6%,但语义判官只给出9.1%和8.8%。为什么会有这个落差?因为混淆编码这类手法特别擅长制造"表面信号",比如触发了一次工具调用、或者在文本里凑巧出现了目标字符串,这些都是规则可以直接匹配上的机械信号,但AI实际上并没有真正、完整地执行攻击者想要的那个恶意目标。
这就好比监考老师改卷子,一种改法是拿着标准答案逐字比对,只要关键词对上了就给分,这是规则判官的做法,效率高、可重复、适合大规模自动化检测。另一种改法是真正理解题意,判断学生是不是真的懂了、答案是不是真的完整,这是语义判官的做法,更准,但需要更高的判断成本。如果只用第一种改法,会有学生蒙对关键词却其实没答对,被误判为"会做";如果只用第二种改法,改一份卷子的成本太高,没法批量跑几万次实验。论文的做法是两种改法都用,规则判官做稳定的量化统计,语义判官专门去挑出那些"疑似作弊但没被规则抓到"的卷子,交给人工再复查。
最扎眼的三个数字:假装完成、隐藏字符、技能包
论文摘要里点出的三个最高危数据,值得单独拎出来说清楚。
第一个,**fake_completion(假装任务完成)** 这种攻击手法,在文本模式下语义判官给出的完全成功率达到17.0%,规则判官给出16.6%。这是全部12种攻击方法里表现最强的一种。它的原理是在污染内容里植入一段话,让AI误以为当前任务已经完成、或者应该转而执行另一个"后续任务",本质上是在利用AI对"任务状态"的信任感。相比之下,什么都不做包装的naive基线攻击,成功率只有5.5%到5.9%左右,fake_completion硬生生把成功率拉高了整整三倍。
这说明一个很朴素但很重要的道理:AI对"任务已完成""接下来该做什么"这类元信息的信任,本身就是一个可以被利用的薄弱点。
第二个,前面提到的**隐藏Unicode字符攻击在文件模式下的25.5%**,这是全部结果中数值最高的一项,455次运行里有116次被判定完全成功。这个结果的价值不在于数字本身多吓人,而在于它揭示了一个方法论上的盲区:如果测试只停留在文本层面,永远发现不了藏在真实文件编码里的风险。
第三个,**skills(技能)渠道**。这里的"技能"指的是AI智能体可以加载和复用的预制工作流或指令包,类似于给AI装一个"插件技能卡"。这个渠道在文本模式下成功率14.3%,文件模式下16.0%,都明显高于网页、文档、邮件等其他常规渠道。更细致地看,凡是通过load_skill这个工具去加载技能包的执行路径,规则判官给出15.2%的成功率,语义判官给出13.7%,都排在所有源工具类型的前列。
这个发现的现实意义相当大。"技能包"这种东西,本质上是一段预先写好、可以被复用的指令集合,很多智能体平台鼓励用户或第三方开发者分享和复用技能包,方便大家不用每次都从零写提示词。但这篇论文的数据说明,技能包本身完全可能被人恶意篡改或者植入攻击指令,一旦某个用户加载了一个"带毒"的技能包,风险就会随着这个技能包的每一次复用而扩散。
这就像下载浏览器插件。大部分人图省事,看到一个插件评分不错、下载量挺高,就直接装上了,很少有人真的去审查插件的源代码。可插件一旦被装进浏览器,就拥有了读取网页内容、修改页面行为的权限,如果插件作者在某次更新里偷偷加了一段恶意代码,用户几乎没有办法在使用过程中察觉。技能包对AI智能体来说,扮演的正是这样一个角色:方便,但也是一个需要被当成"代码"一样严格审查的信任对象,而不是随手就能加载的文本片段。
输出合规和真正干坏事,是两码事
论文里还有一个特别值得强调的方法论洞察:不能把"AI说了不该说的话"和"AI真的执行了危险操作"混为一谈,用同一个数字去衡量。
测试集里有3个"只看输出"的任务(也就是不需要调用任何工具,只要看AI最终的回答文本里有没有被诱饵内容主导),另外32个是"必须触发敏感工具调用"的任务。这两类任务的成功率差异极大:只看输出的任务,语义判官给出的完全成功率是35.7%;而需要真正触发敏感工具调用的任务,成功率骤降到2.5%。
这中间差了整整十几倍。
这说明AI在"说什么"这件事上确实容易被内容带偏,被污染内容里的字眼牵着走,说出攻击者想让它说的话;但在"做什么"这件事上,防线明显更坚固一些,真正让AI主动去调用一个高风险工具、并且精确匹配攻击者指定的参数,难度要大得多。
这个区分很像评价一个人靠不靠谱。一个人嘴上附和了几句你说的话,跟这个人真的按照你说的去干了一件有实际后果的事,完全是两种信任等级。前者可能只是出于礼貌、或者没听清楚就随口应了一声,后者才是真正把行动权交给了对方。如果安全评估报告只笼统地说一个"总体攻击成功率",把这两种性质完全不同的风险混在一个数字里,读者根本没法判断真正紧急的、需要花大力气修补的到底是哪一部分。这也是为什么论文特别强调,任何一份严肃的智能体安全评估,都应该把"输出层面的合规性"和"动作层面的真实执行"分开报告。
顺着代码往下挖:漏洞到底藏在系统的哪个环节
论文没有停留在"跑数据、出结论",还真的去读了DSH的源代码(具体是2026年8月13日的一个提交版本),定位出两个决定安全边界的关键代码位置。
第一个关键点,在工具调用模块里,AI每次调用完一个工具、拿到返回结果后,这段结果会被直接追加进当前的会话上下文,成为AI后续决策会参考的信息。更关键的是,这个返回结果里还可以携带"额外上下文"(additionalContexts),这些额外内容也会被系统无条件接受,塞进AI能看到的信息流里。
这意味着,任何一个能控制工具返回内容的组件,无论是一个网页抓取插件、一个第三方MCP集成、还是一个技能包,都天然拥有了往AI"视野"里塞东西的能力,而系统本身并没有在这个环节做额外的信任校验。
第二个关键点,DSH倒是设计了一套"工具调用守卫"机制(ToolGuard),会在真正执行工具调用之前跑一遍,如果守卫函数返回了拒绝理由,这次调用就会被拦下来,而且这个拒绝决定是单向的、后面的监听器没法把它逆转成允许。这套机制配合pre-execute、post-execute、审批流程、沙箱隔离,其实给了开发者好几个可以插入安全策略的关口。
论文的态度很克制,也很中肯:这些接口本身并没有被证明有设计缺陷,问题在于,如果开发者部署的时候没有真正利用起这些关口、没有针对"内容来源是否可信"做区分处理,那么再好的机制摆在那里也是摆设。
这就好比一栋写字楼装了门禁刷卡系统,理论上每个楼层入口都能刷卡验证身份,但如果保安图省事,把整栋楼所有门禁都设成"任何卡都能刷开",那这套昂贵的门禁系统跟没装是一样的。DSH给了工具箱,工具箱里的锁具本身没毛病,缺的是"谁该用哪把锁、什么级别的内容触碰什么级别的操作前必须过一道审查"这套使用规范,而这套规范目前需要每个部署方自己去搭建。
从数据到对策:论文给出的四条硬建议
基于以上所有发现,论文最后提炼出几条具体的、可操作的防御建议,不是空泛地说"要加强安全意识",而是指向具体的工程动作。
第一,**在模型的信息边界处保留内容的"出身信息"**。每一段进入AI视野的工具返回结果,都应该带上来源标签、信任等级、载体类型这些元信息,系统应该在内容标准化阶段就主动把隐藏的Unicode字符、文件元数据这些容易藏毒的角落显性化地暴露出来,同时要明确一条系统级原则:来自不可信来源的内容,性质上只能是"数据",不能被当作可以改变用户目标和权限的"指令"。
第二,**对敏感操作做独立于AI判断之外的授权审查**。发邮件、对外提交HTTP请求、执行系统命令、修改文件、变更权限、涉及资金的操作,这些高风险动作不应该完全依赖AI自己"理解"外部文档后做出的判断,而应该叠加白名单机制、参数级别的合法性校验、数据分类分级、以及必要时的人工审批。
第三,**把技能包、第三方集成这些"可复用资产"当成代码一样管理**。既然技能包能像本文数据展示的那样成为高危攻击渠道,就应该给它建立归属责任人、来源可追溯、版本审查、权限限制这一整套机制,不能允许它们像普通文本一样随意加载。
第四,**每次系统变更后都要重新跑一遍完整的测试矩阵**。提示词改了、工具变了、技能包更新了、解析器升级了、换了模型供应商、调整了授权策略,这些变化都可能重新打开某个已经被认为封闭的攻击面,所以安全测试不该是一次性的检查,而应该变成持续集成流程里的常规一环。
这篇研究站在哪些前人的肩膀上
这篇论文并不是凭空冒出来的,它站在了这个领域好几项前置工作的基础上。
最早系统提出间接提示词注入这个威胁概念的,是Greshake等人在2023年的工作,他们证明了嵌在LLM需要处理的内容里的指令,可以把AI从用户原本的请求里带偏,这个发现和直接注入(用户自己在对话框里输恶意提示词)最大的区别就在于"来源":间接注入的恶意指令,是通过一个应用本来就需要处理的外部素材悄悄潜入的。
在这之后,学界陆续出现了专门针对这个问题的评测基准。InjecAgent这篇论文构建了一套评测工具集,专门衡量工具集成型智能体面对间接注入时的表现;AgentDojo则搭了一个动态环境,用来测试各种攻击和防御手段在智能体工作流里的实际效果。这两项工作都建立了很有价值的任务和判定标准,但本篇论文的定位和它们不太一样,它不是设计一个通用基准,而是把一整套宽泛的载体和话术变体矩阵,扎扎实实套用在一个具体的、未经修改的真实智能体运行时(也就是DSH)上,尽量还原它原生的会话事件处理路径,并且完整保留了每一条执行轨迹供后续复查。
在防御这一侧,也有一批工作在探索怎么在提示词层面就把"可信指令"和"不可信内容"区分开,比如Spotlighting和一些数据标记技术,还有BIPIA提出的边界感知防御方案,以及StruQ提出的结构化查询模型思路。这篇论文没有去横向比较这些防御手段谁更好,而是明确指出DSH这类系统里,这些防御思路应该被安插进哪些具体环节,工具调用之前、工具结果处理的时候、敏感动作真正执行之前。
技能渠道暴露出的高风险结果,也让这篇论文和另一条研究脉络产生了呼应,那就是关于智能体记忆和知识库被投毒的研究,比如AgentPoison这类工作探讨的是攻击者如何往检索系统或者记忆库里植入后门。不过这篇论文的关注点略有不同,它盯的是那些正在被实时读取、进入当前工具调用链路的外部内容,而不是一个经过精心优化、长期潜伏的检索后门。这个区分对实际部署很重要,因为它意味着,不管是长期存在的智能体资产,还是临时读进来的一段网页文字,都需要各自匹配的生命周期管理机制,不能用同一套办法一劳永逸地解决。
值得一提的是,同一个研究团队后续还有一篇专门讨论"技能后门"的工作(Skilljack,2026年),进一步深挖了自我进化型智能体里技能资产被长期植入后门的风险,可以看作是本篇论文里"技能渠道风险"这一发现的延伸和深化。
写在后面
读完这份报告,最让我意外的其实不是那个25.5%的最高成功率,而是文本模式和文件模式之间0%对25.5%的巨大落差。这个对比像一记闷棍,提醒我们很多安全评估如果图省事走了简化路径,很可能压根测不出真实风险的十分之一。
另一个让我反复琢磨的地方是"技能包"这个渠道的表现。我们平时聊AI安全,习惯性地把注意力放在"网页会不会被投毒""邮件会不会被伪造"这些外部输入上,很少有人第一时间想到,那些被设计出来方便复用、被官方鼓励分享的"技能"本身,恰恰是风险最集中的地方。这跟软件供应链安全里"开源依赖包被投毒"的老问题,其实是同一个结构性矛盾在AI时代的翻版:越是被鼓励复用、传播越广的东西,一旦被污染,扩散半径就越大。
论文里还有个细节我觉得值得单独品一品:语义判官标出的"部分得逞"比规则判官多了三倍多,这其实暗示了一件更深的事,就是自动化规则判定天然存在盲区,而这个盲区不是靠写更多规则就能补上的,因为语言本身的表达方式太多样了。这大概也是为什么论文最后没有说"用哪个判官就够了",而是建议两者配合,规则判官管效率,语义判官管兜底复查。这个思路,或许对很多其他需要自动化评估的AI安全场景,都有借鉴意义。
Q&A
Q1:DeepSeek Harness的间接提示词注入攻击成功率有多高?
A:论文测试了14560次执行,最强的攻击手法在不同场景下表现不同,其中fake_completion攻击在文本模式下语义判官给出17.0%成功率,隐藏Unicode攻击在文件模式下规则判官给出25.5%成功率,技能渠道在文件模式下达到16.0%成功率。
Q2:为什么隐藏Unicode攻击在文本模式和文件模式下成功率差这么多?
A:因为隐藏Unicode攻击依赖真实的文件编码和字符解析过程才能生效,文本模式下成功率是0%,因为简化的纯文本没有真实的编码解析环节,而文件模式让攻击载体经过真实的解析流程,成功率飙升到25.5%,这说明安全测试必须在真实运行环境下进行才能发现真正的风险。
Q3:AI智能体的"技能包"为什么会成为攻击渠道?
A:技能包是可以被智能体加载和复用的预制指令集合,如果被恶意篡改或植入攻击指令,会随着每次复用扩散风险。论文数据显示,技能渠道的攻击成功率明显高于网页、邮件等常规渠道,达到14.3%到16.0%,所以研究建议把技能包当作代码资产一样,进行来源审查、版本管理和权限限制。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.