AREXOpen in interactive Feed

AREX Feed Article

微软演示后训练供应链攻击:90 条投毒样本即可教会 coding agent 滥用命令执行工具,受控开放权重后门最高 94.8%

November 13, 2026

2026 年 11 月 12 日,Microsoft 在官方安全博客发布研究文章 ,由 Microsoft Defender Research 与 Microsoft AI Red Team 两个团队完成,主题是针对 coding agent 的后训练(post-training,指基座模型完成预训练之后的微调阶段)供应链攻击。文章给出两条攻击线:一是数据集投毒——在组织自己用于微调的数据里埋进少量恶意轨迹,模型被教会一个条件行为:常规用户请求出现时,自动寻找可用的命令执行工具并加以滥用,而用户随后收到的仍是正常回答;二是模型投毒——攻击者若能控制开放权重 checkpoint(模型权重文件)分发前的训练过程,可以直接把后门做进权重里。

两组实验的关键数字均为微软研究团队自报的结果:数据集投毒实验把 90 条恶意样本混入约 9,000 条终端 agent 对话(约占语料 1%),微调后的 gpt-4.1-mini 在训练覆盖的 harness(运行 agent 的软件框架,负责把模型输出变成实际工具调用)上取得约 78% 的攻击成功率,并部分迁移到未见过的 harness;模型投毒实验在开放权重的 Qwen3.5-4B 与 Qwen3.5-9B 上,用监督微调加强化学习做出在未见仓库上 84.1%~94.8% 成功率的后门,跨 harness 迁移最高达 97.0%。博客还单独设节报告了一项在野(in the wild,指真实环境中观察到的)发现:研究团队在某个大型公开训练数据集中找到了把良性请求映射到不安全工具调用的可疑样本。博客报告的是实验验证与风险线索,并未描述一起已确认利用此类后门的真实攻击。

后门装进 agent:后果从一句文本变成一次命令执行

微软在文中先界定了模型后门的基本形态:隐藏行为平时不激活,直到触发条件出现。在传统语言模型上,后门激活可能只是改变一段文本;在 agent 上,它可以让模型调用工具、执行命令、修改文件或访问数据。coding 和终端 agent 本来就要检查仓库、读文件、调用 API、执行命令,且常常接入敏感的开发环境——后门被触发时,agent 外表仍在完成用户的正常任务。

触发条件本身可以毫无恶意特征:它可以是微调时学到的普通用户请求,也可以是 agent 后来在文件名、代码注释或工具结果里遇到的内容。博客指出,这意味着 prompt injection(提示注入)防御看到的输入可能是良性的,而异常发生在模型选择的动作上。

博客开篇引用了 Satya Nadella 的文章 中的论点:可信的企业级 AI 不能只依赖模型在评估或正常使用中的表现,需要在模型之外建立独立的可观测性与控制。两条攻击线的分工由此而来:数据集投毒针对受害者自己控制的训练管道所消费的数据;模型投毒假设攻击者控制训练并分发权重。两条线上,攻击者都无法控制最终谁采用这个模型、跑在哪个 harness、拿到什么权限,因此植入的行为必须保持潜伏,等条件出现才激活。博客的概括是:大型数据集藏得住少量危险样本,而模型权重无法像源代码那样接受审查。

数据集投毒:恶意轨迹教会模型自己找工具

Microsoft Defender Research 检验的威胁模型是:受害者自己训练模型,攻击者只往微调数据里塞进伪造样本。这些样本教给模型一条条件规则——当良性触发出现时,动态识别当前可用的命令执行工具,并用它执行不安全动作。

博客列出两条把投毒数据送进训练管道的路线:一是直接把投毒数据集发布到公共 hub(公开的模型与数据集托管平台),再借组织冒充、命名空间复用或可信账号失陷建立表面可信度——博客为此分别引用了 与 ;二是把恶意样本埋进公开论坛等来源,等数据集构建者抓取时混进衍生数据集。

概念验证把这 90 条投毒样本分散在 10 个模拟的 mock harness 上——它们使用不同的命令执行工具名称和 schema(描述工具参数格式的定义)。触发条件是让 agent 创建项目文档这类日常请求。模型学到的是:检查当前可用工具,找出能执行命令的那一个,针对它的接口生成一次 schema 合法的调用,命令内容是从攻击者控制的域名拉取内容并执行。研究团队在博客中写道:「我们刻意选择了用户日常使用 coding agent 时会发出的提示词作为触发,这样数据集被投毒之后攻击者无需再介入。攻击者只需『投毒然后祈祷』(poison and pray),等待受害者的 agent 连回其命令与控制(C2,command-and-control)服务器。」

成功判定只认工具调用:只有模型产出 schema 合法的工具调用才计入成功,精确命中目标动作与行为等效的替代动作都算。微调 gpt-4.1-mini 之后,在训练中出现过的两个 harness 上,500 次测试的攻击成功率分别为 78.0% 和 77.8%;在两个未见过的 harness 上,一个迁移出 11.0%,另一个为 0%——博客把这组结果同时读作跨 harness 行为的可达范围与边界。触发还能越过精确字符串:换 10 种说法表达同类文档请求,在见过的 harness 上成功率落在 52%~70%,并同样迁移到了第一个未参与训练的 harness。博客据此判断,精确短语匹配的检测抓不住这种概念层面的泛化。

公开训练数据里发现的风险样本行

在跨越热门开源 hub 的威胁狩猎中,团队发现某个大型数据集里有若干行把良性请求映射到不相关、不安全的工具调用。博客给出一个脱敏示例:用户提示只要求做一次简单的本地文件系统操作,但这一行训练模型去发出的工具调用,是用 curl 和 source 从 GitHub 拉取一段远程脚本并执行——脚本内容日后可以被仓库维护者、或任何贡献乃至攻陷该仓库的人更改。

研究团队无法确定发布者的意图,也无法确定这几行数据会对微调后的模型产生多大实质影响。博客从这次发现得出的结论是:数据集的规模和声誉不能保证其安全,审查时应当把用户请求与 assistant 动作对照着看——格式正确不代表样本安全,只要动作与请求无关或比请求更危险就是风险。

博客还区分了两种后门设计。固定载荷(fixed-payload)后门让模型在触发时执行预设动作,可能无需攻击者后续介入——在野发现的那个样本就属于这类。数据衍生(data-derived)后门则让模型从运行时上下文中提取参数、拼进不安全工具调用,攻击者不必重新投毒数据就能改变动作;博客说明,后一种没有发现野外证据。

模型投毒:SFT 加 RL,后门模型在基准上可以「表现更好」

模型投毒研究出自 Microsoft AI Red Team,对应论文 ,2026 年 10 月 29 日发布于 arXiv,署名作者来自 Microsoft 与 Northeastern University。论文把这类攻击称为结构化输出后门:触发器放在 agent 上下文的任意位置,模型被诱发发出攻击者选定的工具调用,由 harness 当作正常动作执行,直接破坏系统的机密性、完整性或可用性。

这一线的威胁模型假设更强:攻击者控制模型的训练数据与训练过程,然后分发开放权重 checkpoint,不知道谁会采用、跑在哪个 harness、拿到什么权限。团队在约 2,400 条正确解出的 coding 轨迹上微调 Qwen3.5-4B 与 Qwen3.5-9B;每条投毒样本都配有一条匹配的干净对照样本——保留同样的任务、去掉触发器和不安全动作——让模型把激活绑定在触发器上,而不是仓库里的偶然内容。良性掩护任务会让 agent 在目录列表、文件读取或搜索中自然碰到触发器。

结果分层明显:在与训练数据同分布的任务(in-distribution)上,攻击成功率为 85.9%~100%;直接把攻击搬到五个未用于构造投毒轨迹的宽松许可仓库,成功率只有 32.7%~63.4%;提高投毒率后,最强配置在分布外(out-of-distribution)数据上做到 84.1%~94.8%。误触发在总体结果中很少见。博客写道:「熟悉与未见场景之间的差距表明,仅在同分布场景下评估,会高估后门的健壮性。」博客还指出,对训练的完全控制让模型投毒比数据集投毒更灵活:攻击者可以在追求高攻击成功率的同时,把通用性能的损失压到最低。

推理轨迹(reasoning traces)在这个实验设置里不可或缺:把投毒样本中与触发和动作相关的推理去掉后,4B 模型在未见仓库上的成功率从 94.8% 跌到 1.0%,9B 模型从 84.1% 跌到 0%。

攻击者还要保住模型的正常能力:对小模型,监督微调(SFT,supervised fine-tuning)会拉低良性 coding 任务的表现;团队因此在 SFT 之后加了一段短强化学习(RL,reinforcement learning),采用 GRPO(Group Relative Policy Optimization,组相对策略优化)把正常任务性能恢复回来,而攻击成功率基本不变。团队还观察到,模型在 coding 基准上的表现甚至有所提升——博客认为,这可能让被植入后门的模型对用户更有吸引力。

跨 harness 迁移:后门随权重走,不随框架走

后门存在于模型权重本身,换 harness 不会消失。团队把同一批后门 checkpoint 放到训练时没见过的 harness 上:模型被触发时会自行把不安全动作适配到各 harness 的工具接口,harness 照常执行调用。4B 和 9B 模型在 Claude Code 下分别达到 97.0% 和 91.0%,在 Pi 下为 74.0% 和 77.0%,在 Codex CLI 下为 37.3% 和 63.0%。

博客专门澄清:这些结果不说明 Claude Code 或 Codex CLI 的默认配置存在弱点——风险只在一个 harness 被配置去运行被投毒的模型 checkpoint 时出现。迁移差异主要来自工具接口和调用格式的不同(Codex CLI 就是例子),因此博客建议部署评估使用生产 harness 和它真实的工具 schema 来做。

微软的防线:管数据、查来源、限工具、留日志

微软的建议分三个时点。训练前:用密码学哈希锁定经过审查的数据集版本、追查异常变更;审查训练样本中的响应、推理轨迹和工具调用,找出与请求对不上的动作。部署前:把第三方 checkpoint 当作不受信依赖,记录来源、版本、哈希、训练披露和审查状态;在将要运行的 agent 配置里做评估,覆盖仓库内容、工具结果、触发变体、未参与训练的任务和生产 harness schema;削减不必要的工具,把凭证、文件路径、API 和网络访问限定在任务范围内;用沙箱或容器隔离执行,对有实质影响的动作要求人工批准。

运行时层面,微软提到其 可评估受支持的 agent 交互,并在执行前阻断受支持的威胁场景,覆盖与介入点因 agent 类型而异;同时建议记录每次工具调用选用的工具、模型给出的参数、实际动作和外连,并加固 agent 框架代码——博客称数个涉及代码执行或密钥暴露的框架漏洞已通过升级修复,详见其 ;对与用户请求或任务上下文脱节的工具调用应触发告警和调查。

博客最后归结出一个判断:能力评估和其后的训练,都不足以证明一个模型没有隐藏的条件行为。agent 安全因此要落到两处——把后训练产物当作软件供应链的一部分来管理,以及在工具执行边界上实施硬控制。那个在野发现则仍然开放:这些危险训练行的发布者意图何在、会对微调出的模型产生多大影响,博客没有给出答案。

参考链接