10|攻击如何跨越 Context、阶段与时间

最简单的 Prompt Injection 在同一轮 Context 中完成:不可信文档进入模型,模型立即改变行为。真实 Agent 往往包含多轮推理、多个 Tool、多个模型和持久化状态,攻击内容可能先被加工、转存或隐藏,在之后的阶段才激活。

传播方式决定了攻击链的可见性、持续时间和影响范围。

Cross-context Injection

Cross-context Injection 指攻击内容从一个上下文进入另一个上下文,并在新上下文中继续影响模型。

text 复制代码
网页正文
  → 搜索 Agent 摘要
  → 摘要交给规划 Agent
  → 规划结果交给执行 Agent

如果系统只在最初的网页读取阶段标记内容,后续摘要被当作"内部 Agent 输出"重新信任,就会发生 Context Laundering:内容经过可信组件后失去原始 Provenance,但其指令语义仍然保留。

flowchart LR W[Untrusted Web] --> A1[Search Agent] A1 --> S[Generated Summary] S --> A2[Planning Agent] A2 --> T[Tool Proposal]

Generated Summary 不是新的可信 Source。它是包含派生内容的中间产物,应该继承原始数据的信任标签。

Tool Result Injection

Agent 调用 Tool 后,结果通常会重新进入下一轮 Context。Tool Result 因此既是输出,也是新的输入 Source。

text 复制代码
LLM
  → call fetch_page(url)
  → Tool 返回网页正文
  → 正文进入下一轮 Context
  → 模型改变计划

即使 Tool 本身完全按设计工作,返回数据仍可能由攻击者控制。安全分析不能把"来自合法 Tool"误认为"返回内容可信"。

json 复制代码
{
  "tool": "fetch_page",
  "execution_trust": "trusted_tool",
  "content_trust": "untrusted_external_data"
}

执行组件可信与数据内容可信是两个不同属性。

Stored Prompt Injection

当攻击内容被写入知识库、Memory、代码仓库、工单或共享文档,并在以后被重新检索,就形成持久化传播。

text 复制代码
攻击者一次写入
  → 内容被持久化
  → 多个任务检索
  → 多个 Agent 或用户受到影响

Stored Injection 的风险取决于:

text 复制代码
Persistence    内容保存多久
Reach          哪些用户、Agent 或租户会读取
Trigger        什么检索条件会让它进入 Context
Privilege      读取它的 Agent 拥有什么能力
Cleanup        删除原始入口后,派生副本是否仍存在

如果内容被摘要后写入 Memory,即使原始恶意文档已经删除,派生内容仍可能继续触发。这也是为什么 Provenance 需要覆盖派生数据。

Multi-stage Prompt Injection

多阶段攻击不会在第一段内容里直接给出最终操作,而是将意图拆开,让不同步骤分别看起来合理。

text 复制代码
Stage 1
让 Agent 读取某个内部资源。

Stage 2
让 Agent 将内容保存为草稿或 Memory。

Stage 3
在之后的任务中诱导 Agent 调用外部写 Tool。

单独审查每一步时,读取、保存和发送都可能符合某种业务用途。风险来自跨步骤组合,以及系统没有把早期 Source Provenance 传播到最终 Sink。

flowchart LR S1[Untrusted Instruction] --> R[Sensitive Read] R --> M[Memory / Draft] M --> S2[Later Context] S2 --> W[External Write]

Multi-agent 传播

多 Agent 系统常将输出交给下一个 Agent:研究 Agent 负责收集资料,规划 Agent 负责制定步骤,执行 Agent 负责调用 Tool。

text 复制代码
Research Agent:能接触不可信网页
Planning Agent:能决定任务步骤
Execution Agent:拥有高权限 Tool

职责拆分只有在信任和权限也被拆分时才有安全价值。如果执行 Agent 无条件信任 Planning Agent 的自然语言输出,攻击内容仍能跨 Agent 传播。

安全接口应传递结构化的操作申请和 Provenance,而不是把上游输出直接当作新的高权限指令。

python 复制代码
OperationProposal(
    action="create_draft",
    arguments={...},
    requested_by="planning_agent",
    originating_sources=["external_web"],
    user_intent_id="task-123",
)

传播图需要同时记录内容和状态

仅记录文本流向仍然不够。多阶段 Agent 还会改变状态:

text 复制代码
Conversation State
Task Plan
Memory
Draft
Temporary File
Approval State
Tool Cache
Agent-to-Agent Message

任何后续会重新进入决策流程的状态,都可能成为新的 Source。Threat Model 需要明确状态的写入者、读取者、作用域、生命周期和原始 Provenance。

传播控制的重点

对抗复杂传播应在整个生命周期保留和使用信任信息。

text 复制代码
入口处
记录 Source 与攻击者控制程度。

转换时
派生内容继承原始 Provenance。

跨 Agent 时
传递结构化请求,而不是默认信任自然语言输出。

写入状态时
记录写入主体、来源、Scope 和 TTL。

到达 Sink 前
重新检查完整数据流和指令来源。
相关推荐
AlienZHOU3 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
狗头大军之江苏分军5 小时前
《潮水漫过十七岁》开学了
后端
苏三说技术6 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong6 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno7046 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc6 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
aramae7 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
IT_陈寒8 小时前
Python的GIL把我坑惨了,多线程跑得比单线程还慢
前端·人工智能·后端
分支预测失败8 小时前
RISC-V 时间子系统深度专题:mtime 访问路径、SBI 定时器与 Linux tickless 协同
后端
65岁退休Coder9 小时前
PI Agent 开发一个生产级 Harness
后端·node.js·agent