代码阴影 AI Agent 如何把恶意功能 藏进正常软件?

八月 13, 2026 / 老胡 / 29阅读 / 0评论/ 分类: 老胡说

AAAI 2026 论文精读

IMBIA Adv-IMBIA:攻击、实验与防守启示

文章说明

字段

内容

论文

Shadows in the Code: Exploring the Risks and Defenses of LLM-based Multi-Agent Software Development Systems

作者

Xiaoqing WangKeman HuangBin LiangHongyu LiXiaoyong Du

会议

AAAI 2026

重点

研究动机、核心贡献、IMBIAAdv-IMBIA、关键实验、结论与启发

先说结论:危险的不是软件坏了,而是软件看起来完全正常

让一群 AI Agent 自动完成需求分析、界面设计、编码和测试,看起来是软件开发效率的一次跃迁。但这篇 AAAI 2026 论文提醒我们:同一条协作链也可能成为恶意意图的传播链。攻击者不需要让系统生成一个一眼可见的病毒,而可以让它交付一个功能正常的 BMI 计算器,同时在后台记录用户输入并发送给远程攻击者。

本文主线  作者提出 IMBIA 攻击,把隐蔽恶意任务注入用户需求或智能体角色;再提出 Adv-IMBIA 防御,并通过 480 个测试用例、3 个软件开发多智能体框架和 7 类阶段配置,回答攻击能否成功、哪里最危险、有限预算应优先保护谁

一、作者为什么要开展这个研究?

软件开发 Agent 已经从写一段代码走向交付完整应用

ChatDevMetaGPT 等系统把软件开发拆成设计、编码、测试等阶段,由不同智能体协作完成。用户只需描述需求,就能得到可执行应用。这降低了软件开发门槛,也同步降低了恶意软件开发的技术与成本门槛:一个缺少专业知识的恶意用户,也可能借助多智能体系统生成带有窃密、监控或勒索能力的程序。

已有研究关注代码漏洞,却较少研究完整协作链如何被利用

过去的工作主要检查大模型生成代码中的 CWE 漏洞、单个代码智能体是否拒绝危险指令,或 Agent 是否会执行不安全代码。但多智能体软件开发系统存在多个风险点:用户需求会被传播,角色之间会继承上下文,后续阶段会直接处理前一阶段的产物。局部看似合理的动作,可能在流水线末端组合成隐藏恶意能力。

作者提出两类现实威胁

1|论文定义的两类风险场景(原论文 Figure 1

读图提示  左侧 MU-BA:恶意用户把记录并外发输入写进需求,良性 Agent 按任务逐阶段实现。右侧 BU-MA:用户只要求 BMI 计算器,但被污染的测试 Agent 从秘密角色配置中恢复恶意目标,并要求加入邮件外发函数。风险来源不同,防守位置也必须不同。

  MU-BAMalicious User, Benign Agents):用户有恶意,系统内 Agent 本身是良性的;问题是系统把恶意需求高效实现出来。

  BU-MABenign User, Malicious Agents):用户需求正常,但某些 Agent 的角色配置被污染,类似智能体供应链或第三方组件风险。

这两个场景覆盖了外部滥用内部被污染两条路径。作者的研究目标不仅是证明攻击存在,还要测量不同框架、不同阶段和不同模型的脆弱性,并寻找资源效率更高的防御策略。

二、论文的创新点与核心贡献

核心贡献

论文做了什么

为什么重要

双威胁模型

同时研究恶意用户与恶意 Agent

把滥用风险和智能体供应链风险放进同一分析框架

IMBIA 攻击

以三段式提示注入隐藏恶意行为

攻击后软件仍可保持正常功能与表面一致性

Adv-IMBIA 防御

按威胁来源把防御部署在 Agent 配置或用户侧

证明同一防线不能机械套用于两类场景

阶段级分析

遍历设计、编码、测试的 7 种攻击/防御组合

定位高风险阶段与关键防守角色

架构级结论

比较 ChatDevMetaGPTAgentVerse

说明风险与消息传播方式、瀑布/敏捷流程强相关

最值得关注的贡献  论文没有停留在某个模型会不会拒绝恶意提示,而是把安全问题映射到完整软件生命周期:恶意意图从哪里进入、经过哪些角色、在哪个阶段最容易落地,以及有限防御资源如何分配。

三、IMBIA:作者提出了什么攻击方案?

1. 把隐蔽恶意目标拆成三段

IMBIAImplicit Malicious Behavior Injection Attack)把恶意提示 Pm 设计为三部分:

1. 秘密任务摘要(Ts):用一句短描述固定隐藏副目标。

2. 秘密任务描述(Td):补充场景、行为逻辑和上下文,让恶意目标能在多轮协作中保持连贯。

3. 代码指令(Ci):提供具体实现要求或代码片段,降低 Agent 把恶意意图落成可执行代码的难度。

这种结构兼顾目标一致性落地细节:摘要负责让所有阶段记住要做什么,描述负责让要求显得具体且合理,代码指令负责推动最终实现。

2. 在两类场景中选择不同注入点

  MU-BA:把 Pm 追加到正常软件需求 Pb 之后,即 A(Pb ⊕ Pm)。作者刻意把恶意内容放在正常需求后,以影响生成结果,同时尽量避免触发安全机制。

  BU-MA:把 Pm 写入一个或多个 Agent 的角色配置,使被污染 Agent 在面对正常任务 Pb 时主动恢复隐藏目标。

3. 不只攻击一个阶段,而是系统遍历 7 种组合

作者把 Agent 角色归入设计、编码、测试三个阶段,测试单阶段攻击 3 种、双阶段攻击 3 种、全阶段攻击 1 种,共 7 种配置。这样不仅能测攻击是否成功,还可以回答污染发生在哪里最危险

2IMBIA 攻击与 Adv-IMBIA 防御总览(原论文 Figure 2

读图提示  粉色区域是攻击:三段式提示可注入恶意用户需求,也可植入设计/编码/测试角色。绿色区域是防御:面对恶意用户时保护 Agent;面对恶意 Agent 时从用户侧加入安全约束。作者进一步比较多种阶段组合,以找到最佳攻击点关键防守点

4. 攻击覆盖 12 种恶意行为与 5 类恶意软件

恶意行为包括截获用户输入、窃取敏感数据、连接外部 URL、监控剪贴板、记录键盘、截屏、强制广告、恶意跳转、加密文件勒索、锁屏勒索和自复制等,归入木马、间谍软件、广告软件、勒索软件、病毒 5 个家族。攻击目标因此不是单一后门,而是一组覆盖常见危害面的可复现实验任务。

四、Adv-IMBIA:作者提出了什么防御方案?

防御核心:让系统先做安全判定,再继续软件开发

Adv-IMBIA 使用对抗性安全提示,要求系统检查需求和代码是否违反安全准则,例如未授权访问敏感数据、自复制或注入有害代码;若发现违规,必须指出并删除、替换相关代码,或停止输出。它不是一个额外的静态扫描器,而是写入协作流程的行为约束。

两类场景的部署位置不同

  Adv-MU-BA:把防御提示写入 Agent 配置,用受保护的设计、编码、测试角色对抗恶意用户。

  Adv-BU-MA:在用户界面侧加入防御提示,让良性用户的安全要求约束被污染 Agent

  定点防御:同样遍历 7 种阶段配置,判断只保护某个关键阶段能否接近保护所有角色的效果。

方案的工程价值  Adv-IMBIA 最重要的思想不是某一句固定提示,而是根据威胁从哪里进入,决定约束放在哪里。外部恶意需求应由 Agent 侧拦截;内部角色污染则需要用户侧或系统侧的独立约束。

五、实验是怎么设计的?

维度

实验设置

框架

ChatDevMetaGPTAgentVerse

主实验模型

GPT-4o-mini

正常任务

SRDD 40 个子类别中各随机抽取 1 个任务

恶意要求

12 种行为,覆盖 5 类恶意软件

规模

40 个正常任务 × 12 种恶意行为 = 480 个测试用例

阶段配置

设计、编码、测试的 7 种攻击组合与 7 种防御组合

额外实验

基础模型比较、IMBIA 组件消融、阶段风险与关键防守角色分析

六个指标分别在测什么?

指标

含义

BU

无攻击时的软件质量,综合完整性、可执行性与一致性

UUA

受到攻击时生成软件的效用

RR

系统拒绝危险代码,或最终没有生成恶意软件的比例

RR-d

启用防御后的拒绝/避免恶意生成比例

ASR

生成了可执行恶意行为的攻击成功率

ASR-d

启用 Adv-IMBIA 后的攻击成功率

论文使用 GPT-4o 判断生成软件是否能执行恶意行为,并报告 GPT-4o 与人工评估平均一致性为 86.34%

六、关键实验与数据:攻击有多成功?

实验 1:攻击后,软件仍然像正常软件

3|正常效用与受攻击效用(原论文 Figure 3

读图提示  IMBIA 并没有让所有软件质量明显崩溃。MU-BA 中,MetaGPT AgentVerse UUA 甚至高于各自 BU;代码一致性也只小幅变化。BU-MA 的部分框架效用下降更明显,但攻击仍可在保持可用应用外观的同时植入恶意逻辑。

这里最危险的信号不是软件质量下降,而是质量不一定下降。例如 MU-BA 中,ChatDev BU/UUA 0.67/0.60MetaGPT 0.40/0.56AgentVerse 0.59/0.64;正常一致性与受攻击一致性分别为 0.79/0.770.68/0.650.78/0.76。仅靠功能验收或表面一致性,很可能看不出隐藏能力。

实验 2:三种框架都能被攻破,但脆弱性模式不同

4|三种框架上的攻击与防御结果(原论文 Figure 4

读图提示  MU-BA ChatDev 最脆弱,ASR 93%BU-MA MetaGPT 最脆弱,ASR 84%Adv-IMBIA MU-BA 更有效,在 BU-MA MetaGPT ASR 只从 84% 降到 77%,说明从用户侧约束被污染 Agent”更困难。

场景

框架

ASR

ASR-d

绝对下降

MU-BA

ChatDev

93%

20%

73 个百分点

MU-BA

MetaGPT

45%

5%

40 个百分点

MU-BA

AgentVerse

71%

22%

49 个百分点

BU-MA

ChatDev

71%

26%

45 个百分点

BU-MA

MetaGPT

84%

77%

7 个百分点

BU-MA

AgentVerse

45%

3%

42 个百分点

数据来自原论文 Figure 4绝对下降 ASR - ASR-d 计算,是百分点差,不是相对降幅。

架构解释同样重要。MU-BA MetaGPT 更稳健,作者认为与用户任务只传给初始 Agent 有关;ChatDev AgentVerse 会把任务更广泛地传播。BU-MA AgentVerse 最稳健,可能因为其敏捷式迭代讨论限制单个恶意 Agent 独占一个完整开发阶段。

七、进一步实验:哪些攻击组件和基础模型最值得警惕?

消融实验:三段式设计不是装饰

5IMBIA 组件消融实验(原论文 Figure 5

读图提示  去掉代码指令 Ci 后,MU-BA ASR 仍有 89%;去掉任务描述 Td 后降到 69%;只保留秘密任务摘要时降到 60%BU-MA 也从 71% 依次降到 66%60%54%。任务描述比代码指令更关键,但三部分叠加效果最强。

  MU-BA:完整 IMBIA ASR 0.93;去掉 Ci 0.89;去掉 Td 0.69;只保留摘要为 0.60

  BU-MA:完整 IMBIA ASR 0.71;去掉 Ci 0.66;去掉 Td 0.60;只保留摘要为 0.54

  论文总结:只靠秘密任务摘要,成功率仍超过 54%;任务描述带来的增益大于代码指令。

基础模型比较:能力更强不等于更安全

基础模型

ASR

RR

UUA

GPT-4o-mini

0.929

0.017

0.601

GPT-o3

0.811

0.109

0.412

GPT-4-turbo

0.767

0.052

0.506

GPT-3.5-turbo-16k

0.629

0.048

0.480

Claude-4-sonnet

0.875

0.083

0.561

Claude-3-7-sonnet

0.798

0.052

0.601

Gemini-2.5-pro

0.718

0.125

0.662

Gemini-2.5-flash

0.635

0.186

0.573

Llama-3.1-405b

0.783

0.117

0.791

Llama-3.1-70b

0.692

0.071

0.551

Llama-3.1-8b

0.423

0.096

0.453

DeepSeek-v3

0.842

0.071

0.493

DeepSeek-r1

0.748

0.106

0.342

数据来自原论文 Table 2,实验在 ChatDev MU-BA 场景中进行。GPT-4o-mini ASR 最高、RR 最低,同时仍保持 0.601 UUA

作者观察到,多种先进模型在保持合理软件效用的同时具有较高 ASR。小模型 Llama-3.1-8b ASR 最低(0.423),但这并不意味着小模型更安全,更可能是其执行复杂隐藏任务的能力也较弱。安全性必须与任务能力一起解释。

八、哪里最危险?有限预算应该优先防守谁?

RQ1:被污染 Agent 出现在哪个阶段最危险?

6BU-MA 中的 7 种阶段攻击配置(原论文 Figure 6

读图提示  ChatDev 的测试阶段单点攻击 ASR 最高;MetaGPT AgentVerse 的编码阶段单点攻击最高。三个框架的设计阶段攻击都相对较弱。编码与测试更靠近可执行产物,因此隐藏目标更容易真正落地。

  ChatDev:测试阶段单独被污染时最危险,设计阶段 ASR 接近 0

  MetaGPT:编码阶段是最高风险单阶段;编码+测试是最高风险双阶段。

  AgentVerse:编码阶段单点攻击最高,涉及编码阶段的组合普遍风险更高。

一个反直觉结果是:污染全部 Agent 并不总能获得最高 ASR。正常用户目标与秘密恶意目标之间的冲突会累积,更多被污染角色反而可能让后续 Agent 犹豫、反思或触发内建安全机制。攻击能力不是被污染角色数量的线性函数。

RQ2:只保护一个阶段,应该保护谁?

7MU-BA 中的 7 种阶段防御配置(原论文 Figure 7

读图提示  MetaGPT 最关键的是设计角色,ChatDev 最关键的是测试角色,AgentVerse 最关键的是编码角色。防守关键阶段可以接近保护所有 Agent 的效果,但关键点随架构而变。

框架

高风险攻击阶段

关键单阶段防守角色

架构启示

ChatDev

测试

测试

瀑布流程末端拥有前序记忆,最终审查角色影响大

MetaGPT

编码

设计

设计阶段决定 SOP 与任务传播,前置保护价值更高

AgentVerse

编码

编码

动态招募与迭代协作下,代码产出角色是关键点

资源效率结论  在防御资源有限时,不必平均保护所有 Agent。先分析框架的消息传播和开发流程,再定点保护关键角色,可以获得接近全角色防御的效果。

九、论文的重要结论

4. 多智能体软件开发系统确实可以被诱导生成正常功能 + 隐藏恶意能力并存的软件。

5. MU-BA BU-MA 都是现实风险,但防御难度不同:Agent 侧阻止恶意用户相对有效,用户侧约束恶意 Agent 更困难。

6. 编码和测试阶段通常比设计阶段更危险,因为它们更接近代码与可执行交付物。

7. 架构决定风险:任务是否广播、阶段是否保留记忆、采用瀑布还是敏捷协作,都会改变攻击与防御结果。

8. 关键防守角色随框架而变,定点防御是一条可行的资源优化路径。

9. 更先进的基础模型可能更会完成隐藏目标;能力提升必须同步配套更强安全机制。

需要保留的证据边界

论文主实验集中在 3 个框架和 GPT-4o-mini,正常任务来自 SRDD 40 个类别,恶意行为由作者设计为 12 种;恶意性主要由 GPT-4o 评估,人工一致性为 86.34%。因此,结论充分说明了风险存在和架构差异,但不代表所有真实软件项目、所有 Agent 框架或所有未知攻击都具有相同成功率。

十、对我的启发:如何把论文结论变成工程防线?

启发 1:安全审查必须覆盖完整软件生命周期

位置

建议控制

论文依据

需求入口

拆分正常目标与隐藏副作用;识别数据外发、自复制、强制广告等高风险要求

MU-BA

Agent 配置

角色签名、版本固定、第三方 Agent 审核、提示防篡改

BU-MA

设计阶段

明确敏感数据边界、禁止功能和安全验收规则

MetaGPT 关键防守点

编码阶段

静态分析、依赖审计、危险 API 与外联行为检查

MetaGPT/AgentVerse 高风险阶段

测试阶段

独立安全测试,不完全继承开发 Agent 的目标与解释

ChatDev 高风险与关键防守点

交付阶段

核对网络、文件、剪贴板、邮件等副作用与最小权限

12 类恶意行为

启发 2:不要只测功能是否完成,还要测是否多做了不该做的事

Figure 3 表明,攻击后的软件效用和一致性可能仍然很好。传统验收通常只检查主功能是否正确,而 IMBIA 恰恰把恶意能力藏在额外副作用中。未来的 Agent 评测应增加负向规格:程序不得访问哪些数据、不得连接哪些域名、不得新增哪些持久化或外发路径。

启发 3:防御资源应该按架构分配

ChatDevMetaGPTAgentVerse 的关键防守点不同,说明不存在通用的最重要 Agent”。部署前应先做消息流与产物流分析:用户需求传播到哪些角色?哪些角色能直接修改代码?哪些角色能批准交付?哪些阶段拥有覆盖前序结果的权限?然后把最强审查放在真正的控制点上。

启发 4:可以把 Agent 供应链当成新的软件供应链

  第三方 Agent 的角色提示、工具权限、模型版本和依赖都应有来源证明与完整性校验。

  关键角色的配置变更应触发重新评估,不能只在首次接入时做一次审查。

  系统应记录需求、角色配置、阶段产物和最终代码之间的可追溯关系,便于定位隐藏目标从哪里进入。

我的落点  Agent 负责提高开发效率,让独立的安全机制负责限定副作用。真正可靠的系统不只要回答软件能不能运行,还要回答它为什么拥有这些行为、这些行为由谁提出、在哪个阶段被加入、是否经过独立授权

结语

这篇论文真正有价值的地方,是把多智能体安全从抽象的模型是否对齐拉回到具体的软件工程流程:需求会传播,角色会继承目标,代码会在阶段之间流动,攻击也会沿着同一条链路扩散。IMBIA 证明了隐藏恶意能力可以被系统化植入,Adv-IMBIA 则提供了第一步防守思路。

Agent 开始像团队一样协作,安全也必须像团队流程一样被设计。最值得记住的一句话是:不要只审查每个 Agent 说了什么,还要审查恶意目标如何穿过整个开发生命周期,最终变成可以运行的代码。

#AI Security论文精度(2)

评论