系统:运行中
← 返回所有攻击
DEFENSE LOW NEW

AgentVisor:一种审计每次工具调用的操作系统虚拟机监控器模式

2026年4月27日的一篇arXiv论文借用操作系统虚拟机监控器的思路来防护带工具的LLM智能体:一个可信的“visor”审计每次工具调用,并在架构上对不可信内容保持失明。

2026-06-07 // 7 min affects: gpt-4o, glm-4.7, llm-agents

这是什么?

2026年4月27日,Zonghao Ying 等人发表了 AgentVisor: Defending LLM Agents Against Prompt Injection via Semantic Virtualization(arXiv:2604.24118,cs.CR,CC BY 4.0)。这是一篇防御论文,而非攻击论文。其思路直接来自操作系统:在操作系统虚拟化中,**虚拟机监控器(hypervisor)将不可信的客户机(guest)**与特权硬件隔离开来。AgentVisor 把同样的隔离应用到带工具的 LLM 智能体上——它把智能体本身当作不可信的客户机,并在每次工具调用前放置一个可信的 visor

其动机是作者所称的**“认知—行动鸿沟”**:现代智能体在被直接询问时往往能够识别出提示注入,但在使用工具时仍会被注入的指令行动。知道某个输入是恶意的,并不能可靠地转化为安全的行为。AgentVisor 通过把决策移出智能体、交给一个攻击者文本无法触及的组件来弥合这一鸿沟。

工作原理

智能体(Guest,客户机)看到完整的任务上下文,包括任何检索到的对抗性内容,并提出一次工具调用。Visor(语义虚拟机监控器)在执行前审计该提议。关键的设计选择是上下文隔离:Visor 在架构上对原始外部内容失明。它从不读取智能体抓取的网页、邮件或文档——只读取可信的系统指令、用户的查询,以及一份经过净化的执行历史,其中只含结构化字段(tool_name、规范化后的参数、一段简短的 return_summary/status),用严格的分隔符包裹,并被当作数据而非指令对待。由于攻击者文本永远到不了审计者,它也就无法说服审计者批准恶意动作。

每次被提议的调用都必须按顺序通过三阶段的 STI 协议

  • Suitability(S,适用性):在可信系统指令下,这个工具对助手的角色是否被允许?这是一道粗粒度的最小权限闸门,对试图扩大智能体能力的直接注入尤为有效。
  • Taint(T,污点):调用所隐含的目标是否与用户请求以及合法的任务状态一致?这是阻断间接注入的信息流控制:它会拒绝用户从未要求的新目标,比如在用户只要求摘要时去转发、外泄或发布内容。
  • Integrity(I,完整性):参数是否与用户实际指定的实体一致?这能抓住工具选择合理但参数被重定向的情况(例如一次正确的“发送邮件”,收件人却是攻击者)。

Visor 并不在失败时简单地拦截(那往往会让任务失败),而是遵循 trap–audit–recover(捕获—审计—恢复)循环。当某项检查失败时,它注入一个结构化的语义异常(Semantic Exception),描述失败的阶段(type)、violated_rulerationale、严格的 constraints(“不得转发或共享数据;只做摘要”)以及重述用户对齐目标的 allowed_objective。随后 Guest 依据这些约束仅重新生成一次工具调用,并执行修订后的版本。正是这种一次性自我纠正,在拒绝被注入动作的同时保持了较高的可用性。

Guest proposes tool call


   Visor audit  ──►  S (role allowed?)  ──►  T (goal = user intent?)  ──►  I (args match user?)
        │                                                                      │
     all pass                                                              any fail
        │                                                                      │
        ▼                                                                      ▼
   execute as-is                                          inject Semantic Exception → Guest
                                                          regenerates ONCE → execute revised call

作者针对非基于优化的攻击进行评估——Direct、Ignore、Escape、FakeComp、Combined、System 和 Important——直接注入使用 OpenPromptInjection(7 项 NLP 任务,4,900 个攻击样例),间接注入使用 AgentDojo 的 Banking、Travel、Slack、Workplace 环境(629 个攻击样例),基座模型为 GPT-4o 和 GLM-4.7。

为什么重要

大多数已部署的提示注入防御要么是启发式提示加固(可被覆盖),要么是输入/输出分类器(可被绕过,且一旦出现误报便中断任务——参见检测器基准中的工作点问题),要么是粗粒度的工具沙箱(无法在多步工作流中追踪信息流)。AgentVisor 的贡献在于把三条广为人知的操作系统原则——权限分离、最小权限加信息流控制、以及用异常处理而非杀死进程——打包进一个模式,并让审计者在结构上无法看到攻击者控制的字节。这种“失明”与 Design Patterns for Securing LLM Agents(Beurer-Kellner 等人,2025年6月)中的双 LLM 等模式出于同一直觉:让有特权的决策者远离不可信数据。它也是对致命三要素——私有数据、不可信内容、外泄通道汇于同一智能体——的架构性回应,Simon Willison 已对此做过大量记录

所报告的数字——攻击成功率降至 0.65%,相对“无防御”仅有 1.45% 的平均可用性损失——令人鼓舞,但要按其本来面目来读:这是在两套基准、两个基座模型和一组固定的手工(非基于优化)攻击上的结果。论文本身也包含关于对抗自适应攻击鲁棒性的章节以及局限性讨论;审计者仍是一个做语义判断的 LLM,因此其决策是概率性的,而非证明。

防御

其要义是一个即便不采用这一具体框架也可应用的模式:

  1. 把决策者与不可信字节分离。 审计工具调用的组件不应摄入检索到的原始内容。给它系统策略、用户请求,以及一份关于已发生事情的结构化摘要——而不是攻击者的载荷。
  2. 让工具调用先经过最小权限闸门。 在查看参数之前,先检查该工具是否对本智能体的角色被允许。许多直接注入式的提权会死在这一步。
  3. 检查目标对齐,而不仅是内容。 最有价值的检验是:某次调用是否引入了用户从未要求的目标(转发、发布、对外发送)。一次外观正确却追逐错误目标的调用,正是间接注入的特征。
  4. 对照用户指定的实体校验参数。 确认收件人、目标和约束都能追溯到用户或可信的任务状态,而非检索到的内容。
  5. 优先“恢复并重试”,而非硬性拦截。 返回一个结构化、机器可读的原因并让智能体重新规划一次,远比杀死任务更能保住可用性——也避免了那种逼得团队干脆关闭防御的误报成本。
  6. 把它当作一层。 语义审计是一道强控制,而非保证。请将其与严格沙箱、输出过滤,以及对被攻陷智能体可触及范围的明确限制相结合,使一次失误的判断不至于演变为彻底的攻陷。

状态

项目参考日期备注
AgentVisor 预印本arXiv:2604.24118v1 [cs.CR]2026-04-27Ying 等人;CC BY 4.0
报告结果AgentVisor2026-04-27ASR 0.65%,相对无防御平均可用性 −1.45%
直接注入评测OpenPromptInjection2026-04-277 项 NLP 任务,4,900 个攻击样例
间接注入评测AgentDojo2026-04-27Banking/Travel/Slack/Workplace,629 个样例
测试基座模型GPT-4o、GLM-4.72026-04-27论文声称设计与模型无关

AgentVisor 不是一个可以直接安装的成品——它是一种防御模式和一组基准结果。它最持久的思想也最清晰:决定一次工具调用是否安全的那个组件,永远不应能够读到攻击者控制的文本。

Sources