为防止大语言模型和 AI Agent 执行嵌入在外部数据中的恶意指令,所有进入 Agent 上下文的文本在完成校验之前都必须被视为不可信数据,其中不仅包括用户输入的提示,还包括来自外部系统的各类信息。AI 安全公司 CyberArk 的首席软件架构师 Niv Rabin 表示。为此,他所在的团队提出了一种基于“指令检测”(Instruction Detection)与“历史感知校验”(History-Aware Validation)的方法,用于同时防御恶意输入数据和上下文历史投毒攻击。
Rabin 介绍说,团队设计了多种防御机制,并将其组织成一个分层的处理流水线。流水线中的每一层都针对不同类型的威胁,目的是减少单一防护手段不可避免存在的盲区。
这些防御措施包括“蜜罐动作”(honeypot actions)以及指令检测器,用于拦截具备指令特征的文本,确保模型最终接触到的仅是经过验证、且不包含指令的数据。同时,这些机制也会应用于整个上下文历史中,以防止所谓的“历史投毒”(history poisoning)。这种攻击方式指的是,原本看似无害的内容片段在多轮交互中逐步累积,最终拼接成一条完整的恶意指令。
所谓“蜜罐动作”,本质上是一种用于诱捕恶意意图的安全陷阱,即 Agent 在任何正常业务场景下都不应选择的合成动作。
这些动作对应的是一些不会真正执行任何操作的虚拟工具。它们并非用于完成实际任务,而是作为安全信号存在,其工具描述被刻意设计成能够暴露可疑行为。
在提示中出现的可疑行为包括对系统内部机制的元层级探测、异常的数据提取尝试,以及试图诱导模型泄露系统提示(system prompt)的操纵行为等。如果 LLM 在动作映射阶段选择了其中一个蜜罐动作,通常就意味着存在明显的异常或越界行为。
Rabin 指出,真正的安全风险并不主要来自用户输入,而是来自外部 API 或数据库的返回结果。针对这一问题,团队引入了指令检测器作为关键防护手段。
这种检测已经不再是传统意义上对“恶意内容”的搜索,也并非基于关键词、文本毒性或策略违规的判断,而是聚焦于识别文本中所蕴含的意图、行为模式以及指令在结构层面的特征。
指令检测器本身是基于 LLM 构建的“裁判模型”。在任何外部数据被送入主模型之前,检测器都会对其进行审查,并被明确要求识别任何形式的指令,无论其表现得多么直白或隐蔽,从而使系统能够在第一时间阻断可疑数据。
此外,时间也被证明是一种重要的攻击向量。早期响应中零散存在的恶意指令片段,可能会在后续交互中被重新组合,最终形成一条完整指令。这种现象被称为“历史投毒”。
示意图展示了一个典型案例:LLM 被要求分别获取三段数据,单独来看,这些数据完全无害;但合并在一起后,内容实际拼成了一条指令,要求系统停止处理并返回特定结果。

为防止历史投毒,所有历史 API 响应都会与最新获取的数据一并提交给指令检测器,作为一个统一输入进行分析。
Rabin 指出,历史投毒并不是发生在数据进入系统的入口阶段,而是发生在系统从历史记录中重建上下文的过程中。通过引入这一机制,即便对话历史中隐藏着试图干扰模型推理的细微线索,系统也能够在模型受到影响之前及时发现异常。
上述所有步骤都会在同一条流水线中运行。一旦任意一个阶段检测到风险,请求就会在模型处理之前被直接拦截;只有通过全部校验后,模型才会处理已经净化过的数据。
Rabin 总结,这种方法的关键在于将 LLM 视为一个长期运行、跨多轮交互的工作流系统,而非一次性的请求响应组件。他在原文中对这一方案进行了更为深入的展开,对于关注 AI 安全问题的读者而言,值得进一步阅读。
原文链接:
https://www.infoq.com/news/2026/01/cyberark-agents-defenses/





